diff options
author | David Boddie <dboddie@trolltech.com> | 2010-08-31 12:03:44 (GMT) |
---|---|---|
committer | David Boddie <dboddie@trolltech.com> | 2010-08-31 12:03:44 (GMT) |
commit | aec1d2b85b3a818350b70bbb27790dee6ac35327 (patch) | |
tree | ab37d5df921ee1c4ca09b9d582ddf562c3fef8c1 | |
parent | 2192d722a0b2af2aae0a8c45741f1ee4fd28269c (diff) | |
parent | 500e4d4a7faef619354cb92b6bf7df6a639d29e3 (diff) | |
download | Qt-aec1d2b85b3a818350b70bbb27790dee6ac35327.zip Qt-aec1d2b85b3a818350b70bbb27790dee6ac35327.tar.gz Qt-aec1d2b85b3a818350b70bbb27790dee6ac35327.tar.bz2 |
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into 4.7
107 files changed, 7042 insertions, 1721 deletions
@@ -852,7 +852,7 @@ foreach (@modules_to_sync) { " #if defined(__GNUC__)\n" . " #warning \"$warning_msg\"\n" . " #elif defined(_MSC_VER)\n" . - " #pragma message \"WARNING: $warning_msg\"\n" . + " #pragma message(\"WARNING: $warning_msg\")\n" . " #endif\n". "#endif\n\n"; } @@ -2328,7 +2328,7 @@ fi # detect build style if [ "$CFG_DEBUG" = "auto" ]; then - if [ "$PLATFORM_MAC" = "yes" ]; then + if [ "$PLATFORM_MAC" = "yes" -o "$XPLATFORM_MINGW" = "yes" ]; then CFG_DEBUG_RELEASE=yes CFG_DEBUG=yes elif [ "$CFG_DEV" = "yes" ]; then @@ -6682,7 +6682,11 @@ if [ "$PLATFORM_QWS" = "yes" ]; then QT_CONFIG="$QT_CONFIG embedded" rm -f "src/.moc/$QMAKE_OUTDIR/allmoc.cpp" # needs remaking if config changes fi -QMakeVar set PRECOMPILED_DIR ".pch/$QMAKE_OUTDIR" +if [ "$XPLATFORM_MINGW" != "yes" ]; then + # Do not set this here for Windows. Let qmake do it so + # debug and release precompiled headers are kept separate. + QMakeVar set PRECOMPILED_DIR ".pch/$QMAKE_OUTDIR" +fi QMakeVar set OBJECTS_DIR ".obj/$QMAKE_OUTDIR" QMakeVar set MOC_DIR ".moc/$QMAKE_OUTDIR" QMakeVar set RCC_DIR ".rcc/$QMAKE_OUTDIR" diff --git a/demos/declarative/snake/content/Cookie.qml b/demos/declarative/snake/content/Cookie.qml index e67a7af..eb57fd2 100644 --- a/demos/declarative/snake/content/Cookie.qml +++ b/demos/declarative/snake/content/Cookie.qml @@ -59,7 +59,6 @@ Item { anchors.fill: parent source: "pics/cookie.png" opacity: 0 - Behavior on opacity { NumberAnimation { duration: 100 } } Text { font.bold: true anchors.verticalCenter: parent.verticalCenter @@ -87,4 +86,9 @@ Item { PropertyChanges { target: img; opacity: 0 } } ] + transitions: [ + Transition { + NumberAnimation { target: img; property: "opacity"; duration: 100 } + } + ] } diff --git a/demos/declarative/snake/content/Link.qml b/demos/declarative/snake/content/Link.qml index 9aa6006..942008d 100644 --- a/demos/declarative/snake/content/Link.qml +++ b/demos/declarative/snake/content/Link.qml @@ -86,7 +86,6 @@ Item { id:link } opacity: 0 - Behavior on opacity { NumberAnimation { duration: 200 } } } @@ -114,4 +113,11 @@ Item { id:link PropertyChanges { target: img; opacity: 0 } } ] + + transitions: [ + Transition { + NumberAnimation { target: img; property: "opacity"; duration: 200 } + } + ] + } diff --git a/demos/declarative/snake/content/snake.js b/demos/declarative/snake/content/snake.js index fab7834..c2e9d3a 100644 --- a/demos/declarative/snake/content/snake.js +++ b/demos/declarative/snake/content/snake.js @@ -35,7 +35,7 @@ function startNewGame() if (heartbeat.running) { endGame(); startNewGameTimer.running = true; - state = "starting"; + state = ""; return; } diff --git a/demos/declarative/snake/snake.qml b/demos/declarative/snake/snake.qml index 12ad71c..4d989df 100644 --- a/demos/declarative/snake/snake.qml +++ b/demos/declarative/snake/snake.qml @@ -106,7 +106,6 @@ Rectangle { anchors.fill: parent anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter - Behavior on opacity { NumberAnimation { duration: 500 } } Text { color: "white" @@ -236,7 +235,10 @@ Rectangle { from: "*" to: "starting" NumberAnimation { target: progressIndicator; property: "width"; duration: 1000 } - + NumberAnimation { target: title; property: "opacity"; duration: 500 } + }, + Transition { + NumberAnimation { target: title; property: "opacity"; duration: 500 } } ] diff --git a/demos/embedded/anomaly/src/AddressBar.cpp b/demos/embedded/anomaly/src/AddressBar.cpp index 12523f2..f83876e 100644 --- a/demos/embedded/anomaly/src/AddressBar.cpp +++ b/demos/embedded/anomaly/src/AddressBar.cpp @@ -44,27 +44,11 @@ #include <QtCore> #include <QtGui> -class LineEdit: public QLineEdit -{ -public: - LineEdit(QWidget *parent = 0): QLineEdit(parent) {} - - void paintEvent(QPaintEvent *event) { - QLineEdit::paintEvent(event); - if (text().isEmpty()) { - QPainter p(this); - int flags = Qt::AlignLeft | Qt::AlignVCenter; - p.setPen(palette().color(QPalette::Disabled, QPalette::Text)); - p.drawText(rect().adjusted(10, 0, 0, 0), flags, "Enter address or search terms"); - p.end(); - } - } -}; - AddressBar::AddressBar(QWidget *parent) : QWidget(parent) { - m_lineEdit = new LineEdit(parent); + m_lineEdit = new QLineEdit(parent); + m_lineEdit->setPlaceholderText("Enter address or search terms"); connect(m_lineEdit, SIGNAL(returnPressed()), SLOT(processAddress())); m_toolButton = new QToolButton(parent); m_toolButton->setText("Go"); diff --git a/demos/embedded/qmlcalculator/qmlcalculator.cpp b/demos/embedded/qmlcalculator/qmlcalculator.cpp index 3030e81..6c41e61 100644 --- a/demos/embedded/qmlcalculator/qmlcalculator.cpp +++ b/demos/embedded/qmlcalculator/qmlcalculator.cpp @@ -42,6 +42,7 @@ #include <QtCore/QFileInfo> #include <QtGui/QApplication> #include <QtDeclarative/QDeclarativeView> +#include <QtDeclarative/QDeclarativeEngine> #if defined(Q_OS_SYMBIAN) #include <eikenv.h> @@ -58,7 +59,8 @@ int main(int argc, char *argv[]) QDeclarativeView view; view.setSource(QUrl(mainQmlApp)); view.setResizeMode(QDeclarativeView::SizeRootObjectToView); - + QObject::connect(view.engine(), SIGNAL(quit()), &application, SLOT(quit())); + #if defined(QT_KEYPAD_NAVIGATION) QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); #endif // QT_KEYPAD_NAVIGATION diff --git a/demos/embedded/qmlclocks/qmlclocks.cpp b/demos/embedded/qmlclocks/qmlclocks.cpp index d94cbdd..a09801b 100644 --- a/demos/embedded/qmlclocks/qmlclocks.cpp +++ b/demos/embedded/qmlclocks/qmlclocks.cpp @@ -42,6 +42,7 @@ #include <QtCore/QFileInfo> #include <QtGui/QApplication> #include <QtDeclarative/QDeclarativeView> +#include <QtDeclarative/QDeclarativeEngine> #if defined(Q_OS_SYMBIAN) #include <eikenv.h> @@ -58,6 +59,7 @@ int main(int argc, char *argv[]) QDeclarativeView view; view.setSource(QUrl(mainQmlApp)); view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + QObject::connect(view.engine(), SIGNAL(quit()), &application, SLOT(quit())); #if defined(QT_KEYPAD_NAVIGATION) QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); diff --git a/demos/embedded/qmldialcontrol/qmldialcontrol.cpp b/demos/embedded/qmldialcontrol/qmldialcontrol.cpp index 311cee0..56b21d7 100644 --- a/demos/embedded/qmldialcontrol/qmldialcontrol.cpp +++ b/demos/embedded/qmldialcontrol/qmldialcontrol.cpp @@ -42,6 +42,7 @@ #include <QtCore/QFileInfo> #include <QtGui/QApplication> #include <QtDeclarative/QDeclarativeView> +#include <QtDeclarative/QDeclarativeEngine> int main(int argc, char *argv[]) { @@ -51,6 +52,7 @@ int main(int argc, char *argv[]) QDeclarativeView view; view.setSource(QUrl(mainQmlApp)); view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + QObject::connect(view.engine(), SIGNAL(quit()), &application, SLOT(quit())); #if defined(QT_KEYPAD_NAVIGATION) QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); diff --git a/demos/embedded/qmleasing/deployment.pri b/demos/embedded/qmleasing/deployment.pri index 984f5c8..d3621cb 100644 --- a/demos/embedded/qmleasing/deployment.pri +++ b/demos/embedded/qmleasing/deployment.pri @@ -4,5 +4,5 @@ symbian { qmleasing_uid3 = A000E3FE qmleasing_files.path = $$APP_PRIVATE_DIR_BASE/$$qmleasing_uid3 } -qmleasing_files.sources = $$qmleasing_src/easing.qml +qmleasing_files.sources = $$qmleasing_src/easing.qml $$qmleasing_src/content DEPLOYMENT += qmleasing_files diff --git a/demos/embedded/qmleasing/qmleasing.cpp b/demos/embedded/qmleasing/qmleasing.cpp index d326468..713fe67 100644 --- a/demos/embedded/qmleasing/qmleasing.cpp +++ b/demos/embedded/qmleasing/qmleasing.cpp @@ -42,6 +42,7 @@ #include <QtCore/QFileInfo> #include <QtGui/QApplication> #include <QtDeclarative/QDeclarativeView> +#include <QtDeclarative/QDeclarativeEngine> int main(int argc, char *argv[]) { @@ -51,6 +52,7 @@ int main(int argc, char *argv[]) QDeclarativeView view; view.setSource(QUrl(mainQmlApp)); view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + QObject::connect(view.engine(), SIGNAL(quit()), &application, SLOT(quit())); #if defined(QT_KEYPAD_NAVIGATION) QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); diff --git a/demos/embedded/qmlflickr/qmlflickr.cpp b/demos/embedded/qmlflickr/qmlflickr.cpp index 7068f88..c05806c 100644 --- a/demos/embedded/qmlflickr/qmlflickr.cpp +++ b/demos/embedded/qmlflickr/qmlflickr.cpp @@ -48,6 +48,7 @@ #include <QtNetwork/QNetworkConfiguration> #include <QtNetwork/QNetworkConfigurationManager> #include <QtNetwork/QNetworkAccessManager> +#include <QtDeclarative/QDeclarativeEngine> // Factory to create QNetworkAccessManagers that use the saved network configuration; otherwise // the system default. @@ -95,7 +96,8 @@ int main(int argc, char *argv[]) view.engine()->setNetworkAccessManagerFactory(&networkAccessManagerFactory); view.setSource(QUrl(mainQmlApp)); view.setResizeMode(QDeclarativeView::SizeRootObjectToView); - + QObject::connect(view.engine(), SIGNAL(quit()), &application, SLOT(quit())); + #if defined(Q_OS_SYMBIAN) view.showFullScreen(); #else // Q_OS_SYMBIAN diff --git a/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp b/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp index 2b9db5e..d9cf67c 100644 --- a/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp +++ b/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp @@ -96,6 +96,8 @@ int main(int argc, char *argv[]) view.setSource(QUrl(mainQmlApp)); view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + QObject::connect(view.engine(), SIGNAL(quit()), &application, SLOT(quit())); + #if defined(Q_OS_SYMBIAN) view.showFullScreen(); #else // Q_OS_SYMBIAN diff --git a/demos/embedded/qmltwitter/qmltwitter.cpp b/demos/embedded/qmltwitter/qmltwitter.cpp index c53098a4..30c4601 100644 --- a/demos/embedded/qmltwitter/qmltwitter.cpp +++ b/demos/embedded/qmltwitter/qmltwitter.cpp @@ -95,7 +95,8 @@ int main(int argc, char *argv[]) view.engine()->setNetworkAccessManagerFactory(&networkAccessManagerFactory); view.setSource(QUrl(mainQmlApp)); view.setResizeMode(QDeclarativeView::SizeRootObjectToView); - + QObject::connect(view.engine(), SIGNAL(quit()), &application, SLOT(quit())); + #if defined(Q_OS_SYMBIAN) view.showFullScreen(); #else // Q_OS_SYMBIAN diff --git a/dist/changes-4.7.0 b/dist/changes-4.7.0 index 790aabc..01ebf63 100644 --- a/dist/changes-4.7.0 +++ b/dist/changes-4.7.0 @@ -478,6 +478,18 @@ QtCore: line breaking, reporting the index of the boundary at which the line break should occur rather than the index of the character. +QtGui: + - QWidget::setLayoutDirection no longer affects the text layout + direction (Qt::LeftToRight or Qt::RightToLeft) of QTextEdit, QLineEdit + and widgets based on them. The default text layout direction + (Qt::LayoutDirectionAuto) is now detected from keyboard layout and + language of the text (conforms to Unicode standards). To + programmatically force the text direction of a QTextEdit, you can + change the defaultTextOption of the QTextDocument associated with that + widget with a new QTextOption of different textDirection property. For + QLineEdit, the only way so far is sending a Qt::Key_Direction_L/R + keyboard event to that widget. + QtNetwork: - Qt does no longer provide its own CA bundle, but uses system APIs for retrieving the default system certificates. diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc index 5c4d5e7..6388764 100644 --- a/doc/src/declarative/extending.qdoc +++ b/doc/src/declarative/extending.qdoc @@ -965,6 +965,20 @@ Item { } \endcode +This may be connected to via QObject::connect() or called directly from C++ using +QMetaObject::invokeMethod(): + +\code + QDeclarativeEngine engine; + QDeclarativeContext *context = new QDeclarativeContext(engine.rootContext()); + QDeclarativeComponent component(&engine, QUrl::fromLocalFile("main.qml")); + QObject *object = component.create(context); + QVariant str("Hello"); + QMetaObject::invokeMethod(object, "say", Q_ARG(QVariant, str)); +\endcode + +Return values of type QVariant are also supported via Q_RETURN_ARG. + \section1 Defining new Components \target components diff --git a/examples/declarative/animation/easing/content/QuitButton.qml b/examples/declarative/animation/easing/content/QuitButton.qml new file mode 100644 index 0000000..039694d --- /dev/null +++ b/examples/declarative/animation/easing/content/QuitButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 +Image { + source: "quit.png" + scale: quitMouse.pressed ? 0.8 : 1.0 + smooth: quitMouse.pressed + MouseArea { + id: quitMouse + anchors.fill: parent + anchors.margins: -10 + onClicked: Qt.quit() + } +}
\ No newline at end of file diff --git a/examples/declarative/animation/easing/content/quit.png b/examples/declarative/animation/easing/content/quit.png Binary files differnew file mode 100644 index 0000000..b822057 --- /dev/null +++ b/examples/declarative/animation/easing/content/quit.png diff --git a/examples/declarative/animation/easing/easing.qml b/examples/declarative/animation/easing/easing.qml index 9cdbad1..b53cb98 100644 --- a/examples/declarative/animation/easing/easing.qml +++ b/examples/declarative/animation/easing/easing.qml @@ -39,6 +39,7 @@ ****************************************************************************/ import Qt 4.7 +import "content" Rectangle { id: window @@ -134,11 +135,23 @@ Rectangle { } Flickable { - anchors.fill: parent; contentHeight: layout.height - + anchors.fill: parent + contentHeight: layout.height + Rectangle { + id: titlePane + color: "#444444" + height: 35 + anchors { top: parent.top; left: parent.left; right: parent.right } + QuitButton { + id: quitButton + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 10 + } + } Column { id: layout - anchors.left: parent.left; anchors.right: parent.right + anchors { top: titlePane.bottom; topMargin: 10; left: parent.left; right: parent.right } Repeater { model: easingTypes; delegate: delegate } } } diff --git a/examples/declarative/toys/clocks/clocks.qml b/examples/declarative/toys/clocks/clocks.qml index 124e391..82a1dbf 100644 --- a/examples/declarative/toys/clocks/clocks.qml +++ b/examples/declarative/toys/clocks/clocks.qml @@ -51,4 +51,9 @@ Rectangle { Clock { city: "Mumbai"; shift: 5.5 } Clock { city: "Tokyo"; shift: 9 } } + QuitButton { + anchors.right: parent.right + anchors.top: parent.top + anchors.margins: 10 + } } diff --git a/examples/declarative/toys/clocks/content/QuitButton.qml b/examples/declarative/toys/clocks/content/QuitButton.qml new file mode 100644 index 0000000..039694d --- /dev/null +++ b/examples/declarative/toys/clocks/content/QuitButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 +Image { + source: "quit.png" + scale: quitMouse.pressed ? 0.8 : 1.0 + smooth: quitMouse.pressed + MouseArea { + id: quitMouse + anchors.fill: parent + anchors.margins: -10 + onClicked: Qt.quit() + } +}
\ No newline at end of file diff --git a/examples/declarative/toys/clocks/content/quit.png b/examples/declarative/toys/clocks/content/quit.png Binary files differnew file mode 100644 index 0000000..b822057 --- /dev/null +++ b/examples/declarative/toys/clocks/content/quit.png diff --git a/examples/declarative/ui-components/dialcontrol/content/QuitButton.qml b/examples/declarative/ui-components/dialcontrol/content/QuitButton.qml new file mode 100644 index 0000000..039694d --- /dev/null +++ b/examples/declarative/ui-components/dialcontrol/content/QuitButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 +Image { + source: "quit.png" + scale: quitMouse.pressed ? 0.8 : 1.0 + smooth: quitMouse.pressed + MouseArea { + id: quitMouse + anchors.fill: parent + anchors.margins: -10 + onClicked: Qt.quit() + } +}
\ No newline at end of file diff --git a/examples/declarative/ui-components/dialcontrol/content/quit.png b/examples/declarative/ui-components/dialcontrol/content/quit.png Binary files differnew file mode 100644 index 0000000..b822057 --- /dev/null +++ b/examples/declarative/ui-components/dialcontrol/content/quit.png diff --git a/examples/declarative/ui-components/dialcontrol/dialcontrol.qml b/examples/declarative/ui-components/dialcontrol/dialcontrol.qml index 46cc3e6..a7da5c6 100644 --- a/examples/declarative/ui-components/dialcontrol/dialcontrol.qml +++ b/examples/declarative/ui-components/dialcontrol/dialcontrol.qml @@ -88,5 +88,10 @@ Rectangle { } } } + QuitButton { + anchors.right: parent.right + anchors.top: parent.top + anchors.margins: 10 + } } //! [0] diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index a0779c9..957abbf 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -66,6 +66,8 @@ QT_END_NAMESPACE QT_BEGIN_NAMESPACE +extern void qDumpCPUFeatures(); // in qsimd.cpp + #ifndef QT_NO_SETTINGS struct QLibrarySettings @@ -500,7 +502,6 @@ QT_END_NAMESPACE extern const char qt_core_interpreter[] __attribute__((section(".interp"))) = ELF_INTERPRETER; -extern void qDumpCPUFeatures(); // in qsimd.cpp extern "C" void qt_core_boilerplate(); void qt_core_boilerplate() { @@ -526,7 +527,7 @@ void qt_core_boilerplate() qt_configure_libraries_path_str + 12, qt_configure_headers_path_str + 12); -// qDumpCPUFeatures(); + QT_PREPEND_NAMESPACE(qDumpCPUFeatures)(); #ifdef QT_EVAL extern void qt_core_eval_init(uint); diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index a9ae2ab..1874a9e 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -295,14 +295,6 @@ static bool qt_parse_pattern(const char *s, uint *version, bool *debug, QByteArr #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(Q_OS_SYMBIAN) && !defined(QT_NO_PLUGIN_CHECK) -#if defined(Q_OS_FREEBSD) || defined(Q_OS_LINUX) -# define USE_MMAP -QT_BEGIN_INCLUDE_NAMESPACE -# include <sys/types.h> -# include <sys/mman.h> -QT_END_INCLUDE_NAMESPACE -#endif // Q_OS_FREEBSD || Q_OS_LINUX - static long qt_find_pattern(const char *s, ulong s_len, const char *pattern, ulong p_len) { @@ -363,34 +355,15 @@ static bool qt_unix_query(const QString &library, uint *version, bool *debug, QB } QByteArray data; - char *filedata = 0; - ulong fdlen = 0; - -# ifdef USE_MMAP - char *mapaddr = 0; - size_t maplen = file.size(); - mapaddr = (char *) mmap(mapaddr, maplen, PROT_READ, MAP_PRIVATE, file.handle(), 0); - if (mapaddr != MAP_FAILED) { - // mmap succeeded - filedata = mapaddr; - fdlen = maplen; - } else { - // mmap failed - if (qt_debug_component()) { - qWarning("mmap: %s", qPrintable(qt_error_string(errno))); - } - if (lib) - lib->errorString = QLibrary::tr("Could not mmap '%1': %2") - .arg(library) - .arg(qt_error_string()); -# endif // USE_MMAP + const char *filedata = 0; + ulong fdlen = file.size(); + filedata = (char *) file.map(0, fdlen); + if (filedata == 0) { // try reading the data into memory instead data = file.readAll(); - filedata = data.data(); + filedata = data.constData(); fdlen = data.size(); -# ifdef USE_MMAP } -# endif // USE_MMAP // verify that the pattern is present in the plugin const char pattern[] = "pattern=QT_PLUGIN_VERIFICATION_DATA"; @@ -403,17 +376,6 @@ static bool qt_unix_query(const QString &library, uint *version, bool *debug, QB if (!ret && lib) lib->errorString = QLibrary::tr("Plugin verification data mismatch in '%1'").arg(library); -# ifdef USE_MMAP - if (mapaddr != MAP_FAILED && munmap(mapaddr, maplen) != 0) { - if (qt_debug_component()) - qWarning("munmap: %s", qPrintable(qt_error_string(errno))); - if (lib) - lib->errorString = QLibrary::tr("Could not unmap '%1': %2") - .arg(library) - .arg( qt_error_string() ); - } -# endif // USE_MMAP - file.close(); return ret; } diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp index dca2695..1bbfcf4 100644 --- a/src/declarative/debugger/qdeclarativedebugservice.cpp +++ b/src/declarative/debugger/qdeclarativedebugservice.cpp @@ -128,6 +128,8 @@ void QDeclarativeDebugServer::newConnection() if (d->connection) { qWarning("QDeclarativeDebugServer error: another client is already connected"); + QTcpSocket *faultyConnection = d->tcpServer->nextPendingConnection(); + delete faultyConnection; return; } diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index a710190..63a2a77 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -1001,12 +1001,16 @@ void QDeclarativeFlickable::geometryChanged(const QRectF &newGeometry, bool changed = false; if (newGeometry.width() != oldGeometry.width()) { + if (xflick()) + changed = true; if (d->hData.viewSize < 0) { d->contentItem->setWidth(width()); emit contentWidthChanged(); } } if (newGeometry.height() != oldGeometry.height()) { + if (yflick()) + changed = true; if (d->vData.viewSize < 0) { d->contentItem->setHeight(height()); emit contentHeightChanged(); diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 1054898..aca2bb7 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1883,6 +1883,12 @@ void QDeclarativeItem::geometryChanged(const QRectF &newGeometry, } } + for(int ii = 0; ii < d->changeListeners.count(); ++ii) { + const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii); + if (change.types & QDeclarativeItemPrivate::Geometry) + change.listener->itemGeometryChanged(this, newGeometry, oldGeometry); + } + if (newGeometry.x() != oldGeometry.x()) emit xChanged(); if (newGeometry.width() != oldGeometry.width()) @@ -1891,12 +1897,6 @@ void QDeclarativeItem::geometryChanged(const QRectF &newGeometry, emit yChanged(); if (newGeometry.height() != oldGeometry.height()) emit heightChanged(); - - for(int ii = 0; ii < d->changeListeners.count(); ++ii) { - const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii); - if (change.types & QDeclarativeItemPrivate::Geometry) - change.listener->itemGeometryChanged(this, newGeometry, oldGeometry); - } } void QDeclarativeItemPrivate::removeItemChangeListener(QDeclarativeItemChangeListener *listener, ChangeTypes types) diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index d3d46f7..ef28ab2 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -2454,6 +2454,16 @@ void QDeclarativeListView::keyPressEvent(QKeyEvent *event) QDeclarativeFlickable::keyPressEvent(event); } +void QDeclarativeListView::geometryChanged(const QRectF &newGeometry, + const QRectF &oldGeometry) +{ + Q_D(QDeclarativeListView); + d->maxExtentDirty = true; + d->minExtentDirty = true; + QDeclarativeFlickable::geometryChanged(newGeometry, oldGeometry); +} + + /*! \qmlmethod ListView::incrementCurrentIndex() diff --git a/src/declarative/graphicsitems/qdeclarativelistview_p.h b/src/declarative/graphicsitems/qdeclarativelistview_p.h index 8fbff49..735b248 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview_p.h +++ b/src/declarative/graphicsitems/qdeclarativelistview_p.h @@ -246,6 +246,7 @@ protected: virtual qreal minXExtent() const; virtual qreal maxXExtent() const; virtual void keyPressEvent(QKeyEvent *); + virtual void geometryChanged(const QRectF &newGeometry,const QRectF &oldGeometry); virtual void componentComplete(); private Q_SLOTS: diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index b4e8bda..a46ee73 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -1305,24 +1305,27 @@ void QDeclarativeVisualDataModel::_q_itemsMoved(int from, int to, int count) void QDeclarativeVisualDataModel::_q_rowsInserted(const QModelIndex &parent, int begin, int end) { - if (!parent.isValid()) + Q_D(QDeclarativeVisualDataModel); + if (parent == d->m_root) _q_itemsInserted(begin, end - begin + 1); } void QDeclarativeVisualDataModel::_q_rowsRemoved(const QModelIndex &parent, int begin, int end) { - if (!parent.isValid()) + Q_D(QDeclarativeVisualDataModel); + if (parent == d->m_root) _q_itemsRemoved(begin, end - begin + 1); } void QDeclarativeVisualDataModel::_q_rowsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow) { + Q_D(QDeclarativeVisualDataModel); const int count = sourceEnd - sourceStart + 1; - if (!destinationParent.isValid() && !sourceParent.isValid()) { + if (destinationParent == d->m_root && sourceParent == d->m_root) { _q_itemsMoved(sourceStart, destinationRow, count); - } else if (!sourceParent.isValid()) { + } else if (sourceParent == d->m_root) { _q_itemsRemoved(sourceStart, count); - } else if (!destinationParent.isValid()) { + } else if (destinationParent == d->m_root) { _q_itemsInserted(destinationRow, count); } } @@ -1330,7 +1333,7 @@ void QDeclarativeVisualDataModel::_q_rowsMoved(const QModelIndex &sourceParent, void QDeclarativeVisualDataModel::_q_dataChanged(const QModelIndex &begin, const QModelIndex &end) { Q_D(QDeclarativeVisualDataModel); - if (!begin.parent().isValid()) + if (begin.parent() == d->m_root) _q_itemsChanged(begin.row(), end.row() - begin.row() + 1, d->m_roles); } diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index f044e1a..5bfe5b2 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -41,7 +41,6 @@ #include "private/qdeclarativecompiler_p.h" -#include "private/qdeclarativecompositetypedata_p.h" #include "private/qdeclarativeparser_p.h" #include "private/qdeclarativescriptparser_p.h" #include "qdeclarativepropertyvaluesource.h" @@ -562,7 +561,7 @@ void QDeclarativeCompiler::reset(QDeclarativeCompiledData *data) on a successful compiler. */ bool QDeclarativeCompiler::compile(QDeclarativeEngine *engine, - QDeclarativeCompositeTypeData *unit, + QDeclarativeTypeData *unit, QDeclarativeCompiledData *out) { exceptions.clear(); @@ -573,10 +572,15 @@ bool QDeclarativeCompiler::compile(QDeclarativeEngine *engine, output = out; // Compile types - for (int ii = 0; ii < unit->types.count(); ++ii) { - QDeclarativeCompositeTypeData::TypeReference &tref = unit->types[ii]; + const QList<QDeclarativeTypeData::TypeReference> &resolvedTypes = unit->resolvedTypes(); + QList<QDeclarativeScriptParser::TypeReference *> referencedTypes = unit->parser().referencedTypes(); + + for (int ii = 0; ii < resolvedTypes.count(); ++ii) { QDeclarativeCompiledData::TypeReference ref; - QDeclarativeScriptParser::TypeReference *parserRef = unit->data.referencedTypes().at(ii); + + const QDeclarativeTypeData::TypeReference &tref = resolvedTypes.at(ii); + QDeclarativeScriptParser::TypeReference *parserRef = referencedTypes.at(ii); + if (tref.type) { ref.type = tref.type; if (!ref.type->isCreatable()) { @@ -585,33 +589,16 @@ bool QDeclarativeCompiler::compile(QDeclarativeEngine *engine, err = tr( "Element is not creatable."); COMPILE_EXCEPTION(parserRef->refObjects.first(), err); } - } else if (tref.unit) { - ref.component = tref.unit->toComponent(engine); - - if (ref.component->isError()) { - QDeclarativeError error; - error.setUrl(output->url); - error.setDescription(QLatin1String("Unable to create type ") + - parserRef->name); - if (!parserRef->refObjects.isEmpty()) { - QDeclarativeParser::Object *parserObject = parserRef->refObjects.first(); - error.setLine(parserObject->location.start.line); - error.setColumn(parserObject->location.start.column); - } - - exceptions << error; - exceptions << ref.component->errors(); - reset(out); - return false; - } - ref.ref = tref.unit; + } else if (tref.typeData) { + ref.component = tref.typeData->component(); + ref.ref = tref.typeData; ref.ref->addref(); } ref.className = parserRef->name.toUtf8(); out->types << ref; } - Object *root = unit->data.tree(); + Object *root = unit->parser().tree(); Q_ASSERT(root); this->engine = engine; @@ -664,17 +651,17 @@ void QDeclarativeCompiler::compileTree(Object *tree) QHash<QString, Object::ScriptBlock> importedScripts; QStringList importedScriptIndexes; - for (int ii = 0; ii < unit->scripts.count(); ++ii) { - QString scriptCode = QString::fromUtf8(unit->scripts.at(ii).resource->data); - Object::ScriptBlock::Pragmas pragmas = QDeclarativeScriptParser::extractPragmas(scriptCode); + foreach (const QDeclarativeTypeData::ScriptReference &script, unit->resolvedScripts()) { + QString scriptCode = script.script->scriptSource(); + Object::ScriptBlock::Pragmas pragmas = script.script->pragmas(); - Q_ASSERT(!importedScripts.contains(unit->scripts.at(ii).qualifier)); + Q_ASSERT(!importedScripts.contains(script.qualifier)); if (!scriptCode.isEmpty()) { - Object::ScriptBlock &scriptBlock = importedScripts[unit->scripts.at(ii).qualifier]; + Object::ScriptBlock &scriptBlock = importedScripts[script.qualifier]; scriptBlock.code = scriptCode; - scriptBlock.file = unit->scripts.at(ii).resource->url; + scriptBlock.file = script.script->finalUrl().toString(); scriptBlock.pragmas = pragmas; } } @@ -704,7 +691,7 @@ void QDeclarativeCompiler::compileTree(Object *tree) for (int ii = 0; ii < importedScriptIndexes.count(); ++ii) output->importCache->add(importedScriptIndexes.at(ii), ii); - unit->imports.populateCache(output->importCache, engine); + unit->imports().populateCache(output->importCache, engine); Q_ASSERT(tree->metatype); @@ -987,7 +974,7 @@ void QDeclarativeCompiler::genObject(QDeclarativeParser::Object *obj) } // Begin the class - if (obj->parserStatusCast != -1) { + if (tr.type && obj->parserStatusCast != -1) { QDeclarativeInstruction begin; begin.type = QDeclarativeInstruction::BeginObject; begin.begin.castValue = obj->parserStatusCast; @@ -1404,7 +1391,7 @@ bool QDeclarativeCompiler::buildProperty(QDeclarativeParser::Property *prop, QDeclarativeType *type = 0; QDeclarativeImportedNamespace *typeNamespace = 0; - unit->imports.resolveType(prop->name, &type, 0, 0, 0, &typeNamespace); + unit->imports().resolveType(prop->name, &type, 0, 0, 0, &typeNamespace); if (typeNamespace) { // ### We might need to indicate that this property is a namespace @@ -1512,7 +1499,7 @@ bool QDeclarativeCompiler::buildPropertyInNamespace(QDeclarativeImportedNamespac // Setup attached property data QDeclarativeType *type = 0; - unit->imports.resolveType(ns, prop->name, &type, 0, 0, 0); + unit->imports().resolveType(ns, prop->name, &type, 0, 0, 0); if (!type || !type->attachedPropertiesType()) COMPILE_EXCEPTION(prop, tr("Non-existent attached object")); @@ -2139,7 +2126,7 @@ bool QDeclarativeCompiler::testQualifiedEnumAssignment(const QMetaProperty &prop QString typeName = parts.at(0); QDeclarativeType *type = 0; - unit->imports.resolveType(typeName.toUtf8(), &type, 0, 0, 0, 0); + unit->imports().resolveType(typeName.toUtf8(), &type, 0, 0, 0, 0); if (!type || obj->typeName != type->qmlTypeName()) return true; @@ -2166,7 +2153,7 @@ int QDeclarativeCompiler::evaluateEnum(const QByteArray& script) const int dot = script.indexOf('.'); if (dot > 0) { QDeclarativeType *type = 0; - unit->imports.resolveType(script.left(dot), &type, 0, 0, 0, 0); + unit->imports().resolveType(script.left(dot), &type, 0, 0, 0, 0); if (!type) return -1; const QMetaObject *mo = type->metaObject(); @@ -2184,7 +2171,7 @@ int QDeclarativeCompiler::evaluateEnum(const QByteArray& script) const const QMetaObject *QDeclarativeCompiler::resolveType(const QByteArray& name) const { QDeclarativeType *qmltype = 0; - if (!unit->imports.resolveType(name, &qmltype, 0, 0, 0, 0)) + if (!unit->imports().resolveType(name, &qmltype, 0, 0, 0, 0)) return 0; if (!qmltype) return 0; @@ -2342,16 +2329,18 @@ bool QDeclarativeCompiler::buildDynamicMeta(QDeclarativeParser::Object *obj, Dyn QByteArray customTypeName; QDeclarativeType *qmltype = 0; QUrl url; - if (!unit->imports.resolveType(p.customType, &qmltype, &url, 0, 0, 0)) + if (!unit->imports().resolveType(p.customType, &qmltype, &url, 0, 0, 0)) COMPILE_EXCEPTION(&p, tr("Invalid property type")); if (!qmltype) { - QDeclarativeCompositeTypeData *tdata = enginePrivate->typeManager.get(url); + QDeclarativeTypeData *tdata = enginePrivate->typeLoader.get(url); Q_ASSERT(tdata); - Q_ASSERT(tdata->status == QDeclarativeCompositeTypeData::Complete); + Q_ASSERT(tdata->isComplete()); - QDeclarativeCompiledData *data = tdata->toCompiledComponent(engine); + QDeclarativeCompiledData *data = tdata->compiledData(); customTypeName = data->root->className(); + data->release(); + tdata->release(); } else { customTypeName = qmltype->typeName(); } @@ -2746,7 +2735,7 @@ bool QDeclarativeCompiler::completeComponentBuild() expr.context = binding.bindingContext.object; expr.property = binding.property; expr.expression = binding.expression; - expr.imports = unit->imports; + expr.imports = unit->imports(); int index = bindingCompiler.compile(expr, enginePrivate); if (index != -1) { diff --git a/src/declarative/qml/qdeclarativecompiler_p.h b/src/declarative/qml/qdeclarativecompiler_p.h index 49dc53f..89eef09 100644 --- a/src/declarative/qml/qdeclarativecompiler_p.h +++ b/src/declarative/qml/qdeclarativecompiler_p.h @@ -56,13 +56,13 @@ #include "qdeclarative.h" #include "qdeclarativeerror.h" #include "private/qdeclarativeinstruction_p.h" -#include "private/qdeclarativecompositetypemanager_p.h" #include "private/qdeclarativeparser_p.h" #include "private/qdeclarativeengine_p.h" #include "private/qbitfield_p.h" #include "private/qdeclarativepropertycache_p.h" #include "private/qdeclarativeintegercache_p.h" #include "private/qdeclarativetypenamecache_p.h" +#include "private/qdeclarativetypeloader_p.h" #include <QtCore/qbytearray.h> #include <QtCore/qset.h> @@ -152,7 +152,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeCompiler public: QDeclarativeCompiler(); - bool compile(QDeclarativeEngine *, QDeclarativeCompositeTypeData *, QDeclarativeCompiledData *); + bool compile(QDeclarativeEngine *, QDeclarativeTypeData *, QDeclarativeCompiledData *); bool isError() const; QList<QDeclarativeError> errors() const; @@ -338,7 +338,7 @@ private: QDeclarativeEngine *engine; QDeclarativeEnginePrivate *enginePrivate; QDeclarativeParser::Object *unitRoot; - QDeclarativeCompositeTypeData *unit; + QDeclarativeTypeData *unit; }; QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index d2d1f19..75bb5db 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -44,7 +44,6 @@ #include "private/qdeclarativecompiler_p.h" #include "private/qdeclarativecontext_p.h" -#include "private/qdeclarativecompositetypedata_p.h" #include "private/qdeclarativeengine_p.h" #include "private/qdeclarativevme_p.h" #include "qdeclarative.h" @@ -197,7 +196,7 @@ class QByteArray; \value Error An error has occurred. Call errors() to retrieve a list of \{QDeclarativeError}{errors}. */ -void QDeclarativeComponentPrivate::typeDataReady() +void QDeclarativeComponentPrivate::typeDataReady(QDeclarativeTypeData *) { Q_Q(QDeclarativeComponent); @@ -209,28 +208,25 @@ void QDeclarativeComponentPrivate::typeDataReady() emit q->statusChanged(q->status()); } -void QDeclarativeComponentPrivate::updateProgress(qreal p) +void QDeclarativeComponentPrivate::typeDataProgress(QDeclarativeTypeData *, qreal p) { Q_Q(QDeclarativeComponent); progress = p; + emit q->progressChanged(p); } -void QDeclarativeComponentPrivate::fromTypeData(QDeclarativeCompositeTypeData *data) +void QDeclarativeComponentPrivate::fromTypeData(QDeclarativeTypeData *data) { - url = data->imports.baseUrl(); - QDeclarativeCompiledData *c = data->toCompiledComponent(engine); + url = data->finalUrl(); + QDeclarativeCompiledData *c = data->compiledData(); if (!c) { - Q_ASSERT(data->status == QDeclarativeCompositeTypeData::Error); - - state.errors = data->errors; - + Q_ASSERT(data->isError()); + state.errors = data->errors(); } else { - cc = c; - } data->release(); @@ -239,7 +235,7 @@ void QDeclarativeComponentPrivate::fromTypeData(QDeclarativeCompositeTypeData *d void QDeclarativeComponentPrivate::clear() { if (typeData) { - typeData->remWaiter(this); + typeData->unregisterCallback(this); typeData->release(); typeData = 0; } @@ -271,7 +267,7 @@ QDeclarativeComponent::~QDeclarativeComponent() } if (d->typeData) { - d->typeData->remWaiter(d); + d->typeData->unregisterCallback(d); d->typeData->release(); } if (d->cc) @@ -443,19 +439,13 @@ void QDeclarativeComponent::setData(const QByteArray &data, const QUrl &url) d->url = url; - QDeclarativeCompositeTypeData *typeData = - QDeclarativeEnginePrivate::get(d->engine)->typeManager.getImmediate(data, url); + QDeclarativeTypeData *typeData = QDeclarativeEnginePrivate::get(d->engine)->typeLoader.get(data, url); - if (typeData->status == QDeclarativeCompositeTypeData::Waiting - || typeData->status == QDeclarativeCompositeTypeData::WaitingResources) - { - d->typeData = typeData; - d->typeData->addWaiter(d); - - } else { - + if (typeData->isCompleteOrError()) { d->fromTypeData(typeData); - + } else { + d->typeData = typeData; + d->typeData->registerCallback(d); } d->progress = 1.0; @@ -501,18 +491,15 @@ void QDeclarativeComponent::loadUrl(const QUrl &url) return; } - QDeclarativeCompositeTypeData *data = - QDeclarativeEnginePrivate::get(d->engine)->typeManager.get(d->url); + QDeclarativeTypeData *data = QDeclarativeEnginePrivate::get(d->engine)->typeLoader.get(d->url); - if (data->status == QDeclarativeCompositeTypeData::Waiting - || data->status == QDeclarativeCompositeTypeData::WaitingResources) - { - d->typeData = data; - d->typeData->addWaiter(d); - d->progress = data->progress; - } else { + if (data->isCompleteOrError()) { d->fromTypeData(data); d->progress = 1.0; + } else { + d->typeData = data; + d->typeData->registerCallback(d); + d->progress = data->progress(); } emit statusChanged(status()); diff --git a/src/declarative/qml/qdeclarativecomponent.h b/src/declarative/qml/qdeclarativecomponent.h index 1d1fca7..fd9cb2b 100644 --- a/src/declarative/qml/qdeclarativecomponent.h +++ b/src/declarative/qml/qdeclarativecomponent.h @@ -117,6 +117,7 @@ private: Q_DISABLE_COPY(QDeclarativeComponent) friend class QDeclarativeVME; friend class QDeclarativeCompositeTypeData; + friend class QDeclarativeTypeData; }; QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativecomponent_p.h b/src/declarative/qml/qdeclarativecomponent_p.h index 2a7d633..1b1454b 100644 --- a/src/declarative/qml/qdeclarativecomponent_p.h +++ b/src/declarative/qml/qdeclarativecomponent_p.h @@ -56,7 +56,7 @@ #include "qdeclarativecomponent.h" #include "private/qdeclarativeengine_p.h" -#include "private/qdeclarativecompositetypemanager_p.h" +#include "private/qdeclarativetypeloader_p.h" #include "private/qbitfield_p.h" #include "qdeclarativeerror.h" #include "qdeclarative.h" @@ -74,7 +74,7 @@ class QDeclarativeEngine; class QDeclarativeCompiledData; class QDeclarativeComponentAttached; -class QDeclarativeComponentPrivate : public QObjectPrivate +class QDeclarativeComponentPrivate : public QObjectPrivate, public QDeclarativeTypeData::TypeDataCallback { Q_DECLARE_PUBLIC(QDeclarativeComponent) @@ -85,11 +85,11 @@ public: QObject *beginCreate(QDeclarativeContextData *, const QBitField &); void completeCreate(); - QDeclarativeCompositeTypeData *typeData; - void typeDataReady(); - void updateProgress(qreal); + QDeclarativeTypeData *typeData; + virtual void typeDataReady(QDeclarativeTypeData *); + virtual void typeDataProgress(QDeclarativeTypeData *, qreal); - void fromTypeData(QDeclarativeCompositeTypeData *data); + void fromTypeData(QDeclarativeTypeData *data); QUrl url; qreal progress; diff --git a/src/declarative/qml/qdeclarativecompositetypedata_p.h b/src/declarative/qml/qdeclarativecompositetypedata_p.h deleted file mode 100644 index a0e4cc2..0000000 --- a/src/declarative/qml/qdeclarativecompositetypedata_p.h +++ /dev/null @@ -1,161 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative 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 QDECLARATIVECOMPOSITETYPEDATA_P_H -#define QDECLARATIVECOMPOSITETYPEDATA_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 "private/qdeclarativeengine_p.h" - -#include <QtCore/qglobal.h> - -QT_BEGIN_NAMESPACE - -class QDeclarativeCompositeTypeResource; -class QDeclarativeCompositeTypeData : public QDeclarativeRefCount -{ -public: - QDeclarativeCompositeTypeData(); - virtual ~QDeclarativeCompositeTypeData(); - - enum Status { - Invalid, - Complete, - Error, - Waiting, - WaitingResources - }; - Status status; - enum ErrorType { - NoError, - AccessError, - GeneralError - }; - ErrorType errorType; - - QList<QDeclarativeError> errors; - - QDeclarativeImports imports; - - QList<QDeclarativeCompositeTypeData *> dependants; - - // Return a QDeclarativeComponent if the QDeclarativeCompositeTypeData is not in the Waiting - // state. The QDeclarativeComponent is owned by the QDeclarativeCompositeTypeData, so a - // reference should be kept to keep the QDeclarativeComponent alive. - QDeclarativeComponent *toComponent(QDeclarativeEngine *); - // Return a QDeclarativeCompiledData if possible, or 0 if an error - // occurs - QDeclarativeCompiledData *toCompiledComponent(QDeclarativeEngine *); - - struct TypeReference - { - TypeReference(); - - QDeclarativeType *type; - QDeclarativeCompositeTypeData *unit; - }; - - struct ScriptReference - { - ScriptReference(); - - QString qualifier; - QDeclarativeCompositeTypeResource *resource; - }; - - QList<TypeReference> types; - QList<ScriptReference> scripts; - QList<QDeclarativeCompositeTypeResource *> resources; - - // Add or remove p as a waiter. When the QDeclarativeCompositeTypeData becomes - // ready, the QDeclarativeComponentPrivate::typeDataReady() method will be invoked on - // p. The waiter is automatically removed when the typeDataReady() method - // is invoked, so there is no need to call remWaiter() in this case. - void addWaiter(QDeclarativeComponentPrivate *p); - void remWaiter(QDeclarativeComponentPrivate *p); - - qreal progress; - -private: - friend class QDeclarativeCompositeTypeManager; - friend class QDeclarativeCompiler; - friend class QDeclarativeDomDocument; - - QDeclarativeScriptParser data; - QList<QDeclarativeComponentPrivate *> waiters; - QDeclarativeComponent *component; - QDeclarativeCompiledData *compiledComponent; -}; - -class QDeclarativeCompositeTypeResource : public QDeclarativeRefCount -{ -public: - QDeclarativeCompositeTypeResource(); - virtual ~QDeclarativeCompositeTypeResource(); - - enum Status { - Invalid, - Complete, - Error, - Waiting - }; - Status status; - - QList<QDeclarativeCompositeTypeData *> dependants; - - QString url; - QByteArray data; -}; - -QT_END_NAMESPACE - -#endif // QDECLARATIVECOMPOSITETYPEDATA_P_H - diff --git a/src/declarative/qml/qdeclarativecompositetypemanager.cpp b/src/declarative/qml/qdeclarativecompositetypemanager.cpp deleted file mode 100644 index cc8f887..0000000 --- a/src/declarative/qml/qdeclarativecompositetypemanager.cpp +++ /dev/null @@ -1,778 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative 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$ -** -****************************************************************************/ - -#include "private/qdeclarativecompositetypemanager_p.h" - -#include "private/qdeclarativecompositetypedata_p.h" -#include "private/qdeclarativescriptparser_p.h" -#include "qdeclarativeengine.h" -#include "private/qdeclarativeengine_p.h" -#include "qdeclarativecomponent.h" -#include "private/qdeclarativecomponent_p.h" -#include "private/qdeclarativecompiler_p.h" - -#include <QtNetwork/qnetworkreply.h> -#include <QtCore/qdebug.h> -#include <QtCore/qfile.h> - -QT_BEGIN_NAMESPACE - -QDeclarativeCompositeTypeData::QDeclarativeCompositeTypeData() -: status(Invalid), errorType(NoError), component(0), compiledComponent(0) -{ -} - -QDeclarativeCompositeTypeData::~QDeclarativeCompositeTypeData() -{ - for (int ii = 0; ii < dependants.count(); ++ii) - dependants.at(ii)->release(); - - for (int ii = 0; ii < resources.count(); ++ii) - resources.at(ii)->release(); - - if (compiledComponent) - compiledComponent->release(); - - if (component) - delete component; -} - -QDeclarativeCompositeTypeResource::QDeclarativeCompositeTypeResource() -{ -} - -QDeclarativeCompositeTypeResource::~QDeclarativeCompositeTypeResource() -{ - for (int ii = 0; ii < dependants.count(); ++ii) - dependants.at(ii)->release(); -} - -void QDeclarativeCompositeTypeData::addWaiter(QDeclarativeComponentPrivate *p) -{ - waiters << p; -} - -void QDeclarativeCompositeTypeData::remWaiter(QDeclarativeComponentPrivate *p) -{ - waiters.removeAll(p); -} - -QDeclarativeComponent *QDeclarativeCompositeTypeData::toComponent(QDeclarativeEngine *engine) -{ - if (!component) { - - QDeclarativeCompiledData *cc = toCompiledComponent(engine); - if (cc) { - component = new QDeclarativeComponent(engine, cc, -1, -1, 0); - cc->release(); - } else { - component = new QDeclarativeComponent(engine, 0); - component->d_func()->url = imports.baseUrl(); - component->d_func()->state.errors = errors; - } - - } - - return component; -} - -QDeclarativeCompiledData * -QDeclarativeCompositeTypeData::toCompiledComponent(QDeclarativeEngine *engine) -{ - if (status == Complete && !compiledComponent) { - - // Build script imports - foreach (const QDeclarativeScriptParser::Import &import, data.imports()) { - if (import.type == QDeclarativeScriptParser::Import::Script) { - QString url = imports.baseUrl().resolved(QUrl(import.uri)).toString(); - - ScriptReference ref; - ref.qualifier = import.qualifier; - - for (int ii = 0; ii < resources.count(); ++ii) { - if (resources.at(ii)->url == url) { - ref.resource = resources.at(ii); - break; - } - } - - Q_ASSERT(ref.resource); - - scripts << ref; - } - } - - compiledComponent = new QDeclarativeCompiledData(engine); - compiledComponent->url = imports.baseUrl(); - compiledComponent->name = compiledComponent->url.toString(); - - QDeclarativeCompiler compiler; - if (!compiler.compile(engine, this, compiledComponent)) { - status = Error; - errors = compiler.errors(); - compiledComponent->release(); - compiledComponent = 0; - } - - // Data is no longer needed once we have a compiled component - data.clear(); - } - - if (compiledComponent) - compiledComponent->addref(); - - return compiledComponent; -} - -QDeclarativeCompositeTypeData::TypeReference::TypeReference() -: type(0), unit(0) -{ -} - -QDeclarativeCompositeTypeData::ScriptReference::ScriptReference() -: resource(0) -{ -} - -QDeclarativeCompositeTypeManager::QDeclarativeCompositeTypeManager(QDeclarativeEngine *e) -: engine(e), redirectCount(0) -{ -} - -QDeclarativeCompositeTypeManager::~QDeclarativeCompositeTypeManager() -{ - for (Components::Iterator iter = components.begin(); iter != components.end();) { - (*iter)->release(); - iter = components.erase(iter); - } - for (Resources::Iterator iter = resources.begin(); iter != resources.end();) { - (*iter)->release(); - iter = resources.erase(iter); - } -} - -QDeclarativeCompositeTypeData *QDeclarativeCompositeTypeManager::get(const QUrl &url) -{ - Redirects::Iterator redir = redirects.find(url); - if (redir != redirects.end()) - return get(*redir); - - QDeclarativeCompositeTypeData *unit = components.value(url); - - if (!unit) { - unit = new QDeclarativeCompositeTypeData; - unit->status = QDeclarativeCompositeTypeData::Waiting; - unit->progress = 0.0; - unit->imports.setBaseUrl(url); - components.insert(url, unit); - - loadSource(unit); - } - - unit->addref(); - return unit; -} - -QDeclarativeCompositeTypeData * -QDeclarativeCompositeTypeManager::getImmediate(const QByteArray &data, const QUrl &url) -{ - QDeclarativeCompositeTypeData *unit = new QDeclarativeCompositeTypeData; - unit->status = QDeclarativeCompositeTypeData::Waiting; - unit->imports.setBaseUrl(url); - setData(unit, data, url); - return unit; -} - -void QDeclarativeCompositeTypeManager::clearCache() -{ - for (Components::Iterator iter = components.begin(); iter != components.end();) { - if ((*iter)->status != QDeclarativeCompositeTypeData::Waiting) { - (*iter)->release(); - iter = components.erase(iter); - } else { - ++iter; - } - } - - for (Resources::Iterator iter = resources.begin(); iter != resources.end();) { - if ((*iter)->status != QDeclarativeCompositeTypeResource::Waiting) { - (*iter)->release(); - iter = resources.erase(iter); - } else { - ++iter; - } - } -} - -#define TYPEMANAGER_MAXIMUM_REDIRECT_RECURSION 16 - -void QDeclarativeCompositeTypeManager::replyFinished() -{ - QNetworkReply *reply = static_cast<QNetworkReply *>(sender()); - - QDeclarativeCompositeTypeData *unit = components.value(reply->url()); - Q_ASSERT(unit); - - redirectCount++; - if (redirectCount < TYPEMANAGER_MAXIMUM_REDIRECT_RECURSION) { - QVariant redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); - if (redirect.isValid()) { - QUrl url = reply->url().resolved(redirect.toUrl()); - redirects.insert(reply->url(),url); - unit->imports.setBaseUrl(url); - components.remove(reply->url()); - components.insert(url, unit); - reply->deleteLater(); - reply = engine->networkAccessManager()->get(QNetworkRequest(url)); - QObject::connect(reply, SIGNAL(finished()), - this, SLOT(replyFinished())); - QObject::connect(reply, SIGNAL(downloadProgress(qint64,qint64)), - this, SLOT(requestProgress(qint64,qint64))); - return; - } - } - redirectCount = 0; - - if (reply->error() != QNetworkReply::NoError) { - QString errorDescription; - // ### - Fill in error - errorDescription = QLatin1String("Network error for URL ") + - reply->url().toString(); - - unit->status = QDeclarativeCompositeTypeData::Error; - // ### FIXME - QDeclarativeError error; - error.setDescription(errorDescription); - unit->errorType = QDeclarativeCompositeTypeData::AccessError; - unit->errors << error; - doComplete(unit); - - } else { - QByteArray data = reply->readAll(); - - setData(unit, data, reply->url()); - } - - reply->deleteLater(); -} - -void QDeclarativeCompositeTypeManager::resourceReplyFinished() -{ - QNetworkReply *reply = static_cast<QNetworkReply *>(sender()); - - QDeclarativeCompositeTypeResource *resource = resources.value(reply->url()); - Q_ASSERT(resource); - - redirectCount++; - if (redirectCount < TYPEMANAGER_MAXIMUM_REDIRECT_RECURSION) { - QVariant redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); - if (redirect.isValid()) { - QUrl url = reply->url().resolved(redirect.toUrl()); - redirects.insert(reply->url(),url); - resource->url = url.toString(); - resources.remove(reply->url()); - resources.insert(url, resource); - reply->deleteLater(); - reply = engine->networkAccessManager()->get(QNetworkRequest(url)); - QObject::connect(reply, SIGNAL(finished()), - this, SLOT(resourceReplyFinished())); - return; - } - } - redirectCount = 0; - - if (reply->error() != QNetworkReply::NoError) { - - resource->status = QDeclarativeCompositeTypeResource::Error; - - } else { - - resource->status = QDeclarativeCompositeTypeResource::Complete; - resource->data = reply->readAll(); - - } - - doComplete(resource); - reply->deleteLater(); -} - -void QDeclarativeCompositeTypeManager::loadResource(QDeclarativeCompositeTypeResource *resource) -{ - QUrl url(resource->url); - - QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url); - if (!lf.isEmpty()) { - - QFile file(lf); - if (file.open(QFile::ReadOnly)) { - resource->data = file.readAll(); - resource->status = QDeclarativeCompositeTypeResource::Complete; - } else { - resource->status = QDeclarativeCompositeTypeResource::Error; - } - } else if (url.scheme().isEmpty()) { - - // We can't open this, so just declare as an error - resource->status = QDeclarativeCompositeTypeResource::Error; - } else { - - QNetworkReply *reply = - engine->networkAccessManager()->get(QNetworkRequest(url)); - QObject::connect(reply, SIGNAL(finished()), - this, SLOT(resourceReplyFinished())); - - } -} - -void QDeclarativeCompositeTypeManager::loadSource(QDeclarativeCompositeTypeData *unit) -{ - QUrl url(unit->imports.baseUrl()); - - QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url); - if (!lf.isEmpty()) { - - QFile file(lf); - if (file.open(QFile::ReadOnly)) { - QByteArray data = file.readAll(); - setData(unit, data, url); - return; // success - } - } else if (!url.scheme().isEmpty()) { - QNetworkReply *reply = - engine->networkAccessManager()->get(QNetworkRequest(url)); - QObject::connect(reply, SIGNAL(finished()), - this, SLOT(replyFinished())); - QObject::connect(reply, SIGNAL(downloadProgress(qint64,qint64)), - this, SLOT(requestProgress(qint64,qint64))); - return; // waiting - } - - // error happened - QString errorDescription; - // ### - Fill in error - errorDescription = QLatin1String("File error for URL ") + url.toString(); - unit->status = QDeclarativeCompositeTypeData::Error; - // ### FIXME - QDeclarativeError error; - error.setDescription(errorDescription); - unit->errorType = QDeclarativeCompositeTypeData::AccessError; - unit->errors << error; - doComplete(unit); -} - -void QDeclarativeCompositeTypeManager::requestProgress(qint64 received, qint64 total) -{ - if (total <= 0) - return; - QNetworkReply *reply = static_cast<QNetworkReply *>(sender()); - - QDeclarativeCompositeTypeData *unit = components.value(reply->url()); - Q_ASSERT(unit); - - unit->progress = qreal(received)/total; - - foreach (QDeclarativeComponentPrivate *comp, unit->waiters) - comp->updateProgress(unit->progress); -} - -void QDeclarativeCompositeTypeManager::setData(QDeclarativeCompositeTypeData *unit, - const QByteArray &data, - const QUrl &url) -{ - bool ok = true; - if (!unit->data.parse(data, url)) { - ok = false; - unit->errors << unit->data.errors(); - } - - if (ok) { - compile(unit); - } else { - unit->status = QDeclarativeCompositeTypeData::Error; - unit->errorType = QDeclarativeCompositeTypeData::GeneralError; - doComplete(unit); - } -} - -void QDeclarativeCompositeTypeManager::doComplete(QDeclarativeCompositeTypeData *unit) -{ - for (int ii = 0; ii < unit->dependants.count(); ++ii) { - checkComplete(unit->dependants.at(ii)); - unit->dependants.at(ii)->release(); - } - unit->dependants.clear(); - - while(!unit->waiters.isEmpty()) { - QDeclarativeComponentPrivate *p = unit->waiters.takeFirst(); - p->typeDataReady(); - } -} - -void QDeclarativeCompositeTypeManager::doComplete(QDeclarativeCompositeTypeResource *resource) -{ - for (int ii = 0; ii < resource->dependants.count(); ++ii) { - checkComplete(resource->dependants.at(ii)); - resource->dependants.at(ii)->release(); - } - resource->dependants.clear(); -} - -void QDeclarativeCompositeTypeManager::checkComplete(QDeclarativeCompositeTypeData *unit) -{ - if (unit->status != QDeclarativeCompositeTypeData::Waiting - && unit->status != QDeclarativeCompositeTypeData::WaitingResources) - return; - - int waiting = 0; - for (int ii = 0; ii < unit->resources.count(); ++ii) { - QDeclarativeCompositeTypeResource *r = unit->resources.at(ii); - - if (!r) - continue; - - if (r->status == QDeclarativeCompositeTypeResource::Error) { - unit->status = QDeclarativeCompositeTypeData::Error; - QDeclarativeError error; - error.setUrl(unit->imports.baseUrl()); - error.setDescription(tr("Resource %1 unavailable").arg(r->url)); - unit->errors << error; - doComplete(unit); - return; - } else if (r->status == QDeclarativeCompositeTypeResource::Waiting) { - waiting++; - } - } - - if (waiting == 0) { - if (unit->status == QDeclarativeCompositeTypeData::WaitingResources) { - waiting += resolveTypes(unit); - if (unit->status != QDeclarativeCompositeTypeData::Error) { - if (waiting) - unit->status = QDeclarativeCompositeTypeData::Waiting; - } else { - return; - } - } else { - for (int ii = 0; ii < unit->types.count(); ++ii) { - QDeclarativeCompositeTypeData *u = unit->types.at(ii).unit; - - if (!u) - continue; - - if (u->status == QDeclarativeCompositeTypeData::Error) { - unit->status = QDeclarativeCompositeTypeData::Error; - unit->errors = u->errors; - doComplete(unit); - return; - } else if (u->status == QDeclarativeCompositeTypeData::Waiting - || u->status == QDeclarativeCompositeTypeData::WaitingResources) - { - waiting++; - } - } - } - } - - if (!waiting) { - unit->status = QDeclarativeCompositeTypeData::Complete; - doComplete(unit); - } -} - -int QDeclarativeCompositeTypeManager::resolveTypes(QDeclarativeCompositeTypeData *unit) -{ - // not called until all resources are loaded (they include import URLs) - int waiting = 0; - - QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); - QDeclarativeImportDatabase *importDatabase = &ep->importDatabase; - - // For local urls, add an implicit import "." as first (most overridden) lookup. - // This will also trigger the loading of the qmldir and the import of any native - // types from available plugins. - { - QDeclarativeDirComponents qmldircomponentsnetwork; - if (QDeclarativeCompositeTypeResource *resource - = resources.value(unit->imports.baseUrl().resolved(QUrl(QLatin1String("./qmldir"))))) { - QDeclarativeDirParser parser; - parser.setSource(QString::fromUtf8(resource->data)); - parser.parse(); - qmldircomponentsnetwork = parser.components(); - } - - unit->imports.addImport(importDatabase, - QLatin1String("."), QString(), -1, -1, QDeclarativeScriptParser::Import::File, - qmldircomponentsnetwork, - 0); // error ignored (just means no fallback) - } - - - foreach (const QDeclarativeScriptParser::Import &imp, unit->data.imports()) { - QDeclarativeDirComponents qmldircomponentsnetwork; - if (imp.type == QDeclarativeScriptParser::Import::Script) - continue; - - if (imp.type == QDeclarativeScriptParser::Import::File && imp.qualifier.isEmpty()) { - QString importUrl = unit->imports.baseUrl().resolved(QUrl(imp.uri + QLatin1String("/qmldir"))).toString(); - for (int ii = 0; ii < unit->resources.count(); ++ii) { - if (unit->resources.at(ii)->url == importUrl) { - QDeclarativeDirParser parser; - parser.setSource(QString::fromUtf8(unit->resources.at(ii)->data)); - parser.parse(); - qmldircomponentsnetwork = parser.components(); - break; - } - } - } - - - int vmaj = -1; - int vmin = -1; - if (!imp.version.isEmpty()) { - int dot = imp.version.indexOf(QLatin1Char('.')); - if (dot < 0) { - vmaj = imp.version.toInt(); - vmin = 0; - } else { - vmaj = imp.version.left(dot).toInt(); - vmin = imp.version.mid(dot+1).toInt(); - } - } - - QString errorString; - if (!unit->imports.addImport(importDatabase, - imp.uri, imp.qualifier, vmaj, vmin, imp.type, - qmldircomponentsnetwork, &errorString)) { - QDeclarativeError error; - error.setUrl(unit->imports.baseUrl()); - error.setDescription(errorString); - error.setLine(imp.location.start.line); - error.setColumn(imp.location.start.column); - unit->status = QDeclarativeCompositeTypeData::Error; - unit->errorType = QDeclarativeCompositeTypeData::GeneralError; - unit->errors << error; - doComplete(unit); - return 0; - } - } - - - QList<QDeclarativeScriptParser::TypeReference*> types = unit->data.referencedTypes(); - - for (int ii = 0; ii < types.count(); ++ii) { - QDeclarativeScriptParser::TypeReference *parserRef = types.at(ii); - QByteArray typeName = parserRef->name.toUtf8(); - - QDeclarativeCompositeTypeData::TypeReference ref; - - QUrl url; - int majorVersion; - int minorVersion; - QDeclarativeImportedNamespace *typeNamespace = 0; - QString errorString; - if (!unit->imports.resolveType(typeName, &ref.type, &url, &majorVersion, &minorVersion, - &typeNamespace, &errorString) || typeNamespace) { - // Known to not be a type: - // - known to be a namespace (Namespace {}) - // - type with unknown namespace (UnknownNamespace.SomeType {}) - QDeclarativeError error; - error.setUrl(unit->imports.baseUrl()); - QString userTypeName = QString::fromUtf8(typeName); - userTypeName.replace(QLatin1Char('/'),QLatin1Char('.')); - if (typeNamespace) - error.setDescription(tr("Namespace %1 cannot be used as a type").arg(userTypeName)); - else - error.setDescription(tr("%1 %2").arg(userTypeName).arg(errorString)); - - if (!parserRef->refObjects.isEmpty()) { - QDeclarativeParser::Object *obj = parserRef->refObjects.first(); - error.setLine(obj->location.start.line); - error.setColumn(obj->location.start.column); - } - unit->status = QDeclarativeCompositeTypeData::Error; - unit->errorType = QDeclarativeCompositeTypeData::GeneralError; - unit->errors << error; - doComplete(unit); - return 0; - } - - if (ref.type) { - foreach (QDeclarativeParser::Object *obj, parserRef->refObjects) { - // store namespace for DOM - obj->majorVersion = majorVersion; - obj->minorVersion = minorVersion; - } - unit->types << ref; - continue; - } - - Redirects::Iterator redir = redirects.find(url); - if (redir != redirects.end()) - url = *redir; - - QDeclarativeCompositeTypeData *urlUnit = components.value(url); - - if (!urlUnit) { - urlUnit = new QDeclarativeCompositeTypeData; - urlUnit->status = QDeclarativeCompositeTypeData::Waiting; - urlUnit->imports.setBaseUrl(url); - components.insert(url, urlUnit); - - loadSource(urlUnit); - } - - ref.unit = urlUnit; - switch(urlUnit->status) { - case QDeclarativeCompositeTypeData::Invalid: - case QDeclarativeCompositeTypeData::Error: - unit->status = QDeclarativeCompositeTypeData::Error; - { - QDeclarativeError error; - error.setUrl(unit->imports.baseUrl()); - error.setDescription(tr("Type %1 unavailable").arg(QString::fromUtf8(typeName))); - if (!parserRef->refObjects.isEmpty()) { - QDeclarativeParser::Object *obj = parserRef->refObjects.first(); - error.setLine(obj->location.start.line); - error.setColumn(obj->location.start.column); - } - unit->errors << error; - } - if (urlUnit->errorType != QDeclarativeCompositeTypeData::AccessError) - unit->errors << urlUnit->errors; - doComplete(unit); - return 0; - - case QDeclarativeCompositeTypeData::Complete: - break; - - case QDeclarativeCompositeTypeData::Waiting: - case QDeclarativeCompositeTypeData::WaitingResources: - unit->addref(); - ref.unit->dependants << unit; - waiting++; - break; - } - - unit->types << ref; - } - return waiting; -} - -// ### Check ref counting in here -void QDeclarativeCompositeTypeManager::compile(QDeclarativeCompositeTypeData *unit) -{ - int waiting = 0; - - QList<QUrl> resourceList = unit->data.referencedResources(); - - foreach (QDeclarativeScriptParser::Import imp, unit->data.imports()) { - if (imp.type == QDeclarativeScriptParser::Import::File && imp.qualifier.isEmpty()) { - QUrl importUrl = unit->imports.baseUrl().resolved(QUrl(imp.uri + QLatin1String("/qmldir"))); - if (QDeclarativeEnginePrivate::urlToLocalFileOrQrc(importUrl).isEmpty()) { - // Import requires remote qmldir - resourceList.prepend(importUrl); - } - } - } - - QUrl importUrl; - if (!unit->imports.baseUrl().scheme().isEmpty()) - importUrl = unit->imports.baseUrl().resolved(QUrl(QLatin1String("qmldir"))); - if (!importUrl.scheme().isEmpty() && QDeclarativeEnginePrivate::urlToLocalFileOrQrc(importUrl).isEmpty()) - resourceList.prepend(importUrl); - - for (int ii = 0; ii < resourceList.count(); ++ii) { - QUrl url = unit->imports.baseUrl().resolved(resourceList.at(ii)); - - QDeclarativeCompositeTypeResource *resource = resources.value(url); - - if (!resource) { - resource = new QDeclarativeCompositeTypeResource; - resource->status = QDeclarativeCompositeTypeResource::Waiting; - resource->url = url.toString(); - resources.insert(url, resource); - - loadResource(resource); - } - - switch(resource->status) { - case QDeclarativeCompositeTypeResource::Invalid: - case QDeclarativeCompositeTypeResource::Error: - unit->status = QDeclarativeCompositeTypeData::Error; - { - QDeclarativeError error; - error.setUrl(unit->imports.baseUrl()); - error.setDescription(tr("Resource %1 unavailable").arg(resource->url)); - unit->errors << error; - } - doComplete(unit); - return; - - case QDeclarativeCompositeTypeData::Complete: - break; - - case QDeclarativeCompositeTypeData::Waiting: - unit->addref(); - resource->dependants << unit; - waiting++; - break; - } - - resource->addref(); - unit->resources << resource; - } - - if (waiting == 0) { - waiting += resolveTypes(unit); - if (unit->status != QDeclarativeCompositeTypeData::Error) { - if (!waiting) { - unit->status = QDeclarativeCompositeTypeData::Complete; - doComplete(unit); - } else { - unit->status = QDeclarativeCompositeTypeData::Waiting; - } - } - } else { - unit->status = QDeclarativeCompositeTypeData::WaitingResources; - } -} - -QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativecompositetypemanager_p.h b/src/declarative/qml/qdeclarativecompositetypemanager_p.h deleted file mode 100644 index 5c82c4c..0000000 --- a/src/declarative/qml/qdeclarativecompositetypemanager_p.h +++ /dev/null @@ -1,120 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative 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 QDECLARATIVECOMPOSITETYPEMANAGER_P_H -#define QDECLARATIVECOMPOSITETYPEMANAGER_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 "private/qdeclarativescriptparser_p.h" -#include "private/qdeclarativerefcount_p.h" -#include "qdeclarativeerror.h" -#include "qdeclarativeengine.h" - -#include <QtCore/qglobal.h> - -QT_BEGIN_NAMESPACE - -class QDeclarativeCompiledData; -class QDeclarativeComponentPrivate; -class QDeclarativeComponent; -class QDeclarativeDomDocument; - -class QDeclarativeCompositeTypeData; -class QDeclarativeCompositeTypeResource; - -class QDeclarativeCompositeTypeManager : public QObject -{ - Q_OBJECT -public: - QDeclarativeCompositeTypeManager(QDeclarativeEngine *); - ~QDeclarativeCompositeTypeManager(); - - // Return a QDeclarativeCompositeTypeData for url. The QDeclarativeCompositeTypeData may be - // cached. - QDeclarativeCompositeTypeData *get(const QUrl &url); - // Return a QDeclarativeCompositeTypeData for data, with the provided base url. The - // QDeclarativeCompositeTypeData will not be cached. - QDeclarativeCompositeTypeData *getImmediate(const QByteArray &data, const QUrl &url); - - // Clear cached types. Only types that aren't in the Waiting state will - // be cleared. - void clearCache(); - -private Q_SLOTS: - void replyFinished(); - void resourceReplyFinished(); - void requestProgress(qint64 received, qint64 total); - -private: - void loadSource(QDeclarativeCompositeTypeData *); - void loadResource(QDeclarativeCompositeTypeResource *); - void compile(QDeclarativeCompositeTypeData *); - void setData(QDeclarativeCompositeTypeData *, const QByteArray &, const QUrl &); - - void doComplete(QDeclarativeCompositeTypeData *); - void doComplete(QDeclarativeCompositeTypeResource *); - void checkComplete(QDeclarativeCompositeTypeData *); - int resolveTypes(QDeclarativeCompositeTypeData *); - - QDeclarativeEngine *engine; - typedef QHash<QUrl, QDeclarativeCompositeTypeData *> Components; - Components components; - typedef QHash<QUrl, QDeclarativeCompositeTypeResource *> Resources; - Resources resources; - typedef QHash<QUrl, QUrl> Redirects; - Redirects redirects; - int redirectCount; -}; - -QT_END_NAMESPACE - -#endif // QDECLARATIVECOMPOSITETYPEMANAGER_P_H - diff --git a/src/declarative/qml/qdeclarativedom.cpp b/src/declarative/qml/qdeclarativedom.cpp index 5b30bde..1a9b501 100644 --- a/src/declarative/qml/qdeclarativedom.cpp +++ b/src/declarative/qml/qdeclarativedom.cpp @@ -42,7 +42,6 @@ #include "private/qdeclarativedom_p.h" #include "private/qdeclarativedom_p_p.h" -#include "private/qdeclarativecompositetypedata_p.h" #include "private/qdeclarativecompiler_p.h" #include "private/qdeclarativeengine_p.h" #include "private/qdeclarativescriptparser_p.h" @@ -145,37 +144,23 @@ bool QDeclarativeDomDocument::load(QDeclarativeEngine *engine, const QByteArray d->errors.clear(); d->imports.clear(); - QDeclarativeCompiledData *component = new QDeclarativeCompiledData(engine); - QDeclarativeCompiler compiler; + QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); + QDeclarativeTypeData *td = ep->typeLoader.get(data, url, QDeclarativeTypeLoader::PreserveParser); - QDeclarativeCompositeTypeData *td = ((QDeclarativeEnginePrivate *)QDeclarativeEnginePrivate::get(engine))->typeManager.getImmediate(data, url); - - if(td->status == QDeclarativeCompositeTypeData::Error) { - d->errors = td->errors; + if(td->isError()) { + d->errors = td->errors(); td->release(); - component->release(); return false; - } else if(td->status == QDeclarativeCompositeTypeData::Waiting || - td->status == QDeclarativeCompositeTypeData::WaitingResources) { + } else if(!td->isCompleteOrError()) { QDeclarativeError error; error.setDescription(QLatin1String("QDeclarativeDomDocument supports local types only")); d->errors << error; td->release(); - component->release(); - return false; - } - - compiler.compile(engine, td, component); - - if (compiler.isError()) { - d->errors = compiler.errors(); - td->release(); - component->release(); return false; } - for (int i = 0; i < td->data.imports().size(); ++i) { - QDeclarativeScriptParser::Import parserImport = td->data.imports().at(i); + for (int i = 0; i < td->parser().imports().size(); ++i) { + QDeclarativeScriptParser::Import parserImport = td->parser().imports().at(i); QDeclarativeDomImport domImport; domImport.d->type = static_cast<QDeclarativeDomImportPrivate::Type>(parserImport.type); domImport.d->uri = parserImport.uri; @@ -184,12 +169,12 @@ bool QDeclarativeDomDocument::load(QDeclarativeEngine *engine, const QByteArray d->imports += domImport; } - if (td->data.tree()) { - d->root = td->data.tree(); + if (td->parser().tree()) { + d->root = td->parser().tree(); d->root->addref(); } - component->release(); + td->release(); return true; } diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index c5a5c18..8461368 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -259,7 +259,7 @@ QDeclarativeEnginePrivate::QDeclarativeEnginePrivate(QDeclarativeEngine *e) objectClass(0), valueTypeClass(0), globalClass(0), cleanup(0), erroredBindings(0), inProgressCreations(0), scriptEngine(this), workerScriptEngine(0), componentAttached(0), inBeginCreate(false), networkAccessManager(0), networkAccessManagerFactory(0), - typeManager(e), importDatabase(e), uniqueId(1) + typeLoader(e), importDatabase(e), uniqueId(1) { if (!qt_QmlQtModule_registered) { qt_QmlQtModule_registered = true; @@ -565,7 +565,7 @@ QDeclarativeEngine::~QDeclarativeEngine() void QDeclarativeEngine::clearComponentCache() { Q_D(QDeclarativeEngine); - d->typeManager.clearCache(); + d->typeLoader.clearCache(); } /*! @@ -1716,6 +1716,9 @@ void QDeclarativeEnginePrivate::sendQuit() { Q_Q(QDeclarativeEngine); emit q->quit(); + if (q->receivers(SIGNAL(quit())) == 0) { + qWarning("Signal QDeclarativeEngine::quit() emitted, but no receivers connected to handle it."); + } } static void dumpwarning(const QDeclarativeError &error) diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h index db2db35..dc7315d 100644 --- a/src/declarative/qml/qdeclarativeengine_p.h +++ b/src/declarative/qml/qdeclarativeengine_p.h @@ -56,7 +56,7 @@ #include "qdeclarativeengine.h" #include "private/qdeclarativeclassfactory_p.h" -#include "private/qdeclarativecompositetypemanager_p.h" +#include "private/qdeclarativetypeloader_p.h" #include "private/qdeclarativeimport_p.h" #include "private/qpodvector_p.h" #include "qdeclarative.h" @@ -239,7 +239,7 @@ public: mutable QMutex mutex; - QDeclarativeCompositeTypeManager typeManager; + QDeclarativeTypeLoader typeLoader; QDeclarativeImportDatabase importDatabase; QString offlineStoragePath; diff --git a/src/declarative/qml/qdeclarativeproperty.cpp b/src/declarative/qml/qdeclarativeproperty.cpp index 515c4d6..d0dd2e8 100644 --- a/src/declarative/qml/qdeclarativeproperty.cpp +++ b/src/declarative/qml/qdeclarativeproperty.cpp @@ -42,7 +42,6 @@ #include "qdeclarativeproperty.h" #include "private/qdeclarativeproperty_p.h" -#include "private/qdeclarativecompositetypedata_p.h" #include "qdeclarative.h" #include "private/qdeclarativebinding_p.h" #include "qdeclarativecontext.h" diff --git a/src/declarative/qml/qdeclarativescriptparser.cpp b/src/declarative/qml/qdeclarativescriptparser.cpp index 0b3b35f..c956051 100644 --- a/src/declarative/qml/qdeclarativescriptparser.cpp +++ b/src/declarative/qml/qdeclarativescriptparser.cpp @@ -387,7 +387,6 @@ bool ProcessAST::visit(AST::UiImport *node) if (uri.endsWith(QLatin1String(".js"))) { import.type = QDeclarativeScriptParser::Import::Script; - _parser->_refUrls << QUrl(uri); } else { import.type = QDeclarativeScriptParser::Import::File; } @@ -878,11 +877,6 @@ QList<QDeclarativeScriptParser::TypeReference*> QDeclarativeScriptParser::refere return _refTypes; } -QList<QUrl> QDeclarativeScriptParser::referencedResources() const -{ - return _refUrls; -} - Object *QDeclarativeScriptParser::tree() const { return root; @@ -960,6 +954,217 @@ QDeclarativeParser::Object::ScriptBlock::Pragmas QDeclarativeScriptParser::extra return rv; } +#define CHECK_LINE if(l.currentLineNo() != startLine) return rv; +#define CHECK_TOKEN(t) if (token != QDeclarativeJSGrammar:: t) return rv; + +static const int uriTokens[] = { + QDeclarativeJSGrammar::T_IDENTIFIER, + QDeclarativeJSGrammar::T_PROPERTY, + QDeclarativeJSGrammar::T_SIGNAL, + QDeclarativeJSGrammar::T_READONLY, + QDeclarativeJSGrammar::T_ON, + QDeclarativeJSGrammar::T_BREAK, + QDeclarativeJSGrammar::T_CASE, + QDeclarativeJSGrammar::T_CATCH, + QDeclarativeJSGrammar::T_CONTINUE, + QDeclarativeJSGrammar::T_DEFAULT, + QDeclarativeJSGrammar::T_DELETE, + QDeclarativeJSGrammar::T_DO, + QDeclarativeJSGrammar::T_ELSE, + QDeclarativeJSGrammar::T_FALSE, + QDeclarativeJSGrammar::T_FINALLY, + QDeclarativeJSGrammar::T_FOR, + QDeclarativeJSGrammar::T_FUNCTION, + QDeclarativeJSGrammar::T_IF, + QDeclarativeJSGrammar::T_IN, + QDeclarativeJSGrammar::T_INSTANCEOF, + QDeclarativeJSGrammar::T_NEW, + QDeclarativeJSGrammar::T_NULL, + QDeclarativeJSGrammar::T_RETURN, + QDeclarativeJSGrammar::T_SWITCH, + QDeclarativeJSGrammar::T_THIS, + QDeclarativeJSGrammar::T_THROW, + QDeclarativeJSGrammar::T_TRUE, + QDeclarativeJSGrammar::T_TRY, + QDeclarativeJSGrammar::T_TYPEOF, + QDeclarativeJSGrammar::T_VAR, + QDeclarativeJSGrammar::T_VOID, + QDeclarativeJSGrammar::T_WHILE, + QDeclarativeJSGrammar::T_CONST, + QDeclarativeJSGrammar::T_DEBUGGER, + QDeclarativeJSGrammar::T_RESERVED_WORD, + QDeclarativeJSGrammar::T_WITH, + + QDeclarativeJSGrammar::EOF_SYMBOL +}; +static inline bool isUriToken(int token) +{ + const int *current = uriTokens; + while (*current != QDeclarativeJSGrammar::EOF_SYMBOL) { + if (*current == token) + return true; + ++current; + } + return false; +} + +QDeclarativeScriptParser::JavaScriptMetaData QDeclarativeScriptParser::extractMetaData(QString &script) +{ + JavaScriptMetaData rv; + + QDeclarativeParser::Object::ScriptBlock::Pragmas &pragmas = rv.pragmas; + + const QString pragma(QLatin1String("pragma")); + const QString js(QLatin1String(".js")); + const QString library(QLatin1String("library")); + + QDeclarativeJS::Lexer l(0); + l.setCode(script, 0); + + int token = l.lex(); + + while (true) { + if (token != QDeclarativeJSGrammar::T_DOT) + return rv; + + int startOffset = l.tokenOffset(); + int startLine = l.currentLineNo(); + + token = l.lex(); + + CHECK_LINE; + + if (token == QDeclarativeJSGrammar::T_IMPORT) { + + // .import <URI> <Version> as <Identifier> + // .import <file.js> as <Identifier> + + token = l.lex(); + + CHECK_LINE; + + if (token == QDeclarativeJSGrammar::T_STRING_LITERAL) { + + QString file(l.characterBuffer(), l.characterCount()); + if (!file.endsWith(js)) + return rv; + + token = l.lex(); + + CHECK_TOKEN(T_AS); + CHECK_LINE; + + token = l.lex(); + + CHECK_TOKEN(T_IDENTIFIER); + CHECK_LINE; + + int endOffset = l.tokenLength() + l.tokenOffset(); + + QString importId = script.mid(l.tokenOffset(), l.tokenLength()); + + if (!importId.at(0).isUpper()) + return rv; + + token = l.lex(); + if (l.currentLineNo() == startLine) + return rv; + + replaceWithSpace(script, startOffset, endOffset - startOffset); + + Import import; + import.type = Import::Script; + import.uri = file; + import.qualifier = importId; + + rv.imports << import; + + } else { + // URI + QString uri; + QString version; + + while (true) { + if (!isUriToken(token)) + return rv; + + uri.append(QString(l.characterBuffer(), l.characterCount())); + + token = l.lex(); + CHECK_LINE; + if (token != QDeclarativeJSGrammar::T_DOT) + break; + + uri.append(QLatin1Char('.')); + + token = l.lex(); + CHECK_LINE; + } + + CHECK_TOKEN(T_NUMERIC_LITERAL); + version = script.mid(l.tokenOffset(), l.tokenLength()); + + token = l.lex(); + + CHECK_TOKEN(T_AS); + CHECK_LINE; + + token = l.lex(); + + CHECK_TOKEN(T_IDENTIFIER); + CHECK_LINE; + + int endOffset = l.tokenLength() + l.tokenOffset(); + + QString importId = script.mid(l.tokenOffset(), l.tokenLength()); + + if (!importId.at(0).isUpper()) + return rv; + + token = l.lex(); + if (l.currentLineNo() == startLine) + return rv; + + replaceWithSpace(script, startOffset, endOffset - startOffset); + + Import import; + import.type = Import::Library; + import.uri = uri; + import.version = version; + import.qualifier = importId; + + rv.imports << import; + } + + } else if (token == QDeclarativeJSGrammar::T_IDENTIFIER && + script.mid(l.tokenOffset(), l.tokenLength()) == pragma) { + + token = l.lex(); + + CHECK_TOKEN(T_IDENTIFIER); + CHECK_LINE; + + QString pragmaValue = script.mid(l.tokenOffset(), l.tokenLength()); + int endOffset = l.tokenLength() + l.tokenOffset(); + + if (pragmaValue == QLatin1String("library")) { + pragmas |= QDeclarativeParser::Object::ScriptBlock::Shared; + replaceWithSpace(script, startOffset, endOffset - startOffset); + } else { + return rv; + } + + token = l.lex(); + if (l.currentLineNo() == startLine) + return rv; + + } else { + return rv; + } + } + return rv; +} + void QDeclarativeScriptParser::clear() { if (root) { diff --git a/src/declarative/qml/qdeclarativescriptparser_p.h b/src/declarative/qml/qdeclarativescriptparser_p.h index 28e960b..6319e11 100644 --- a/src/declarative/qml/qdeclarativescriptparser_p.h +++ b/src/declarative/qml/qdeclarativescriptparser_p.h @@ -103,7 +103,6 @@ public: bool parse(const QByteArray &data, const QUrl &url = QUrl()); QList<TypeReference*> referencedTypes() const; - QList<QUrl> referencedResources() const; QDeclarativeParser::Object *tree() const; QList<Import> imports() const; @@ -112,7 +111,18 @@ public: QList<QDeclarativeError> errors() const; + class JavaScriptMetaData { + public: + JavaScriptMetaData() + : pragmas(QDeclarativeParser::Object::ScriptBlock::None) {} + + QDeclarativeParser::Object::ScriptBlock::Pragmas pragmas; + QList<Import> imports; + }; + static QDeclarativeParser::Object::ScriptBlock::Pragmas extractPragmas(QString &); + static JavaScriptMetaData extractMetaData(QString &); + // ### private: TypeReference *findOrCreateType(const QString &name); @@ -127,7 +137,6 @@ public: QDeclarativeParser::Object *root; QList<Import> _imports; QList<TypeReference*> _refTypes; - QList<QUrl> _refUrls; QString _scriptFile; QDeclarativeScriptParserJsASTData *data; }; diff --git a/src/declarative/qml/qdeclarativetypeloader.cpp b/src/declarative/qml/qdeclarativetypeloader.cpp new file mode 100644 index 0000000..8c291f2 --- /dev/null +++ b/src/declarative/qml/qdeclarativetypeloader.cpp @@ -0,0 +1,1070 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative 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$ +** +****************************************************************************/ + +#include "qdeclarativetypeloader_p.h" + +#include <private/qdeclarativeengine_p.h> +#include <private/qdeclarativecompiler_p.h> +#include <private/qdeclarativecomponent_p.h> + +#include <QtDeclarative/qdeclarativecomponent.h> +#include <QtCore/qdebug.h> +#include <QtCore/qdir.h> +#include <QtCore/qfile.h> + +QT_BEGIN_NAMESPACE + +/*! +\class QDeclarativeDataBlob +\brief The QDeclarativeDataBlob encapsulates a data request that can be issued to a QDeclarativeDataLoader. +\internal + +QDeclarativeDataBlob's are loaded by a QDeclarativeDataLoader. The user creates the QDeclarativeDataBlob +and then calls QDeclarativeDataLoader::load() or QDeclarativeDataLoader::loadWithStaticData() to load it. +The QDeclarativeDataLoader invokes callbacks on the QDeclarativeDataBlob as data becomes available. +*/ + +/*! +\enum QDeclarativeDataBlob::Status + +\o Null The blob has not yet been loaded by a QDeclarativeDataLoader +\o Loading The blob is loading network data. The QDeclarativeDataBlob::setData() callback has not yet been +invoked or has not yet returned. +\o WaitingForDependencies The blob is waiting for dependencies to be done before continueing. This status +only occurs after the QDeclarativeDataBlob::setData() callback has been made, and when the blob has outstanding +dependencies. +\o Complete The blob's data has been loaded and all dependencies are done. +\o Error An error has been set on this blob. +*/ + +/*! +\enum QDeclarativeDataBlob::Type +\o QmlFile This is a QDeclarativeTypeData +\o JavaScriptFile This is a QDeclarativeScriptData +\o QmldirFile This is a QDeclarativeQmldirData +*/ + +/*! +Create a new QDeclarativeDataBlob for \a url and of the provided \a type. +*/ +QDeclarativeDataBlob::QDeclarativeDataBlob(const QUrl &url, Type type) +: m_type(type), m_status(Null), m_progress(0), m_url(url), m_finalUrl(url), m_manager(0), + m_redirectCount(0), m_inCallback(false), m_isDone(false) +{ +} + +/*! \internal */ +QDeclarativeDataBlob::~QDeclarativeDataBlob() +{ + Q_ASSERT(m_waitingOnMe.isEmpty()); + + cancelAllWaitingFor(); +} + +/*! +Returns the type provided to the constructor. +*/ +QDeclarativeDataBlob::Type QDeclarativeDataBlob::type() const +{ + return m_type; +} + +/*! +Returns the blob's status. +*/ +QDeclarativeDataBlob::Status QDeclarativeDataBlob::status() const +{ + return m_status; +} + +/*! +Returns true if the status is Null. +*/ +bool QDeclarativeDataBlob::isNull() const +{ + return m_status == Null; +} + +/*! +Returns true if the status is Loading. +*/ +bool QDeclarativeDataBlob::isLoading() const +{ + return m_status == Loading; +} + +/*! +Returns true if the status is WaitingForDependencies. +*/ +bool QDeclarativeDataBlob::isWaiting() const +{ + return m_status == WaitingForDependencies; +} + +/*! +Returns true if the status is Complete. +*/ +bool QDeclarativeDataBlob::isComplete() const +{ + return m_status == Complete; +} + +/*! +Returns true if the status is Error. +*/ +bool QDeclarativeDataBlob::isError() const +{ + return m_status == Error; +} + +/*! +Returns true if the status is Complete or Error. +*/ +bool QDeclarativeDataBlob::isCompleteOrError() const +{ + return isComplete() || isError(); +} + +/*! +Returns the data download progress from 0 to 1. +*/ +qreal QDeclarativeDataBlob::progress() const +{ + return m_progress; +} + +/*! +Returns the blob url passed to the constructor. If a network redirect +happens while fetching the data, this url remains the same. + +\sa finalUrl() +*/ +QUrl QDeclarativeDataBlob::url() const +{ + return m_url; +} + +/*! +Returns the final url of the data. Initially this is the same as +url(), but if a network redirect happens while fetching the data, this url +is updated to reflect the new location. +*/ +QUrl QDeclarativeDataBlob::finalUrl() const +{ + return m_finalUrl; +} + +/*! +Return the errors on this blob. +*/ +QList<QDeclarativeError> QDeclarativeDataBlob::errors() const +{ + return m_errors; +} + +/*! +Mark this blob as having \a errors. + +All outstanding dependencies will be cancelled. Requests to add new dependencies +will be ignored. Entry into the Error state is irreversable, although you can change the +specific errors by additional calls to setError. +*/ +void QDeclarativeDataBlob::setError(const QDeclarativeError &errors) +{ + QList<QDeclarativeError> l; + l << errors; + setError(l); +} + +/*! +\override +*/ +void QDeclarativeDataBlob::setError(const QList<QDeclarativeError> &errors) +{ + m_status = Error; + m_errors = errors; + + cancelAllWaitingFor(); + + if (!m_inCallback) + tryDone(); +} + +/*! +Wait for \a blob to become complete or to error. If \a blob is already +complete or in error, or this blob is already complete, this has no effect. +*/ +void QDeclarativeDataBlob::addDependency(QDeclarativeDataBlob *blob) +{ + Q_ASSERT(status() != Null); + + if (!blob || + blob->status() == Error || blob->status() == Complete || + status() == Error || status() == Complete || + m_waitingFor.contains(blob)) + return; + + blob->addref(); + m_status = WaitingForDependencies; + m_waitingFor.append(blob); + blob->m_waitingOnMe.append(this); +} + +/*! +\fn void QDeclarativeDataBlob::dataReceived(const QByteArray &data) + +Invoked when data for the blob is received. Implementors should use this callback +to determine a blob's dependencies. Within this callback you may call setError() +or addDependency(). +*/ + +/*! +Invoked once data has either been received or a network error occurred, and all +dependencies are complete. + +You can set an error in this method, but you cannot add new dependencies. Implementors +should use this callback to finalize processing of data. + +The default implementation does nothing. +*/ +void QDeclarativeDataBlob::done() +{ +} + +/*! +Invoked if there is a network error while fetching this blob. + +The default implementation sets an appropriate QDeclarativeError. +*/ +void QDeclarativeDataBlob::networkError(QNetworkReply::NetworkError networkError) +{ + Q_UNUSED(networkError); + + QDeclarativeError error; + error.setUrl(m_finalUrl); + + const char *errorString = 0; + switch (networkError) { + default: + errorString = "Network error"; + break; + case QNetworkReply::ConnectionRefusedError: + errorString = "Connection refused"; + break; + case QNetworkReply::RemoteHostClosedError: + errorString = "Remote host closed the connection"; + break; + case QNetworkReply::HostNotFoundError: + errorString = "Host not found"; + break; + case QNetworkReply::TimeoutError: + errorString = "Timeout"; + break; + case QNetworkReply::ProxyConnectionRefusedError: + case QNetworkReply::ProxyConnectionClosedError: + case QNetworkReply::ProxyNotFoundError: + case QNetworkReply::ProxyTimeoutError: + case QNetworkReply::ProxyAuthenticationRequiredError: + case QNetworkReply::UnknownProxyError: + errorString = "Proxy error"; + break; + case QNetworkReply::ContentAccessDenied: + errorString = "Access denied"; + break; + case QNetworkReply::ContentNotFoundError: + errorString = "File not found"; + break; + case QNetworkReply::AuthenticationRequiredError: + errorString = "Authentication required"; + break; + }; + + error.setDescription(QLatin1String(errorString)); + + setError(error); +} + +/*! +Called if \a blob, which was previously waited for, has an error. + +The default implementation does nothing. +*/ +void QDeclarativeDataBlob::dependencyError(QDeclarativeDataBlob *blob) +{ + Q_UNUSED(blob); +} + +/*! +Called if \a blob, which was previously waited for, has completed. + +The default implementation does nothing. +*/ +void QDeclarativeDataBlob::dependencyComplete(QDeclarativeDataBlob *blob) +{ + Q_UNUSED(blob); +} + +/*! +Called when all blobs waited for have completed. This occurs regardless of +whether they are in error, or complete state. + +The default implementation does nothing. +*/ +void QDeclarativeDataBlob::allDependenciesDone() +{ +} + +/*! +Called when the download progress of this blob changes. \a progress goes +from 0 to 1. +*/ +void QDeclarativeDataBlob::downloadProgressChanged(qreal progress) +{ + Q_UNUSED(progress); +} + +void QDeclarativeDataBlob::tryDone() +{ + if (status() != Loading && m_waitingFor.isEmpty() && !m_isDone) { + if (status() != Error) + m_status = Complete; + + m_isDone = true; + done(); + notifyAllWaitingOnMe(); + } +} + +void QDeclarativeDataBlob::cancelAllWaitingFor() +{ + while (m_waitingFor.count()) { + QDeclarativeDataBlob *blob = m_waitingFor.takeLast(); + + Q_ASSERT(blob->m_waitingOnMe.contains(this)); + + blob->m_waitingOnMe.removeOne(this); + + blob->release(); + } +} + +void QDeclarativeDataBlob::notifyAllWaitingOnMe() +{ + while (m_waitingOnMe.count()) { + QDeclarativeDataBlob *blob = m_waitingOnMe.takeLast(); + + Q_ASSERT(blob->m_waitingFor.contains(this)); + + blob->notifyComplete(this); + } +} + +void QDeclarativeDataBlob::notifyComplete(QDeclarativeDataBlob *blob) +{ + Q_ASSERT(m_waitingFor.contains(blob)); + Q_ASSERT(blob->status() == Error || blob->status() == Complete); + + m_inCallback = true; + + if (blob->status() == Error) { + dependencyError(blob); + } else if (blob->status() == Complete) { + dependencyComplete(blob); + } + + m_waitingFor.removeOne(blob); + blob->release(); + + if (!isError() && m_waitingFor.isEmpty()) + allDependenciesDone(); + + m_inCallback = false; + + tryDone(); +} + +/*! +\class QDeclarativeDataLoader +\brief The QDeclarativeDataLoader class abstracts loading files and their dependecies over the network. +\internal + +The QDeclarativeDataLoader class is provided for the exclusive use of the QDeclarativeTypeLoader class. + +Clients create QDeclarativeDataBlob instances and submit them to the QDeclarativeDataLoader class +through the QDeclarativeDataLoader::load() or QDeclarativeDataLoader::loadWithStaticData() methods. +The loader then fetches the data over the network or from the local file system in an efficient way. +QDeclarativeDataBlob is an abstract class, so should always be specialized. + +Once data is received, the QDeclarativeDataBlob::dataReceived() method is invoked on the blob. The +derived class should use this callback to process the received data. Processing of the data can +result in an error being set (QDeclarativeDataBlob::setError()), or one or more dependencies being +created (QDeclarativeDataBlob::addDependency()). Dependencies are other QDeclarativeDataBlob's that +are required before processing can fully complete. + +To complete processing, the QDeclarativeDataBlob::done() callback is invoked. done() is called when +one of these three preconditions are met. + +1. The QDeclarativeDataBlob has no dependencies. +2. The QDeclarativeDataBlob has an error set. +3. All the QDeclarativeDataBlob's dependencies are themselves "done()". + +Thus QDeclarativeDataBlob::done() will always eventually be called, even if the blob has an error set. +*/ + +/*! +Create a new QDeclarativeDataLoader for \a engine. +*/ +QDeclarativeDataLoader::QDeclarativeDataLoader(QDeclarativeEngine *engine) +: m_engine(engine) +{ +} + +/*! \internal */ +QDeclarativeDataLoader::~QDeclarativeDataLoader() +{ + for (NetworkReplies::Iterator iter = m_networkReplies.begin(); iter != m_networkReplies.end(); ++iter) + (*iter)->release(); +} + +/*! +Load the provided \a blob from the network or filesystem. +*/ +void QDeclarativeDataLoader::load(QDeclarativeDataBlob *blob) +{ + Q_ASSERT(blob->status() == QDeclarativeDataBlob::Null); + Q_ASSERT(blob->m_manager == 0); + + blob->m_status = QDeclarativeDataBlob::Loading; + + if (blob->m_url.isEmpty()) { + QDeclarativeError error; + error.setDescription(QLatin1String("Invalid null URL")); + blob->setError(error); + return; + } + + QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(blob->m_url); + + if (!lf.isEmpty()) { + QFile file(lf); + if (file.open(QFile::ReadOnly)) { + QByteArray data = file.readAll(); + + blob->m_progress = 1.; + blob->downloadProgressChanged(1.); + + setData(blob, data); + } else { + blob->networkError(QNetworkReply::ContentNotFoundError); + } + + } else { + + blob->m_manager = this; + QNetworkReply *reply = m_engine->networkAccessManager()->get(QNetworkRequest(blob->m_url)); + QObject::connect(reply, SIGNAL(downloadProgress(qint64,qint64)), + this, SLOT(networkReplyProgress(qint64,qint64))); + QObject::connect(reply, SIGNAL(finished()), + this, SLOT(networkReplyFinished())); + m_networkReplies.insert(reply, blob); + + blob->addref(); + } +} + +#define DATALOADER_MAXIMUM_REDIRECT_RECURSION 16 + +void QDeclarativeDataLoader::networkReplyFinished() +{ + QNetworkReply *reply = static_cast<QNetworkReply *>(sender()); + reply->deleteLater(); + + QDeclarativeDataBlob *blob = m_networkReplies.take(reply); + + Q_ASSERT(blob); + + blob->m_redirectCount++; + + if (blob->m_redirectCount < DATALOADER_MAXIMUM_REDIRECT_RECURSION) { + QVariant redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + if (redirect.isValid()) { + QUrl url = reply->url().resolved(redirect.toUrl()); + blob->m_finalUrl = url; + + QNetworkReply *reply = m_engine->networkAccessManager()->get(QNetworkRequest(url)); + QObject::connect(reply, SIGNAL(finished()), this, SLOT(networkReplyFinished())); + m_networkReplies.insert(reply, blob); + return; + } + } + + if (reply->error()) { + blob->networkError(reply->error()); + } else { + QByteArray data = reply->readAll(); + setData(blob, data); + } + + blob->release(); +} + +void QDeclarativeDataLoader::networkReplyProgress(qint64 bytesReceived, qint64 bytesTotal) +{ + QNetworkReply *reply = static_cast<QNetworkReply *>(sender()); + QDeclarativeDataBlob *blob = m_networkReplies.value(reply); + + Q_ASSERT(blob); + + if (bytesTotal != 0) { + blob->m_progress = bytesReceived / bytesTotal; + blob->downloadProgressChanged(blob->m_progress); + } +} + +/*! +Load the provided \a blob with \a data. The blob's URL is not used by the data loader in this case. +*/ +void QDeclarativeDataLoader::loadWithStaticData(QDeclarativeDataBlob *blob, const QByteArray &data) +{ + Q_ASSERT(blob->status() == QDeclarativeDataBlob::Null); + Q_ASSERT(blob->m_manager == 0); + + blob->m_status = QDeclarativeDataBlob::Loading; + + setData(blob, data); +} + +/*! +Return the QDeclarativeEngine associated with this loader +*/ +QDeclarativeEngine *QDeclarativeDataLoader::engine() const +{ + return m_engine; +} + +void QDeclarativeDataLoader::setData(QDeclarativeDataBlob *blob, const QByteArray &data) +{ + blob->m_inCallback = true; + + blob->dataReceived(data); + + if (!blob->isError() && !blob->isWaiting()) + blob->allDependenciesDone(); + + if (blob->status() != QDeclarativeDataBlob::Error) + blob->m_status = QDeclarativeDataBlob::WaitingForDependencies; + + blob->m_inCallback = false; + + blob->tryDone(); +} + +/*! +\class QDeclarativeTypeLoader +*/ +QDeclarativeTypeLoader::QDeclarativeTypeLoader(QDeclarativeEngine *engine) +: QDeclarativeDataLoader(engine) +{ +} + +QDeclarativeTypeLoader::~QDeclarativeTypeLoader() +{ + clearCache(); +} + +/*! +Return a QDeclarativeTypeData for \a url. The QDeclarativeTypeData may be cached. +*/ +QDeclarativeTypeData *QDeclarativeTypeLoader::get(const QUrl &url) +{ + Q_ASSERT(!url.isRelative() && + (QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url).isEmpty() || + !QDir::isRelativePath(QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url)))); + + QDeclarativeTypeData *typeData = m_typeCache.value(url); + + if (!typeData) { + typeData = new QDeclarativeTypeData(url, None, this); + m_typeCache.insert(url, typeData); + QDeclarativeDataLoader::load(typeData); + } + + typeData->addref(); + return typeData; +} + +/*! +Return a QDeclarativeTypeData for \a data with the provided base \a url. The +QDeclarativeTypeData will not be cached. +*/ +QDeclarativeTypeData *QDeclarativeTypeLoader::get(const QByteArray &data, const QUrl &url, Options options) +{ + QDeclarativeTypeData *typeData = new QDeclarativeTypeData(url, options, this); + QDeclarativeDataLoader::loadWithStaticData(typeData, data); + return typeData; +} + +/*! +Return a QDeclarativeScriptData for \a url. The QDeclarativeScriptData may be cached. +*/ +QDeclarativeScriptData *QDeclarativeTypeLoader::getScript(const QUrl &url) +{ + Q_ASSERT(!url.isRelative() && + (QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url).isEmpty() || + !QDir::isRelativePath(QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url)))); + + QDeclarativeScriptData *scriptData = m_scriptCache.value(url); + + if (!scriptData) { + scriptData = new QDeclarativeScriptData(url); + m_scriptCache.insert(url, scriptData); + QDeclarativeDataLoader::load(scriptData); + } + + scriptData->addref(); + return scriptData; +} + +/*! +Return a QDeclarativeQmldirData for \a url. The QDeclarativeQmldirData may be cached. +*/ +QDeclarativeQmldirData *QDeclarativeTypeLoader::getQmldir(const QUrl &url) +{ + Q_ASSERT(!url.isRelative() && + (QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url).isEmpty() || + !QDir::isRelativePath(QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url)))); + + QDeclarativeQmldirData *qmldirData = m_qmldirCache.value(url); + + if (!qmldirData) { + qmldirData = new QDeclarativeQmldirData(url); + m_qmldirCache.insert(url, qmldirData); + QDeclarativeDataLoader::load(qmldirData); + } + + qmldirData->addref(); + return qmldirData; +} + +void QDeclarativeTypeLoader::clearCache() +{ + for (TypeCache::Iterator iter = m_typeCache.begin(); iter != m_typeCache.end(); ++iter) + (*iter)->release(); + for (ScriptCache::Iterator iter = m_scriptCache.begin(); iter != m_scriptCache.end(); ++iter) + (*iter)->release(); + for (QmldirCache::Iterator iter = m_qmldirCache.begin(); iter != m_qmldirCache.end(); ++iter) + (*iter)->release(); + + m_typeCache.clear(); + m_scriptCache.clear(); + m_qmldirCache.clear(); +} + + +QDeclarativeTypeData::QDeclarativeTypeData(const QUrl &url, QDeclarativeTypeLoader::Options options, + QDeclarativeTypeLoader *manager) +: QDeclarativeDataBlob(url, QmlFile), m_options(options), m_typesResolved(false), + m_compiledData(0), m_component(0), m_typeLoader(manager) +{ +} + +QDeclarativeTypeData::~QDeclarativeTypeData() +{ + for (int ii = 0; ii < m_scripts.count(); ++ii) + m_scripts.at(ii).script->release(); + for (int ii = 0; ii < m_qmldirs.count(); ++ii) + m_qmldirs.at(ii)->release(); + for (int ii = 0; ii < m_types.count(); ++ii) + if (m_types.at(ii).typeData) m_types.at(ii).typeData->release(); + if (m_compiledData) + m_compiledData->release(); +} + +QDeclarativeTypeLoader *QDeclarativeTypeData::typeLoader() const +{ + return m_typeLoader; +} + +const QDeclarativeImports &QDeclarativeTypeData::imports() const +{ + return m_imports; +} + +const QDeclarativeScriptParser &QDeclarativeTypeData::parser() const +{ + return scriptParser; +} + +const QList<QDeclarativeTypeData::TypeReference> &QDeclarativeTypeData::resolvedTypes() const +{ + return m_types; +} + +const QList<QDeclarativeTypeData::ScriptReference> &QDeclarativeTypeData::resolvedScripts() const +{ + return m_scripts; +} + +QDeclarativeCompiledData *QDeclarativeTypeData::compiledData() const +{ + if (m_compiledData) + m_compiledData->addref(); + + return m_compiledData; +} + +QDeclarativeComponent *QDeclarativeTypeData::component() const +{ + if (!m_component) { + + if (m_compiledData) { + m_component = new QDeclarativeComponent(typeLoader()->engine(), m_compiledData, -1, -1, 0); + } else { + m_component = new QDeclarativeComponent(typeLoader()->engine()); + QDeclarativeComponentPrivate::get(m_component)->url = finalUrl(); + QDeclarativeComponentPrivate::get(m_component)->state.errors = errors(); + } + + } + + return m_component; +} + +void QDeclarativeTypeData::registerCallback(TypeDataCallback *callback) +{ + Q_ASSERT(!m_callbacks.contains(callback)); + m_callbacks.append(callback); +} + +void QDeclarativeTypeData::unregisterCallback(TypeDataCallback *callback) +{ + Q_ASSERT(m_callbacks.contains(callback)); + m_callbacks.removeOne(callback); + Q_ASSERT(!m_callbacks.contains(callback)); +} + +void QDeclarativeTypeData::done() +{ + addref(); + + // Check all script dependencies for errors + for (int ii = 0; !isError() && ii < m_scripts.count(); ++ii) { + const ScriptReference &script = m_scripts.at(ii); + Q_ASSERT(script.script->isCompleteOrError()); + if (script.script->isError()) { + QList<QDeclarativeError> errors = script.script->errors(); + QDeclarativeError error; + error.setUrl(finalUrl()); + error.setLine(script.location.line); + error.setColumn(script.location.column); + error.setDescription(typeLoader()->tr("Script %1 unavailable").arg(script.script->url().toString())); + errors.prepend(error); + setError(errors); + } + } + + // Check all type dependencies for errors + for (int ii = 0; !isError() && ii < m_types.count(); ++ii) { + const TypeReference &type = m_types.at(ii); + Q_ASSERT(!type.typeData || type.typeData->isCompleteOrError()); + if (type.typeData && type.typeData->isError()) { + QString typeName = scriptParser.referencedTypes().at(ii)->name; + + QList<QDeclarativeError> errors = type.typeData->errors(); + QDeclarativeError error; + error.setUrl(finalUrl()); + error.setLine(type.location.line); + error.setColumn(type.location.column); + error.setDescription(typeLoader()->tr("Type %1 unavailable").arg(typeName)); + errors.prepend(error); + setError(errors); + } + } + + // Compile component + if (!isError()) + compile(); + + if (!(m_options & QDeclarativeTypeLoader::PreserveParser)) + scriptParser.clear(); + + // Notify callbacks + while (!m_callbacks.isEmpty()) { + TypeDataCallback *callback = m_callbacks.takeFirst(); + callback->typeDataReady(this); + } + + release(); +} + +void QDeclarativeTypeData::dataReceived(const QByteArray &data) +{ + if (!scriptParser.parse(data, finalUrl())) { + setError(scriptParser.errors()); + return; + } + + m_imports.setBaseUrl(finalUrl()); + + foreach (const QDeclarativeScriptParser::Import &import, scriptParser.imports()) { + if (import.type == QDeclarativeScriptParser::Import::File && import.qualifier.isEmpty()) { + QUrl importUrl = finalUrl().resolved(QUrl(import.uri + QLatin1String("/qmldir"))); + if (QDeclarativeEnginePrivate::urlToLocalFileOrQrc(importUrl).isEmpty()) { + QDeclarativeQmldirData *data = typeLoader()->getQmldir(importUrl); + addDependency(data); + m_qmldirs << data; + } + } else if (import.type == QDeclarativeScriptParser::Import::Script) { + QUrl scriptUrl = finalUrl().resolved(QUrl(import.uri)); + QDeclarativeScriptData *data = typeLoader()->getScript(scriptUrl); + addDependency(data); + + ScriptReference ref; + ref.location = import.location.start; + ref.qualifier = import.qualifier; + ref.script = data; + m_scripts << ref; + + } + } + + if (!finalUrl().scheme().isEmpty()) { + QUrl importUrl = finalUrl().resolved(QUrl(QLatin1String("qmldir"))); + if (QDeclarativeEnginePrivate::urlToLocalFileOrQrc(importUrl).isEmpty()) { + QDeclarativeQmldirData *data = typeLoader()->getQmldir(importUrl); + addDependency(data); + m_qmldirs << data; + } + } +} + +void QDeclarativeTypeData::allDependenciesDone() +{ + if (!m_typesResolved) { + resolveTypes(); + m_typesResolved = true; + } +} + +void QDeclarativeTypeData::downloadProgressChanged(qreal p) +{ + for (int ii = 0; ii < m_callbacks.count(); ++ii) { + TypeDataCallback *callback = m_callbacks.at(ii); + callback->typeDataProgress(this, p); + } +} + +void QDeclarativeTypeData::compile() +{ + Q_ASSERT(m_compiledData == 0); + + m_compiledData = new QDeclarativeCompiledData(typeLoader()->engine()); + m_compiledData->url = m_imports.baseUrl(); + m_compiledData->name = m_compiledData->url.toString(); + + QDeclarativeCompiler compiler; + if (!compiler.compile(typeLoader()->engine(), this, m_compiledData)) { + setError(compiler.errors()); + m_compiledData->release(); + m_compiledData = 0; + } +} + +void QDeclarativeTypeData::resolveTypes() +{ + QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(m_typeLoader->engine()); + QDeclarativeImportDatabase *importDatabase = &ep->importDatabase; + + // For local urls, add an implicit import "." as first (most overridden) lookup. + // This will also trigger the loading of the qmldir and the import of any native + // types from available plugins. + if (QDeclarativeQmldirData *qmldir = qmldirForUrl(finalUrl().resolved(QUrl(QLatin1String("./qmldir"))))) { + m_imports.addImport(importDatabase, QLatin1String("."), + QString(), -1, -1, QDeclarativeScriptParser::Import::File, + qmldir->dirComponents(), 0); + } else { + m_imports.addImport(importDatabase, QLatin1String("."), + QString(), -1, -1, QDeclarativeScriptParser::Import::File, + QDeclarativeDirComponents(), 0); + } + + foreach (const QDeclarativeScriptParser::Import &import, scriptParser.imports()) { + QDeclarativeDirComponents qmldircomponentsnetwork; + if (import.type == QDeclarativeScriptParser::Import::Script) + continue; + + if (import.type == QDeclarativeScriptParser::Import::File && import.qualifier.isEmpty()) { + QUrl qmldirUrl = finalUrl().resolved(QUrl(import.uri + QLatin1String("/qmldir"))); + if (QDeclarativeQmldirData *qmldir = qmldirForUrl(qmldirUrl)) + qmldircomponentsnetwork = qmldir->dirComponents(); + } + + int vmaj = -1; + int vmin = -1; + + if (!import.version.isEmpty()) { + int dot = import.version.indexOf(QLatin1Char('.')); + if (dot < 0) { + vmaj = import.version.toInt(); + vmin = 0; + } else { + vmaj = import.version.left(dot).toInt(); + vmin = import.version.mid(dot+1).toInt(); + } + } + + QString errorString; + if (!m_imports.addImport(importDatabase, import.uri, import.qualifier, + vmaj, vmin, import.type, qmldircomponentsnetwork, &errorString)) { + QDeclarativeError error; + error.setUrl(m_imports.baseUrl()); + error.setDescription(errorString); + error.setLine(import.location.start.line); + error.setColumn(import.location.start.column); + + setError(error); + return; + } + } + + foreach (QDeclarativeScriptParser::TypeReference *parserRef, scriptParser.referencedTypes()) { + QByteArray typeName = parserRef->name.toUtf8(); + + TypeReference ref; + + QUrl url; + int majorVersion; + int minorVersion; + QDeclarativeImportedNamespace *typeNamespace = 0; + QString errorString; + + if (!m_imports.resolveType(typeName, &ref.type, &url, &majorVersion, &minorVersion, + &typeNamespace, &errorString) || typeNamespace) { + // Known to not be a type: + // - known to be a namespace (Namespace {}) + // - type with unknown namespace (UnknownNamespace.SomeType {}) + QDeclarativeError error; + error.setUrl(m_imports.baseUrl()); + QString userTypeName = parserRef->name; + userTypeName.replace(QLatin1Char('/'),QLatin1Char('.')); + if (typeNamespace) + error.setDescription(typeLoader()->tr("Namespace %1 cannot be used as a type").arg(userTypeName)); + else + error.setDescription(typeLoader()->tr("%1 %2").arg(userTypeName).arg(errorString)); + + if (!parserRef->refObjects.isEmpty()) { + QDeclarativeParser::Object *obj = parserRef->refObjects.first(); + error.setLine(obj->location.start.line); + error.setColumn(obj->location.start.column); + } + + setError(error); + return; + } + + if (ref.type) { + foreach (QDeclarativeParser::Object *obj, parserRef->refObjects) { + // store namespace for DOM + obj->majorVersion = majorVersion; + obj->minorVersion = minorVersion; + } + } else { + ref.typeData = typeLoader()->get(url); + addDependency(ref.typeData); + } + + if (parserRef->refObjects.count()) + ref.location = parserRef->refObjects.first()->location.start; + + m_types << ref; + } +} + +QDeclarativeQmldirData *QDeclarativeTypeData::qmldirForUrl(const QUrl &url) +{ + for (int ii = 0; ii < m_qmldirs.count(); ++ii) { + if (m_qmldirs.at(ii)->url() == url) + return m_qmldirs.at(ii); + } + return 0; +} + +QDeclarativeScriptData::QDeclarativeScriptData(const QUrl &url) +: QDeclarativeDataBlob(url, JavaScriptFile), m_pragmas(QDeclarativeParser::Object::ScriptBlock::None) +{ +} + +QDeclarativeParser::Object::ScriptBlock::Pragmas QDeclarativeScriptData::pragmas() const +{ + return m_pragmas; +} + +QString QDeclarativeScriptData::scriptSource() const +{ + return m_source; +} + +void QDeclarativeScriptData::dataReceived(const QByteArray &data) +{ + m_source = QString::fromUtf8(data); + m_pragmas = QDeclarativeScriptParser::extractPragmas(m_source); +} + +QDeclarativeQmldirData::QDeclarativeQmldirData(const QUrl &url) +: QDeclarativeDataBlob(url, QmldirFile) +{ +} + +const QDeclarativeDirComponents &QDeclarativeQmldirData::dirComponents() const +{ + return m_components; +} + +void QDeclarativeQmldirData::dataReceived(const QByteArray &data) +{ + QDeclarativeDirParser parser; + parser.setSource(QString::fromUtf8(data)); + parser.parse(); + m_components = parser.components(); +} + +QT_END_NAMESPACE + diff --git a/src/declarative/qml/qdeclarativetypeloader_p.h b/src/declarative/qml/qdeclarativetypeloader_p.h new file mode 100644 index 0000000..7381f28 --- /dev/null +++ b/src/declarative/qml/qdeclarativetypeloader_p.h @@ -0,0 +1,321 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative 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 QDECLARATIVETYPELOADER_P_H +#define QDECLARATIVETYPELOADER_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 <QtCore/qobject.h> +#include <QtNetwork/qnetworkreply.h> +#include <QtDeclarative/qdeclarativeerror.h> +#include <QtDeclarative/qdeclarativeengine.h> +#include <private/qdeclarativescriptparser_p.h> +#include <private/qdeclarativedirparser_p.h> +#include <private/qdeclarativeimport_p.h> + +QT_BEGIN_NAMESPACE + +class QDeclarativeScriptData; +class QDeclarativeQmldirData; +class QDeclarativeTypeLoader; +class QDeclarativeCompiledData; +class QDeclarativeComponentPrivate; +class QDeclarativeTypeData; +class QDeclarativeDataLoader; + +class Q_AUTOTEST_EXPORT QDeclarativeDataBlob : public QDeclarativeRefCount +{ +public: + enum Status { + Null, // Prior to QDeclarativeDataLoader::load() + Loading, // Prior to data being received and dataReceived() being called + WaitingForDependencies, // While there are outstanding addDependency()s + Complete, // Finished + Error, // Error + }; + + enum Type { + QmlFile, + JavaScriptFile, + QmldirFile + }; + + QDeclarativeDataBlob(const QUrl &, Type); + virtual ~QDeclarativeDataBlob(); + + Type type() const; + + Status status() const; + bool isNull() const; + bool isLoading() const; + bool isWaiting() const; + bool isComplete() const; + bool isError() const; + bool isCompleteOrError() const; + + qreal progress() const; + + QUrl url() const; + QUrl finalUrl() const; + + QList<QDeclarativeError> errors() const; + + void setError(const QDeclarativeError &); + void setError(const QList<QDeclarativeError> &errors); + + void addDependency(QDeclarativeDataBlob *); + +protected: + virtual void dataReceived(const QByteArray &) = 0; + + virtual void done(); + virtual void networkError(QNetworkReply::NetworkError); + + virtual void dependencyError(QDeclarativeDataBlob *); + virtual void dependencyComplete(QDeclarativeDataBlob *); + virtual void allDependenciesDone(); + + virtual void downloadProgressChanged(qreal); + +private: + friend class QDeclarativeDataLoader; + void tryDone(); + void cancelAllWaitingFor(); + void notifyAllWaitingOnMe(); + void notifyComplete(QDeclarativeDataBlob *); + + Type m_type; + Status m_status; + qreal m_progress; + + QUrl m_url; + QUrl m_finalUrl; + + // List of QDeclarativeDataBlob's that are waiting for me to complete. + QList<QDeclarativeDataBlob *> m_waitingOnMe; + + // List of QDeclarativeDataBlob's that I am waiting for to complete. + QList<QDeclarativeDataBlob *> m_waitingFor; + + // Manager that is currently fetching data for me + QDeclarativeDataLoader *m_manager; + int m_redirectCount:30; + bool m_inCallback:1; + bool m_isDone:1; + + QList<QDeclarativeError> m_errors; +}; + +class Q_AUTOTEST_EXPORT QDeclarativeDataLoader : public QObject +{ + Q_OBJECT +public: + QDeclarativeDataLoader(QDeclarativeEngine *); + ~QDeclarativeDataLoader(); + + void load(QDeclarativeDataBlob *); + void loadWithStaticData(QDeclarativeDataBlob *, const QByteArray &); + + QDeclarativeEngine *engine() const; + +private slots: + void networkReplyFinished(); + void networkReplyProgress(qint64,qint64); + +private: + void setData(QDeclarativeDataBlob *, const QByteArray &); + + QDeclarativeEngine *m_engine; + typedef QHash<QNetworkReply *, QDeclarativeDataBlob *> NetworkReplies; + NetworkReplies m_networkReplies; +}; + + +class Q_AUTOTEST_EXPORT QDeclarativeTypeLoader : public QDeclarativeDataLoader +{ + Q_OBJECT +public: + QDeclarativeTypeLoader(QDeclarativeEngine *); + ~QDeclarativeTypeLoader(); + + enum Option { + None, + PreserveParser + }; + Q_DECLARE_FLAGS(Options, Option) + + QDeclarativeTypeData *get(const QUrl &url); + QDeclarativeTypeData *get(const QByteArray &, const QUrl &url, Options = None); + void clearCache(); + + QDeclarativeScriptData *getScript(const QUrl &); + QDeclarativeQmldirData *getQmldir(const QUrl &); +private: + typedef QHash<QUrl, QDeclarativeTypeData *> TypeCache; + typedef QHash<QUrl, QDeclarativeScriptData *> ScriptCache; + typedef QHash<QUrl, QDeclarativeQmldirData *> QmldirCache; + + TypeCache m_typeCache; + ScriptCache m_scriptCache; + QmldirCache m_qmldirCache; +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativeTypeLoader::Options) + +class Q_AUTOTEST_EXPORT QDeclarativeTypeData : public QDeclarativeDataBlob +{ +public: + struct TypeReference + { + TypeReference() : type(0), typeData(0) {} + + QDeclarativeParser::Location location; + QDeclarativeType *type; + QDeclarativeTypeData *typeData; + }; + + struct ScriptReference + { + ScriptReference() : script(0) {} + + QDeclarativeParser::Location location; + QString qualifier; + QDeclarativeScriptData *script; + }; + + QDeclarativeTypeData(const QUrl &, QDeclarativeTypeLoader::Options, QDeclarativeTypeLoader *); + ~QDeclarativeTypeData(); + + QDeclarativeTypeLoader *typeLoader() const; + + const QDeclarativeImports &imports() const; + const QDeclarativeScriptParser &parser() const; + + const QList<TypeReference> &resolvedTypes() const; + const QList<ScriptReference> &resolvedScripts() const; + + QDeclarativeCompiledData *compiledData() const; + QDeclarativeComponent *component() const; + + // Used by QDeclarativeComponent to get notifications + struct TypeDataCallback { + ~TypeDataCallback() {} + virtual void typeDataProgress(QDeclarativeTypeData *, qreal) {} + virtual void typeDataReady(QDeclarativeTypeData *) {} + }; + void registerCallback(TypeDataCallback *); + void unregisterCallback(TypeDataCallback *); + +protected: + virtual void done(); + virtual void dataReceived(const QByteArray &); + virtual void allDependenciesDone(); + virtual void downloadProgressChanged(qreal); + +private: + void resolveTypes(); + void compile(); + + QDeclarativeTypeLoader::Options m_options; + + QDeclarativeQmldirData *qmldirForUrl(const QUrl &); + + QDeclarativeScriptParser scriptParser; + QDeclarativeImports m_imports; + + QList<ScriptReference> m_scripts; + QList<QDeclarativeQmldirData *> m_qmldirs; + + QList<TypeReference> m_types; + bool m_typesResolved:1; + + QDeclarativeCompiledData *m_compiledData; + mutable QDeclarativeComponent *m_component; + + QList<TypeDataCallback *> m_callbacks; + + QDeclarativeTypeLoader *m_typeLoader; +}; + +class Q_AUTOTEST_EXPORT QDeclarativeScriptData : public QDeclarativeDataBlob +{ +public: + QDeclarativeScriptData(const QUrl &); + + QDeclarativeParser::Object::ScriptBlock::Pragmas pragmas() const; + QString scriptSource() const; + +protected: + virtual void dataReceived(const QByteArray &); + +private: + QDeclarativeParser::Object::ScriptBlock::Pragmas m_pragmas; + QString m_source; +}; + +class Q_AUTOTEST_EXPORT QDeclarativeQmldirData : public QDeclarativeDataBlob +{ +public: + QDeclarativeQmldirData(const QUrl &); + + const QDeclarativeDirComponents &dirComponents() const; + +protected: + virtual void dataReceived(const QByteArray &); + +private: + QDeclarativeDirComponents m_components; + +}; + +QT_END_NAMESPACE + +#endif // QDECLARATIVETYPELOADER_P_H diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri index 12f9794..687ff52 100644 --- a/src/declarative/qml/qml.pri +++ b/src/declarative/qml/qml.pri @@ -24,7 +24,7 @@ SOURCES += \ $$PWD/qdeclarativestringconverters.cpp \ $$PWD/qdeclarativeclassfactory.cpp \ $$PWD/qdeclarativeparserstatus.cpp \ - $$PWD/qdeclarativecompositetypemanager.cpp \ + $$PWD/qdeclarativetypeloader.cpp \ $$PWD/qdeclarativeinfo.cpp \ $$PWD/qdeclarativeerror.cpp \ $$PWD/qdeclarativescriptparser.cpp \ @@ -94,8 +94,7 @@ HEADERS += \ $$PWD/qdeclarativeproperty_p.h \ $$PWD/qdeclarativecontext_p.h \ $$PWD/qdeclarativeinclude_p.h \ - $$PWD/qdeclarativecompositetypedata_p.h \ - $$PWD/qdeclarativecompositetypemanager_p.h \ + $$PWD/qdeclarativetypeloader_p.h \ $$PWD/qdeclarativelist.h \ $$PWD/qdeclarativelist_p.h \ $$PWD/qdeclarativedata_p.h \ diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 4c03d33..539685a 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -1074,7 +1074,7 @@ void QGraphicsScenePrivate::enableMouseTrackingOnViews() /*! Returns all items for the screen position in \a event. */ -QList<QGraphicsItem *> QGraphicsScenePrivate::itemsAtPosition(const QPoint &screenPos, +QList<QGraphicsItem *> QGraphicsScenePrivate::itemsAtPosition(const QPoint &/*screenPos*/, const QPointF &scenePos, QWidget *widget) const { @@ -1083,16 +1083,12 @@ QList<QGraphicsItem *> QGraphicsScenePrivate::itemsAtPosition(const QPoint &scre if (!view) return q->items(scenePos, Qt::IntersectsItemShape, Qt::DescendingOrder, QTransform()); - const QRectF pointRect(QPointF(widget->mapFromGlobal(screenPos)), QSizeF(1, 1)); + const QRectF pointRect(scenePos, QSizeF(1, 1)); if (!view->isTransformed()) return q->items(pointRect, Qt::IntersectsItemShape, Qt::DescendingOrder); const QTransform viewTransform = view->viewportTransform(); - if (viewTransform.type() <= QTransform::TxScale) { - return q->items(viewTransform.inverted().mapRect(pointRect), Qt::IntersectsItemShape, - Qt::DescendingOrder, viewTransform); - } - return q->items(viewTransform.inverted().map(pointRect), Qt::IntersectsItemShape, + return q->items(pointRect, Qt::IntersectsItemShape, Qt::DescendingOrder, viewTransform); } diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp index 0fabd18..1bfe266 100644 --- a/src/gui/graphicsview/qgraphicswidget.cpp +++ b/src/gui/graphicsview/qgraphicswidget.cpp @@ -937,7 +937,9 @@ void QGraphicsWidget::setStyle(QStyle *style) QFont QGraphicsWidget::font() const { Q_D(const QGraphicsWidget); - return d->font; + QFont fnt = d->font; + fnt.resolve(fnt.resolve() | d->inheritedFontResolveMask); + return fnt; } void QGraphicsWidget::setFont(const QFont &font) { diff --git a/src/gui/graphicsview/qgraphicswidget_p.cpp b/src/gui/graphicsview/qgraphicswidget_p.cpp index f7850ca..3466733 100644 --- a/src/gui/graphicsview/qgraphicswidget_p.cpp +++ b/src/gui/graphicsview/qgraphicswidget_p.cpp @@ -254,7 +254,10 @@ void QGraphicsWidgetPrivate::setFont_helper(const QFont &font) void QGraphicsWidgetPrivate::resolveFont(uint inheritedMask) { + Q_Q(QGraphicsWidget); inheritedFontResolveMask = inheritedMask; + if (QGraphicsWidget *p = q->parentWidget()) + inheritedFontResolveMask |= p->d_func()->inheritedFontResolveMask; QFont naturalFont = naturalWidgetFont(); QFont resolvedFont = font.resolve(naturalFont); updateFont(resolvedFont); diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 3d2bfe2..ea3dcab 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -4864,6 +4864,8 @@ void QWidgetPrivate::resolveLayoutDirection() has been called for the parent do not inherit the parent's layout direction. + This method no longer affects text layout direction since Qt 4.7. + \sa QApplication::layoutDirection */ void QWidget::setLayoutDirection(Qt::LayoutDirection direction) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 276da93..be4275c 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -1757,9 +1757,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_Plus_impl(uint *dest, int for (int i = 0; i < length; ++i) { PRELOAD_COND(dest) uint d = dest[i]; -#define MIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) - d = (MIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); -#undef MIX + d = comp_func_Plus_one_pixel(d, s); coverage.store(&dest[i], d); } } @@ -1781,9 +1779,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_Plus_impl(uint *dest, const uin uint d = dest[i]; uint s = src[i]; -#define MIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) - d = (MIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); -#undef MIX + d = comp_func_Plus_one_pixel(d, s); coverage.store(&dest[i], d); } @@ -7911,11 +7907,13 @@ void qInitDrawhelperAsm() functionForMode_C[QPainter::CompositionMode_SourceOver] = qt_blend_argb32_on_argb32_scanline_neon; functionForModeSolid_C[QPainter::CompositionMode_SourceOver] = comp_func_solid_SourceOver_neon; + functionForMode_C[QPainter::CompositionMode_Plus] = comp_func_Plus_neon; destFetchProc[QImage::Format_RGB16] = qt_destFetchRGB16_neon; destStoreProc[QImage::Format_RGB16] = qt_destStoreRGB16_neon; qMemRotateFunctions[QImage::Format_RGB16][0] = qt_memrotate90_16_neon; qMemRotateFunctions[QImage::Format_RGB16][2] = qt_memrotate270_16_neon; + qt_memfill32 = qt_memfill32_neon; } #endif diff --git a/src/gui/painting/qdrawhelper_neon.cpp b/src/gui/painting/qdrawhelper_neon.cpp index 03fe075..ed15c5c 100644 --- a/src/gui/painting/qdrawhelper_neon.cpp +++ b/src/gui/painting/qdrawhelper_neon.cpp @@ -51,6 +51,44 @@ QT_BEGIN_NAMESPACE +void qt_memfill32_neon(quint32 *dest, quint32 value, int count) +{ + const int epilogueSize = count % 16; + if (count >= 16) { + quint32 *const neonEnd = dest + count - epilogueSize; + register uint32x4_t valueVector1 asm ("q0") = vdupq_n_u32(value); + register uint32x4_t valueVector2 asm ("q1") = valueVector1; + while (dest != neonEnd) { + asm volatile ( + "vst2.32 { d0, d1, d2, d3 }, [%[DST]] !\n\t" + "vst2.32 { d0, d1, d2, d3 }, [%[DST]] !\n\t" + : [DST]"+r" (dest) + : [VALUE1]"w"(valueVector1), [VALUE2]"w"(valueVector2) + : "memory" + ); + } + } + + switch (epilogueSize) + { + case 15: *dest++ = value; + case 14: *dest++ = value; + case 13: *dest++ = value; + case 12: *dest++ = value; + case 11: *dest++ = value; + case 10: *dest++ = value; + case 9: *dest++ = value; + case 8: *dest++ = value; + case 7: *dest++ = value; + case 6: *dest++ = value; + case 5: *dest++ = value; + case 4: *dest++ = value; + case 3: *dest++ = value; + case 2: *dest++ = value; + case 1: *dest++ = value; + } +} + static inline uint16x8_t qvdiv_255_u16(uint16x8_t x, uint16x8_t half) { // result = (x + (x >> 8) + 0x80) >> 8 @@ -622,6 +660,61 @@ void QT_FASTCALL comp_func_solid_SourceOver_neon(uint *destPixels, int length, u } } +void QT_FASTCALL comp_func_Plus_neon(uint *dst, const uint *src, int length, uint const_alpha) +{ + if (const_alpha == 255) { + uint *const end = dst + length; + uint *const neonEnd = end - 3; + + while (dst < neonEnd) { + asm volatile ( + "vld2.8 { d0, d1 }, [%[SRC]] !\n\t" + "vld2.8 { d2, d3 }, [%[DST]]\n\t" + "vqadd.u8 q0, q0, q1\n\t" + "vst2.8 { d0, d1 }, [%[DST]] !\n\t" + : [DST]"+r" (dst), [SRC]"+r" (src) + : + : "memory", "d0", "d1", "d2", "d3", "q0", "q1" + ); + } + + while (dst != end) { + *dst = comp_func_Plus_one_pixel(*dst, *src); + ++dst; + ++src; + } + } else { + int x = 0; + const int one_minus_const_alpha = 255 - const_alpha; + const uint16x8_t constAlphaVector = vdupq_n_u16(const_alpha); + const uint16x8_t oneMinusconstAlphaVector = vdupq_n_u16(one_minus_const_alpha); + + const uint16x8_t half = vdupq_n_u16(0x80); + for (; x < length - 3; x += 4) { + const uint32x4_t src32 = vld1q_u32((uint32_t *)&src[x]); + const uint8x16_t src8 = vreinterpretq_u8_u32(src32); + uint8x16_t dst8 = vld1q_u8((uint8_t *)&dst[x]); + uint8x16_t result = vqaddq_u8(dst8, src8); + + uint16x8_t result_low = vmovl_u8(vget_low_u8(result)); + uint16x8_t result_high = vmovl_u8(vget_high_u8(result)); + + uint16x8_t dst_low = vmovl_u8(vget_low_u8(dst8)); + uint16x8_t dst_high = vmovl_u8(vget_high_u8(dst8)); + + result_low = qvinterpolate_pixel_255(result_low, constAlphaVector, dst_low, oneMinusconstAlphaVector, half); + result_high = qvinterpolate_pixel_255(result_high, constAlphaVector, dst_high, oneMinusconstAlphaVector, half); + + const uint32x2_t result32_low = vreinterpret_u32_u8(vmovn_u16(result_low)); + const uint32x2_t result32_high = vreinterpret_u32_u8(vmovn_u16(result_high)); + vst1q_u32((uint32_t *)&dst[x], vcombine_u32(result32_low, result32_high)); + } + + for (; x < length; ++x) + dst[x] = comp_func_Plus_one_pixel_const_alpha(dst[x], src[x], const_alpha, one_minus_const_alpha); + } +} + static const int tileSize = 32; extern "C" void qt_rotate90_16_neon(quint16 *dst, const quint16 *src, int sstride, int dstride, int count); diff --git a/src/gui/painting/qdrawhelper_neon_p.h b/src/gui/painting/qdrawhelper_neon_p.h index cd2dbfc..451edbc 100644 --- a/src/gui/painting/qdrawhelper_neon_p.h +++ b/src/gui/painting/qdrawhelper_neon_p.h @@ -120,6 +120,7 @@ void qt_transform_image_rgb16_on_rgb16_neon(uchar *destPixels, int dbpl, const QTransform &targetRectTransform, int const_alpha); +void qt_memfill32_neon(quint32 *dest, quint32 value, int count); void qt_memrotate90_16_neon(const uchar *srcPixels, int w, int h, int sbpl, uchar *destPixels, int dbpl); void qt_memrotate270_16_neon(const uchar *srcPixels, int w, int h, int sbpl, uchar *destPixels, int dbpl); @@ -131,6 +132,7 @@ void QT_FASTCALL qt_destStoreRGB16_neon(QRasterBuffer *rasterBuffer, int x, int y, const uint *buffer, int length); void QT_FASTCALL comp_func_solid_SourceOver_neon(uint *destPixels, int length, uint color, uint const_alpha); +void QT_FASTCALL comp_func_Plus_neon(uint *dst, const uint *src, int length, uint const_alpha); #endif // QT_HAVE_NEON diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h index d04c70d..75f42a0 100644 --- a/src/gui/painting/qdrawhelper_p.h +++ b/src/gui/painting/qdrawhelper_p.h @@ -1944,6 +1944,30 @@ const uint qt_bayer_matrix[16][16] = { ((((argb >> 24) * alpha) >> 8) << 24) | (argb & 0x00ffffff) +#if QT_POINTER_SIZE == 8 // 64-bit versions +#define AMIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) +#define MIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) +#else // 32 bits +// The mask for alpha can overflow over 32 bits +#define AMIX(mask) quint32(qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) +#define MIX(mask) (qMin(((quint32(s)&mask) + (quint32(d)&mask)), quint32(mask))) +#endif + +inline int comp_func_Plus_one_pixel_const_alpha(uint d, const uint s, const uint const_alpha, const uint one_minus_const_alpha) +{ + const int result = (AMIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); + return INTERPOLATE_PIXEL_255(result, const_alpha, d, one_minus_const_alpha); +} + +inline int comp_func_Plus_one_pixel(uint d, const uint s) +{ + const int result = (AMIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); + return result; +} + +#undef MIX +#undef AMIX + // prototypes of all the composition functions void QT_FASTCALL comp_func_SourceOver(uint *dest, const uint *src, int length, uint const_alpha); void QT_FASTCALL comp_func_DestinationOver(uint *dest, const uint *src, int length, uint const_alpha); diff --git a/src/gui/painting/qdrawhelper_sse2.cpp b/src/gui/painting/qdrawhelper_sse2.cpp index 22c0384..30454af 100644 --- a/src/gui/painting/qdrawhelper_sse2.cpp +++ b/src/gui/painting/qdrawhelper_sse2.cpp @@ -161,22 +161,6 @@ void QT_FASTCALL comp_func_SourceOver_sse2(uint *destPixels, const uint *srcPixe } } -inline int comp_func_Plus_one_pixel_const_alpha(uint d, const uint s, const uint const_alpha, const uint one_minus_const_alpha) -{ -#define MIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) - const int result = (MIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); -#undef MIX - return INTERPOLATE_PIXEL_255(result, const_alpha, d, one_minus_const_alpha); -} - -inline int comp_func_Plus_one_pixel(uint d, const uint s) -{ -#define MIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) - const int result = (MIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); -#undef MIX - return result; -} - void QT_FASTCALL comp_func_Plus_sse2(uint *dst, const uint *src, int length, uint const_alpha) { int x = 0; diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index be90006..ee590a4 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -696,9 +696,9 @@ void QPainterPrivate::updateEmulationSpecifier(QPainterState *s) skip = false; - QBrush penBrush = s->pen.brush(); - Qt::BrushStyle brushStyle = s->brush.style(); - Qt::BrushStyle penBrushStyle = penBrush.style(); + QBrush penBrush = (qpen_style(s->pen) == Qt::NoPen) ? QBrush(Qt::NoBrush) : qpen_brush(s->pen); + Qt::BrushStyle brushStyle = qbrush_style(s->brush); + Qt::BrushStyle penBrushStyle = qbrush_style(penBrush); alpha = (penBrushStyle != Qt::NoBrush && (penBrushStyle < Qt::LinearGradientPattern && penBrush.color().alpha() != 255) && !penBrush.isOpaque()) @@ -5907,7 +5907,7 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText // Recreate the layout of the static text because the matrix or font has changed if (staticTextNeedsReinit) - staticText_d->init(); + staticText_d->init(); if (transformedPosition != staticText_d->position) { // Translate to actual position QFixed fx = QFixed::fromReal(transformedPosition.x()); diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 194c5f3..3f758b1 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -1093,6 +1093,18 @@ const QVector<QRgb> &QFontEngine::grayPalette() return *qt_grayPalette(); } +QFixed QFontEngine::lastRightBearing(const QGlyphLayout &glyphs, bool round) +{ + if (glyphs.numGlyphs >= 1) { + glyph_t glyph = glyphs.glyphs[glyphs.numGlyphs - 1]; + glyph_metrics_t gi = boundingBox(glyph); + if (gi.isValid()) + return round ? QFixed(qRound(gi.xoff - gi.x - gi.width)) + : QFixed(gi.xoff - gi.x - gi.width); + } + return 0; +} + // ------------------------------------------------------------------ // The box font engine // ------------------------------------------------------------------ diff --git a/src/gui/text/qfontengine_mac.mm b/src/gui/text/qfontengine_mac.mm index 91b6082..bdf3848 100644 --- a/src/gui/text/qfontengine_mac.mm +++ b/src/gui/text/qfontengine_mac.mm @@ -455,12 +455,13 @@ bool QCoreTextFontEngine::stringToCMap(const QChar *, int, QGlyphLayout *, int * glyph_metrics_t QCoreTextFontEngine::boundingBox(const QGlyphLayout &glyphs) { QFixed w; + bool round = fontDef.styleStrategy & QFont::ForceIntegerMetrics; + for (int i = 0; i < glyphs.numGlyphs; ++i) { - w += (fontDef.styleStrategy & QFont::ForceIntegerMetrics) - ? glyphs.effectiveAdvance(i).round() - : glyphs.effectiveAdvance(i); + w += round ? glyphs.effectiveAdvance(i).round() + : glyphs.effectiveAdvance(i); } - return glyph_metrics_t(0, -(ascent()), w, ascent()+descent(), w, 0); + return glyph_metrics_t(0, -(ascent()), w - lastRightBearing(glyphs, round), ascent()+descent(), w, 0); } glyph_metrics_t QCoreTextFontEngine::boundingBox(glyph_t glyph) { @@ -1480,12 +1481,12 @@ void QFontEngineMac::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFla glyph_metrics_t QFontEngineMac::boundingBox(const QGlyphLayout &glyphs) { QFixed w; + bool round = fontDef.styleStrategy & QFont::ForceIntegerMetrics; for (int i = 0; i < glyphs.numGlyphs; ++i) { - w += (fontDef.styleStrategy & QFont::ForceIntegerMetrics) - ? glyphs.effectiveAdvance(i).round() - : glyphs.effectiveAdvance(i); + w += round ? glyphs.effectiveAdvance(i).round() + : glyphs.effectiveAdvance(i); } - return glyph_metrics_t(0, -(ascent()), w, ascent()+descent(), w, 0); + return glyph_metrics_t(0, -(ascent()), w - lastRightBearing(glyphs, round), ascent()+descent(), w, 0); } glyph_metrics_t QFontEngineMac::boundingBox(glyph_t glyph) diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index 922acfb..3b91cd8 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -253,6 +253,7 @@ public: protected: static const QVector<QRgb> &grayPalette(); + QFixed lastRightBearing(const QGlyphLayout &glyphs, bool round = false); private: struct GlyphCacheEntry { diff --git a/src/gui/text/qfontengine_qws.cpp b/src/gui/text/qfontengine_qws.cpp index a7a95d0..decc89c 100644 --- a/src/gui/text/qfontengine_qws.cpp +++ b/src/gui/text/qfontengine_qws.cpp @@ -557,7 +557,7 @@ glyph_metrics_t QFontEngineQPF1::boundingBox(const QGlyphLayout &glyphs) QFixed w = 0; for (int i = 0; i < glyphs.numGlyphs; ++i) w += glyphs.effectiveAdvance(i); - return glyph_metrics_t(0, -ascent(), w, ascent()+descent()+1, w, 0); + return glyph_metrics_t(0, -ascent(), w - lastRightBearing(glyphs), ascent()+descent()+1, w, 0); } glyph_metrics_t QFontEngineQPF1::boundingBox(glyph_t glyph) diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp index 52a1fe7..2cc3f50 100644 --- a/src/gui/text/qfontengine_s60.cpp +++ b/src/gui/text/qfontengine_s60.cpp @@ -345,7 +345,7 @@ glyph_metrics_t QFontEngineS60::boundingBox(const QGlyphLayout &glyphs) for (int i = 0; i < glyphs.numGlyphs; ++i) w += glyphs.effectiveAdvance(i); - return glyph_metrics_t(0, -ascent(), w, ascent()+descent()+1, w, 0); + return glyph_metrics_t(0, -ascent(), w - lastRightBearing(glyphs), ascent()+descent()+1, w, 0); } glyph_metrics_t QFontEngineS60::boundingBox_const(glyph_t glyph) const diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp index a805612..4bed2b5 100644 --- a/src/gui/text/qfontengine_win.cpp +++ b/src/gui/text/qfontengine_win.cpp @@ -487,7 +487,7 @@ glyph_metrics_t QFontEngineWin::boundingBox(const QGlyphLayout &glyphs) for (int i = 0; i < glyphs.numGlyphs; ++i) w += glyphs.effectiveAdvance(i); - return glyph_metrics_t(0, -tm.tmAscent, w, tm.tmHeight, w, 0); + return glyph_metrics_t(0, -tm.tmAscent, w - lastRightBearing(glyphs), tm.tmHeight, w, 0); } #ifndef Q_WS_WINCE diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 8d6dd6c..c30091e 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1646,7 +1646,6 @@ glyph_metrics_t QTextEngine::boundingBox(int from, int len) const for (int i = 0; i < layoutData->items.size(); i++) { const QScriptItem *si = layoutData->items.constData() + i; - QFontEngine *fe = fontEngine(*si); int pos = si->position; int ilen = length(i); @@ -1676,6 +1675,7 @@ glyph_metrics_t QTextEngine::boundingBox(int from, int len) const while (charFrom < ilen && logClusters[charFrom] == glyphStart) charFrom++; if (charFrom < ilen) { + QFontEngine *fe = fontEngine(*si); glyphStart = logClusters[charFrom]; int charEnd = from + len - 1 - pos; if (charEnd >= ilen) @@ -1694,11 +1694,6 @@ glyph_metrics_t QTextEngine::boundingBox(int from, int len) const gm.yoff += m.yoff; } } - - glyph_t glyph = glyphs.glyphs[logClusters[ilen - 1]]; - glyph_metrics_t gi = fe->boundingBox(glyph); - if (gi.isValid()) - gm.width -= qRound(gi.xoff - gi.x - gi.width); } } return gm; diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp index d027b91..7f0c6c8 100644 --- a/src/gui/widgets/qlinecontrol.cpp +++ b/src/gui/widgets/qlinecontrol.cpp @@ -464,6 +464,8 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event) if (a.type == QInputMethodEvent::Cursor) { m_preeditCursor = a.start; m_hideCursor = !a.length; + if (m_hideCursor) + setCursorBlinkPeriod(0); } else if (a.type == QInputMethodEvent::TextFormat) { QTextCharFormat f = qvariant_cast<QTextFormat>(a.value).toCharFormat(); if (f.isValid()) { @@ -527,7 +529,7 @@ void QLineControl::draw(QPainter *painter, const QPoint &offset, const QRect &cl int cursor = m_cursor; if (m_preeditCursor != -1) cursor += m_preeditCursor; - if(!m_blinkPeriod || m_blinkStatus) + if (!m_hideCursor && (!m_blinkPeriod || m_blinkStatus)) m_textLayout.drawCursor(painter, offset, cursor, m_cursorWidth); } } diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 837cf66..b35c318 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -201,7 +201,7 @@ static void ensureInitialized() deleteResource()) \value CustomOperation custom operation (created with - sendCustomRequest()) + sendCustomRequest()) \since 4.7 \omitvalue UnknownOperation diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 91265f3..f18c629 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -1966,6 +1966,11 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri QMutexLocker locker(&globalData()->mutex); const QSslConfigurationPrivate *global = globalData()->config.constData(); + if (!global) { + ptr = 0; + return; + } + ptr->ref = 1; ptr->peerCertificate = global->peerCertificate; ptr->peerCertificateChain = global->peerCertificateChain; diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp index d545440..bf19a88 100644 --- a/src/svg/qsvghandler.cpp +++ b/src/svg/qsvghandler.cpp @@ -74,7 +74,7 @@ QT_BEGIN_NAMESPACE static const char *qt_inherit_text = "inherit"; #define QT_INHERIT QLatin1String(qt_inherit_text) -Q_DECL_IMPORT double qstrtod(const char *s00, char const **se, bool *ok); +Q_CORE_EXPORT double qstrtod(const char *s00, char const **se, bool *ok); // ======== duplicated from qcolor_p diff --git a/tests/auto/declarative/qdeclarativebehaviors/data/qtbug12295.qml b/tests/auto/declarative/qdeclarativebehaviors/data/qtbug12295.qml index 804559c..d41add3 100644 --- a/tests/auto/declarative/qdeclarativebehaviors/data/qtbug12295.qml +++ b/tests/auto/declarative/qdeclarativebehaviors/data/qtbug12295.qml @@ -11,7 +11,7 @@ Rectangle { width: 100 height: 100 Behavior on x { - NumberAnimation {} + NumberAnimation { duration: 500 } } } } diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index 896d69e..d4d8bf6 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -655,6 +655,15 @@ void tst_QDeclarativeGridView::currentIndex() gridview->setFlow(QDeclarativeGridView::TopToBottom); + qApp->setActiveWindow(canvas); +#ifdef Q_WS_X11 + // to be safe and avoid failing setFocus with window managers + qt_x11_wait_for_window_manager(canvas); +#endif + QTRY_VERIFY(canvas->hasFocus()); + QTRY_VERIFY(canvas->scene()->hasFocus()); + qApp->processEvents(); + QTest::keyClick(canvas, Qt::Key_Right); QCOMPARE(gridview->currentIndex(), 5); diff --git a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp index 6d5a357..d0afc8a 100644 --- a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp +++ b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp @@ -389,6 +389,7 @@ void tst_qdeclarativeimageprovider::threadTest() } provider->ok = true; provider->cond.wakeAll(); + QTest::qWait(250); foreach(QDeclarativeImage *img, images) { TRY_WAIT(img->status() == QDeclarativeImage::Ready); } diff --git a/tests/auto/declarative/qdeclarativelanguage/data/DontDoubleCallClassBeginItem.qml b/tests/auto/declarative/qdeclarativelanguage/data/DontDoubleCallClassBeginItem.qml new file mode 100644 index 0000000..1f8eac8 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/DontDoubleCallClassBeginItem.qml @@ -0,0 +1,4 @@ +import Test 1.0 + +MyParserStatus { +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dontDoubleCallClassBegin.qml b/tests/auto/declarative/qdeclarativelanguage/data/dontDoubleCallClassBegin.qml new file mode 100644 index 0000000..df048cc --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/dontDoubleCallClassBegin.qml @@ -0,0 +1,5 @@ +import Qt 4.7 + +Item { + property QtObject object: DontDoubleCallClassBeginItem {} +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/nestedErrors.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/nestedErrors.errors.txt index 6e11786..53e752b 100644 --- a/tests/auto/declarative/qdeclarativelanguage/data/nestedErrors.errors.txt +++ b/tests/auto/declarative/qdeclarativelanguage/data/nestedErrors.errors.txt @@ -1,2 +1,2 @@ -4:5:Unable to create type NestedErrorsType +4:5:Type NestedErrorsType unavailable 4:8:Invalid property assignment: number expected diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp b/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp index 5d87404..20cd976 100644 --- a/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp @@ -50,6 +50,7 @@ void registerTypes() qmlRegisterType<MyDotPropertyObject>("Test",1,0,"MyDotPropertyObject"); qmlRegisterType<MyNamespace::MyNamespacedType>("Test",1,0,"MyNamespacedType"); qmlRegisterType<MyNamespace::MySecondNamespacedType>("Test",1,0,"MySecondNamespacedType"); + qmlRegisterType<MyParserStatus>("Test",1,0,"MyParserStatus"); qmlRegisterType<MyGroupedObject>(); qmlRegisterCustomType<MyCustomParserType>("Test", 1, 0, "MyCustomParserType", new MyCustomParserTypeParser); diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.h b/tests/auto/declarative/qdeclarativelanguage/testtypes.h index acbe219..19790f1 100644 --- a/tests/auto/declarative/qdeclarativelanguage/testtypes.h +++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.h @@ -170,7 +170,6 @@ private: QML_DECLARE_TYPE(MyQmlObject) QML_DECLARE_TYPEINFO(MyQmlObject, QML_HAS_ATTACHED_PROPERTIES) - class MyGroupedObject : public QObject { Q_OBJECT @@ -576,6 +575,22 @@ public: void setCustomData(QObject *, const QByteArray &) {} }; +class MyParserStatus : public QObject, public QDeclarativeParserStatus +{ + Q_OBJECT +public: + MyParserStatus() : m_cbc(0), m_ccc(0) {} + + int classBeginCount() const { return m_cbc; } + int componentCompleteCount() const { return m_ccc; } + + virtual void classBegin() { m_cbc++; } + virtual void componentComplete() { m_ccc++; } +private: + int m_cbc; + int m_ccc; +}; + void registerTypes(); #endif // TESTTYPES_H diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp index fcdf926..b43fbf4 100644 --- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp @@ -126,6 +126,7 @@ private slots: void scriptString(); void defaultPropertyListOrder(); void declaredPropertyValues(); + void dontDoubleCallClassBegin(); void basicRemote_data(); void basicRemote(); @@ -1192,6 +1193,20 @@ void tst_qdeclarativelanguage::declaredPropertyValues() VERIFY_ERRORS(0); } +void tst_qdeclarativelanguage::dontDoubleCallClassBegin() +{ + QDeclarativeComponent component(&engine, TEST_FILE("dontDoubleCallClassBegin.qml")); + QObject *o = component.create(); + QVERIFY(o); + + MyParserStatus *o2 = qobject_cast<MyParserStatus *>(qvariant_cast<QObject *>(o->property("object"))); + QVERIFY(o2); + QCOMPARE(o2->classBeginCount(), 1); + QCOMPARE(o2->componentCompleteCount(), 1); + + delete o; +} + // Check that first child of qml is of given type. Empty type insists on error. void tst_qdeclarativelanguage::testType(const QString& qml, const QString& type, const QString& expectederror) { diff --git a/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml b/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml index 3b2db5e..d5d3365 100644 --- a/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml +++ b/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml @@ -4,6 +4,12 @@ Rectangle { width: 240 height: 320 color: "#ffffff" + + property real hr: list.visibleArea.heightRatio + function heightRatio() { + return list.visibleArea.heightRatio + } + function checkProperties() { testObject.error = false; if (list.model != testModel) { diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index bf4754d..377a9e5 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -98,6 +98,7 @@ private slots: void manualHighlight(); void QTBUG_11105(); void footer(); + void resizeView(); private: template <class T> void items(); @@ -1591,6 +1592,48 @@ void tst_QDeclarativeListView::footer() QTRY_COMPARE(footer->y(), 0.0); } +void tst_QDeclarativeListView::resizeView() +{ + QDeclarativeView *canvas = createView(); + + TestModel model; + for (int i = 0; i < 40; i++) + model.addItem("Item" + QString::number(i), ""); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + TestObject *testObject = new TestObject; + ctxt->setContextProperty("testObject", testObject); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/listviewtest.qml")); + qApp->processEvents(); + + QDeclarativeListView *listview = findItem<QDeclarativeListView>(canvas->rootObject(), "list"); + QTRY_VERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + // Confirm items positioned correctly + int itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count(); + for (int i = 0; i < model.count() && i < itemCount; ++i) { + QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QTRY_VERIFY(item); + QTRY_COMPARE(item->y(), i*20.); + } + + QVariant heightRatio; + QMetaObject::invokeMethod(canvas->rootObject(), "heightRatio", Q_RETURN_ARG(QVariant, heightRatio)); + QCOMPARE(heightRatio.toReal(), 0.4); + + listview->setHeight(200); + + QMetaObject::invokeMethod(canvas->rootObject(), "heightRatio", Q_RETURN_ARG(QVariant, heightRatio)); + QCOMPARE(heightRatio.toReal(), 0.25); +} + void tst_QDeclarativeListView::qListModelInterface_items() { items<TestModel>(); diff --git a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp index b0b7a3b..3baf848 100644 --- a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp +++ b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp @@ -146,7 +146,7 @@ void tst_QDeclarativeLoader::component() void tst_QDeclarativeLoader::invalidUrl() { - QTest::ignoreMessage(QtWarningMsg, QString("<Unknown File>: File error for URL " + QUrl::fromLocalFile(SRCDIR "/data/IDontExist.qml").toString()).toUtf8().constData()); + QTest::ignoreMessage(QtWarningMsg, QString(QUrl::fromLocalFile(SRCDIR "/data/IDontExist.qml").toString() + ": File not found").toUtf8().constData()); QDeclarativeComponent component(&engine); component.setData(QByteArray("import Qt 4.7\nLoader { source: \"IDontExist.qml\" }"), TEST_FILE("")); @@ -508,7 +508,7 @@ void tst_QDeclarativeLoader::failNetworkRequest() QVERIFY(server.isValid()); server.serveDirectory(SRCDIR "/data"); - QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: Network error for URL http://127.0.0.1:14450/IDontExist.qml"); + QTest::ignoreMessage(QtWarningMsg, "http://127.0.0.1:14450/IDontExist.qml: File not found"); QDeclarativeComponent component(&engine); component.setData(QByteArray("import Qt 4.7\nLoader { property int did_load: 123; source: \"http://127.0.0.1:14450/IDontExist.qml\"; onLoaded: did_load=456 }"), QUrl::fromLocalFile("http://127.0.0.1:14450/dummy.qml")); diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 56a3121..84f4230 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -777,7 +777,7 @@ void tst_qdeclarativetextedit::delegateLoading_data() // import installed QTest::newRow("pass") << "cursorHttpTestPass.qml" << ""; - QTest::newRow("fail1") << "cursorHttpTestFail1.qml" << "<Unknown File>: Network error for URL http://localhost:42332/FailItem.qml "; + QTest::newRow("fail1") << "cursorHttpTestFail1.qml" << "http://localhost:42332/FailItem.qml: Remote host closed the connection "; QTest::newRow("fail2") << "cursorHttpTestFail2.qml" << "http://localhost:42332/ErrItem.qml:4:5: Fungus is not a type "; } diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml b/tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml index a798f77..c5e945a 100644 --- a/tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml +++ b/tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml @@ -4,12 +4,16 @@ ListView { width: 100 height: 100 anchors.fill: parent - model: myModel - delegate: Component { - Rectangle { - height: 25 - width: 100 - Text { objectName: "display"; text: display } + model: VisualDataModel { + id: visualModel + objectName: "visualModel" + model: myModel + delegate: Component { + Rectangle { + height: 25 + width: 100 + Text { objectName: "display"; text: display } + } } } } diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp index 3cd786f..95ef4fc 100644 --- a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp +++ b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp @@ -84,6 +84,7 @@ public: private slots: void rootIndex(); void updateLayout(); + void childChanged(); void objectListModel(); private: @@ -174,22 +175,82 @@ void tst_qdeclarativevisualdatamodel::updateLayout() QVERIFY(contentItem != 0); QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "display", 0); + QVERIFY(name); QCOMPARE(name->text(), QString("Row 1 Item")); name = findItem<QDeclarativeText>(contentItem, "display", 1); + QVERIFY(name); QCOMPARE(name->text(), QString("Row 2 Item")); name = findItem<QDeclarativeText>(contentItem, "display", 2); + QVERIFY(name); QCOMPARE(name->text(), QString("Row 3 Item")); model.invisibleRootItem()->sortChildren(0, Qt::DescendingOrder); name = findItem<QDeclarativeText>(contentItem, "display", 0); + QVERIFY(name); QCOMPARE(name->text(), QString("Row 3 Item")); name = findItem<QDeclarativeText>(contentItem, "display", 1); + QVERIFY(name); QCOMPARE(name->text(), QString("Row 2 Item")); name = findItem<QDeclarativeText>(contentItem, "display", 2); + QVERIFY(name); QCOMPARE(name->text(), QString("Row 1 Item")); } +void tst_qdeclarativevisualdatamodel::childChanged() +{ + QDeclarativeView view; + + QStandardItemModel model; + initStandardTreeModel(&model); + + view.rootContext()->setContextProperty("myModel", &model); + + view.setSource(QUrl::fromLocalFile(SRCDIR "/data/datalist.qml")); + + QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(view.rootObject()); + QVERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QVERIFY(contentItem != 0); + + QDeclarativeVisualDataModel *vdm = listview->findChild<QDeclarativeVisualDataModel*>("visualModel"); + vdm->setRootIndex(QVariant::fromValue(model.indexFromItem(model.item(1,0)))); + + QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "display", 0); + QVERIFY(name); + QCOMPARE(name->text(), QString("Row 2 Child Item")); + + model.item(1,0)->child(0,0)->setText("Row 2 updated child"); + + name = findItem<QDeclarativeText>(contentItem, "display", 0); + QVERIFY(name); + QCOMPARE(name->text(), QString("Row 2 updated child")); + + model.item(1,0)->appendRow(new QStandardItem(QLatin1String("Row 2 Child Item 2"))); + QTest::qWait(300); + + name = findItem<QDeclarativeText>(contentItem, "display", 1); + QVERIFY(name != 0); + QCOMPARE(name->text(), QString("Row 2 Child Item 2")); + + model.item(1,0)->takeRow(1); + name = findItem<QDeclarativeText>(contentItem, "display", 1); + QVERIFY(name == 0); + + vdm->setRootIndex(QVariant::fromValue(QModelIndex())); + QTest::qWait(300); + name = findItem<QDeclarativeText>(contentItem, "display", 0); + QVERIFY(name); + QCOMPARE(name->text(), QString("Row 1 Item")); + name = findItem<QDeclarativeText>(contentItem, "display", 1); + QVERIFY(name); + QCOMPARE(name->text(), QString("Row 2 Item")); + name = findItem<QDeclarativeText>(contentItem, "display", 2); + QVERIFY(name); + QCOMPARE(name->text(), QString("Row 3 Item")); +} + void tst_qdeclarativevisualdatamodel::objectListModel() { QDeclarativeView view; diff --git a/tests/auto/linguist/lconvert/data/test-refs.po b/tests/auto/linguist/lconvert/data/test-refs.po new file mode 100644 index 0000000..e149a38 --- /dev/null +++ b/tests/auto/linguist/lconvert/data/test-refs.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Language: de_DE\n" + +#: themer/kdmlabel.cpp:285 +#, no-c-format +msgctxt "date format" +msgid "%a %d %B" +msgstr "%a %d %B" + +#: foo.bar.baz +#, no-c-format +msgid "full java class name" +msgstr "" + +#: foo.car:123 monks:here file/gar.c:17:19 no:monks:here +#, no-c-format +msgid "some excessive locations" +msgstr "" diff --git a/tests/auto/linguist/lconvert/data/test20.ts b/tests/auto/linguist/lconvert/data/test20.ts index f042edf..0e38b4b 100644 --- a/tests/auto/linguist/lconvert/data/test20.ts +++ b/tests/auto/linguist/lconvert/data/test20.ts @@ -158,5 +158,14 @@ <comment>comment with | and ~ and so~</comment> <translation type="unfinished"></translation> </message> + <message> + <source>just something obsolete</source> + <translation type="obsolete">translated obsoletion</translation> + </message> + <message> + <source>something else obsolete</source> + <comment>comment with | and ~ and so~</comment> + <translation type="obsolete">another translated obsoletion</translation> + </message> </context> </TS> diff --git a/tests/auto/linguist/lconvert/tst_lconvert.cpp b/tests/auto/linguist/lconvert/tst_lconvert.cpp index 998f588..a3c29d8 100644 --- a/tests/auto/linguist/lconvert/tst_lconvert.cpp +++ b/tests/auto/linguist/lconvert/tst_lconvert.cpp @@ -317,6 +317,8 @@ void tst_lconvert::roundtrips_data() QTest::newRow("po-xliff-po (plural-2)") << "plural-2.po" << poXlfPo << noArgs; QTest::newRow("po-xliff-po (plural-3)") << "plural-3.po" << poXlfPo << noArgs; + QTest::newRow("po-ts-po (references)") << "test-refs.po" << poTsPo << noArgs; + QTest::newRow("ts20-ts11-ts20 (utf8)") << "codec-utf8.ts" << tsTs11Ts << noArgs; QTest::newRow("ts20-ts11-ts20 (cp1252)") << "codec-cp1252.ts" << tsTs11Ts << noArgs; QTest::newRow("ts20-ts11-ts20 (dual-encoding)") << "dual-encoding.ts" << tsTs11Ts << noArgs; diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp index e5628d1..ddc4f73 100644 --- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp +++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp @@ -172,6 +172,12 @@ private slots: void itemChangeEvents(); void itemSendGeometryPosChangesDeactivated(); + void fontPropagatesResolveToChildren(); + void fontPropagatesResolveToGrandChildren(); + void fontPropagatesResolveInParentChange(); + void fontPropagatesResolveViaNonWidget(); + void fontPropagatesResolveFromScene(); + // Task fixes void task236127_bspTreeIndexFails(); void task243004_setStyleCrash(); @@ -622,6 +628,192 @@ void tst_QGraphicsWidget::font() QCOMPARE(widget.font().family(), font.family()); } +void tst_QGraphicsWidget::fontPropagatesResolveToChildren() +{ + QGraphicsWidget *root = new QGraphicsWidget(); + QGraphicsWidget *child1 = new QGraphicsWidget(root); + + QGraphicsScene scene; + scene.addItem(root); + + QFont font; + font.setItalic(true); + root->setFont(font); + + QGraphicsWidget *child2 = new QGraphicsWidget(root); + QGraphicsWidget *child3 = new QGraphicsWidget(); + child3->setParentItem(root); + + QGraphicsView view; + view.setScene(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + QCOMPARE(font.resolve(), uint(QFont::StyleResolved)); + QCOMPARE(root->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child2->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child3->font().resolve(), uint(QFont::StyleResolved)); +} + +void tst_QGraphicsWidget::fontPropagatesResolveToGrandChildren() +{ + QGraphicsWidget *root = new QGraphicsWidget(); + QGraphicsWidget *child1 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild1 = new QGraphicsWidget(child1); + + QGraphicsScene scene; + scene.addItem(root); + + QFont font; + font.setItalic(true); + root->setFont(font); + + QGraphicsWidget *child2 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild2 = new QGraphicsWidget(child2); + QGraphicsWidget *grandChild3 = new QGraphicsWidget(child2); + + QGraphicsWidget *child3 = new QGraphicsWidget(); + QGraphicsWidget *grandChild4 = new QGraphicsWidget(child3); + QGraphicsWidget *grandChild5 = new QGraphicsWidget(child3); + child3->setParentItem(root); + grandChild5->setParentItem(child3); + + QGraphicsView view; + view.setScene(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + QCOMPARE(font.resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild2->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild3->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild4->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild5->font().resolve(), uint(QFont::StyleResolved)); +} + +void tst_QGraphicsWidget::fontPropagatesResolveViaNonWidget() +{ + QGraphicsWidget *root = new QGraphicsWidget(); + QGraphicsPixmapItem *child1 = new QGraphicsPixmapItem(root); + QGraphicsWidget *grandChild1 = new QGraphicsWidget(child1); + + QGraphicsScene scene; + scene.addItem(root); + + QFont font; + font.setItalic(true); + root->setFont(font); + + QGraphicsPixmapItem *child2 = new QGraphicsPixmapItem(root); + QGraphicsWidget *grandChild2 = new QGraphicsWidget(child2); + QGraphicsWidget *grandChild3 = new QGraphicsWidget(child2); + + QGraphicsPixmapItem *child3 = new QGraphicsPixmapItem(); + QGraphicsWidget *grandChild4 = new QGraphicsWidget(child3); + QGraphicsWidget *grandChild5 = new QGraphicsWidget(child3); + child3->setParentItem(root); + grandChild5->setParentItem(child3); + + QGraphicsView view; + view.setScene(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + QCOMPARE(font.resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild2->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild3->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild4->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild5->font().resolve(), uint(QFont::StyleResolved)); +} + +void tst_QGraphicsWidget::fontPropagatesResolveFromScene() +{ + QGraphicsWidget *root = new QGraphicsWidget(); + QGraphicsWidget *child1 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild1 = new QGraphicsWidget(child1); + + QGraphicsScene scene; + scene.addItem(root); + + QFont font; + font.setItalic(true); + scene.setFont(font); + + QGraphicsWidget *child2 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild2 = new QGraphicsWidget(child2); + QGraphicsWidget *grandChild3 = new QGraphicsWidget(child2); + + QGraphicsWidget *child3 = new QGraphicsWidget(); + QGraphicsWidget *grandChild4 = new QGraphicsWidget(child3); + QGraphicsWidget *grandChild5 = new QGraphicsWidget(child3); + child3->setParentItem(root); + grandChild5->setParentItem(child3); + + QGraphicsView view; + view.setScene(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + QCOMPARE(font.resolve(), uint(QFont::StyleResolved)); + QCOMPARE(root->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child2->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child3->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild2->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild3->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild4->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild5->font().resolve(), uint(QFont::StyleResolved)); +} + +void tst_QGraphicsWidget::fontPropagatesResolveInParentChange() +{ + QGraphicsWidget *root = new QGraphicsWidget(); + + QGraphicsWidget *child1 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild1 = new QGraphicsWidget(child1); + + QGraphicsWidget *child2 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild2 = new QGraphicsWidget(child2); + + QGraphicsScene scene; + scene.addItem(root); + + QFont italicFont; + italicFont.setItalic(true); + child1->setFont(italicFont); + + QFont boldFont; + boldFont.setBold(true); + child2->setFont(boldFont); + + QVERIFY(grandChild1->font().italic()); + QVERIFY(!grandChild1->font().bold()); + QVERIFY(!grandChild2->font().italic()); + QVERIFY(grandChild2->font().bold()); + + QCOMPARE(grandChild1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild2->font().resolve(), uint(QFont::WeightResolved)); + + grandChild2->setParentItem(child1); + + QGraphicsView view; + view.setScene(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + QVERIFY(grandChild1->font().italic()); + QVERIFY(!grandChild1->font().bold()); + QVERIFY(grandChild2->font().italic()); + QVERIFY(!grandChild2->font().bold()); + + QCOMPARE(grandChild1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild2->font().resolve(), uint(QFont::StyleResolved)); + +} + void tst_QGraphicsWidget::fontPropagation() { QGraphicsWidget *root = new QGraphicsWidget; @@ -728,11 +920,12 @@ void tst_QGraphicsWidget::fontPropagationWidgetItemWidget() widget->setFont(font); QCOMPARE(widget2->font().pointSize(), 43); - QCOMPARE(widget2->font().resolve(), QFont().resolve()); + QCOMPARE(widget2->font().resolve(), uint(QFont::SizeResolved)); widget->setFont(QFont()); QCOMPARE(widget2->font().pointSize(), qApp->font().pointSize()); + QCOMPARE(widget2->font().resolve(), QFont().resolve()); } void tst_QGraphicsWidget::fontPropagationSceneChange() diff --git a/tests/auto/qpen/tst_qpen.cpp b/tests/auto/qpen/tst_qpen.cpp index 149f462..b0c2cad 100644 --- a/tests/auto/qpen/tst_qpen.cpp +++ b/tests/auto/qpen/tst_qpen.cpp @@ -213,6 +213,5 @@ void tst_QPen::stream() QCOMPARE(pen, cmp); } - QTEST_APPLESS_MAIN(tst_QPen) #include "tst_qpen.moc" diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index 6c1dd8f..d6a7a01 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -183,6 +183,7 @@ private slots: void ignoreSslErrorsListWithSlot(); void readFromClosedSocket(); void writeBigChunk(); + void setEmptyDefaultConfiguration(); static void exitLoop() { @@ -1835,6 +1836,21 @@ void tst_QSslSocket::writeBigChunk() socket->close(); } +void tst_QSslSocket::setEmptyDefaultConfiguration() +{ + // used to produce a crash in QSslConfigurationPrivate::deepCopyDefaultConfiguration, QTBUG-13265 + + if (!QSslSocket::supportsSsl()) + return; + + QSslConfiguration emptyConf; + QSslConfiguration::setDefaultConfiguration(emptyConf); + + QSslSocketPtr socket = newSocket(); + socket->connectToHostEncrypted(QtNetworkSettings::serverName(), 443); + +} + #endif // QT_NO_OPENSSL QTEST_MAIN(tst_QSslSocket) diff --git a/tools/linguist/shared/po.cpp b/tools/linguist/shared/po.cpp index a692332..3fd05ee 100644 --- a/tools/linguist/shared/po.cpp +++ b/tools/linguist/shared/po.cpp @@ -50,8 +50,6 @@ #include <ctype.h> -#define MAGIC_OBSOLETE_REFERENCE "Obsolete_PO_entries" - // Uncomment if you wish to hard wrap long lines in .po files. Note that this // affects only msg strings, not comments. //#define HARD_WRAP_LONG_WORDS @@ -555,15 +553,26 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) TranslatorMessage msg; msg.setContext(codec->toUnicode(item.context)); if (!item.references.isEmpty()) { + QString xrefs; foreach (const QString &ref, codec->toUnicode(item.references).split( QRegExp(QLatin1String("\\s")), QString::SkipEmptyParts)) { - int pos = ref.lastIndexOf(QLatin1Char(':')); - if (pos != -1) - msg.addReference(ref.left(pos), ref.mid(pos + 1).toInt()); + int pos = ref.indexOf(QLatin1Char(':')); + int lpos = ref.lastIndexOf(QLatin1Char(':')); + if (pos != -1 && pos == lpos) { + bool ok; + int lno = ref.mid(pos + 1).toInt(&ok); + if (ok) { + msg.addReference(ref.left(pos), lno); + continue; + } + } + if (!xrefs.isEmpty()) + xrefs += QLatin1Char(' '); + xrefs += ref; } - } else if (isObsolete) { - msg.setFileName(QLatin1String(MAGIC_OBSOLETE_REFERENCE)); + if (!xrefs.isEmpty()) + item.extra[QLatin1String("po-references")] = xrefs; } msg.setId(codec->toUnicode(item.id)); msg.setSourceText(codec->toUnicode(item.msgId)); @@ -660,6 +669,8 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) item.isPlural = true; } else if (line.startsWith("#~ msgctxt ")) { item.tscomment = slurpEscapedString(lines, l, 11, "#~ ", cd); + if (qtContexts) + splitContext(&item.tscomment, &item.context); } else { cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'")) .arg(l + 1).arg(codec->toUnicode(lines[l]))); @@ -773,11 +784,14 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &cd) if (!msg.id().isEmpty()) out << QLatin1String("#. ts-id ") << msg.id() << '\n'; - if (!msg.fileName().isEmpty() && msg.fileName() != QLatin1String(MAGIC_OBSOLETE_REFERENCE)) { + QString xrefs = msg.extra(QLatin1String("po-references")); + if (!msg.fileName().isEmpty() || !xrefs.isEmpty()) { QStringList refs; foreach (const TranslatorMessage::Reference &ref, msg.allReferences()) refs.append(QString(QLatin1String("%2:%1")) .arg(ref.lineNumber()).arg(ref.fileName())); + if (!xrefs.isEmpty()) + refs << xrefs; out << poWrappedEscapedLines(QLatin1String("#:"), true, refs.join(QLatin1String(" "))); } diff --git a/tools/linguist/shared/xliff.cpp b/tools/linguist/shared/xliff.cpp index 6411426..70724ef 100644 --- a/tools/linguist/shared/xliff.cpp +++ b/tools/linguist/shared/xliff.cpp @@ -53,6 +53,11 @@ #include <QtXml/QXmlParseException> +// The string value is historical and reflects the main purpose: Keeping +// obsolete entries separate from the magic file message (which both have +// no location information, but typically reside at opposite ends of the file). +#define MAGIC_OBSOLETE_REFERENCE "Obsolete_PO_entries" + QT_BEGIN_NAMESPACE /** @@ -692,6 +697,9 @@ bool XLIFFHandler::finalizeMessage(bool isPlural) m_cd.appendError(QLatin1String("XLIFF syntax error: Message without source string.")); return false; } + if (m_type == TranslatorMessage::Obsolete && m_refs.size() == 1 + && m_refs.at(0).fileName() == QLatin1String(MAGIC_OBSOLETE_REFERENCE)) + m_refs.clear(); TranslatorMessage msg(m_context, m_sources[0], m_comment, QString(), QString(), -1, m_translations, m_type, isPlural); @@ -761,12 +769,15 @@ bool saveXLIFF(const Translator &translator, QIODevice &dev, ConversionData &cd) QHash<QString, QList<QString> > contextOrder; QList<QString> fileOrder; foreach (const TranslatorMessage &msg, translator.messages()) { - QHash<QString, QList<TranslatorMessage> > &file = messageOrder[msg.fileName()]; + QString fn = msg.fileName(); + if (fn.isEmpty() && msg.type() == TranslatorMessage::Obsolete) + fn = QLatin1String(MAGIC_OBSOLETE_REFERENCE); + QHash<QString, QList<TranslatorMessage> > &file = messageOrder[fn]; if (file.isEmpty()) - fileOrder.append(msg.fileName()); + fileOrder.append(fn); QList<TranslatorMessage> &context = file[msg.context()]; if (context.isEmpty()) - contextOrder[msg.fileName()].append(msg.context()); + contextOrder[fn].append(msg.context()); context.append(msg); } diff --git a/tools/porting/src/errors.cpp b/tools/porting/src/errors.cpp index 580efb5..9081dba 100644 --- a/tools/porting/src/errors.cpp +++ b/tools/porting/src/errors.cpp @@ -44,8 +44,8 @@ QT_BEGIN_NAMESPACE -QT_STATIC_CONST_IMPL Error& Errors::InternalError = Error( 1, -1, QLatin1String("Internal Error") ); -QT_STATIC_CONST_IMPL Error& Errors::SyntaxError = Error( 2, -1, QLatin1String("Syntax Error before '%1'") ); -QT_STATIC_CONST_IMPL Error& Errors::ParseError = Error( 3, -1, QLatin1String("Parse Error before '%1'") ); +QT_STATIC_CONST_IMPL Error Errors::InternalError = Error( 1, -1, QLatin1String("Internal Error") ); +QT_STATIC_CONST_IMPL Error Errors::SyntaxError = Error( 2, -1, QLatin1String("Syntax Error before '%1'") ); +QT_STATIC_CONST_IMPL Error Errors::ParseError = Error( 3, -1, QLatin1String("Parse Error before '%1'") ); QT_END_NAMESPACE diff --git a/tools/porting/src/errors.h b/tools/porting/src/errors.h index f0ad691..dbac833 100644 --- a/tools/porting/src/errors.h +++ b/tools/porting/src/errors.h @@ -61,9 +61,9 @@ public: class Errors { public: - QT_STATIC_CONST Error& InternalError; - QT_STATIC_CONST Error& SyntaxError; - QT_STATIC_CONST Error& ParseError; + QT_STATIC_CONST Error InternalError; + QT_STATIC_CONST Error SyntaxError; + QT_STATIC_CONST Error ParseError; }; QT_END_NAMESPACE diff --git a/tools/qdoc3/qdoc3.pro b/tools/qdoc3/qdoc3.pro index 5bedc29..ae0bf25 100644 --- a/tools/qdoc3/qdoc3.pro +++ b/tools/qdoc3/qdoc3.pro @@ -6,6 +6,7 @@ DEFINES += QT_NO_CAST_TO_ASCII qdoc_bootstrapped { include(../../src/tools/bootstrap/bootstrap.pri) + SOURCES += ../../src/corelib/plugin/quuid.cpp DEFINES -= QT_NO_CAST_FROM_ASCII DEFINES += QT_NO_TRANSLATION } else { diff --git a/tools/qml/qml.pro b/tools/qml/qml.pro index d794005..3927dd6 100644 --- a/tools/qml/qml.pro +++ b/tools/qml/qml.pro @@ -34,7 +34,7 @@ maemo5 { } symbian { TARGET.UID3 = 0x20021317 - include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) TARGET.EPOCHEAPSIZE = 0x20000 0x4000000 TARGET.CAPABILITY = NetworkServices ReadUserData !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { diff --git a/tools/shared/qtpropertybrowser/qtpropertymanager.cpp b/tools/shared/qtpropertybrowser/qtpropertymanager.cpp index d9ff10a..a0bef0a 100644 --- a/tools/shared/qtpropertybrowser/qtpropertymanager.cpp +++ b/tools/shared/qtpropertybrowser/qtpropertymanager.cpp @@ -2399,15 +2399,23 @@ QString QtLocalePropertyManager::valueText(const QtProperty *property) const if (it == d_ptr->m_values.constEnd()) return QString(); - QLocale loc = it.value(); + const QLocale loc = it.value(); int langIdx = 0; int countryIdx = 0; - metaEnumProvider()->localeToIndex(loc.language(), loc.country(), &langIdx, &countryIdx); - QString str = tr("%1, %2") - .arg(metaEnumProvider()->languageEnumNames().at(langIdx)) - .arg(metaEnumProvider()->countryEnumNames(loc.language()).at(countryIdx)); - return str; + const QtMetaEnumProvider *me = metaEnumProvider(); + me->localeToIndex(loc.language(), loc.country(), &langIdx, &countryIdx); + if (langIdx < 0) { + qWarning("QtLocalePropertyManager::valueText: Unknown language %d", loc.language()); + return tr("<Invalid>"); + } + const QString languageName = me->languageEnumNames().at(langIdx); + if (countryIdx < 0) { + qWarning("QtLocalePropertyManager::valueText: Unknown country %d for %s", loc.country(), qPrintable(languageName)); + return languageName; + } + const QString countryName = me->countryEnumNames(loc.language()).at(countryIdx); + return tr("%1, %2").arg(languageName, countryName); } /*! diff --git a/translations/assistant_sl.ts b/translations/assistant_sl.ts new file mode 100644 index 0000000..05429bd --- /dev/null +++ b/translations/assistant_sl.ts @@ -0,0 +1,972 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="sl"> + <extra-po-header-po_revision_date>2010-08-28 14:36+0200</extra-po-header-po_revision_date> + <extra-po-headers>MIME-Version,Content-Type,Content-Transfer-Encoding,Plural-Forms,X-Language,X-Qt-Contexts,Last-Translator,PO-Revision-Date,Project-Id-Version,Language-Team,X-Generator</extra-po-headers> + <extra-po-header-x_generator>Lokalize 1.1</extra-po-header-x_generator> + <extra-po-header-language_team>Slovenian <lugos-slo@lugos.si></extra-po-header-language_team> + <extra-po-header-project_id_version></extra-po-header-project_id_version> + <extra-po-header_comment># Jure Repinc <jlp@holodeck1.com>, 2010.</extra-po-header_comment> + <extra-po-header-last_translator>Jure Repinc <jlp@holodeck1.com></extra-po-header-last_translator> +<context> + <name>AboutDialog</name> + <message> + <source>&Close</source> + <translation>&Zapri</translation> + </message> +</context> +<context> + <name>AboutLabel</name> + <message> + <source>Warning</source> + <translation>Opozorilo</translation> + </message> + <message> + <source>Unable to launch external application. +</source> + <translation>Zunanjega programa ni moč zagnati. +</translation> + </message> + <message> + <source>OK</source> + <translation>V redu</translation> + </message> +</context> +<context> + <name>Assistant</name> + <message> + <source>Error registering documentation file '%1': %2</source> + <translation>Napaka pri registraciji datoteke z dokumentacijo »%1«: %2</translation> + </message> + <message> + <source>Error: %1</source> + <translation>Napaka: %1</translation> + </message> + <message> + <source>Could not register documentation file +%1 + +Reason: +%2</source> + <translation>Ni bilo moč registrirati datoteke z dokumentacijo +%1 + +Razlog: +%2</translation> + </message> + <message> + <source>Documentation successfully registered.</source> + <translation>Dokumentacija je bila uspešno registrirana.</translation> + </message> + <message> + <source>Could not unregister documentation file +%1 + +Reason: +%2</source> + <translation>Ni bilo moč od-registrirati datoteke z dokumentacijo +%1 + +Razlog: +%2</translation> + </message> + <message> + <source>Documentation successfully unregistered.</source> + <translation>Dokumentacija je bila uspešno odstranjena iz registrira.</translation> + </message> + <message> + <source>Error reading collection file '%1': %2.</source> + <translation>Napaka pri branju datoteke zbirke »%1«: %2.</translation> + </message> + <message> + <source>Error creating collection file '%1': %2.</source> + <translation>Napaka pri ustvarjanju datoteke zbirke »%1«: %2.</translation> + </message> + <message> + <source>Cannot load sqlite database driver!</source> + <translation>Ni moč naložiti gonilnika za podatkovno zbirko SQLite.</translation> + </message> +</context> +<context> + <name>BookmarkDialog</name> + <message> + <source>Add Bookmark</source> + <translation>Dodaj zaznamek</translation> + </message> + <message> + <source>Bookmark:</source> + <translation>Zaznamek:</translation> + </message> + <message> + <source>Add in Folder:</source> + <translation>Dodaj v mapo:</translation> + </message> + <message> + <source>+</source> + <translation>+</translation> + </message> + <message> + <source>New Folder</source> + <translation>Nova mapa</translation> + </message> + <message> + <source>Rename Folder</source> + <translation>Preimenuj mapo</translation> + </message> +</context> +<context> + <name>BookmarkManager</name> + <message> + <source>Untitled</source> + <translation>Brez naslova</translation> + </message> + <message> + <source>Remove</source> + <translation>Odstrani</translation> + </message> + <message> + <source>You are going to delete a Folder, this will also<br>remove it's content. Are you sure to continue?</source> + <translation>Nameravate zbrisati mapo, pri čemer bo zbrisana<br>tudi njena vsebina. Ali res želite nadaljevati?</translation> + </message> + <message> + <source>Manage Bookmarks...</source> + <translation>Upravljanje zaznamkov ...</translation> + </message> + <message> + <source>Add Bookmark...</source> + <translation>Dodaj zaznamek ...</translation> + </message> + <message> + <source>Ctrl+D</source> + <translation>Ctrl+D</translation> + </message> + <message> + <source>Delete Folder</source> + <translation>Izbriši mapo</translation> + </message> + <message> + <source>Rename Folder</source> + <translation>Preimenuj mapo</translation> + </message> + <message> + <source>Show Bookmark</source> + <translation>Prikaži zaznamek</translation> + </message> + <message> + <source>Show Bookmark in New Tab</source> + <translation>Prikaži zaznamek v novem zavihku</translation> + </message> + <message> + <source>Delete Bookmark</source> + <translation>Izbriši zaznamek</translation> + </message> + <message> + <source>Rename Bookmark</source> + <translation>Preimenuj zaznamek</translation> + </message> +</context> +<context> + <name>BookmarkManagerWidget</name> + <message> + <source>Manage Bookmarks</source> + <translation>Upravljanje zaznamkov</translation> + </message> + <message> + <source>Search:</source> + <translation>Išči:</translation> + </message> + <message> + <source>Remove</source> + <translation>Odstrani</translation> + </message> + <message> + <source>Import and Backup</source> + <translation>Uvozi in ustvari varnostno kopijo</translation> + </message> + <message> + <source>OK</source> + <translation>V redu</translation> + </message> + <message> + <source>Import...</source> + <translation>Uvozi ...</translation> + </message> + <message> + <source>Export...</source> + <translation>Izvozi ...</translation> + </message> + <message> + <source>Open File</source> + <translation>Odpri datoteko</translation> + </message> + <message> + <source>Files (*.xbel)</source> + <translation>Datoteke (*.xbel)</translation> + </message> + <message> + <source>Save File</source> + <translation>Shrani datoteko</translation> + </message> + <message> + <source>Qt Assistant</source> + <translation>Qt Assistant</translation> + </message> + <message> + <source>Unable to save bookmarks.</source> + <translation>Zaznamkov ni moč shraniti.</translation> + </message> + <message> + <source>You are goingto delete a Folder, this will also<br> remove it's content. Are you sure to continue?</source> + <translation>Nameravate zbrisati mapo, pri čemer bo zbrisana<br>tudi njena vsebina. Ali res želite nadaljevati?</translation> + </message> + <message> + <source>Delete Folder</source> + <translation>Izbriši mapo</translation> + </message> + <message> + <source>Rename Folder</source> + <translation>Preimenuj mapo</translation> + </message> + <message> + <source>Show Bookmark</source> + <translation>Prikaži zaznamek</translation> + </message> + <message> + <source>Show Bookmark in New Tab</source> + <translation>Prikaži zaznamek v novem zavihku</translation> + </message> + <message> + <source>Delete Bookmark</source> + <translation>Izbriši zaznamek</translation> + </message> + <message> + <source>Rename Bookmark</source> + <translation>Preimenuj zaznamek</translation> + </message> +</context> +<context> + <name>BookmarkModel</name> + <message> + <source>Name</source> + <translation>Ime</translation> + </message> + <message> + <source>Address</source> + <translation>Naslov</translation> + </message> + <message> + <source>Bookmarks Menu</source> + <translation>Meni z zaznamki</translation> + </message> +</context> +<context> + <name>BookmarkWidget</name> + <message> + <source>Bookmarks</source> + <translation>Zaznamki</translation> + </message> + <message> + <source>Filter:</source> + <translation>Filter:</translation> + </message> + <message> + <source>Add</source> + <translation>Dodaj</translation> + </message> + <message> + <source>Remove</source> + <translation>Odstrani</translation> + </message> +</context> +<context> + <name>CentralWidget</name> + <message> + <source>Add new page</source> + <translation>Dodaj novo stran</translation> + </message> + <message> + <source>Close current page</source> + <translation>Zapri trenutno stran</translation> + </message> + <message> + <source>Print Document</source> + <translation>Natisni dokument</translation> + </message> + <message> + <source>unknown</source> + <translation>neznano</translation> + </message> + <message> + <source>Add New Page</source> + <translation>Dodaj novo stran</translation> + </message> + <message> + <source>Close This Page</source> + <translation>Zapri to stran</translation> + </message> + <message> + <source>Close Other Pages</source> + <translation>Zapri druge strani</translation> + </message> + <message> + <source>Add Bookmark for this Page...</source> + <translation>Dodaj zaznamek za to stran ...</translation> + </message> + <message> + <source>Search</source> + <translation>Iskanje</translation> + </message> +</context> +<context> + <name>CmdLineParser</name> + <message> + <source>Unknown option: %1</source> + <translation>Neznana možnost: %1</translation> + </message> + <message> + <source>The collection file '%1' does not exist.</source> + <translation>Datoteka zbirke »%1« ne obstaja.</translation> + </message> + <message> + <source>Missing collection file.</source> + <translation>Manjkajoča datoteka zbirke.</translation> + </message> + <message> + <source>Invalid URL '%1'.</source> + <translation>Neveljaven URL »%1«.</translation> + </message> + <message> + <source>Missing URL.</source> + <translation>Manjkajoč URL.</translation> + </message> + <message> + <source>Unknown widget: %1</source> + <translation>Neznan gradnik: %1</translation> + </message> + <message> + <source>Missing widget.</source> + <translation>Manjkajoč gradnik.</translation> + </message> + <message> + <source>The Qt help file '%1' does not exist.</source> + <translation>Datoteka s pomočjo za Qt »%1« ne obstaja.</translation> + </message> + <message> + <source>Missing help file.</source> + <translation>Manjkajoča datoteka s pomočjo.</translation> + </message> + <message> + <source>Missing filter argument.</source> + <translation>Manjkajoč argument filtra.</translation> + </message> + <message> + <source>Error</source> + <translation>Napaka</translation> + </message> + <message> + <source>Notice</source> + <translation>Opomba</translation> + </message> +</context> +<context> + <name>ContentWindow</name> + <message> + <source>Open Link</source> + <translation>Odpri povezavo</translation> + </message> + <message> + <source>Open Link in New Tab</source> + <translation>Odpri povezavo v novem zavihku</translation> + </message> +</context> +<context> + <name>FilterNameDialogClass</name> + <message> + <source>Add Filter Name</source> + <translation>Dodaj ime filtra</translation> + </message> + <message> + <source>Filter Name:</source> + <translation>Ime filtra:</translation> + </message> +</context> +<context> + <name>FindWidget</name> + <message> + <source>Previous</source> + <translation>Predhodno</translation> + </message> + <message> + <source>Next</source> + <translation>Naslednje</translation> + </message> + <message> + <source>Case Sensitive</source> + <translation>Loči velike in male črke</translation> + </message> + <message> + <source><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Search wrapped</source> + <translation><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Iskanje se nadaljuje na drugem koncu</translation> + </message> +</context> +<context> + <name>FontPanel</name> + <message> + <source>Font</source> + <translation>Pisava</translation> + </message> + <message> + <source>&Writing system</source> + <translation>S&istem pisanja</translation> + </message> + <message> + <source>&Family</source> + <translation>&Družina</translation> + </message> + <message> + <source>&Style</source> + <translation>&Slog</translation> + </message> + <message> + <source>&Point size</source> + <translation>&Velikost v točkah</translation> + </message> +</context> +<context> + <name>HelpViewer</name> + <message> + <source><title>about:blank</title></source> + <translation><title>about:blank</title></translation> + </message> + <message> + <source><title>Error 404...</title><div align="center"><br><br><h1>The page could not be found</h1><br><h3>'%1'</h3></div></source> + <translation><title>Napaka 404</title><div align="center"><br><br><h1>Strani ni bilo moč najti</h1><br><h3>»%1«</h3></div></translation> + </message> + <message> + <source>Copy &Link Location</source> + <translation>Skopiraj &povezavo do lokacije</translation> + </message> + <message> + <source>Open Link in New Tab Ctrl+LMB</source> + <translation>Odpri povezavo v novem zavihku Ctrl+LGM</translation> + </message> + <message> + <source>Open Link in New Tab</source> + <translation>Odpri povezavo v novem zavihku</translation> + </message> +</context> +<context> + <name>IndexWindow</name> + <message> + <source>&Look for:</source> + <translation>&Išči:</translation> + </message> + <message> + <source>Open Link</source> + <translation>Odpri povezavo</translation> + </message> + <message> + <source>Open Link in New Tab</source> + <translation>Odpri povezavo v novem zavihku</translation> + </message> +</context> +<context> + <name>InstallDialog</name> + <message> + <source>Install Documentation</source> + <translation>Namesti dokumentacijo</translation> + </message> + <message> + <source>Available Documentation:</source> + <translation>Razpoložljiva dokumentacija:</translation> + </message> + <message> + <source>Install</source> + <translation>Namesti</translation> + </message> + <message> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> + <message> + <source>Close</source> + <translation>Zapri</translation> + </message> + <message> + <source>Installation Path:</source> + <translation>Namestitvena pot:</translation> + </message> + <message> + <source>...</source> + <translation>...</translation> + </message> + <message> + <source>Downloading documentation info...</source> + <translation>Prejemanje podatkov o dokumentaciji ...</translation> + </message> + <message> + <source>Download canceled.</source> + <translation>Prejemanje preklicano.</translation> + </message> + <message> + <source>Done.</source> + <translation>Opravljeno.</translation> + </message> + <message> + <source>The file %1 already exists. Do you want to overwrite it?</source> + <translation>Datoteka %1 že obstaja. Ali jo želite nadomestiti?</translation> + </message> + <message> + <source>Unable to save the file %1: %2.</source> + <translation>Datoteke %1 ni moč shraniti: %2.</translation> + </message> + <message> + <source>Downloading %1...</source> + <translation>Prejemanje %1 ...</translation> + </message> + <message> + <source>Download failed: %1.</source> + <translation>Prejemanje ni uspelo: %1.</translation> + </message> + <message> + <source>Documentation info file is corrupt!</source> + <translation>Datoteka s podatki o dokumentaciji je poškodovana.</translation> + </message> + <message> + <source>Download failed: Downloaded file is corrupted.</source> + <translation>Prejemanje ni uspelo. Prejeta datoteka je poškodovana.</translation> + </message> + <message> + <source>Installing documentation %1...</source> + <translation>Nameščanje dokumentacije %1 ...</translation> + </message> + <message> + <source>Error while installing documentation: +%1</source> + <translation>Napaka pri nameščanju dokumentacije: +%1</translation> + </message> +</context> +<context> + <name>MainWindow</name> + <message> + <source>Index</source> + <translation>Kazalo</translation> + </message> + <message> + <source>Contents</source> + <translation>Vsebina</translation> + </message> + <message> + <source>Bookmarks</source> + <translation>Zaznamki</translation> + </message> + <message> + <source>Qt Assistant</source> + <translation>Qt Assistant</translation> + </message> + <message> + <source>Looking for Qt Documentation...</source> + <translation>iskanje dokumentacije za Qt ...</translation> + </message> + <message> + <source>&File</source> + <translation>&Datoteka</translation> + </message> + <message> + <source>New &Tab</source> + <translation>Nov zavi&hek</translation> + </message> + <message> + <source>Page Set&up...</source> + <translation>Nastavitve stra&ni ...</translation> + </message> + <message> + <source>Print Preview...</source> + <translation>Ogled tiskanja ...</translation> + </message> + <message> + <source>&Print...</source> + <translation>Na&tisni ...</translation> + </message> + <message> + <source>&Close Tab</source> + <translation>&Zapri zavihek</translation> + </message> + <message> + <source>&Quit</source> + <translation>Konča&j</translation> + </message> + <message> + <source>CTRL+Q</source> + <translation>Ctrl+Q</translation> + </message> + <message> + <source>&Edit</source> + <translation>&Urejanje</translation> + </message> + <message> + <source>&Copy selected Text</source> + <translation>S&kopiraj izbrano besedilo</translation> + </message> + <message> + <source>&Find in Text...</source> + <translation>&Najdi v besedilu ...</translation> + </message> + <message> + <source>&Find</source> + <translation>&Najdi</translation> + </message> + <message> + <source>Find &Next</source> + <translation>Najdi na&slednje</translation> + </message> + <message> + <source>Find &Previous</source> + <translation>Najdi p&rejšnje</translation> + </message> + <message> + <source>Preferences...</source> + <translation>Nastavitve ...</translation> + </message> + <message> + <source>&View</source> + <translation>&Videz</translation> + </message> + <message> + <source>Zoom &in</source> + <translation>Po&večaj</translation> + </message> + <message> + <source>Zoom &out</source> + <translation>Z&manjšaj</translation> + </message> + <message> + <source>Normal &Size</source> + <translation>&Običajna velikost</translation> + </message> + <message> + <source>Ctrl+0</source> + <translation>Ctrl+0</translation> + </message> + <message> + <source>ALT+C</source> + <translation>Alt+V</translation> + </message> + <message> + <source>ALT+I</source> + <translation>Alt+K</translation> + </message> + <message> + <source>ALT+O</source> + <translation>Alt+Z</translation> + </message> + <message> + <source>Search</source> + <translation>Iskanje</translation> + </message> + <message> + <source>ALT+S</source> + <translation>Alt+I</translation> + </message> + <message> + <source>&Go</source> + <translation>&Pojdi</translation> + </message> + <message> + <source>&Home</source> + <translation>&Domov</translation> + </message> + <message> + <source>ALT+Home</source> + <translation>Alt+Domov</translation> + </message> + <message> + <source>&Back</source> + <translation>Na&zaj</translation> + </message> + <message> + <source>&Forward</source> + <translation>&Naprej</translation> + </message> + <message> + <source>Sync with Table of Contents</source> + <translation>Uskladi s seznamom vsebine</translation> + </message> + <message> + <source>Sync</source> + <translation>Uskladi</translation> + </message> + <message> + <source>Next Page</source> + <translation>Naslednja stran</translation> + </message> + <message> + <source>Ctrl+Alt+Right</source> + <translation>Ctrl+Alt+Desno</translation> + </message> + <message> + <source>Previous Page</source> + <translation>Predhodna stran</translation> + </message> + <message> + <source>Ctrl+Alt+Left</source> + <translation>Ctrl+Alt+Levo</translation> + </message> + <message> + <source>&Bookmarks</source> + <translation>&Zaznamki</translation> + </message> + <message> + <source>&Help</source> + <translation>&Pomoč</translation> + </message> + <message> + <source>About...</source> + <translation>O ...</translation> + </message> + <message> + <source>Navigation Toolbar</source> + <translation>Orodjarna za krmarjenje</translation> + </message> + <message> + <source>&Window</source> + <translation>&Okno</translation> + </message> + <message> + <source>Zoom</source> + <translation>Povečava</translation> + </message> + <message> + <source>Minimize</source> + <translation>Pomanjšaj</translation> + </message> + <message> + <source>Ctrl+M</source> + <translation>Ctrl+M</translation> + </message> + <message> + <source>Toolbars</source> + <translation>Orodjarne</translation> + </message> + <message> + <source>Filter Toolbar</source> + <translation>Orodjarna filtra</translation> + </message> + <message> + <source>Filtered by:</source> + <translation>Filtrirano po:</translation> + </message> + <message> + <source>Address Toolbar</source> + <translation>Naslovna vrstica</translation> + </message> + <message> + <source>Address:</source> + <translation>Naslov:</translation> + </message> + <message> + <source>Could not find the associated content item.</source> + <translation>Povezane postavke vsebine ni bilo moč najti.</translation> + </message> + <message> + <source>About %1</source> + <translation>O %1</translation> + </message> + <message> + <source>Updating search index</source> + <translation>Posodabljanje kazala za iskanje</translation> + </message> + <message> + <source>Could not register file '%1': %2</source> + <translation>Datoteke »%1« ni bilo moč registrirati: %2</translation> + </message> +</context> +<context> + <name>PreferencesDialog</name> + <message> + <source>Add Documentation</source> + <translation>Dodaj dokumentacijo</translation> + </message> + <message> + <source>Qt Compressed Help Files (*.qch)</source> + <translation>Stisnjene datoteke s pomočjo za Qt (*.qch)</translation> + </message> + <message> + <source>The namespace %1 is already registered!</source> + <translation>Imenski prostor %1 je že registriran.</translation> + </message> + <message> + <source>The specified file is not a valid Qt Help File!</source> + <translation>Navedena datoteka ni veljavna datoteka s pomočjo za Qt.</translation> + </message> + <message> + <source>Remove Documentation</source> + <translation>Odstrani dokumentacijo</translation> + </message> + <message> + <source>Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents.</source> + <translation>Nekateri odprti dokumenti se sklicujejo na dokumentacijo, ki jo poskušate odstraniti. Odstranitev dokumentacije bo povzročila zaprtje teh dokumentov.</translation> + </message> + <message> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> + <message> + <source>OK</source> + <translation>V redu</translation> + </message> + <message> + <source>Use custom settings</source> + <translation>Uporabi nastavitve po meri</translation> + </message> +</context> +<context> + <name>PreferencesDialogClass</name> + <message> + <source>Preferences</source> + <translation>Nastavitve</translation> + </message> + <message> + <source>Fonts</source> + <translation>Pisave</translation> + </message> + <message> + <source>Font settings:</source> + <translation>Nastavitve pisav</translation> + </message> + <message> + <source>Browser</source> + <translation>Brskalnik</translation> + </message> + <message> + <source>Application</source> + <translation>Program</translation> + </message> + <message> + <source>Filters</source> + <translation>Filtri</translation> + </message> + <message> + <source>Filter:</source> + <translation>Filter:</translation> + </message> + <message> + <source>Attributes:</source> + <translation>Lastnosti:</translation> + </message> + <message> + <source>1</source> + <translation>1</translation> + </message> + <message> + <source>Add</source> + <translation>Dodaj</translation> + </message> + <message> + <source>Remove</source> + <translation>Odstrani</translation> + </message> + <message> + <source>Documentation</source> + <translation>Dokumentacija</translation> + </message> + <message> + <source>Registered Documentation:</source> + <translation>Registrirana dokumentacija</translation> + </message> + <message> + <source>Add...</source> + <translation>Dodaj ...</translation> + </message> + <message> + <source>Options</source> + <translation>Možnosti</translation> + </message> + <message> + <source>On help start:</source> + <translation>Ob zagonu pomoči:</translation> + </message> + <message> + <source>Show my home page</source> + <translation>Prikaži mojo domačo stran</translation> + </message> + <message> + <source>Show a blank page</source> + <translation>Prikaži prazno stran</translation> + </message> + <message> + <source>Show my tabs from last session</source> + <translation>Prikaži moje zavihke iz zadnje seje</translation> + </message> + <message> + <source>Homepage</source> + <translation>Domača stran</translation> + </message> + <message> + <source>Current Page</source> + <translation>Trenutna stran</translation> + </message> + <message> + <source>Blank Page</source> + <translation>Prazna stran</translation> + </message> + <message> + <source>Restore to default</source> + <translation>Ponastavi na privzeto</translation> + </message> +</context> +<context> + <name>RemoteControl</name> + <message> + <source>Debugging Remote Control</source> + <translation>Razhroščevanje oddaljenega nadzora</translation> + </message> + <message> + <source>Received Command: %1 %2</source> + <translation>Prejet ukaz: %1 %2</translation> + </message> +</context> +<context> + <name>SearchWidget</name> + <message> + <source>&Copy</source> + <translation>S&kopiraj</translation> + </message> + <message> + <source>Copy &Link Location</source> + <translation>Skopiraj &povezavo do lokacije</translation> + </message> + <message> + <source>Open Link in New Tab</source> + <translation>Odpri povezavo v novem &zavihku</translation> + </message> + <message> + <source>Select All</source> + <translation>Izberi vse</translation> + </message> +</context> +<context> + <name>TopicChooser</name> + <message> + <source>Choose Topic</source> + <translation>Izberite temo</translation> + </message> + <message> + <source>&Topics</source> + <translation>&Teme</translation> + </message> + <message> + <source>&Display</source> + <translation>&Prikaži</translation> + </message> + <message> + <source>&Close</source> + <translation>&Zapri</translation> + </message> + <message> + <source>Choose a topic for <b>%1</b>:</source> + <translation>Izberite temo za <b>%1</b>:</translation> + </message> +</context> +</TS> diff --git a/translations/designer_sl.ts b/translations/designer_sl.ts index 8d2a161..d925f09 100644 --- a/translations/designer_sl.ts +++ b/translations/designer_sl.ts @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.0" language="sl_SI"> - <extra-po-header-po_revision_date>2010-08-05 02:42+0200</extra-po-header-po_revision_date> + <extra-po-header-po_revision_date>2010-08-28 14:05+0200</extra-po-header-po_revision_date> <extra-po-headers>MIME-Version,Content-Type,Content-Transfer-Encoding,Plural-Forms,X-Language,X-Qt-Contexts,Last-Translator,PO-Revision-Date,Project-Id-Version,Language-Team,X-Generator</extra-po-headers> <extra-po-header-x_generator>Lokalize 1.1</extra-po-header-x_generator> <extra-po-header-language_team>Slovenian <lugos-slo@lugos.si></extra-po-header-language_team> @@ -720,7 +720,7 @@ </message> <message> <source>&Point Size</source> - <translation>&Velikost točke</translation> + <translation>&Velikost v točkah</translation> </message> <message> <source>Style</source> @@ -826,7 +826,7 @@ </message> <message> <source>&Point size</source> - <translation>&Velikost točke</translation> + <translation>&Velikost v točkah</translation> </message> </context> <context> @@ -2190,7 +2190,7 @@ Empty class name passed to widget factory method </message> <message> <source>Point Size</source> - <translation>Velikost točke</translation> + <translation>Velikost v točkah</translation> </message> <message> <source>Bold</source> diff --git a/translations/linguist_sl.ts b/translations/linguist_sl.ts new file mode 100644 index 0000000..0b5b084 --- /dev/null +++ b/translations/linguist_sl.ts @@ -0,0 +1,1596 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="sl"> + <extra-po-header-po_revision_date>2010-08-28 18:45+0200</extra-po-header-po_revision_date> + <extra-po-headers>MIME-Version,Content-Type,Content-Transfer-Encoding,Plural-Forms,X-Language,X-Qt-Contexts,Last-Translator,PO-Revision-Date,Project-Id-Version,Language-Team,X-Generator</extra-po-headers> + <extra-po-header-x_generator>Lokalize 1.1</extra-po-header-x_generator> + <extra-po-header-language_team>Slovenian <lugos-slo@lugos.si></extra-po-header-language_team> + <extra-po-header-project_id_version></extra-po-header-project_id_version> + <extra-po-header_comment># Jure Repinc <jlp@holodeck1.com>, 2010.</extra-po-header_comment> + <extra-po-header-last_translator>Jure Repinc <jlp@holodeck1.com></extra-po-header-last_translator> +<context> + <name>AboutDialog</name> + <message> + <source>Qt Linguist</source> + <translation>Qt Linguist</translation> + </message> +</context> +<context> + <name>BatchTranslationDialog</name> + <message> + <source>Qt Linguist - Batch Translation</source> + <translation>Qt Linguist – paketno prevajanje</translation> + </message> + <message> + <source>Options</source> + <translation>Možnosti</translation> + </message> + <message> + <source>Set translated entries to finished</source> + <translation>Označi prevedene vnose kot zaključene</translation> + </message> + <message> + <source>Retranslate entries with existing translation</source> + <translation>Znova prevedi vnose z obstoječimi prevodi</translation> + </message> + <message> + <source>Note that the modified entries will be reset to unfinished if 'Set translated entries to finished' above is unchecked</source> + <translation>Vedite, da bodo spremenjeni vnosi ponastavljeni na nezaključeno, če možnost »Označi prevedene vnose kot zaključene« ni omogočena.</translation> + </message> + <message> + <source>Translate also finished entries</source> + <translation>Prevedi tudi zaključene vnose</translation> + </message> + <message> + <source>Phrase book preference</source> + <translation>Prednostni seznam knjig z izrazi</translation> + </message> + <message> + <source>Move up</source> + <translation>Premakni gor</translation> + </message> + <message> + <source>Move down</source> + <translation>Premakni dol</translation> + </message> + <message> + <source>The batch translator will search through the selected phrase books in the order given above</source> + <translation>Paketni prevajalnik bo izbrane knjige z izrazi preiskal v zgoraj navedenem vrstnem redu</translation> + </message> + <message> + <source>&Run</source> + <translation>&Zaženi</translation> + </message> + <message> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> + <message> + <source>Batch Translation of '%1' - Qt Linguist</source> + <translation>Paketno prevajanje »%1« – Qt Linguist</translation> + </message> + <message> + <source>Searching, please wait...</source> + <translation>Iskanje, prosimo počakajte ...</translation> + </message> + <message> + <source>&Cancel</source> + <translation>&Prekliči</translation> + </message> + <message> + <source>Linguist batch translator</source> + <translation>Paketni prevajalnik</translation> + </message> + <message numerus="yes"> + <source>Batch translated %n entries</source> + <translation> + <numerusform>Paketno preveden %n vnos</numerusform> + <numerusform>Paketno prevedena %n vnosa</numerusform> + <numerusform>Paketno prevedeni %n vnosi</numerusform> + <numerusform>Paketno prevedenih %n vnosov</numerusform> + </translation> + </message> +</context> +<context> + <name>DataModel</name> + <message> + <source><qt>Duplicate messages found in '%1':</source> + <translation><qt>V »%1« so bila najdena podvojena sporočila.</translation> + </message> + <message> + <source><p>[more duplicates omitted]</source> + <translation><p>[več izpuščenih podvojitev]</translation> + </message> + <message> + <source><p>* ID: %1</source> + <translation><p>* ID: %1</translation> + </message> + <message> + <source><p>* Context: %1<br>* Source: %2</source> + <translation><p>* Kontekst: %1<br>* Vir: %2</translation> + </message> + <message> + <source><br>* Comment: %3</source> + <translation><br>* Komentar: %3</translation> + </message> + <message> + <source>Linguist does not know the plural rules for '%1'. +Will assume a single universal form.</source> + <translation>Qt Linguist ne pozna pravil za množinske oblike za »%1«. +Privzeta bo edninska univerzalna oblika.</translation> + </message> + <message> + <source>Cannot create '%2': %1</source> + <translation>Ni moč ustvariti »%2«: %1</translation> + </message> + <message> + <source>Universal Form</source> + <translation>Univerzalna oblika</translation> + </message> +</context> +<context> + <name>ErrorsView</name> + <message> + <source>Accelerator possibly superfluous in translation.</source> + <translation>V prevodu je morda odvečen pospeševalnik.</translation> + </message> + <message> + <source>Accelerator possibly missing in translation.</source> + <translation>V prevodu morda manjka pospeševalnik.</translation> + </message> + <message> + <source>Translation does not end with the same punctuation as the source text.</source> + <translation>Prevod se ne zaključi z istim ločilom kot izvorno besedilo.</translation> + </message> + <message> + <source>A phrase book suggestion for '%1' was ignored.</source> + <translation>Predlog za »%1« is knjige izrazov je bil prezrt.</translation> + </message> + <message> + <source>Translation does not refer to the same place markers as in the source text.</source> + <translation>Prevod ne navaja enakih oznak vsebnikov kot izvorno besedilo.</translation> + </message> + <message> + <source>Translation does not contain the necessary %n place marker.</source> + <translation>Prevod ne vsebuje potrebne oznake %n za vsebnik.</translation> + </message> + <message> + <source>Unknown error</source> + <translation>Neznana napaka</translation> + </message> +</context> +<context> + <name>FindDialog</name> + <message> + <source>Find</source> + <translation>Najdi</translation> + </message> + <message> + <source>This window allows you to search for some text in the translation source file.</source> + <translation>To okno omogoča iskanje besedila v izvorni datoteki s prevodom.</translation> + </message> + <message> + <source>&Find what:</source> + <translation>&Najdi:</translation> + </message> + <message> + <source>Type in the text to search for.</source> + <translation>Vnesite iskano besedilo.</translation> + </message> + <message> + <source>Options</source> + <translation>Možnosti</translation> + </message> + <message> + <source>Source texts are searched when checked.</source> + <translation>Ko je omogočeno, se preišče izvorna besedila.</translation> + </message> + <message> + <source>&Source texts</source> + <translation>&Izvorna besedila</translation> + </message> + <message> + <source>Translations are searched when checked.</source> + <translation>Ko je omogočeno, se preišče prevode.</translation> + </message> + <message> + <source>&Translations</source> + <translation>&Prevodi</translation> + </message> + <message> + <source>Texts such as 'TeX' and 'tex' are considered as different when checked.</source> + <translation>Ko je omogočeno, se razlikuje med besedili kot sta »KDE« in »kde«.</translation> + </message> + <message> + <source>&Match case</source> + <translation>Ujemanje &velikosti črk</translation> + </message> + <message> + <source>Comments and contexts are searched when checked.</source> + <translation>Ko je omogočeno, se preišče kontekste in komentarje.</translation> + </message> + <message> + <source>&Comments</source> + <translation>&Komentarji</translation> + </message> + <message> + <source>Ignore &accelerators</source> + <translation>Prezri p&ospeševalnike</translation> + </message> + <message> + <source>Click here to find the next occurrence of the text you typed in.</source> + <translation>Kliknite, da poiščete naslednjo pojavitev vnešenega besedila.</translation> + </message> + <message> + <source>Find Next</source> + <translation>Najdi naslednje</translation> + </message> + <message> + <source>Click here to close this window.</source> + <translation>Kliknite, da zaprete to okno.</translation> + </message> + <message> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> +</context> +<context> + <name>FormMultiWidget</name> + <message> + <source>Alt+Delete</source> + <extracomment>translate, but don't change +</extracomment> + <translation>Alt+Izbriši</translation> + </message> + <message> + <source>Shift+Alt+Insert</source> + <extracomment>translate, but don't change +</extracomment> + <translation>Shift+Alt+Vstavi</translation> + </message> + <message> + <source>Alt+Insert</source> + <extracomment>translate, but don't change +</extracomment> + <translation>Alt+Vstavi</translation> + </message> + <message> + <source>Confirmation - Qt Linguist</source> + <translation>Potrditev – Qt Linguist</translation> + </message> + <message> + <source>Delete non-empty length variant?</source> + <translation>Ali izbrišem ne-prazno dolžinsko inačico?</translation> + </message> +</context> +<context> + <name>LRelease</name> + <message numerus="yes"> + <source>Dropped %n message(s) which had no ID.</source> + <translation> + <numerusform>Opustil %n sporočilo, ki ni imelo ID-ja.</numerusform> + <numerusform>Opustil %n sporočili, ki nista imeli ID-ja.</numerusform> + <numerusform>Opustil %n sporočila, ki niso imela ID-ja.</numerusform> + <numerusform>Opustil %n sporočil, ki niso imeli ID-ja.</numerusform> + </translation> + </message> + <message numerus="yes"> + <source>Excess context/disambiguation dropped from %n message(s).</source> + <translation> + <numerusform>Odvečen kontekst/razločitev opuščen iz %n sporočila.</numerusform> + <numerusform>Odvečen kontekst/razločitev opuščen iz %n sporočil.</numerusform> + <numerusform>Odvečen kontekst/razločitev opuščen iz %n sporočil.</numerusform> + <numerusform>Odvečen kontekst/razločitev opuščen iz %n sporočil.</numerusform> + </translation> + </message> + <message numerus="yes"> + <source> Generated %n translation(s) (%1 finished and %2 unfinished)</source> + <translation> + <numerusform> Ustvaril %n prevod (%1 zaključenih in %2 nezaključenih)</numerusform> + <numerusform> Ustvaril %n prevoda (%1 zaključenih in %2 nezaključenih)</numerusform> + <numerusform> Ustvaril %n prevode (%1 zaključenih in %2 nezaključenih)</numerusform> + <numerusform> Ustvaril %n prevodov (%1 zaključenih in %2 nezaključenih)</numerusform> + </translation> + </message> + <message numerus="yes"> + <source> Ignored %n untranslated source text(s)</source> + <translation> + <numerusform> Prezrl %n neprevedeno izvorno besedilo</numerusform> + <numerusform> Prezrl %n neprevedeni izvorni besedili</numerusform> + <numerusform> Prezrl %n neprevedena izvorna besedila</numerusform> + <numerusform> Prezrl %n neprevedenih izvornih besedil</numerusform> + </translation> + </message> +</context> +<context> + <name>MainWindow</name> + <message> + <source>MainWindow</source> + <translation>GlavnoOkno</translation> + </message> + <message> + <source>&Phrases</source> + <translation>&Izrazi</translation> + </message> + <message> + <source>&Close Phrase Book</source> + <translation>&Zapri knjigo izrazov</translation> + </message> + <message> + <source>&Edit Phrase Book</source> + <translation>&Uredi knjigo izrazov</translation> + </message> + <message> + <source>&Print Phrase Book</source> + <translation>&Natisni knjigo izrazov</translation> + </message> + <message> + <source>V&alidation</source> + <translation>P&otrjevanje</translation> + </message> + <message> + <source>&View</source> + <translation>&Videz</translation> + </message> + <message> + <source>Vie&ws</source> + <translation>&Prikazi</translation> + </message> + <message> + <source>&Toolbars</source> + <translation>O&rodjarne</translation> + </message> + <message> + <source>&Help</source> + <translation>&Pomoč</translation> + </message> + <message> + <source>&Translation</source> + <translation>P&revajanje</translation> + </message> + <message> + <source>&File</source> + <translation>&Datoteka</translation> + </message> + <message> + <source>Recently Opened &Files</source> + <translation>Nedavno odprte &datoteke</translation> + </message> + <message> + <source>&Edit</source> + <translation>&Urejanje</translation> + </message> + <message> + <source>&Open...</source> + <translation>&Odpri ...</translation> + </message> + <message> + <source>Open a Qt translation source file (TS file) for editing</source> + <translation>Odpre izvorno datoteko s prevodi za Qt (*.ts) za urejanje</translation> + </message> + <message> + <source>Ctrl+O</source> + <translation>Ctrl+O</translation> + </message> + <message> + <source>E&xit</source> + <translation>Konča&j</translation> + </message> + <message> + <source>Close this window and exit.</source> + <translation>Zapre to okno in konča.</translation> + </message> + <message> + <source>Ctrl+Q</source> + <translation>Ctrl+Q</translation> + </message> + <message> + <source>Save</source> + <translation>Shrani</translation> + </message> + <message> + <source>Save changes made to this Qt translation source file</source> + <translation>Shrani spremembe te izvorne datoteke s prevodi za Qt</translation> + </message> + <message> + <source>Save &As...</source> + <translation>Shrani &kot ...</translation> + </message> + <message> + <source>Save As...</source> + <translation>Shrani kot ...</translation> + </message> + <message> + <source>Save changes made to this Qt translation source file into a new file.</source> + <translation>Shrani spremembe te izvorne datoteke s prevodi za Qt v novo datoteko.</translation> + </message> + <message> + <source>Release</source> + <translation>Izdaj</translation> + </message> + <message> + <source>Create a Qt message file suitable for released applications from the current message file.</source> + <translation>Iz trenutne datoteke s sporočili ustvari datoteko, ki je primerna za izdane programe.</translation> + </message> + <message> + <source>&Print...</source> + <translation>Na&tisni ...</translation> + </message> + <message> + <source>Print a list of all the translation units in the current translation source file.</source> + <translation>Natisne seznam vseh prevajalskih enot iz trenutne izvorne datoteke s prevodi.</translation> + </message> + <message> + <source>Ctrl+P</source> + <translation>Ctrl+P</translation> + </message> + <message> + <source>&Undo</source> + <translation>&Razveljavi</translation> + </message> + <message> + <source>Undo the last editing operation performed on the current translation.</source> + <translation>Razveljavi zadnje dejanje urejanja trenutnega prevoda.</translation> + </message> + <message> + <source>Ctrl+Z</source> + <translation>Ctrl+Z</translation> + </message> + <message> + <source>&Redo</source> + <translation>&Uveljavi</translation> + </message> + <message> + <source>Redo an undone editing operation performed on the translation.</source> + <translation>Uveljavi razveljavljeno dejanje urejanja prevoda.</translation> + </message> + <message> + <source>Ctrl+Y</source> + <translation>Ctrl+Y</translation> + </message> + <message> + <source>Cu&t</source> + <translation>&Izreži</translation> + </message> + <message> + <source>Copy the selected translation text to the clipboard and deletes it.</source> + <translation>Skopira izbrano besedilo prevoda na odložišče in ga izbriše.</translation> + </message> + <message> + <source>Ctrl+X</source> + <translation>Ctrl+X</translation> + </message> + <message> + <source>&Copy</source> + <translation>S&kopiraj</translation> + </message> + <message> + <source>Copy the selected translation text to the clipboard.</source> + <translation>Skopira izbrano besedilo prevoda na odložišče.</translation> + </message> + <message> + <source>Ctrl+C</source> + <translation>Ctrl+C</translation> + </message> + <message> + <source>&Paste</source> + <translation>Pri&lepi</translation> + </message> + <message> + <source>Paste the clipboard text into the translation.</source> + <translation>Prilepi besedilo z odložišča v prevod.</translation> + </message> + <message> + <source>Ctrl+V</source> + <translation>Ctrl+V</translation> + </message> + <message> + <source>Select &All</source> + <translation>Izberi &vse</translation> + </message> + <message> + <source>Select the whole translation text.</source> + <translation>Izbere celotno besedilo prevoda.</translation> + </message> + <message> + <source>Ctrl+A</source> + <translation>Ctrl+A</translation> + </message> + <message> + <source>&Find...</source> + <translation>&Najdi ...</translation> + </message> + <message> + <source>Search for some text in the translation source file.</source> + <translation>Poišče dano besedilo v izvorni datoteki s prevodi.</translation> + </message> + <message> + <source>Ctrl+F</source> + <translation>Ctrl+F</translation> + </message> + <message> + <source>Find &Next</source> + <translation>Najdi na&slednje</translation> + </message> + <message> + <source>Continue the search where it was left.</source> + <translation>Nadaljuje z iskanjem od zadnjega mesta.</translation> + </message> + <message> + <source>F3</source> + <translation>F3</translation> + </message> + <message> + <source>&Prev Unfinished</source> + <translation>&Predhodni nezaključen</translation> + </message> + <message> + <source>Previous unfinished item</source> + <translation>Predhodni nezaključen prevod</translation> + </message> + <message> + <source>Move to the previous unfinished item.</source> + <translation>Premakne se na predhodni nezaključen prevod.</translation> + </message> + <message> + <source>Ctrl+K</source> + <translation>Ctrl+K</translation> + </message> + <message> + <source>&Next Unfinished</source> + <translation>&Naslednji nezaključen</translation> + </message> + <message> + <source>Next unfinished item</source> + <translation>Naslednji nezaključen prevod</translation> + </message> + <message> + <source>Move to the next unfinished item.</source> + <translation>Premakne se na naslednji nezaključen prevod.</translation> + </message> + <message> + <source>Ctrl+J</source> + <translation>Ctrl+J</translation> + </message> + <message> + <source>P&rev</source> + <translation>&Predhodni</translation> + </message> + <message> + <source>Move to previous item</source> + <translation>Predhodni prevod</translation> + </message> + <message> + <source>Move to the previous item.</source> + <translation>Premakne se na predhodni prevod.</translation> + </message> + <message> + <source>Ctrl+Shift+K</source> + <translation>Ctrl+Shift+K</translation> + </message> + <message> + <source>Ne&xt</source> + <translation>N&aslednji</translation> + </message> + <message> + <source>Next item</source> + <translation>Naslednji prevod</translation> + </message> + <message> + <source>Move to the next item.</source> + <translation>Premakne se na naslednji prevod.</translation> + </message> + <message> + <source>Ctrl+Shift+J</source> + <translation>Ctrl+Shift+J</translation> + </message> + <message> + <source>&Done and Next</source> + <translation>&Zaključi in naslednji</translation> + </message> + <message> + <source>Mark item as done and move to the next unfinished item</source> + <translation>Označi prevod kot zaključen in na naslednji nezaključen</translation> + </message> + <message> + <source>Mark this item as done and move to the next unfinished item.</source> + <translation>Označi prevod kot zaključen in se premakni na naslednji nezaključen prevod.</translation> + </message> + <message> + <source>Copy from source text</source> + <translation>Skopiraj izvorno besedilo</translation> + </message> + <message> + <source>Copies the source text into the translation field</source> + <translation>Skopira izvorno besedilo v prevod</translation> + </message> + <message> + <source>Copies the source text into the translation field.</source> + <translation>Skopira izvorno besedilo v polje za vnos prevoda.</translation> + </message> + <message> + <source>Ctrl+B</source> + <translation>Ctrl+B</translation> + </message> + <message> + <source>&Accelerators</source> + <translation>&Pospeševalniki</translation> + </message> + <message> + <source>Toggle the validity check of accelerators</source> + <translation>Preklopi preverjanje pospeševalnikov</translation> + </message> + <message> + <source>Toggle the validity check of accelerators, i.e. whether the number of ampersands in the source and translation text is the same. If the check fails, a message is shown in the warnings window.</source> + <translation>Preklopi preverjanje pospeševalnikov, t.j. ali je število znakov »&&« v izvornem besedilu enako kot v prevodu. Če preizkus ne uspe, bo v podoknu z opozorili prikazano sporočilo.</translation> + </message> + <message> + <source>&Ending Punctuation</source> + <translation>&Končna ločila</translation> + </message> + <message> + <source>Toggle the validity check of ending punctuation</source> + <translation>Preklopi preverjanje končnih ločil</translation> + </message> + <message> + <source>Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window.</source> + <translation>Preklopi preverjanje končnih ločil. Če preizkus ne uspe, bo v podoknu z opozorili prikazano sporočilo.</translation> + </message> + <message> + <source>&Phrase matches</source> + <translation>&Ujemanje z izrazi</translation> + </message> + <message> + <source>Toggle checking that phrase suggestions are used</source> + <translation>Preklopi preverjanje uporabe predlogov izrazov</translation> + </message> + <message> + <source>Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window.</source> + <translation>Preklopi preverjanje uporabe predlogov izrazov. Če preizkus ne uspe, bo v podoknu z opozorili prikazano sporočilo.</translation> + </message> + <message> + <source>Place &Marker Matches</source> + <translation>Ujemanje &oznak vsebnikov</translation> + </message> + <message> + <source>Toggle the validity check of place markers</source> + <translation>Preklopi preverjanje oznak vsebnikov</translation> + </message> + <message> + <source>Toggle the validity check of place markers, i.e. whether %1, %2, ... are used consistently in the source text and translation text. If the check fails, a message is shown in the warnings window.</source> + <translation>Preklopi preverjanje oznak vsebnikov, tj. ali so %1, %2, itd. v izvornem besedilu in prevodu konsistenčni. Če preizkus ne uspe, bo v podoknu z opozorili prikazano sporočilo.</translation> + </message> + <message> + <source>&New Phrase Book...</source> + <translation>&Nova knjiga z izrazi ...</translation> + </message> + <message> + <source>Create a new phrase book.</source> + <translation>Ustvari novo knjigo izrazov</translation> + </message> + <message> + <source>Ctrl+N</source> + <translation>Ctrl+N</translation> + </message> + <message> + <source>&Open Phrase Book...</source> + <translation>&Odpri knjigo izrazov ...</translation> + </message> + <message> + <source>Open a phrase book to assist translation.</source> + <translation>Odpre knjigo izrazov za pomoč pri prevajanju.</translation> + </message> + <message> + <source>Ctrl+H</source> + <translation>Ctrl+H</translation> + </message> + <message> + <source>&Reset Sorting</source> + <translation>&Ponastavi razvrščanje</translation> + </message> + <message> + <source>Sort the items back in the same order as in the message file.</source> + <translation>Prevajalske enote bodo razvrščene kot v datoteki s sporočili.</translation> + </message> + <message> + <source>&Display guesses</source> + <translation>Prikaži &ugibanja</translation> + </message> + <message> + <source>Set whether or not to display translation guesses.</source> + <translation>Ali naj bodo prikazana ugibanja prevodov.</translation> + </message> + <message> + <source>&Statistics</source> + <translation>&Statistika</translation> + </message> + <message> + <source>Display translation statistics.</source> + <translation>Prikaže statistiko prevodov.</translation> + </message> + <message> + <source>&Manual</source> + <translation>&Priročnik</translation> + </message> + <message> + <source>F1</source> + <translation>F1</translation> + </message> + <message> + <source>About Qt Linguist</source> + <translation>O Qt Linguist</translation> + </message> + <message> + <source>About Qt</source> + <translation>O Qt</translation> + </message> + <message> + <source>Display information about the Qt toolkit by Nokia.</source> + <translation>Prikaže podatke o ogrodju Qt.</translation> + </message> + <message> + <source>&What's This?</source> + <translation>&Kaj je to?</translation> + </message> + <message> + <source>What's This?</source> + <translation>Kaj je to?</translation> + </message> + <message> + <source>Enter What's This? mode.</source> + <translation>Vstop v način Kaj je to?</translation> + </message> + <message> + <source>Shift+F1</source> + <translation>Shift+F1</translation> + </message> + <message> + <source>&Search And Translate...</source> + <translation>&Najdi in prevedi ...</translation> + </message> + <message> + <source>Replace the translation on all entries that matches the search source text.</source> + <translation>Zamenja prevode vseh enot, kjer se izvorno besedilo ujema z iskanim.</translation> + </message> + <message> + <source>&Batch Translation...</source> + <translation>&Paketno prevajanje ...</translation> + </message> + <message> + <source>Batch translate all entries using the information in the phrase books.</source> + <translation>Paketno prevede vse enote in pri tem uporabi podatke iz knjig z izrazi.</translation> + </message> + <message> + <source>Release As...</source> + <translation>Izdaj kot ...</translation> + </message> + <message> + <source>Create a Qt message file suitable for released applications from the current message file. The filename will automatically be determined from the name of the TS file.</source> + <translation>Iz trenutne datoteke s sporočili ustvari datoteko, ki je primerna za izdane programe. Ime datoteke bo izbrano sampdejno glede na ime datoteke *.ts.</translation> + </message> + <message> + <source>File</source> + <translation>Datoteka</translation> + </message> + <message> + <source>Edit</source> + <translation>Urejanje</translation> + </message> + <message> + <source>Translation</source> + <translation>Prevajanje</translation> + </message> + <message> + <source>Validation</source> + <translation>Potrjevanje</translation> + </message> + <message> + <source>Help</source> + <translation>Pomoč</translation> + </message> + <message> + <source>Open/Refresh Form &Preview</source> + <translation>Odpri/osveži &ogled obrazca</translation> + </message> + <message> + <source>Form Preview Tool</source> + <translation>Orodje za ogled obrazca</translation> + </message> + <message> + <source>F5</source> + <translation>F5</translation> + </message> + <message> + <source>Translation File &Settings...</source> + <translation>&Nastavitve datoteke s prevodi ...</translation> + </message> + <message> + <source>&Add to Phrase Book</source> + <translation>&Dodaj v knjigo izrazov</translation> + </message> + <message> + <source>Ctrl+T</source> + <translation>Ctrl+T</translation> + </message> + <message> + <source>Open Read-O&nly...</source> + <translation>Odpri samo za &branje ...</translation> + </message> + <message> + <source>&Save All</source> + <translation>&Shrani vse</translation> + </message> + <message> + <source>Ctrl+S</source> + <translation>Ctrl+S</translation> + </message> + <message> + <source>&Release All</source> + <translation>&Izdaj vse</translation> + </message> + <message> + <source>Close</source> + <translation>Zapri</translation> + </message> + <message> + <source>&Close All</source> + <translation>&Zapri vse</translation> + </message> + <message> + <source>Ctrl+W</source> + <translation> Ctrl+W</translation> + </message> + <message> + <source>Length Variants</source> + <translation>Dolžinske inačice</translation> + </message> + <message> + <source>Source text</source> + <translation>Izvorno besedilo</translation> + </message> + <message> + <source>Index</source> + <translation>Kazalo</translation> + </message> + <message> + <source>Context</source> + <translation>Kontekst</translation> + </message> + <message> + <source>Items</source> + <translation>Postavke</translation> + </message> + <message> + <source>This panel lists the source contexts.</source> + <translation>To podokno prikazuje seznam kontekstov iz izvorne kode.</translation> + </message> + <message> + <source>Strings</source> + <translation>Nizi</translation> + </message> + <message> + <source>Phrases and guesses</source> + <translation>Izrazi in ugibanja</translation> + </message> + <message> + <source>Sources and Forms</source> + <translation>Izvorna koda in obrazci</translation> + </message> + <message> + <source>Warnings</source> + <translation>Opozorila</translation> + </message> + <message> + <source> MOD </source> + <comment>status bar: file(s) modified</comment> + <translation> SPR </translation> + </message> + <message> + <source>Loading...</source> + <translation>Nalaganje ...</translation> + </message> + <message> + <source>Loading File - Qt Linguist</source> + <translation>Nalaganje datoteke – Qt Linguist</translation> + </message> + <message> + <source>The file '%1' does not seem to be related to the currently open file(s) '%2'. + +Close the open file(s) first?</source> + <translation>Kot kaže datoteka »%1« ni povezana s trenutno odprtimi datotekami »%2«. + +Ali želite najprej zapreti odprte datoteke?</translation> + </message> + <message> + <source>The file '%1' does not seem to be related to the file '%2' which is being loaded as well. + +Skip loading the first named file?</source> + <translation>Kot kaže datoteka »%1« ni povezana z datoteko »%2«, ki se ravno tako nalaga. + +Ali želite preskočiti nalaganje prve datoteke?</translation> + </message> + <message numerus="yes"> + <source>%n translation unit(s) loaded.</source> + <translation> + <numerusform>Naložena %n prevajalska enota.</numerusform> + <numerusform>Naloženi %n prevajalski enoti.</numerusform> + <numerusform>Naložene %n prevajalske enote.</numerusform> + <numerusform>Naloženih %n prevajalskih enot.</numerusform> + </translation> + </message> + <message> + <source>Related files (%1);;</source> + <translation>Povezane datoteke (%1);;</translation> + </message> + <message> + <source>Open Translation Files</source> + <translation>Odpri datoteke za prevajanje</translation> + </message> + <message> + <source>File saved.</source> + <translation>Datoteka je shranjena.</translation> + </message> + <message> + <source>Qt message files for released applications (*.qm) +All files (*)</source> + <translation>Datoteke s sporočili za izdane programe (*.qm) +Vse datoteke (*)</translation> + </message> + <message> + <source>File created.</source> + <translation>Datoteka ustvarjena.</translation> + </message> + <message> + <source>Printing...</source> + <translation>Tiskanje ...</translation> + </message> + <message> + <source>Context: %1</source> + <translation>Kontekst: %1</translation> + </message> + <message> + <source>finished</source> + <translation>zaključen</translation> + </message> + <message> + <source>unresolved</source> + <translation>nerazrešen</translation> + </message> + <message> + <source>obsolete</source> + <translation>zastarel</translation> + </message> + <message> + <source>Printing... (page %1)</source> + <translation>Tiskanje (%1. stran) ...</translation> + </message> + <message> + <source>Printing completed</source> + <translation>Tiskanje zaključeno</translation> + </message> + <message> + <source>Printing aborted</source> + <translation>Tiskanje preklicano</translation> + </message> + <message> + <source>Search wrapped.</source> + <translation>Iskanje na drugem koncu</translation> + </message> + <message> + <source>Qt Linguist</source> + <translation>Qt Linguist</translation> + </message> + <message> + <source>Cannot find the string '%1'.</source> + <translation>Ni moč najti niza »%1«.</translation> + </message> + <message> + <source>Search And Translate in '%1' - Qt Linguist</source> + <translation>Najdi in prevedi v »%1« – Qt Linguist</translation> + </message> + <message> + <source>Translate - Qt Linguist</source> + <translation>Prevajanje – Qt Linguist</translation> + </message> + <message numerus="yes"> + <source>Translated %n entry(s)</source> + <translation> + <numerusform>Prevedel %n vnos</numerusform> + <numerusform>Prevedel %n vnosa</numerusform> + <numerusform>Prevedel %n vnose</numerusform> + <numerusform>Prevedel %n vnosov</numerusform> + </translation> + </message> + <message> + <source>No more occurrences of '%1'. Start over?</source> + <translation>Pojavitev »%1« ni več. Ali začnem znova?</translation> + </message> + <message> + <source>Create New Phrase Book</source> + <translation>Ustvari novo knjigo izrazov</translation> + </message> + <message> + <source>Qt phrase books (*.qph) +All files (*)</source> + <translation>Knjiga z izrazi za Qt (*.qph) +Vse datoteke (*)</translation> + </message> + <message> + <source>Phrase book created.</source> + <translation>Knjiga izrazov ustvarjena.</translation> + </message> + <message> + <source>Open Phrase Book</source> + <translation>Odpri knjigo izrazov</translation> + </message> + <message> + <source>Qt phrase books (*.qph);;All files (*)</source> + <translation>Knjiga z izrazi za Qt (*.qph);;Vse datoteke (*)</translation> + </message> + <message numerus="yes"> + <source>%n phrase(s) loaded.</source> + <translation> + <numerusform>Naložil %n izrazov.</numerusform> + <numerusform>Naložil %n izraz.</numerusform> + <numerusform>Naložil %n izraza.</numerusform> + <numerusform>Naložil %n izraze.</numerusform> + </translation> + </message> + <message> + <source>Add to phrase book</source> + <translation>Dodaj v knjigo izrazov</translation> + </message> + <message> + <source>No appropriate phrasebook found.</source> + <translation>Najdene ni bilo nobene ustrezne knjige izrazov.</translation> + </message> + <message> + <source>Adding entry to phrasebook %1</source> + <translation>Dodajam vnos v knjigo izrazov %1</translation> + </message> + <message> + <source>Select phrase book to add to</source> + <translation>Izberite knjigo izrazov za dodajanje vanjo</translation> + </message> + <message> + <source>Unable to launch Qt Assistant (%1)</source> + <translation>Ni moč zagnati Qt Assistanta (%1)</translation> + </message> + <message> + <source>Version %1</source> + <translation>Različica %1</translation> + </message> + <message> + <source><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> + <translation><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist je orodje za dodajanje prevodov programom Qt..</p><p>Avtorske pravice © 2010 Nokia Corporation in/ali njene podružnice.</p><p>Prevedel: <a href="mailto:jlp@holodeck1.com">Jure Repinc</a>, <a href="http://www.lugos.si/">LUGOS</a></p></translation> + </message> + <message> + <source>Do you want to save the modified files?</source> + <translation>Ali želite shraniti spremenjene datoteke?</translation> + </message> + <message> + <source>Do you want to save '%1'?</source> + <translation>Ali želite shraniti »%1«?</translation> + </message> + <message> + <source>Qt Linguist[*]</source> + <translation>Qt Linguist[*]</translation> + </message> + <message> + <source>%1[*] - Qt Linguist</source> + <translation>%1[*] – Qt Linguist</translation> + </message> + <message> + <source>No untranslated translation units left.</source> + <translation>Preostale ni nobene neprevedene prevajalske enote.</translation> + </message> + <message> + <source>&Window</source> + <translation>&Okno</translation> + </message> + <message> + <source>Minimize</source> + <translation>Pomanjšaj</translation> + </message> + <message> + <source>Ctrl+M</source> + <translation>Ctrl+M</translation> + </message> + <message> + <source>Display the manual for %1.</source> + <translation>Prikaži priročnik za %1.</translation> + </message> + <message> + <source>Display information about %1.</source> + <translation>Prikaži podatke o %1.</translation> + </message> + <message> + <source>&Save '%1'</source> + <translation>&Shrani »%1«</translation> + </message> + <message> + <source>Save '%1' &As...</source> + <translation>Shrani »%1« &kot ...</translation> + </message> + <message> + <source>Release '%1'</source> + <translation>Izdaj »%1«</translation> + </message> + <message> + <source>Release '%1' As...</source> + <translation>Izdaj »%1« kot ...</translation> + </message> + <message> + <source>&Close '%1'</source> + <translation>&Zapri »%1«</translation> + </message> + <message> + <source>&Save</source> + <translation>&Shrani</translation> + </message> + <message> + <source>&Close</source> + <translation>&Zapri</translation> + </message> + <message> + <source>Save All</source> + <translation>Shrani vse</translation> + </message> + <message> + <source>Close All</source> + <translation>Zapri vse</translation> + </message> + <message> + <source>&Release</source> + <translation>&Izdaj</translation> + </message> + <message> + <source>Translation File &Settings for '%1'...</source> + <translation>&Nastavitve datoteke s prevodi za »%1« ...</translation> + </message> + <message> + <source>&Batch Translation of '%1'...</source> + <translation>&Paketno prevajanje »%1« ...</translation> + </message> + <message> + <source>Search And &Translate in '%1'...</source> + <translation>&Najdi in prevedi v »%1« ...</translation> + </message> + <message> + <source>Search And &Translate...</source> + <translation>&Najdi in prevedi ...</translation> + </message> + <message> + <source>Cannot read from phrase book '%1'.</source> + <translation>Ni moč brati iz knjige izrazov »%1«.</translation> + </message> + <message> + <source>Close this phrase book.</source> + <translation>Zapri to knjigo izrazov.</translation> + </message> + <message> + <source>Enables you to add, modify, or delete entries in this phrase book.</source> + <translation>Omogoča dodajanje, spreminjanje in brisanje vnosov v knjigi izrazov.</translation> + </message> + <message> + <source>Print the entries in this phrase book.</source> + <translation>Natisne vnose iz te knjige izrazov.</translation> + </message> + <message> + <source>Cannot create phrase book '%1'.</source> + <translation>Ni moč ustvariti knjige izrazov »%1«.</translation> + </message> + <message> + <source>Do you want to save phrase book '%1'?</source> + <translation>Ali želite shraniti knjigo izrazov »%1«?</translation> + </message> + <message> + <source>All</source> + <translation>Vse</translation> + </message> +</context> +<context> + <name>MessageEditor</name> + <message> + <source>Russian</source> + <translation>Ruščina</translation> + </message> + <message> + <source>German</source> + <translation>Nemščina</translation> + </message> + <message> + <source>Japanese</source> + <translation>Japonščina</translation> + </message> + <message> + <source>French</source> + <translation>Francoščina</translation> + </message> + <message> + <source>Polish</source> + <translation>Poljščina</translation> + </message> + <message> + <source>Chinese</source> + <translation>Kitajščina</translation> + </message> + <message> + <source>This whole panel allows you to view and edit the translation of some source text.</source> + <translation>To podokno vam omogoča ogled in urejanje prevoda izvornega besedila.</translation> + </message> + <message> + <source>Source text</source> + <translation>Izvorno besedilo</translation> + </message> + <message> + <source>This area shows the source text.</source> + <translation>To področje prikazuje izvorno besedilo.</translation> + </message> + <message> + <source>Source text (Plural)</source> + <translation>Izvorno besedilo (množina)</translation> + </message> + <message> + <source>This area shows the plural form of the source text.</source> + <translation>To področje prikazuje množinsko obliko izvornega besedila.</translation> + </message> + <message> + <source>Developer comments</source> + <translation>Komentarji razvijalcev</translation> + </message> + <message> + <source>This area shows a comment that may guide you, and the context in which the text occurs.</source> + <translation>To področje prikazuje komentar, ki vas lahko vodi, in kontekst v katerem se besedilo pojavi.</translation> + </message> + <message> + <source>Here you can enter comments for your own use. They have no effect on the translated applications.</source> + <translation>Sem lahko vnesete komentarje za lastne potrebe. Na prevedene programe ne vplivajo.</translation> + </message> + <message> + <source>%1 translation (%2)</source> + <translation>%1 prevod (%2)</translation> + </message> + <message> + <source>This is where you can enter or modify the translation of the above source text.</source> + <translation>Sem lahko vnesete ali pa tu spremenite prevod gornjega izvornega besedila.</translation> + </message> + <message> + <source>%1 translation</source> + <translation>%1 prevod</translation> + </message> + <message> + <source>%1 translator comments</source> + <translation>%1 prevajalski komentarji</translation> + </message> + <message> + <source>'%1' +Line: %2</source> + <translation>»%1« +Vrstica: %2</translation> + </message> +</context> +<context> + <name>MessageModel</name> + <message> + <source>Completion status for %1</source> + <translation>Stanje za %1</translation> + </message> + <message> + <source><file header></source> + <translation><glava datoteke></translation> + </message> + <message> + <source><context comment></source> + <translation><komentar konteksta></translation> + </message> + <message> + <source><unnamed context></source> + <translation><neimenovan kontekst></translation> + </message> +</context> +<context> + <name>PhraseBookBox</name> + <message> + <source>Edit Phrase Book</source> + <translation>Uredi knjigo izrazov</translation> + </message> + <message> + <source>This window allows you to add, modify, or delete entries in a phrase book.</source> + <translation>To okno omogoča dodajanje, spreminjanje in brisanje vnosov v knjigi izrazov.</translation> + </message> + <message> + <source>&Translation:</source> + <translation>&Prevod:</translation> + </message> + <message> + <source>This is the phrase in the target language corresponding to the source phrase.</source> + <translation>To je izraz v ciljnem jeziku, ki ustreza izvornemu izrazu.</translation> + </message> + <message> + <source>S&ource phrase:</source> + <translation>&Izvorni izraz:</translation> + </message> + <message> + <source>This is a definition for the source phrase.</source> + <translation>To je definicija za izvorni izraz.</translation> + </message> + <message> + <source>This is the phrase in the source language.</source> + <translation>To je izraz v izvornem jeziku.</translation> + </message> + <message> + <source>&Definition:</source> + <translation>&Definicija:</translation> + </message> + <message> + <source>Click here to add the phrase to the phrase book.</source> + <translation>Kliknite, da dodate izraz v knjigo izrazov.</translation> + </message> + <message> + <source>&New Entry</source> + <translation>&Nov vnos</translation> + </message> + <message> + <source>Click here to remove the entry from the phrase book.</source> + <translation>Kliknite, da odstranite vnos iz knjige izrazov.</translation> + </message> + <message> + <source>&Remove Entry</source> + <translation>&Odstrani vnos</translation> + </message> + <message> + <source>Settin&gs...</source> + <translation>&Nastavitve ...</translation> + </message> + <message> + <source>Click here to save the changes made.</source> + <translation>Kliknite za shranitev opravljenih sprememb.</translation> + </message> + <message> + <source>&Save</source> + <translation>&Shrani</translation> + </message> + <message> + <source>Click here to close this window.</source> + <translation>Kliknite, da zaprete to okno.</translation> + </message> + <message> + <source>Close</source> + <translation>Zapri</translation> + </message> + <message> + <source>(New Entry)</source> + <translation>(Nov vnos)</translation> + </message> + <message> + <source>%1[*] - Qt Linguist</source> + <translation>%1[*] – Qt Linguist</translation> + </message> + <message> + <source>Qt Linguist</source> + <translation>Qt Linguist</translation> + </message> + <message> + <source>Cannot save phrase book '%1'.</source> + <translation>Ni moč shraniti knjige izrazov »%1«.</translation> + </message> +</context> +<context> + <name>PhraseModel</name> + <message> + <source>Source phrase</source> + <translation>Izvorni izraz</translation> + </message> + <message> + <source>Translation</source> + <translation>Prevod</translation> + </message> + <message> + <source>Definition</source> + <translation>Definicija</translation> + </message> +</context> +<context> + <name>PhraseView</name> + <message> + <source>Insert</source> + <translation>Vstavi</translation> + </message> + <message> + <source>Edit</source> + <translation>Uredi</translation> + </message> + <message> + <source>Guess (%1)</source> + <translation>Ugibanje (%1)</translation> + </message> + <message> + <source>Guess</source> + <translation>Ugibanje</translation> + </message> +</context> +<context> + <name>QObject</name> + <message> + <source>Translation files (%1);;</source> + <translation>Prevajalske datoteke (%1);;</translation> + </message> + <message> + <source>All files (*)</source> + <translation>Vse datoteke (*)</translation> + </message> + <message> + <source>Qt Linguist</source> + <translation>Qt Linguist</translation> + </message> + <message> + <source>GNU Gettext localization files</source> + <translation>Prevajalske datoteke GNU Gettext</translation> + </message> + <message> + <source>GNU Gettext localization template files</source> + <translation>Predloge prevajalskih datotek GNU Gettext</translation> + </message> + <message> + <source>Compiled Qt translations</source> + <translation>Prevedeni prevodi za Qt</translation> + </message> + <message> + <source>Qt Linguist 'Phrase Book'</source> + <translation>Knjiga izrazov za Qt Linguist</translation> + </message> + <message> + <source>Qt translation sources (format 1.1)</source> + <translation>Prevajalski viri za Qt (različica 1.1)</translation> + </message> + <message> + <source>Qt translation sources (format 2.0)</source> + <translation>Prevajalski viri za Qt (različica 2.0)</translation> + </message> + <message> + <source>Qt translation sources (latest format)</source> + <translation>Prevajalski viri za Qt (najnovejša različica)</translation> + </message> + <message> + <source>XLIFF localization files</source> + <translation>Prevajalske datoteke XLIFF</translation> + </message> +</context> +<context> + <name>SourceCodeView</name> + <message> + <source><i>Source code not available</i></source> + <translation><i>Izvorna koda ni na voljo</i></translation> + </message> + <message> + <source><i>File %1 not available</i></source> + <translation><i>Datoteka %1 ni na voljo</i></translation> + </message> + <message> + <source><i>File %1 not readable</i></source> + <translation><i>Datoteka %1 ni berljiva</i></translation> + </message> +</context> +<context> + <name>Statistics</name> + <message> + <source>Statistics</source> + <translation>Statistika</translation> + </message> + <message> + <source>Close</source> + <translation>Zapri</translation> + </message> + <message> + <source>Translation</source> + <translation>Prevod</translation> + </message> + <message> + <source>Source</source> + <translation>Vir</translation> + </message> + <message> + <source>0</source> + <translation>0</translation> + </message> + <message> + <source>Words:</source> + <translation>Besede:</translation> + </message> + <message> + <source>Characters:</source> + <translation>Znaki:</translation> + </message> + <message> + <source>Characters (with spaces):</source> + <translation>Znaki (s presledki):</translation> + </message> +</context> +<context> + <name>TranslateDialog</name> + <message> + <source>This window allows you to search for some text in the translation source file.</source> + <translation>To okno omogoča iskanje besedila v izvorni datoteki s prevodom.</translation> + </message> + <message> + <source>Type in the text to search for.</source> + <translation>Vnesite iskano besedilo.</translation> + </message> + <message> + <source>Find &source text:</source> + <translation>Najdi &izvorno besedilo:</translation> + </message> + <message> + <source>&Translate to:</source> + <translation>&Prevedi v:</translation> + </message> + <message> + <source>Search options</source> + <translation>Možnosti iskanja</translation> + </message> + <message> + <source>Texts such as 'TeX' and 'tex' are considered as different when checked.</source> + <translation>Ko je omogočeno, se razlikuje med besedili kot sta »KDE« in »kde«.</translation> + </message> + <message> + <source>Match &case</source> + <translation>Ujemanje &velikosti črk</translation> + </message> + <message> + <source>Mark new translation as &finished</source> + <translation>Nove prevode označi kot &zaključene</translation> + </message> + <message> + <source>Click here to find the next occurrence of the text you typed in.</source> + <translation>Kliknite, da poiščete naslednjo pojavitev vnešenega besedila.</translation> + </message> + <message> + <source>Find Next</source> + <translation>Najdi naslednje</translation> + </message> + <message> + <source>Translate</source> + <translation>Prevedi</translation> + </message> + <message> + <source>Translate All</source> + <translation>Prevedi vse</translation> + </message> + <message> + <source>Click here to close this window.</source> + <translation>Kliknite, da zaprete to okno.</translation> + </message> + <message> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> +</context> +<context> + <name>TranslationSettingsDialog</name> + <message> + <source>Source language</source> + <translation>Izvorni jezik</translation> + </message> + <message> + <source>Language</source> + <translation>Jezik</translation> + </message> + <message> + <source>Country/Region</source> + <translation>Država/regija:</translation> + </message> + <message> + <source>Target language</source> + <translation>Ciljni jezik</translation> + </message> + <message> + <source>Settings for '%1' - Qt Linguist</source> + <translation>Nastavitve za »%1« – Qt Linguist</translation> + </message> + <message> + <source>Any Country</source> + <translation>Katerakoli država</translation> + </message> +</context> +</TS> diff --git a/translations/qt_help_sl.ts b/translations/qt_help_sl.ts new file mode 100644 index 0000000..7d76e58 --- /dev/null +++ b/translations/qt_help_sl.ts @@ -0,0 +1,329 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="sl"> + <extra-po-header-po_revision_date>2010-08-28 13:32+0200</extra-po-header-po_revision_date> + <extra-po-headers>MIME-Version,Content-Type,Content-Transfer-Encoding,Plural-Forms,X-Language,X-Qt-Contexts,Last-Translator,PO-Revision-Date,Project-Id-Version,Language-Team,X-Generator</extra-po-headers> + <extra-po-header-x_generator>Lokalize 1.1</extra-po-header-x_generator> + <extra-po-header-language_team>Slovenian <lugos-slo@lugos.si></extra-po-header-language_team> + <extra-po-header-project_id_version></extra-po-header-project_id_version> + <extra-po-header_comment># Jure Repinc <jlp@holodeck1.com>, 2010.</extra-po-header_comment> + <extra-po-header-last_translator>Jure Repinc <jlp@holodeck1.com></extra-po-header-last_translator> +<context> + <name>QCLuceneResultWidget</name> + <message> + <source>Search Results</source> + <translation>Rezultati iskanja</translation> + </message> + <message> + <source>Note:</source> + <translation>Opomba:</translation> + </message> + <message> + <source>The search results may not be complete since the documentation is still being indexed!</source> + <translation>Rezultati iskanja morda niso popolni, saj se dokumentacijo še vedno indeksira.</translation> + </message> + <message> + <source>Your search did not match any documents.</source> + <translation>Vašemu iskanju ne ustreza noben dokument.</translation> + </message> + <message> + <source>(The reason for this might be that the documentation is still being indexed.)</source> + <translation>(Razlog je morda to, da se dokumentacijo še vedno indeksira.)</translation> + </message> +</context> +<context> + <name>QHelp</name> + <message> + <source>Untitled</source> + <translation>Brez naslova</translation> + </message> +</context> +<context> + <name>QHelpCollectionHandler</name> + <message> + <source>The collection file '%1' is not set up yet!</source> + <translation>Datoteka zbirke »%1« še ni nastavljena.</translation> + </message> + <message> + <source>Cannot load sqlite database driver!</source> + <translation>Ni moč naložiti gonilnika za podatkovno zbirko SQLite.</translation> + </message> + <message> + <source>Cannot open collection file: %1</source> + <translation>Datoteke zbirke ni moč odpreti: %1</translation> + </message> + <message> + <source>Cannot create tables in file %1!</source> + <translation>V datoteki %1 ni moč ustvariti tabel.</translation> + </message> + <message> + <source>The collection file '%1' already exists!</source> + <translation>Datoteka zbirke »%1« že obstaja.</translation> + </message> + <message> + <source>Cannot create directory: %1</source> + <translation>Ni moč ustvariti mape: %1</translation> + </message> + <message> + <source>Cannot copy collection file: %1</source> + <translation>Ni moč skopirati datoteke zbirke: %1</translation> + </message> + <message> + <source>Unknown filter '%1'!</source> + <translation>Neznan filter »%1«.</translation> + </message> + <message> + <source>Cannot register filter %1!</source> + <translation>Filtra %1 ni moč registrirati.</translation> + </message> + <message> + <source>Cannot open documentation file %1!</source> + <translation>Ni moč odpreti datoteke z dokumentacijo %1.</translation> + </message> + <message> + <source>Invalid documentation file '%1'!</source> + <translation>Neveljavna datoteka z dokumentacijo »%1«.</translation> + </message> + <message> + <source>The namespace %1 was not registered!</source> + <translation>Imenski prostor %1 ni bil registriran.</translation> + </message> + <message> + <source>Namespace %1 already exists!</source> + <translation>Imenski prostor %1 že obstaja.</translation> + </message> + <message> + <source>Cannot register namespace '%1'!</source> + <translation>Imenskega prostora »%1« ni moč registrirati.</translation> + </message> + <message> + <source>Cannot open database '%1' to optimize!</source> + <translation>Podatkovne zbirke »%1« ni moč odpreti za optimizacijo.</translation> + </message> +</context> +<context> + <name>QHelpDBReader</name> + <message> + <source>Cannot open database '%1' '%2': %3</source> + <extracomment>The placeholders are: %1 - The name of the database which cannot be opened %2 - The unique id for the connection %3 - The actual error string +</extracomment> + <translation>Podatkovne zbirke »%1« »%2« ni moč odpreti: %3</translation> + </message> +</context> +<context> + <name>QHelpEngineCore</name> + <message> + <source>Cannot open documentation file %1: %2!</source> + <translation>Ni moč odpreti datoteke z dokumentacijo %1: %2.</translation> + </message> + <message> + <source>The specified namespace does not exist!</source> + <translation>Navedeni imenski prostor ne obstaja.</translation> + </message> +</context> +<context> + <name>QHelpGenerator</name> + <message> + <source>Invalid help data!</source> + <translation>Neveljavni podatki s pomočjo.</translation> + </message> + <message> + <source>No output file name specified!</source> + <translation>Navedenega ni nobenega imena izhodne datoteke.</translation> + </message> + <message> + <source>The file %1 cannot be overwritten!</source> + <translation>Datoteke %1 ni moč nadomestiti.</translation> + </message> + <message> + <source>Building up file structure...</source> + <translation>Grajenje datotečne strukture ...</translation> + </message> + <message> + <source>Cannot open data base file %1!</source> + <translation>Datoteke podatkovne zbirke %1 ni moč odpreti.</translation> + </message> + <message> + <source>Cannot register namespace %1!</source> + <translation>Imenskega prostora %1 ni moč registrirati.</translation> + </message> + <message> + <source>Insert custom filters...</source> + <translation>Vstavi filtre po meri ...</translation> + </message> + <message> + <source>Insert help data for filter section (%1 of %2)...</source> + <translation>Vstavljanje podatkov s pomočjo za filtrirni razdelek (%1 od %2) ...</translation> + </message> + <message> + <source>Documentation successfully generated.</source> + <translation>Dokumentacija je bila uspešno ustvarjena.</translation> + </message> + <message> + <source>Some tables already exist!</source> + <translation>Nekatere tabele že obstajajo.</translation> + </message> + <message> + <source>Cannot create tables!</source> + <translation>Tabel ni moč ustvariti.</translation> + </message> + <message> + <source>Cannot register virtual folder!</source> + <translation>Navidezne mape ni moč registrirati.</translation> + </message> + <message> + <source>Insert files...</source> + <translation>Vstavi datoteke ...</translation> + </message> + <message> + <source>The referenced file %1 must be inside or within a subdirectory of (%2). Skipping it.</source> + <translation>Sklicana datoteka %1 se mora nahajti v mapi (%1) ali njeni podmapi. Preskakujem jo.</translation> + </message> + <message> + <source>The file %1 does not exist! Skipping it.</source> + <translation>Datoteka %1 ne obstaja. Preskakujem jo.</translation> + </message> + <message> + <source>Cannot open file %1! Skipping it.</source> + <translation>Datoteke %1 ni moč odpreti. Preskakujem jo.</translation> + </message> + <message> + <source>The filter %1 is already registered!</source> + <translation>Filter %1 je že registriran.</translation> + </message> + <message> + <source>Cannot register filter %1!</source> + <translation>Filtra %1 ni moč registrirati.</translation> + </message> + <message> + <source>Insert indices...</source> + <translation>Vstavi kazala ...</translation> + </message> + <message> + <source>Insert contents...</source> + <translation>Vstavi vsebino ...</translation> + </message> + <message> + <source>Cannot insert contents!</source> + <translation>Vsebine ni moč vstaviti.</translation> + </message> + <message> + <source>Cannot register contents!</source> + <translation>Vsebine ni moč registrirati.</translation> + </message> + <message> + <source>File '%1' does not exist.</source> + <translation>Filter »%1« ne obstaja.</translation> + </message> + <message> + <source>File '%1' cannot be opened.</source> + <translation>Filtra »%1« ni moč odpreti.</translation> + </message> + <message> + <source>File '%1' contains an invalid link to file '%2'</source> + <translation>Datoteka »%1« vsebuje neveljavno povezavo na datoteko »%2«</translation> + </message> + <message> + <source>Invalid links in HTML files.</source> + <translation>Neveljavne povezave v datotekah HTML.</translation> + </message> +</context> +<context> + <name>QHelpProject</name> + <message> + <source>Unknown token.</source> + <translation>Neznan žeton.</translation> + </message> + <message> + <source>Unknown token. Expected "QtHelpProject"!</source> + <translation>Neznan žeton. Pričakovan je bil »QtHelpProject«.</translation> + </message> + <message> + <source>Error in line %1: %2</source> + <translation>Napaka v vrstici %1: %2</translation> + </message> + <message> + <source>Virtual folder has invalid syntax.</source> + <translation>Navidezna mapa ima neveljavno skladnjo.</translation> + </message> + <message> + <source>Namespace has invalid syntax.</source> + <translation>Imenski prostor ima neveljavno skladnjo.</translation> + </message> + <message> + <source>Missing namespace in QtHelpProject.</source> + <translation>Manjkajoč imenski prostor v QtHelpProject.</translation> + </message> + <message> + <source>Missing virtual folder in QtHelpProject</source> + <translation>Manjkajoča navidezna mapa v QtHelpProject.</translation> + </message> + <message> + <source>Missing attribute in keyword at line %1.</source> + <translation>Manjkajoča lastnost v ključni besedi v vrstici %1.</translation> + </message> + <message> + <source>The input file %1 could not be opened!</source> + <translation>Vhodne datoteke %1 ni bilo moč odpreti.</translation> + </message> +</context> +<context> + <name>QHelpSearchQueryWidget</name> + <message> + <source>Search for:</source> + <translation>Išči:</translation> + </message> + <message> + <source>Previous search</source> + <translation>Predhodno iskanje</translation> + </message> + <message> + <source>Next search</source> + <translation>Naslednje iskanje</translation> + </message> + <message> + <source>Search</source> + <translation>Išči</translation> + </message> + <message> + <source>Advanced search</source> + <translation>Napredno iskanje</translation> + </message> + <message> + <source>words <B>similar</B> to:</source> + <translation>besede <B>podobne</B>:</translation> + </message> + <message> + <source><B>without</B> the words:</source> + <translation><B>brez</B> besed:</translation> + </message> + <message> + <source>with <B>exact phrase</B>:</source> + <translation>s <B>točnim izrazom</B>:</translation> + </message> + <message> + <source>with <B>all</B> of the words:</source> + <translation>z <B>vsemi</B> besedami:</translation> + </message> + <message> + <source>with <B>at least one</B> of the words:</source> + <translation>z <B>vsaj eno</B> izmed besed:</translation> + </message> +</context> +<context> + <name>QHelpSearchResultWidget</name> + <message numerus="yes"> + <source>%1 - %2 of %n Hits</source> + <translation> + <numerusform>%1 – %2 od %n zadetka</numerusform> + <numerusform>%1 – %2 od %n zadetkov</numerusform> + <numerusform>%1 – %2 od %n zadetkov</numerusform> + <numerusform>%1 – %2 od %n zadetkov</numerusform> + </translation> + </message> + <message> + <source>0 - 0 of 0 Hits</source> + <translation>0 - 0 od 0 zadetkov</translation> + </message> +</context> +</TS> diff --git a/translations/qt_sl.ts b/translations/qt_sl.ts index e0cee0f..6bc552b 100644 --- a/translations/qt_sl.ts +++ b/translations/qt_sl.ts @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.0" language="sl"> - <extra-po-header-po_revision_date>2010-08-05 12:59+0200</extra-po-header-po_revision_date> + <extra-po-header-po_revision_date>2010-08-29 00:26+0200</extra-po-header-po_revision_date> <extra-po-headers>MIME-Version,Content-Type,Content-Transfer-Encoding,Plural-Forms,X-Language,X-Qt-Contexts,Last-Translator,PO-Revision-Date,Project-Id-Version,Language-Team,X-Generator</extra-po-headers> <extra-po-header-x_generator>Lokalize 1.1</extra-po-header-x_generator> <extra-po-header-language_team>Slovenian <lugos-slo@lugos.si></extra-po-header-language_team> @@ -1328,194 +1328,194 @@ v <name>QDeclarativeAnchors</name> <message> <source>Possible anchor loop detected on fill.</source> - <translation type="unfinished">Ob zapolnjevanju je bila zaznana možna zanka sidra.</translation> + <translation>Ob zapolnjevanju je bila zaznana možna zanka sidra.</translation> </message> <message> <source>Possible anchor loop detected on centerIn.</source> - <translation type="unfinished">Ob usrediščanju je bila zaznana možna zanka sidra.</translation> + <translation>Ob usrediščanju je bila zaznana možna zanka sidra.</translation> </message> <message> <source>Cannot anchor to an item that isn't a parent or sibling.</source> - <translation type="unfinished">Na objekt, ki ni nadrejen ali enakovreden, se ni moč zasidrati.</translation> + <translation>Na objekt, ki ni nadrejen ali enakovreden, se ni moč zasidrati.</translation> </message> <message> <source>Possible anchor loop detected on vertical anchor.</source> - <translation type="unfinished">Ob navpičnem sidru je bila zaznana možna zanka sidra.</translation> + <translation>Ob navpičnem sidru je bila zaznana možna zanka sidra.</translation> </message> <message> <source>Possible anchor loop detected on horizontal anchor.</source> - <translation type="unfinished">Ob vodoravnem sidru je bila zaznana možna zanka sidra.</translation> + <translation>Ob vodoravnem sidru je bila zaznana možna zanka sidra.</translation> </message> <message> <source>Cannot specify left, right, and hcenter anchors.</source> - <translation type="unfinished">Levih, desnih in vodoravno sredinskih sider ni moč določiti.</translation> + <translation>Levih, desnih in vodoravno sredinskih sider ni moč določiti.</translation> </message> <message> <source>Cannot anchor to a null item.</source> - <translation type="unfinished">Na ničelni objekt se ni moč zasidrati.</translation> + <translation>Na neobstoječ objekt se ni moč zasidrati.</translation> </message> <message> <source>Cannot anchor a horizontal edge to a vertical edge.</source> - <translation type="unfinished">Vodoravnega roba ni moč zasidrati na navpični rob.</translation> + <translation>Vodoravnega roba ni moč zasidrati na navpični rob.</translation> </message> <message> <source>Cannot anchor item to self.</source> - <translation type="unfinished">Objekta ni moč zasidrati samega nase.</translation> + <translation>Objekta ni moč zasidrati samega nase.</translation> </message> <message> <source>Cannot specify top, bottom, and vcenter anchors.</source> - <translation type="unfinished">Vrhnjih, spodnjih in navpično sredinskih sider ni moč določiti.</translation> + <translation>Vrhnjih, spodnjih in navpično sredinskih sider ni moč določiti.</translation> </message> <message> <source>Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.</source> - <translation type="unfinished">Sidra na osnovnici ni moč uporabiti skupaj z vrhnjimi, spodnjimi ali navpično sredinskimi sidri.</translation> + <translation>Sidra na osnovnici ni moč uporabiti skupaj z vrhnjimi, spodnjimi ali navpično sredinskimi sidri.</translation> </message> <message> <source>Cannot anchor a vertical edge to a horizontal edge.</source> - <translation type="unfinished">Navpičnega roba ni moč zasidrati na vodoravni rob.</translation> + <translation>Navpičnega roba ni moč zasidrati na vodoravni rob.</translation> </message> </context> <context> <name>QDeclarativeAnimatedImage</name> <message> <source>Qt was built without support for QMovie</source> - <translation type="unfinished">Qt je bil zgrajen brez podpore za QMovie</translation> + <translation>Qt je bil zgrajen brez podpore za QMovie</translation> </message> </context> <context> <name>QDeclarativeBehavior</name> <message> <source>Cannot change the animation assigned to a Behavior.</source> - <translation type="unfinished">Animacije, ki je prirejena obnašanju, ni moč spremeniti.</translation> + <translation>Animacije, ki je prirejena obnašanju, ni moč spremeniti.</translation> </message> </context> <context> <name>QDeclarativeBinding</name> <message> <source>Binding loop detected for property "%1"</source> - <translation type="unfinished">Za lastnost »%1« je bila zaznana zanka vezave</translation> + <translation>Za lastnost »%1« je bila zaznana zanka vezave</translation> </message> </context> <context> <name>QDeclarativeCompiledBindings</name> <message> <source>Binding loop detected for property "%1"</source> - <translation type="unfinished">Za lastnost »%1« je bila zaznana zanka vezave</translation> + <translation>Za lastnost »%1« je bila zaznana zanka vezave</translation> </message> </context> <context> <name>QDeclarativeCompiler</name> <message> <source>Invalid property assignment: "%1" is a read-only property</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: »%1« je lastnost, ki je samo za branje</translation> + <translation>Neveljavna prireditev lastnosti: »%1« je lastnost, ki je samo za branje</translation> </message> <message> <source>Invalid property assignment: unknown enumeration</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: neznano oštevilčenje</translation> + <translation>Neveljavna prireditev lastnosti: neznano oštevilčenje</translation> </message> <message> <source>Invalid property assignment: string expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovan je niz</translation> + <translation>Neveljavna prireditev lastnosti: pričakovan je niz</translation> </message> <message> <source>Invalid property assignment: url expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovan je URL</translation> + <translation>Neveljavna prireditev lastnosti: pričakovan je URL</translation> </message> <message> <source>Invalid property assignment: unsigned int expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovano je nepredznačeno celo število</translation> + <translation>Neveljavna prireditev lastnosti: pričakovano je nepredznačeno celo število</translation> </message> <message> <source>Invalid property assignment: int expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovano je celo število</translation> + <translation>Neveljavna prireditev lastnosti: pričakovano je celo število</translation> </message> <message> <source>Invalid property assignment: number expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovano je število</translation> + <translation>Neveljavna prireditev lastnosti: pričakovano je število</translation> </message> <message> <source>Invalid property assignment: color expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovana je barva</translation> + <translation>Neveljavna prireditev lastnosti: pričakovana je barva</translation> </message> <message> <source>Invalid property assignment: date expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovan je datum</translation> + <translation>Neveljavna prireditev lastnosti: pričakovan je datum</translation> </message> <message> <source>Invalid property assignment: time expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovan je čas</translation> + <translation>Neveljavna prireditev lastnosti: pričakovan je čas</translation> </message> <message> <source>Invalid property assignment: datetime expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovana sta datum in čas</translation> + <translation>Neveljavna prireditev lastnosti: pričakovana sta datum in čas</translation> </message> <message> <source>Invalid property assignment: point expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovana je točka</translation> + <translation>Neveljavna prireditev lastnosti: pričakovana je točka</translation> </message> <message> <source>Invalid property assignment: size expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovana je velikost</translation> + <translation>Neveljavna prireditev lastnosti: pričakovana je velikost</translation> </message> <message> <source>Invalid property assignment: rect expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovan je pravokotnik</translation> + <translation>Neveljavna prireditev lastnosti: pričakovan je pravokotnik</translation> </message> <message> <source>Invalid property assignment: boolean expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovana je logična vrednost</translation> + <translation>Neveljavna prireditev lastnosti: pričakovana je logična vrednost</translation> </message> <message> <source>Invalid property assignment: 3D vector expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovan je 3D vektor</translation> + <translation>Neveljavna prireditev lastnosti: pričakovan je 3D vektor</translation> </message> <message> <source>Invalid property assignment: unsupported type "%1"</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: nepodprta vrsta »%1«</translation> + <translation>Neveljavna prireditev lastnosti: nepodprta vrsta »%1«</translation> </message> <message> <source>Element is not creatable.</source> - <translation type="unfinished">Elementa ni moč ustvariti.</translation> + <translation>Elementa ni moč ustvariti.</translation> </message> <message> <source>Component elements may not contain properties other than id</source> - <translation type="unfinished">Elementi komponent ne smejo vsebovati drugih lastnosti kot ID</translation> + <translation>Elementi komponent ne smejo vsebovati drugih lastnosti kot ID</translation> </message> <message> <source>Invalid component id specification</source> - <translation type="unfinished">Neveljavno določen ID komponente</translation> + <translation>Neveljavno določen ID komponente</translation> </message> <message> <source>id is not unique</source> - <translation type="unfinished">ID ni edinstven</translation> + <translation>ID ni edinstven</translation> </message> <message> <source>Invalid component body specification</source> - <translation type="unfinished">Neveljavno določeno telo komponente</translation> + <translation>Neveljavno določeno telo komponente</translation> </message> <message> <source>Component objects cannot declare new properties.</source> - <translation type="unfinished">Objekti komponent ne morejo deklarirati novih lastnosti.</translation> + <translation>Objekti komponent ne morejo deklarirati novih lastnosti.</translation> </message> <message> <source>Component objects cannot declare new signals.</source> - <translation type="unfinished">Objekti komponent ne morejo deklarirati novih signalov.</translation> + <translation>Objekti komponent ne morejo deklarirati novih signalov.</translation> </message> <message> <source>Component objects cannot declare new functions.</source> - <translation type="unfinished">Objekti komponent ne morejo deklarirati novih funkcij.</translation> + <translation>Objekti komponent ne morejo deklarirati novih funkcij.</translation> </message> <message> <source>Cannot create empty component specification</source> - <translation type="unfinished">Prazne specifikacije komponente ni moč ustvariti</translation> + <translation>Prazne specifikacije komponente ni moč ustvariti</translation> </message> <message> <source>Incorrectly specified signal assignment</source> - <translation type="unfinished">Napačno določena prireditev signalu</translation> + <translation>Napačno določena prireditev signalu</translation> </message> <message> <source>Cannot assign a value to a signal (expecting a script to be run)</source> - <translation type="unfinished">Signalu ni moč prirediti vrednosti (pričakovan je skript, ki bo zagnan)</translation> + <translation>Signalu ni moč prirediti vrednosti (pričakovan je skript, ki bo zagnan)</translation> </message> <message> <source>Empty signal assignment</source> @@ -1527,247 +1527,247 @@ v </message> <message> <source>Attached properties cannot be used here</source> - <translation type="unfinished">Pripete lastnosti tu ne morejo biti uporabljene</translation> + <translation>Pripete lastnosti tu ne morejo biti uporabljene</translation> </message> <message> <source>Non-existent attached object</source> - <translation type="unfinished">Neobstoječ pripet objekt</translation> + <translation>Neobstoječ pripet objekt</translation> </message> <message> <source>Invalid attached object assignment</source> - <translation type="unfinished">Neveljavna prireditev pripetega objekta</translation> + <translation>Neveljavna prireditev pripetega objekta</translation> </message> <message> <source>Cannot assign to non-existent default property</source> - <translation type="unfinished">Neobstoječi privzeti lastnosti ni moč prirediti</translation> + <translation>Neobstoječi privzeti lastnosti ni moč prirediti</translation> </message> <message> <source>Cannot assign to non-existent property "%1"</source> - <translation type="unfinished">Neobstoječi lastnosti »%1« ni moč prirediti</translation> + <translation>Neobstoječi lastnosti »%1« ni moč prirediti</translation> </message> <message> <source>Invalid use of namespace</source> - <translation type="unfinished">Napačna raba imenskega prostora</translation> + <translation>Napačna raba imenskega prostora</translation> </message> <message> <source>Not an attached property name</source> - <translation type="unfinished">Ni ime pripete lastnosti</translation> + <translation>Ni ime pripete lastnosti</translation> </message> <message> <source>Invalid use of id property</source> - <translation type="unfinished">Napačna raba lastnosti ID</translation> + <translation>Napačna raba lastnosti ID</translation> </message> <message> <source>Property has already been assigned a value</source> - <translation type="unfinished">Lastnosti je že bila prirejena vrednost</translation> + <translation>Lastnosti je že bila prirejena vrednost</translation> </message> <message> <source>Invalid grouped property access</source> - <translation type="unfinished">Neveljaven dostop do skupinske lastnosti</translation> + <translation>Neveljaven dostop do skupinske lastnosti</translation> </message> <message> <source>Cannot assign a value directly to a grouped property</source> - <translation type="unfinished">Skupinski lastnosti ni moč neposredno prirediti vrednosti</translation> + <translation>Skupinski lastnosti ni moč neposredno prirediti vrednosti</translation> </message> <message> <source>Invalid property use</source> - <translation type="unfinished">Neveljavna raba lastnosti</translation> + <translation>Neveljavna raba lastnosti</translation> </message> <message> <source>Property assignment expected</source> - <translation type="unfinished">Pričakovana je prireditev lastnosti</translation> + <translation>Pričakovana je prireditev lastnosti</translation> </message> <message> <source>Single property assignment expected</source> - <translation type="unfinished">Pričakovana je enojna prireditev lastnosti</translation> + <translation>Pričakovana je enojna prireditev lastnosti</translation> </message> <message> <source>Unexpected object assignment</source> - <translation type="unfinished">Nepričakovana prireditev objekta</translation> + <translation>Nepričakovana prireditev objekta</translation> </message> <message> <source>Cannot assign object to list</source> - <translation type="unfinished">Objekta ni moč prirediti seznamu</translation> + <translation>Objekta ni moč prirediti seznamu</translation> </message> <message> <source>Can only assign one binding to lists</source> - <translation type="unfinished">Seznamom je moč prirediti le eno vezavo</translation> + <translation>Seznamom je moč prirediti le eno vezavo</translation> </message> <message> <source>Cannot assign primitives to lists</source> - <translation type="unfinished">Seznamom ni moč prirediti osnovnih tipov</translation> + <translation>Seznamom ni moč prirediti osnovnih tipov</translation> </message> <message> <source>Cannot assign multiple values to a script property</source> - <translation type="unfinished"></translation> + <translation>Lastnosti »script« ni moč prirediti več vrednosti</translation> </message> <message> <source>Invalid property assignment: script expected</source> - <translation type="unfinished">Neveljavna prireditev lastnosti: pričakovan je skript</translation> + <translation>Neveljavna prireditev lastnosti: pričakovan je skript</translation> </message> <message> <source>Cannot assign object to property</source> - <translation type="unfinished">Objekta ni moč prirediti lastnosti</translation> + <translation>Objekta ni moč prirediti lastnosti</translation> </message> <message> <source>"%1" cannot operate on "%2"</source> - <translation type="unfinished">»%1« ne more delovati na »%2«</translation> + <translation>»%1« ne more delovati na »%2«</translation> </message> <message> <source>Duplicate default property</source> - <translation type="unfinished">Podvojena privzeta lastnost</translation> + <translation>Podvojena privzeta lastnost</translation> </message> <message> <source>Duplicate property name</source> - <translation type="unfinished">Podvojeno ime lastnosti</translation> + <translation>Podvojeno ime lastnosti</translation> </message> <message> <source>Property names cannot begin with an upper case letter</source> - <translation type="unfinished">Imena lastnosti se ne smejo začeti z veliko črko</translation> + <translation>Imena lastnosti se ne smejo začeti z veliko črko</translation> </message> <message> <source>Illegal property name</source> - <translation type="unfinished">Neveljavno ime lastnosti</translation> + <translation>Neveljavno ime lastnosti</translation> </message> <message> <source>Duplicate signal name</source> - <translation type="unfinished">Podvojeno ime signala</translation> + <translation>Podvojeno ime signala</translation> </message> <message> <source>Signal names cannot begin with an upper case letter</source> - <translation type="unfinished">Imena signalov se ne smejo začeti z veliko črko</translation> + <translation>Imena signalov se ne smejo začeti z veliko črko</translation> </message> <message> <source>Illegal signal name</source> - <translation type="unfinished">Neveljavno ime signala</translation> + <translation>Neveljavno ime signala</translation> </message> <message> <source>Duplicate method name</source> - <translation type="unfinished">Podvojeno ime metode</translation> + <translation>Podvojeno ime metode</translation> </message> <message> <source>Method names cannot begin with an upper case letter</source> - <translation type="unfinished">Imena metod se ne smejo začeti z veliko črko</translation> + <translation>Imena metod se ne smejo začeti z veliko črko</translation> </message> <message> <source>Illegal method name</source> - <translation type="unfinished">Neveljavno ime metode</translation> + <translation>Neveljavno ime metode</translation> </message> <message> <source>Property value set multiple times</source> - <translation type="unfinished">Vrednost lastnosti je bila nastavljena večkrat</translation> + <translation>Vrednost lastnosti je bila nastavljena večkrat</translation> </message> <message> <source>Invalid property nesting</source> - <translation type="unfinished">Neveljavno gnezdenje lastnosti</translation> + <translation>Neveljavno gnezdenje lastnosti</translation> </message> <message> <source>Cannot override FINAL property</source> - <translation type="unfinished">Lastnosti FINAL ni moč povoziti</translation> + <translation>Lastnosti FINAL ni moč povoziti</translation> </message> <message> <source>Invalid property type</source> - <translation type="unfinished">Neveljavna vrsta lastnosti</translation> + <translation>Neveljavna vrsta lastnosti</translation> </message> <message> <source>Invalid empty ID</source> - <translation type="unfinished">Neveljaven prazen ID</translation> + <translation>Neveljaven prazen ID</translation> </message> <message> <source>IDs cannot start with an uppercase letter</source> - <translation type="unfinished">ID-ji se ne smejo začeti z veliko črko</translation> + <translation>ID-ji se ne smejo začeti z veliko črko</translation> </message> <message> <source>IDs must start with a letter or underscore</source> - <translation type="unfinished">ID-ji se morajo začeti s črko ali podčrtajem</translation> + <translation>ID-ji se morajo začeti s črko ali podčrtajem</translation> </message> <message> <source>IDs must contain only letters, numbers, and underscores</source> - <translation type="unfinished">ID-ji lahko vsebujejo le črke, števke in podčrtaje</translation> + <translation>ID-ji lahko vsebujejo le črke, števke in podčrtaje</translation> </message> <message> <source>ID illegally masks global JavaScript property</source> - <translation type="unfinished">ID neveljavno zakriva globalno lastnost JavaScripta</translation> + <translation>ID neveljavno zakriva globalno lastnost JavaScripta</translation> </message> <message> <source>No property alias location</source> - <translation type="unfinished">Brez lokacije aliasa lastnosti</translation> + <translation>Brez lokacije aliasa lastnosti</translation> </message> <message> <source>Invalid alias location</source> - <translation type="unfinished">Neveljavna lokacija aliasa</translation> + <translation>Neveljavna lokacija aliasa</translation> </message> <message> <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> - <translation type="unfinished">Neveljavna referenca aliasa. Referenca aliasa mora biti določena kot <id> ali <id>.<lastnost></translation> + <translation>Neveljavna referenca aliasa. Referenca aliasa mora biti določena kot <id> ali <id>.<lastnost></translation> </message> <message> <source>Invalid alias reference. Unable to find id "%1"</source> - <translation type="unfinished">Neveljavna referenca aliasa. ID-ja »%1« ni moč najti</translation> + <translation>Neveljavna referenca aliasa. ID-ja »%1« ni moč najti</translation> </message> </context> <context> <name>QDeclarativeComponent</name> <message> <source>Invalid empty URL</source> - <translation type="unfinished">Neveljaven prazen URL</translation> + <translation>Neveljaven prazen URL</translation> </message> </context> <context> <name>QDeclarativeCompositeTypeManager</name> <message> <source>Resource %1 unavailable</source> - <translation type="unfinished">Vir %1 ni na voljo</translation> + <translation>Vir %1 ni na voljo</translation> </message> <message> <source>Namespace %1 cannot be used as a type</source> - <translation type="unfinished">Imenskega prostora %1 ni moč uporabiti kot vrste</translation> + <translation>Imenskega prostora %1 ni moč uporabiti kot vrste</translation> </message> <message> <source>%1 %2</source> - <translation type="unfinished">%1 % {1 %2?}</translation> + <translation>%1 %2</translation> </message> <message> <source>Type %1 unavailable</source> - <translation type="unfinished">Vrsta %1 ni na voljo</translation> + <translation>Vrsta %1 ni na voljo</translation> </message> </context> <context> <name>QDeclarativeConnections</name> <message> <source>Cannot assign to non-existent property "%1"</source> - <translation type="unfinished">Neobstoječi lastnosti »%1« ni moč prirediti</translation> + <translation>Neobstoječi lastnosti »%1« ni moč prirediti</translation> </message> <message> <source>Connections: nested objects not allowed</source> - <translation type="unfinished">Povezave: gnezdeni objekti niso dovoljeni</translation> + <translation>Povezave: gnezdeni objekti niso dovoljeni</translation> </message> <message> <source>Connections: syntax error</source> - <translation type="unfinished">Povezave: napaka v skladnji</translation> + <translation>Povezave: napaka v skladnji</translation> </message> <message> <source>Connections: script expected</source> - <translation type="unfinished">Povezave: pričakovan je skript</translation> + <translation>Povezave: pričakovan je skript</translation> </message> </context> <context> <name>QDeclarativeEngine</name> <message> <source>executeSql called outside transaction()</source> - <translation type="unfinished">executeSql je bil klican izven transaction()</translation> + <translation>executeSql je bil klican izven transaction()</translation> </message> <message> <source>Read-only Transaction</source> - <translation type="unfinished">Transakcija samo za branje</translation> + <translation>Transakcija samo za branje</translation> </message> <message> <source>Version mismatch: expected %1, found %2</source> - <translation type="unfinished">Neujemanje različic: pričakovana %1, najdena %2</translation> + <translation>Neujemanje različic: pričakovana %1, najdena %2</translation> </message> <message> <source>SQL transaction failed</source> - <translation type="unfinished">Transakcija SQL ni uspela</translation> + <translation>Transakcija SQL ni uspela</translation> </message> <message> <source>transaction: missing callback</source> @@ -1775,408 +1775,408 @@ v </message> <message> <source>SQL: database version mismatch</source> - <translation type="unfinished">SQL: neujemanje različice podatkovne zbirke</translation> + <translation>SQL: neujemanje različice podatkovne zbirke</translation> </message> </context> <context> <name>QDeclarativeFlipable</name> <message> <source>front is a write-once property</source> - <translation type="unfinished">front je lastnost, ki se jo lahko zapiše samo enkrat</translation> + <translation>front je lastnost, ki se jo lahko zapiše samo enkrat</translation> </message> <message> <source>back is a write-once property</source> - <translation type="unfinished">back je lastnost, ki se jo lahko zapiše samo enkrat</translation> + <translation>back je lastnost, ki se jo lahko zapiše samo enkrat</translation> </message> </context> <context> <name>QDeclarativeImportDatabase</name> <message> <source>module "%1" definition "%2" not readable</source> - <translation type="unfinished">definicije »%2« modula »%1« ni moč brati</translation> + <translation>definicije »%2« modula »%1« ni moč brati</translation> </message> <message> <source>plugin cannot be loaded for module "%1": %2</source> - <translation type="unfinished">vstavka za modul »%1« ni moč naložiti: %2</translation> + <translation>vstavka za modul »%1« ni moč naložiti: %2</translation> </message> <message> <source>module "%1" plugin "%2" not found</source> - <translation type="unfinished">vstavek »%2« modula »%1« ni bil najden</translation> + <translation>vstavek »%2« modula »%1« ni bil najden</translation> </message> <message> <source>module "%1" version %2.%3 is not installed</source> - <translation type="unfinished">modul »%1« različice %2.%3 ni nameščen</translation> + <translation>modul »%1« različice %2.%3 ni nameščen</translation> </message> <message> <source>module "%1" is not installed</source> - <translation type="unfinished">modul »%1« ni nameščen</translation> + <translation>modul »%1« ni nameščen</translation> </message> <message> <source>"%1": no such directory</source> - <translation type="unfinished">»%1«: mapa ne obstaja</translation> + <translation>»%1«: mapa ne obstaja</translation> </message> <message> <source>import "%1" has no qmldir and no namespace</source> - <translation type="unfinished"></translation> + <translation>uvoz »%1« nima niti qmldir-a niti imenskega prostora</translation> </message> <message> <source>- %1 is not a namespace</source> - <translation type="unfinished">– %1 ni imenski prostor</translation> + <translation>– %1 ni imenski prostor</translation> </message> <message> <source>- nested namespaces not allowed</source> - <translation type="unfinished">– gnezdeni imenski prostori niso dovoljeni</translation> + <translation>– gnezdeni imenski prostori niso dovoljeni</translation> </message> <message> <source>local directory</source> - <translation type="unfinished">krajevna mapa</translation> + <translation>krajevna mapa</translation> </message> <message> <source>is ambiguous. Found in %1 and in %2</source> - <translation type="unfinished">je dvoumno. Najdeno v %1 in %2</translation> + <translation>je dvoumno. Najdeno v %1 in %2</translation> </message> <message> <source>is ambiguous. Found in %1 in version %2.%3 and %4.%5</source> - <translation type="unfinished">je dvoumno. Najdeno v %1 v različicah %2.%3 in %4.%5</translation> + <translation>je dvoumno. Najdeno v %1 v različicah %2.%3 in %4.%5</translation> </message> <message> <source>is instantiated recursively</source> - <translation type="unfinished">je instanciran rekurzivno</translation> + <translation>je instanciran rekurzivno</translation> </message> <message> <source>is not a type</source> - <translation type="unfinished">ni vrsta</translation> + <translation>ni vrsta</translation> </message> </context> <context> <name>QDeclarativeKeyNavigationAttached</name> <message> <source>KeyNavigation is only available via attached properties</source> - <translation type="unfinished">KeyNavigation je na voljo samo s pripetimi lastnostmi</translation> + <translation>KeyNavigation je na voljo samo s pripetimi lastnostmi</translation> </message> </context> <context> <name>QDeclarativeKeysAttached</name> <message> <source>Keys is only available via attached properties</source> - <translation type="unfinished">Keys je na voljo samo s pripetimi lastnostmi</translation> + <translation>Keys je na voljo samo s pripetimi lastnostmi</translation> </message> </context> <context> <name>QDeclarativeListModel</name> <message> <source>remove: index %1 out of range</source> - <translation type="unfinished">remove: indeks %1 je izven obsega</translation> + <translation>remove: indeks %1 je izven obsega</translation> </message> <message> <source>insert: value is not an object</source> - <translation type="unfinished">insert: vrednost ni objekt</translation> + <translation>insert: vrednost ni objekt</translation> </message> <message> <source>insert: index %1 out of range</source> - <translation type="unfinished">insert: indeks %1 je izven obsega</translation> + <translation>insert: indeks %1 je izven obsega</translation> </message> <message> <source>move: out of range</source> - <translation type="unfinished">move: izven obsega</translation> + <translation>move: izven obsega</translation> </message> <message> <source>append: value is not an object</source> - <translation type="unfinished">append: vrednost ni objekt</translation> + <translation>append: vrednost ni objekt</translation> </message> <message> <source>set: value is not an object</source> - <translation type="unfinished">set: vrednost ni objekt</translation> + <translation>set: vrednost ni objekt</translation> </message> <message> <source>set: index %1 out of range</source> - <translation type="unfinished">set: indeks %1 je izven obsega</translation> + <translation>set: indeks %1 je izven obsega</translation> </message> <message> <source>ListElement: cannot contain nested elements</source> - <translation type="unfinished"></translation> + <translation>ListElement: ni moč vsebovati gnezdenih elementov</translation> </message> <message> <source>ListElement: cannot use reserved "id" property</source> - <translation type="unfinished">ListElement: ne more uporabiti rezervirane lastnosti »id«</translation> + <translation>ListElement: ne more uporabiti rezervirane lastnosti »id«</translation> </message> <message> <source>ListElement: cannot use script for property value</source> - <translation type="unfinished">ListElement: ne more uporabiti skripta za vrednost lastnosti</translation> + <translation>ListElement: ne more uporabiti skripta za vrednost lastnosti</translation> </message> <message> <source>ListModel: undefined property '%1'</source> - <translation type="unfinished">ListModel: nedoločena lastnost »%1«</translation> + <translation>ListModel: nedoločena lastnost »%1«</translation> </message> </context> <context> <name>QDeclarativeLoader</name> <message> <source>Loader does not support loading non-visual elements.</source> - <translation type="unfinished">Loader ne podpira nalaganja elementov, ki niso vidni.</translation> + <translation>Loader ne podpira nalaganja elementov, ki niso vidni.</translation> </message> </context> <context> <name>QDeclarativeParentAnimation</name> <message> <source>Unable to preserve appearance under complex transform</source> - <translation type="unfinished"></translation> + <translation>Pod kompleksnim preoblikovanjem ni moč obdržati videza</translation> </message> <message> <source>Unable to preserve appearance under non-uniform scale</source> - <translation type="unfinished"></translation> + <translation>Pod ne-enakovrednim povečevanjem ni moč obdržati videza</translation> </message> <message> <source>Unable to preserve appearance under scale of 0</source> - <translation type="unfinished"></translation> + <translation>Pod povečavo 0 ni moč obdržati videza</translation> </message> </context> <context> <name>QDeclarativeParentChange</name> <message> <source>Unable to preserve appearance under complex transform</source> - <translation type="unfinished"></translation> + <translation>Pod kompleksnim preoblikovanjem ni moč obdržati videza</translation> </message> <message> <source>Unable to preserve appearance under non-uniform scale</source> - <translation type="unfinished"></translation> + <translation>Pod ne-enakovrednim povečevanjem ni moč obdržati videza</translation> </message> <message> <source>Unable to preserve appearance under scale of 0</source> - <translation type="unfinished"></translation> + <translation>Pod povečavo 0 ni moč obdržati videza</translation> </message> </context> <context> <name>QDeclarativeParser</name> <message> <source>Illegal unicode escape sequence</source> - <translation type="unfinished">Neveljavno ubežno zaporedje Unicode</translation> + <translation>Neveljavno ubežno zaporedje Unicode</translation> </message> <message> <source>Illegal character</source> - <translation type="unfinished">Neveljaven znak</translation> + <translation>Neveljaven znak</translation> </message> <message> <source>Unclosed string at end of line</source> - <translation type="unfinished">Nezaprt niz na koncu vrstice</translation> + <translation>Nezaprt niz na koncu vrstice</translation> </message> <message> <source>Illegal escape squence</source> - <translation type="unfinished">Neveljavno ubežno zaporedje</translation> + <translation>Neveljavno ubežno zaporedje</translation> </message> <message> <source>Unclosed comment at end of file</source> - <translation type="unfinished">Nezaprt komentar na koncu datoteke</translation> + <translation>Nezaprt komentar na koncu datoteke</translation> </message> <message> <source>Illegal syntax for exponential number</source> - <translation type="unfinished">Neveljavna skladnja za eksponentno število</translation> + <translation>Neveljavna skladnja za eksponentno število</translation> </message> <message> <source>Identifier cannot start with numeric literal</source> - <translation type="unfinished"></translation> + <translation>Identifikator se ne sme začeti s številskim literalom</translation> </message> <message> <source>Unterminated regular expression literal</source> - <translation type="unfinished"></translation> + <translation>Nezaključen literal regularnega izraza</translation> </message> <message> <source>Invalid regular expression flag '%0'</source> - <translation type="unfinished">Neveljavna zastavica »%0« regularnega izraza</translation> + <translation>Neveljavna zastavica »%0« regularnega izraza</translation> </message> <message> <source>Unterminated regular expression backslash sequence</source> - <translation type="unfinished"></translation> + <translation>Nezaključeno zaporedij poševnic nazaj v regularnem izrazu</translation> </message> <message> <source>Unterminated regular expression class</source> - <translation type="unfinished"></translation> + <translation>Nezaključen razred regularnega izraza</translation> </message> <message> <source>Syntax error</source> - <translation type="unfinished">Skladenjska napaka</translation> + <translation>Skladenjska napaka</translation> </message> <message> <source>Unexpected token `%1'</source> - <translation type="unfinished">Nepričakovan žeton »%1«</translation> + <translation>Nepričakovan žeton »%1«</translation> </message> <message> <source>Expected token `%1'</source> - <translation type="unfinished">Pričakovan žeton »%1«</translation> + <translation>Pričakovan žeton »%1«</translation> </message> <message> <source>Property value set multiple times</source> - <translation type="unfinished">Vrednost lastnosti je bila nastavljena večkrat</translation> + <translation>Vrednost lastnosti je bila nastavljena večkrat</translation> </message> <message> <source>Expected type name</source> - <translation type="unfinished"></translation> + <translation>Pričakovano ime vrste</translation> </message> <message> <source>Invalid import qualifier ID</source> - <translation type="unfinished"></translation> + <translation>Neveljaven ID kvalifikatorja uvoza</translation> </message> <message> <source>Reserved name "Qt" cannot be used as an qualifier</source> - <translation type="unfinished"></translation> + <translation>Rezerviranega imena »Qt« ni moč uporabiti kot kvalifikatorja</translation> </message> <message> <source>Script import qualifiers must be unique.</source> - <translation type="unfinished"></translation> + <translation>Kvalifikatorji uvozov skriptov morajo biti edinstveni.</translation> </message> <message> <source>Script import requires a qualifier</source> - <translation type="unfinished"></translation> + <translation>Uvozi skriptov potrebujejo kvalifikator</translation> </message> <message> <source>Library import requires a version</source> - <translation type="unfinished"></translation> + <translation>Uvozi knjižnic potrebujejo različico</translation> </message> <message> <source>Expected parameter type</source> - <translation type="unfinished"></translation> + <translation>Pričakovana vrsta parametra</translation> </message> <message> <source>Invalid property type modifier</source> - <translation type="unfinished"></translation> + <translation>Neveljaven modifikator vrste lastnosti</translation> </message> <message> <source>Unexpected property type modifier</source> - <translation type="unfinished"></translation> + <translation>Nepričakovan modifikator vrste lastnosti</translation> </message> <message> <source>Expected property type</source> - <translation type="unfinished"></translation> + <translation>Pričakovana vrsta lastnosti</translation> </message> <message> <source>Readonly not yet supported</source> - <translation type="unfinished"></translation> + <translation>Tisti, ki so samo za branje, še niso podprti</translation> </message> <message> <source>JavaScript declaration outside Script element</source> - <translation type="unfinished"></translation> + <translation>Deklaracija JavaScripta izven elementa Script</translation> </message> </context> <context> <name>QDeclarativePauseAnimation</name> <message> <source>Cannot set a duration of < 0</source> - <translation type="unfinished">Trajanja, ki je krajše od 0, ni moč nastaviti</translation> + <translation>Trajanja, ki je krajše od 0, ni moč nastaviti</translation> </message> </context> <context> <name>QDeclarativePixmap</name> <message> <source>Error decoding: %1: %2</source> - <translation type="unfinished"></translation> + <translation>Napaka dekodiranja: %1: %2</translation> </message> <message> <source>Failed to get image from provider: %1</source> - <translation type="unfinished"></translation> + <translation>Od ponudnika ni bilo moč dobiti slike: %1</translation> </message> <message> <source>Cannot open: %1</source> - <translation type="unfinished">Ni moč odpreti %1: %2</translation> + <translation>Ni moč odpreti %1:</translation> </message> </context> <context> <name>QDeclarativePropertyAnimation</name> <message> <source>Cannot set a duration of < 0</source> - <translation type="unfinished">Trajanja, ki je krajše od 0, ni moč nastaviti</translation> + <translation>Trajanja, ki je krajše od 0, ni moč nastaviti</translation> </message> </context> <context> <name>QDeclarativePropertyChanges</name> <message> <source>PropertyChanges does not support creating state-specific objects.</source> - <translation type="unfinished"></translation> + <translation>PropertyChanges ne podpira ustvarjanja objektov sprecifičnih za stanje.</translation> </message> <message> <source>Cannot assign to non-existent property "%1"</source> - <translation type="unfinished">Neobstoječi lastnosti »%1« ni moč prirediti</translation> + <translation>Neobstoječi lastnosti »%1« ni moč prirediti</translation> </message> <message> <source>Cannot assign to read-only property "%1"</source> - <translation type="unfinished"></translation> + <translation>Ni moč prirediti lastnosti »%1«, ki je samo za branje</translation> </message> </context> <context> <name>QDeclarativeTextInput</name> <message> <source>Could not load cursor delegate</source> - <translation type="unfinished"></translation> + <translation>Ni bilo moč naložiti delegata za kazalec</translation> </message> <message> <source>Could not instantiate cursor delegate</source> - <translation type="unfinished"></translation> + <translation>Ni bilo moč instancirati delegata za kazalec</translation> </message> </context> <context> <name>QDeclarativeVME</name> <message> <source>Unable to create object of type %1</source> - <translation type="unfinished"></translation> + <translation>Ni moč ustvariti objekta vrste %1</translation> </message> <message> <source>Cannot assign value %1 to property %2</source> - <translation type="unfinished"></translation> + <translation>Lastnosti %2 ni moč prirediti vrednosti %1</translation> </message> <message> <source>Cannot assign object type %1 with no default method</source> - <translation type="unfinished"></translation> + <translation>Ni moč prirediti objekta vrste %1 brez privzete metode</translation> </message> <message> <source>Cannot connect mismatched signal/slot %1 %vs. %2</source> - <translation type="unfinished"></translation> + <translation>Ni moč povezati neujemajočih signalov in rež: %1 in %2</translation> </message> <message> <source>Cannot assign an object to signal property %1</source> - <translation type="unfinished"></translation> + <translation>Objekta ni moč prirediti lastnosi signala %1</translation> </message> <message> <source>Cannot assign object to list</source> - <translation type="unfinished">Objekta ni moč prirediti seznamu</translation> + <translation>Objekta ni moč prirediti seznamu</translation> </message> <message> <source>Cannot assign object to interface property</source> - <translation type="unfinished"></translation> + <translation>Objekta ni moč prirediti lastnosti vmesnika</translation> </message> <message> <source>Unable to create attached object</source> - <translation type="unfinished"></translation> + <translation>Ni moč ustvariti pripetega objekta</translation> </message> <message> <source>Cannot set properties on %1 as it is null</source> - <translation type="unfinished"></translation> + <translation>Ni moč nastaviti lastnosti za %1, saj ne obstaja</translation> </message> </context> <context> <name>QDeclarativeVisualDataModel</name> <message> <source>Delegate component must be Item type.</source> - <translation type="unfinished"></translation> + <translation>Komponenta delegata mora biti vrste Item.</translation> </message> </context> <context> <name>QDeclarativeXmlListModel</name> <message> <source>Qt was built without support for xmlpatterns</source> - <translation type="unfinished"></translation> + <translation>Qt je bil zgrajen brez podpore za xmlpatterns</translation> </message> </context> <context> <name>QDeclarativeXmlListModelRole</name> <message> <source>An XmlRole query must not start with '/'</source> - <translation type="unfinished"></translation> + <translation>Poizvedba XmlRole se ne sme začeti z »/«</translation> </message> </context> <context> <name>QDeclarativeXmlRoleList</name> <message> <source>An XmlListModel query must start with '/' or "//"</source> - <translation type="unfinished"></translation> + <translation>Poizvedba XmlListModel se mora začeti z »/« ali »//«</translation> </message> </context> <context> @@ -2593,27 +2593,27 @@ Ali jo kljub temu želite izbrisati?</translation> </message> <message> <source>Go back</source> - <translation type="unfinished">Vrni se nazaj</translation> + <translation>Vrni se nazaj</translation> </message> <message> <source>Go forward</source> - <translation type="unfinished">Napreduj naprej</translation> + <translation>Napreduj naprej</translation> </message> <message> <source>Go to the parent directory</source> - <translation type="unfinished"></translation> + <translation>Pojdi v matično mapo</translation> </message> <message> <source>Create a New Folder</source> - <translation type="unfinished"></translation> + <translation>Ustvari novo mapo</translation> </message> <message> <source>Change to list view mode</source> - <translation type="unfinished"></translation> + <translation>Preklopi v način prikaza seznama</translation> </message> <message> <source>Change to detail view mode</source> - <translation type="unfinished"></translation> + <translation>Preklopi v način prikaza podrobnosti</translation> </message> </context> <context> @@ -2678,7 +2678,7 @@ Ali jo kljub temu želite izbrisati?</translation> </message> <message> <source>%1 byte(s)</source> - <translation type="unfinished"></translation> + <translation>%1 B</translation> </message> </context> <context> @@ -2697,7 +2697,7 @@ Ali jo kljub temu želite izbrisati?</translation> </message> <message> <source>Black</source> - <translation type="unfinished">Črna</translation> + <translation type="unfinished"></translation> </message> <message> <source>Demi</source> @@ -2849,7 +2849,7 @@ Ali jo kljub temu želite izbrisati?</translation> </message> <message> <source>N'Ko</source> - <translation type="unfinished"></translation> + <translation>N'Ko</translation> </message> </context> <context> @@ -3004,7 +3004,7 @@ Ali jo kljub temu želite izbrisati?</translation> </message> <message> <source>No host name given</source> - <translation type="unfinished">Podano ni bilo nobeno ime gostitelja</translation> + <translation>Podano ni bilo nobeno ime gostitelja</translation> </message> </context> <context> @@ -3665,7 +3665,7 @@ Ali jo kljub temu želite izbrisati?</translation> </message> <message> <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) 2010 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> + <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><p>Prevedel: <a href="mailto:jlp@holodeck1.com">Jure Repinc</a>, <a href="http://www.lugos.si/">LUGOS</a></p></translation> </message> <message> <source>About Qt</source> @@ -3816,11 +3816,11 @@ Ali jo kljub temu želite izbrisati?</translation> <name>QNetworkAccessDataBackend</name> <message> <source>Operation not supported on %1</source> - <translation type="unfinished">Dejanje na %1 ni podprto</translation> + <translation>Dejanje na %1 ni podprto</translation> </message> <message> <source>Invalid URI: %1</source> - <translation type="unfinished">Neveljaven URI: %1</translation> + <translation>Neveljaven URI: %1</translation> </message> </context> <context> @@ -3831,11 +3831,11 @@ Ali jo kljub temu želite izbrisati?</translation> </message> <message> <source>Socket error on %1: %2</source> - <translation type="unfinished">Napaka vtičnice na %1: %2</translation> + <translation>Napaka vtičnice na %1: %2</translation> </message> <message> <source>Remote host closed the connection prematurely on %1</source> - <translation type="unfinished">Oddaljen gostitelj je predčasno prekinil povezavo na %1</translation> + <translation>Oddaljen gostitelj je predčasno prekinil povezavo na %1</translation> </message> </context> <context> @@ -3895,7 +3895,7 @@ Ali jo kljub temu želite izbrisati?</translation> <name>QNetworkAccessManager</name> <message> <source>Network access is disabled.</source> - <translation type="unfinished"></translation> + <translation>Omrežni dostop je onemogočen.</translation> </message> </context> <context> @@ -3910,11 +3910,11 @@ Ali jo kljub temu želite izbrisati?</translation> </message> <message> <source>Network session error.</source> - <translation type="unfinished"></translation> + <translation>Napaka omrežne seje.</translation> </message> <message> <source>Temporary network failure.</source> - <translation type="unfinished"></translation> + <translation>Začasna omrežna napaka.</translation> </message> </context> <context> @@ -3928,42 +3928,42 @@ Ali jo kljub temu želite izbrisati?</translation> <name>QNetworkSession</name> <message> <source>Invalid configuration.</source> - <translation type="unfinished"></translation> + <translation>Neveljavna nastavitev.</translation> </message> </context> <context> <name>QNetworkSessionPrivateImpl</name> <message> <source>Roaming error</source> - <translation type="unfinished"></translation> + <translation>Napaka potovanja</translation> </message> <message> <source>Session aborted by user or system</source> - <translation type="unfinished"></translation> + <translation>Sejo je preklical uporabnik ali pa sistem</translation> </message> <message> <source>Unidentified Error</source> - <translation type="unfinished"></translation> + <translation>Neznana napaka</translation> </message> <message> <source>Unknown session error.</source> - <translation type="unfinished"></translation> + <translation>Neznana napaka seje.</translation> </message> <message> <source>The session was aborted by the user or system.</source> - <translation type="unfinished"></translation> + <translation>Sejo je preklical uporabnik ali pa sistem.</translation> </message> <message> <source>The requested operation is not supported by the system.</source> - <translation type="unfinished"></translation> + <translation>Sistem ne podpira zahtevanega dejanja.</translation> </message> <message> <source>The specified configuration cannot be used.</source> - <translation type="unfinished"></translation> + <translation>Navedenih nastavitev ni moč uporabiti.</translation> </message> <message> <source>Roaming was aborted or is not possible.</source> - <translation type="unfinished"></translation> + <translation>Potovanje je bilo preklicano ali pa ni možno.</translation> </message> </context> <context> @@ -4095,15 +4095,15 @@ Ali jo kljub temu želite izbrisati?</translation> <name>QObject</name> <message> <source>PulseAudio Sound Server</source> - <translation type="unfinished">Zvočni strežnik PulseAudio</translation> + <translation>Zvočni strežnik PulseAudio</translation> </message> <message> <source>"%1" duplicates a previous role name and will be disabled.</source> - <translation type="unfinished"></translation> + <translation>»%1« podvaja obstoječe ime vloge in bo onemogočena.</translation> </message> <message> <source>invalid query: "%1"</source> - <translation type="unfinished"></translation> + <translation>neveljavna poizvedba: »%1«</translation> </message> </context> <context> @@ -4385,7 +4385,7 @@ Ali jo kljub temu želite izbrisati?</translation> </message> <message> <source>Print current page</source> - <translation type="unfinished"></translation> + <translation>Natisni trenutno stran</translation> </message> <message> <source>OK</source> @@ -4670,7 +4670,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Close</source> - <translation type="unfinished">Zapri</translation> + <translation>Zapri</translation> </message> <message> <source>Export to PDF</source> @@ -4776,7 +4776,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Current Page</source> - <translation type="unfinished"></translation> + <translation>Trenutna stran</translation> </message> </context> <context> @@ -5444,7 +5444,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Backtab</source> - <translation type="unfinished"></translation> + <translation>Tabulator nazaj</translation> </message> <message> <source>Backspace</source> @@ -5602,13 +5602,13 @@ Izberite drugo ime datoteke.</translation> <source>Media Pause</source> <extracomment>Media player pause button </extracomment> - <translation type="unfinished"></translation> + <translation>Prekini večpredstavnost</translation> </message> <message> <source>Toggle Media Play/Pause</source> <extracomment>Media player button to toggle between playing and paused </extracomment> - <translation type="unfinished"></translation> + <translation>Preklopi predvajanje/prekinitev večpredstavnosti</translation> </message> <message> <source>Favorites</source> @@ -5700,111 +5700,111 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Monitor Brightness Up</source> - <translation type="unfinished">Povečaj svetlost zaslon</translation> + <translation>Povečaj svetlost zaslona</translation> </message> <message> <source>Monitor Brightness Down</source> - <translation type="unfinished">Zmanjšaj svetlost zaslona</translation> + <translation>Zmanjšaj svetlost zaslona</translation> </message> <message> <source>Keyboard Light On/Off</source> - <translation type="unfinished">Vklop/izklop lučk na tipkovnici</translation> + <translation>Vklop/izklop lučk na tipkovnici</translation> </message> <message> <source>Keyboard Brightness Up</source> - <translation type="unfinished"></translation> + <translation>Povečaj svetlost tipkovnice</translation> </message> <message> <source>Keyboard Brightness Down</source> - <translation type="unfinished"></translation> + <translation>Zmanjšaj svetlost tipkovnice</translation> </message> <message> <source>Power Off</source> - <translation type="unfinished">Izklopi</translation> + <translation>Izklopi</translation> </message> <message> <source>Wake Up</source> - <translation type="unfinished">Zbudi se</translation> + <translation>Zbudi</translation> </message> <message> <source>Eject</source> - <translation type="unfinished">Izvrzi</translation> + <translation>Izvrzi</translation> </message> <message> <source>Screensaver</source> - <translation type="unfinished">Ohranjevalnik zaslona</translation> + <translation>Ohranjevalnik zaslona</translation> </message> <message> <source>WWW</source> - <translation type="unfinished">WWW</translation> + <translation>Svetovni splet</translation> </message> <message> <source>Sleep</source> - <translation type="unfinished">V pripravljenost</translation> + <translation>V pripravljenost</translation> </message> <message> <source>LightBulb</source> - <translation type="unfinished">Žarnica</translation> + <translation>Žarnica</translation> </message> <message> <source>Shop</source> - <translation type="unfinished"></translation> + <translation>Trgovina</translation> </message> <message> <source>History</source> - <translation type="unfinished">Zgodovina</translation> + <translation>Zgodovina</translation> </message> <message> <source>Add Favorite</source> - <translation type="unfinished">Dodaj najljubšo</translation> + <translation>Dodaj priljubljeno</translation> </message> <message> <source>Hot Links</source> - <translation type="unfinished">Vroče povezave</translation> + <translation>Vroče povezave</translation> </message> <message> <source>Adjust Brightness</source> - <translation type="unfinished">Prilagodi svetlost</translation> + <translation>Prilagodi svetlost</translation> </message> <message> <source>Finance</source> - <translation type="unfinished">Finance</translation> + <translation>Finance</translation> </message> <message> <source>Community</source> - <translation type="unfinished">Skupnost</translation> + <translation>Skupnost</translation> </message> <message> <source>Audio Rewind</source> - <translation type="unfinished">Samodejno previj</translation> + <translation>Previj zvok</translation> </message> <message> <source>Back Forward</source> - <translation type="unfinished"></translation> + <translation>Nazaj naprej</translation> </message> <message> <source>Application Left</source> - <translation type="unfinished"></translation> + <translation>Program levo</translation> </message> <message> <source>Application Right</source> - <translation type="unfinished"></translation> + <translation>Program desno</translation> </message> <message> <source>Book</source> - <translation type="unfinished">Knjiga</translation> + <translation>Knjiga</translation> </message> <message> <source>CD</source> - <translation type="unfinished">CD</translation> + <translation>CD</translation> </message> <message> <source>Calculator</source> - <translation type="unfinished">Računalo</translation> + <translation>Računalo</translation> </message> <message> <source>Clear</source> - <translation type="unfinished">Počisti</translation> + <translation>Počisti</translation> </message> <message> <source>Clear Grab</source> @@ -5812,15 +5812,15 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Close</source> - <translation type="unfinished">Zapri</translation> + <translation>Zapri</translation> </message> <message> <source>Copy</source> - <translation type="unfinished">Kopiraj</translation> + <translation>Skopiraj</translation> </message> <message> <source>Cut</source> - <translation type="unfinished">Izreži</translation> + <translation>Izreži</translation> </message> <message> <source>Display</source> @@ -5828,23 +5828,23 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>DOS</source> - <translation type="unfinished">DOS</translation> + <translation>DOS</translation> </message> <message> <source>Documents</source> - <translation type="unfinished">Dokumenti</translation> + <translation>Dokumenti</translation> </message> <message> <source>Spreadsheet</source> - <translation type="unfinished">Preglednica</translation> + <translation>Preglednica</translation> </message> <message> <source>Browser</source> - <translation type="unfinished">Brskalnik</translation> + <translation>Brskalnik</translation> </message> <message> <source>Game</source> - <translation type="unfinished">Igra</translation> + <translation>Igra</translation> </message> <message> <source>Go</source> @@ -5852,19 +5852,19 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>iTouch</source> - <translation type="unfinished">iTouch</translation> + <translation>iTouch</translation> </message> <message> <source>Logoff</source> - <translation type="unfinished">Odjava</translation> + <translation>Odjavi</translation> </message> <message> <source>Market</source> - <translation type="unfinished"></translation> + <translation>Trg</translation> </message> <message> <source>Meeting</source> - <translation type="unfinished">Srečanje</translation> + <translation>Srečanje</translation> </message> <message> <source>Keyboard Menu</source> @@ -5876,39 +5876,39 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>My Sites</source> - <translation type="unfinished">Moje strani</translation> + <translation>Moje strani</translation> </message> <message> <source>News</source> - <translation type="unfinished">Novice</translation> + <translation>Novice</translation> </message> <message> <source>Home Office</source> - <translation type="unfinished">Domača pisarna</translation> + <translation>Domača pisarna</translation> </message> <message> <source>Option</source> - <translation type="unfinished">Možnost</translation> + <translation>Možnost</translation> </message> <message> <source>Paste</source> - <translation type="unfinished">Prilepi</translation> + <translation>Prilepi</translation> </message> <message> <source>Phone</source> - <translation type="unfinished">Telefon</translation> + <translation>Telefon</translation> </message> <message> <source>Reply</source> - <translation type="unfinished">Odgovori</translation> + <translation>Odgovori</translation> </message> <message> <source>Reload</source> - <translation type="unfinished">Znova naloži</translation> + <translation>Znova naloži</translation> </message> <message> <source>Rotate Windows</source> - <translation type="unfinished">Zavrti okna</translation> + <translation>Zavrti okna</translation> </message> <message> <source>Rotation PB</source> @@ -5920,23 +5920,23 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Save</source> - <translation type="unfinished">Shrani</translation> + <translation>Shrani</translation> </message> <message> <source>Send</source> - <translation type="unfinished">Pošlji</translation> + <translation>Pošlji</translation> </message> <message> <source>Spellchecker</source> - <translation type="unfinished">Črkovalnik</translation> + <translation>Črkovalnik</translation> </message> <message> <source>Split Screen</source> - <translation type="unfinished">Razdeli zaslon</translation> + <translation>Razdeli zaslon</translation> </message> <message> <source>Support</source> - <translation type="unfinished">Podpora</translation> + <translation>Podpora</translation> </message> <message> <source>Task Panel</source> @@ -5944,23 +5944,23 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Terminal</source> - <translation type="unfinished">Terminal</translation> + <translation>Konzola</translation> </message> <message> <source>Tools</source> - <translation type="unfinished">Orodja</translation> + <translation>Orodja</translation> </message> <message> <source>Travel</source> - <translation type="unfinished">Potovanje</translation> + <translation>Potovanje</translation> </message> <message> <source>Video</source> - <translation type="unfinished">Video</translation> + <translation>Video</translation> </message> <message> <source>Word Processor</source> - <translation type="unfinished">Urejevalnik besedila</translation> + <translation>Urejevalnik besedil</translation> </message> <message> <source>XFer</source> @@ -5968,47 +5968,47 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Zoom In</source> - <translation type="unfinished">Približaj</translation> + <translation>Povečaj</translation> </message> <message> <source>Zoom Out</source> - <translation type="unfinished">Oddalji</translation> + <translation>Zmanjšaj</translation> </message> <message> <source>Away</source> - <translation type="unfinished">Odsoten</translation> + <translation>Odsoten</translation> </message> <message> <source>Messenger</source> - <translation type="unfinished">Sporočilnik</translation> + <translation>Sporočilnik</translation> </message> <message> <source>WebCam</source> - <translation type="unfinished">Spletna kamera</translation> + <translation>Spletna kamera</translation> </message> <message> <source>Mail Forward</source> - <translation type="unfinished">Posreduj sporočilo naprej</translation> + <translation>Posreduj sporočilo</translation> </message> <message> <source>Pictures</source> - <translation type="unfinished">Slike</translation> + <translation>Slike</translation> </message> <message> <source>Music</source> - <translation type="unfinished">Glasba</translation> + <translation>Glasba</translation> </message> <message> <source>Battery</source> - <translation type="unfinished">Baterija</translation> + <translation>Baterija</translation> </message> <message> <source>Bluetooth</source> - <translation type="unfinished">Bluetooth</translation> + <translation>Bluetooth</translation> </message> <message> <source>Wireless</source> - <translation type="unfinished">Brezžično</translation> + <translation>Brezžično</translation> </message> <message> <source>Ultra Wide Band</source> @@ -6016,19 +6016,19 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Audio Forward</source> - <translation type="unfinished"></translation> + <translation>Zvok naprej</translation> </message> <message> <source>Audio Repeat</source> - <translation type="unfinished"></translation> + <translation>Zvok ponavljanje</translation> </message> <message> <source>Audio Random Play</source> - <translation type="unfinished"></translation> + <translation>Zvok naključno</translation> </message> <message> <source>Subtitle</source> - <translation type="unfinished">Podnaslov</translation> + <translation>Podnaslov</translation> </message> <message> <source>Audio Cycle Track</source> @@ -6036,19 +6036,19 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Time</source> - <translation type="unfinished">Čas</translation> + <translation>Čas</translation> </message> <message> <source>View</source> - <translation type="unfinished">Pogled</translation> + <translation>Prikaz</translation> </message> <message> <source>Top Menu</source> - <translation type="unfinished">Vrhnji meni</translation> + <translation>Vrhnji meni</translation> </message> <message> <source>Suspend</source> - <translation type="unfinished">Ustavi</translation> + <translation>Ustavi</translation> </message> <message> <source>Hibernate</source> @@ -6142,7 +6142,7 @@ Izberite drugo ime datoteke.</translation> <source>Toggle Call/Hangup</source> <extracomment>Button that will hang up if we're in call, or make a call if we're not. </extracomment> - <translation type="unfinished"></translation> + <translation>Preklopi pokliči/odloži</translation> </message> <message> <source>Flip</source> @@ -6152,13 +6152,13 @@ Izberite drugo ime datoteke.</translation> <source>Voice Dial</source> <extracomment>Button to trigger voice dialling </extracomment> - <translation type="unfinished"></translation> + <translation>Glasovni klic</translation> </message> <message> <source>Last Number Redial</source> <extracomment>Button to redial the last number called </extracomment> - <translation type="unfinished"></translation> + <translation>Ponovni klic zadnje številke</translation> </message> <message> <source>Camera Shutter</source> @@ -6170,11 +6170,11 @@ Izberite drugo ime datoteke.</translation> <source>Camera Focus</source> <extracomment>Button to focus the camera </extracomment> - <translation type="unfinished"></translation> + <translation>Fokus fotoaparata</translation> </message> <message> <source>Kanji</source> - <translation type="unfinished"></translation> + <translation>Kanji</translation> </message> <message> <source>Muhenkan</source> @@ -6190,11 +6190,11 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Hiragana</source> - <translation type="unfinished">Hiragana</translation> + <translation>Hiragana</translation> </message> <message> <source>Katakana</source> - <translation type="unfinished">Katakana</translation> + <translation>Katakana</translation> </message> <message> <source>Hiragana Katakana</source> @@ -6238,7 +6238,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Code input</source> - <translation type="unfinished"></translation> + <translation>Vnos kode</translation> </message> <message> <source>Multiple Candidate</source> @@ -6266,7 +6266,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Hangul Jamo</source> - <translation type="unfinished">Hangul Jamo</translation> + <translation>Hangul Jamo</translation> </message> <message> <source>Hangul Romaja</source> @@ -6492,7 +6492,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Unable to decrypt data: %1</source> - <translation type="unfinished"></translation> + <translation>Ni moč dešifrirati podatkov: %1</translation> </message> <message> <source>Error while reading: %1</source> @@ -6512,7 +6512,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Private key does not certify public key, %1</source> - <translation type="unfinished"></translation> + <translation>Zasebni ključ ne potrjuje javnega ključa: %1</translation> </message> <message> <source>Error creating SSL session, %1</source> @@ -6536,59 +6536,59 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>No error</source> - <translation type="unfinished">Brez napake</translation> + <translation>Brez napake</translation> </message> <message> <source>The issuer certificate could not be found</source> - <translation type="unfinished"></translation> + <translation>Potrdila izdajatelja ni bilo moč najti</translation> </message> <message> <source>The certificate signature could not be decrypted</source> - <translation type="unfinished"></translation> + <translation>Podpisa potrdila ni bilo moč dešifrirati</translation> </message> <message> <source>The public key in the certificate could not be read</source> - <translation type="unfinished"></translation> + <translation>Javnega ključa iz potrdila ni bilo moč prebrati</translation> </message> <message> <source>The signature of the certificate is invalid</source> - <translation type="unfinished"></translation> + <translation>Podpis potrdila ni veljaven</translation> </message> <message> <source>The certificate is not yet valid</source> - <translation type="unfinished"></translation> + <translation>Potrdilo še ni veljavno</translation> </message> <message> <source>The certificate has expired</source> - <translation type="unfinished">Potrdilo je preteklo</translation> + <translation>Potrdilo je preteklo</translation> </message> <message> <source>The certificate's notBefore field contains an invalid time</source> - <translation type="unfinished"></translation> + <translation>Polje notBefore (ne pred) potrdila vsebuje neveljaven čas</translation> </message> <message> <source>The certificate's notAfter field contains an invalid time</source> - <translation type="unfinished"></translation> + <translation>Polje notAfter (ne po) potrdila vsebuje neveljaven čas</translation> </message> <message> <source>The certificate is self-signed, and untrusted</source> - <translation type="unfinished"></translation> + <translation>Potrdilo je samo-podpisano in nezaupano</translation> </message> <message> <source>The root certificate of the certificate chain is self-signed, and untrusted</source> - <translation type="unfinished"></translation> + <translation>Vrhnje potrdilo verige potrdil je samo-podpisano in nezaupano</translation> </message> <message> <source>The issuer certificate of a locally looked up certificate could not be found</source> - <translation type="unfinished"></translation> + <translation>Potrdila izdajatelja za krajevno najdeno potrdilo ni bilo moč najti</translation> </message> <message> <source>No certificates could be verified</source> - <translation type="unfinished"></translation> + <translation>Preveriti ni bilo moč nobenega potrdila</translation> </message> <message> <source>One of the CA certificates is invalid</source> - <translation type="unfinished"></translation> + <translation>Eno izmed potrdil avtoritete za potrdila ni veljavno</translation> </message> <message> <source>The basicConstraints path length parameter has been exceeded</source> @@ -6596,15 +6596,15 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>The supplied certificate is unsuitable for this purpose</source> - <translation type="unfinished"></translation> + <translation>Predloženo potrdilo ni primerno za ta namen</translation> </message> <message> <source>The root CA certificate is not trusted for this purpose</source> - <translation type="unfinished"></translation> + <translation>Potrdilo vrhovne avtoritete za potrdila ni zaupano za ta namen</translation> </message> <message> <source>The root CA certificate is marked to reject the specified purpose</source> - <translation type="unfinished"></translation> + <translation>Potrdilo vrhovne avtoritete za potrdila je označeno za zavrnitev navedenega namena</translation> </message> <message> <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source> @@ -6616,15 +6616,15 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>The peer did not present any certificate</source> - <translation type="unfinished">Vrstnik ni predložil nobenega potrdila</translation> + <translation>Vrstnik ni predložil nobenega potrdila</translation> </message> <message> <source>The host name did not match any of the valid hosts for this certificate</source> - <translation type="unfinished"></translation> + <translation>Ime gostitelja se ne ujema z nobenim izmed veljavnih gostiteljev za to potrdilo</translation> </message> <message> <source>Unknown error</source> - <translation type="unfinished">Neznana napaka</translation> + <translation>Neznana napaka</translation> </message> </context> <context> @@ -6858,7 +6858,7 @@ Izberite drugo ime datoteke.</translation> <name>QWebPage</name> <message> <source>Redirection limit reached</source> - <translation type="unfinished"></translation> + <translation>Dosežena je bila omejitev preusmeritev</translation> </message> <message> <source>Bad HTTP request</source> @@ -7082,7 +7082,7 @@ Izberite drugo ime datoteke.</translation> <message> <source>Missing Plug-in</source> <comment>Label text to be used when a plug-in is missing</comment> - <translation type="unfinished"></translation> + <translation>Manjkajoč vstavek</translation> </message> <message> <source>Loading...</source> @@ -7779,23 +7779,23 @@ Izberite drugo ime datoteke.</translation> <name>QXmlPatternistCLI</name> <message> <source>Warning in %1, at line %2, column %3: %4</source> - <translation type="unfinished"></translation> + <translation>Opozorilo v %1, vrstica %2, stolpec %3: %4</translation> </message> <message> <source>Warning in %1: %2</source> - <translation type="unfinished"></translation> + <translation>Opozorilo v %1: %2</translation> </message> <message> <source>Unknown location</source> - <translation type="unfinished">Neznana lokacija</translation> + <translation>Neznana lokacija</translation> </message> <message> <source>Error %1 in %2, at line %3, column %4: %5</source> - <translation type="unfinished"></translation> + <translation>Napaka %1 v %2, vrstica %3, stolpec %4: %5</translation> </message> <message> <source>Error %1 in %2: %3</source> - <translation type="unfinished">Napaka %1 v %2: %3</translation> + <translation>Napaka %1 v %2: %3</translation> </message> </context> <context> @@ -7826,7 +7826,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Unexpected character '%1' in public id literal.</source> - <translation type="unfinished"></translation> + <translation>Nepričakovan znak »%1« v javnem literalu ID-ja.</translation> </message> <message> <source>Invalid XML version string.</source> @@ -7846,7 +7846,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Standalone accepts only yes or no.</source> - <translation type="unfinished"></translation> + <translation>Samostojni (standalone) sprejema samo da (yes) ali ne (no).</translation> </message> <message> <source>Invalid attribute in XML declaration.</source> @@ -7890,7 +7890,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>NDATA in parameter entity declaration.</source> - <translation type="unfinished"></translation> + <translation>NDATA v parametru deklaracije entitete.</translation> </message> <message> <source>%1 is an invalid processing instruction name.</source> @@ -7938,7 +7938,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>%1 is an invalid PUBLIC identifier.</source> - <translation type="unfinished"></translation> + <translation>%1 ni veljaven javni identifikator.</translation> </message> </context> <context> @@ -7949,7 +7949,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Element %1 can't be serialized because it appears outside the document element.</source> - <translation type="unfinished"></translation> + <translation>Elementa %1 ni moč serializirati, ker se nahaja zunaj elementa dokumenta.</translation> </message> <message> <source>Year %1 is invalid because it begins with %2.</source> @@ -8235,7 +8235,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>%1 is not a whole number of minutes.</source> - <translation type="unfinished">%1 ni celovito število minut,</translation> + <translation>%1 ni celovito število minut.</translation> </message> <message> <source>Required cardinality is %1; got cardinality %2.</source> @@ -9339,7 +9339,7 @@ Izberite drugo ime datoteke.</translation> </message> <message> <source>Component with ID %1 has been defined previously.</source> - <translation type="unfinished">Komponenta z ID-jem %1 je že bila definirana.</translation> + <translation>Komponenta z ID-jem %1 je že bila definirana.</translation> </message> <message> <source>Element %1 already defined.</source> diff --git a/translations/qtconfig_sl.ts b/translations/qtconfig_sl.ts new file mode 100644 index 0000000..fa779ff --- /dev/null +++ b/translations/qtconfig_sl.ts @@ -0,0 +1,732 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="sl"> + <extra-po-header-po_revision_date>2010-08-28 15:58+0200</extra-po-header-po_revision_date> + <extra-po-headers>MIME-Version,Content-Type,Content-Transfer-Encoding,Plural-Forms,X-Language,X-Qt-Contexts,Last-Translator,PO-Revision-Date,Project-Id-Version,Language-Team,X-Generator</extra-po-headers> + <extra-po-header-x_generator>Lokalize 1.1</extra-po-header-x_generator> + <extra-po-header-language_team>Slovenian <lugos-slo@lugos.si></extra-po-header-language_team> + <extra-po-header-project_id_version></extra-po-header-project_id_version> + <extra-po-header_comment># Jure Repinc <jlp@holodeck1.com>, 2010.</extra-po-header_comment> + <extra-po-header-last_translator>Jure Repinc <jlp@holodeck1.com></extra-po-header-last_translator> +<context> + <name>MainWindow</name> + <message> + <source>Desktop Settings (Default)</source> + <translation>Nastavitve namizja (privzeto)</translation> + </message> + <message> + <source>Choose style and palette based on your desktop settings.</source> + <translation>Izberite slog in paleto, ki temeljita na vaših nastavitvah namizja.</translation> + </message> + <message> + <source>On The Spot</source> + <translation>Na mestu</translation> + </message> + <message> + <source>Auto (default)</source> + <translation>Samodejno (privzeto)</translation> + </message> + <message> + <source>Choose audio output automatically.</source> + <translation>Samodejno izbere zvočni izhod.</translation> + </message> + <message> + <source>aRts</source> + <translation>aRts</translation> + </message> + <message> + <source>Experimental aRts support for GStreamer.</source> + <translation>Poskusna podpora za aRts za GStreamer.</translation> + </message> + <message> + <source>Phonon GStreamer backend not available.</source> + <translation>Hrbtenica GStreamer za Phonon ni na voljo.</translation> + </message> + <message> + <source>Choose render method automatically</source> + <translation>Samodejno izberi način izrisovanja</translation> + </message> + <message> + <source>X11</source> + <translation>X11</translation> + </message> + <message> + <source>Use X11 Overlays</source> + <translation>Uporabi prekritja X11</translation> + </message> + <message> + <source>OpenGL</source> + <translation>OpenGL</translation> + </message> + <message> + <source>Use OpenGL if available</source> + <translation>Če je na voljo, uporabi OpenGL</translation> + </message> + <message> + <source>Software</source> + <translation>Programsko</translation> + </message> + <message> + <source>Use simple software rendering</source> + <translation>Uporabi preprosto programsko izrisovanje</translation> + </message> + <message> + <source>No changes to be saved.</source> + <translation>Ni sprememb, ki bi jih bilo potrebno shraniti.</translation> + </message> + <message> + <source>Saving changes...</source> + <translation>Shranjevanje sprememb ...</translation> + </message> + <message> + <source>Over The Spot</source> + <translation>Prek mesta</translation> + </message> + <message> + <source>Off The Spot</source> + <translation>Z mesta</translation> + </message> + <message> + <source>Root</source> + <translation>Koren</translation> + </message> + <message> + <source>Select a Directory</source> + <translation>Izberite mapo</translation> + </message> + <message> + <source><h3>%1</h3><br/>Version %2<br/><br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> + <translation><h3>%1</h3><br/>Različica %2<br/><br/>Avtorske pravice © 2010 Nokia Corporation in/ali njene podružnice.<br/><br/>Prevedel: <a href="mailto:jlp@holodeck1.com">Jure Repinc</a>, <a href="http://www.lugos.si/">LUGOS</a></translation> + </message> + <message> + <source>Qt Configuration</source> + <translation>Nastavitev Qt</translation> + </message> + <message> + <source>Save Changes</source> + <translation>Shrani spremembe</translation> + </message> + <message> + <source>Save changes to settings?</source> + <translation>Ali želite shraniti spremembe nastavitev?</translation> + </message> + <message> + <source>&Yes</source> + <translation>&Da</translation> + </message> + <message> + <source>&No</source> + <translation>&Ne</translation> + </message> + <message> + <source>&Cancel</source> + <translation>&Prekliči</translation> + </message> +</context> +<context> + <name>MainWindowBase</name> + <message> + <source>Qt Configuration</source> + <translation>Nastavitev Qt</translation> + </message> + <message> + <source>Appearance</source> + <translation>Videz</translation> + </message> + <message> + <source>GUI Style</source> + <translation>Slog grafičnega vmesnika</translation> + </message> + <message> + <source>Select GUI &Style:</source> + <translation>Izberite &slog grafičnega vmesnika:</translation> + </message> + <message> + <source>Preview</source> + <translation>Ogled</translation> + </message> + <message> + <source>Select &Palette:</source> + <translation>Izberite &paleto:</translation> + </message> + <message> + <source>Active Palette</source> + <translation>Paleta za aktivno</translation> + </message> + <message> + <source>Inactive Palette</source> + <translation>Paleta za neaktivno</translation> + </message> + <message> + <source>Disabled Palette</source> + <translation>Paleta za onemogočeno</translation> + </message> + <message> + <source>Build Palette</source> + <translation>Gradnja palete</translation> + </message> + <message> + <source>&3-D Effects:</source> + <translation>Učinki &3D:</translation> + </message> + <message> + <source>Window Back&ground:</source> + <translation>&Ozadje okna:</translation> + </message> + <message> + <source>&Tune Palette...</source> + <translation>&Nastavitev palete ...</translation> + </message> + <message> + <source>Please use the KDE Control Center to set the palette.</source> + <translation>Za nastavitev palete uporabite KDE-jeve Sistemske nastavitve.</translation> + </message> + <message> + <source>Fonts</source> + <translation>Pisave</translation> + </message> + <message> + <source>Default Font</source> + <translation>Privzeta pisava</translation> + </message> + <message> + <source>&Style:</source> + <translation>&Slog:</translation> + </message> + <message> + <source>&Point Size:</source> + <translation>&Velikost v točkah:</translation> + </message> + <message> + <source>F&amily:</source> + <translation>&Družina:</translation> + </message> + <message> + <source>Sample Text</source> + <translation>Vzorec besedila</translation> + </message> + <message> + <source>Font Substitution</source> + <translation>Nadomeščanje pisav</translation> + </message> + <message> + <source>S&elect or Enter a Family:</source> + <translation>I&zberite ali vnesite družino:</translation> + </message> + <message> + <source>Current Substitutions:</source> + <translation>Trenutni nadomestki:</translation> + </message> + <message> + <source>Up</source> + <translation>Gor</translation> + </message> + <message> + <source>Down</source> + <translation>Dol</translation> + </message> + <message> + <source>Remove</source> + <translation>Odstrani</translation> + </message> + <message> + <source>Select s&ubstitute Family:</source> + <translation>Izberite &nadomestno družino:</translation> + </message> + <message> + <source>Add</source> + <translation>Dodaj</translation> + </message> + <message> + <source>Interface</source> + <translation>Vmesnik</translation> + </message> + <message> + <source>Feel Settings</source> + <translation>Nastavitve obnašanja</translation> + </message> + <message> + <source> ms</source> + <translation> ms</translation> + </message> + <message> + <source>&Double Click Interval:</source> + <translation>Interval &dvojnega klika:</translation> + </message> + <message> + <source>No blinking</source> + <translation>Brez utripanja</translation> + </message> + <message> + <source>&Cursor Flash Time:</source> + <translation>&Hitrost utripanja kazalca:</translation> + </message> + <message> + <source> lines</source> + <translation> vrstic</translation> + </message> + <message> + <source>Wheel &Scroll Lines:</source> + <translation>&Vrtljaj koleščka:</translation> + </message> + <message> + <source>Resolve symlinks in URLs</source> + <translation>Razreši simbolične povezave v URL-jih</translation> + </message> + <message> + <source>GUI Effects</source> + <translation>Učinki grafičnega vmesnika</translation> + </message> + <message> + <source>&Enable</source> + <translation>&Omogoči</translation> + </message> + <message> + <source>Alt+E</source> + <translation>Alt+O</translation> + </message> + <message> + <source>&Menu Effect:</source> + <translation>Učinek &menija:</translation> + </message> + <message> + <source>C&omboBox Effect:</source> + <translation>Učinek &spustnega seznama:</translation> + </message> + <message> + <source>&ToolTip Effect:</source> + <translation>Učinek &namiga:</translation> + </message> + <message> + <source>Tool&Box Effect:</source> + <translation>Učinek o&rodjarne:</translation> + </message> + <message> + <source>Disable</source> + <translation>Onemogoči</translation> + </message> + <message> + <source>Animate</source> + <translation>Animiraj</translation> + </message> + <message> + <source>Fade</source> + <translation>Preidi</translation> + </message> + <message> + <source>Global Strut</source> + <translation>Globalni razmiki</translation> + </message> + <message> + <source>Minimum &Width:</source> + <translation>Najmanjša &širina:</translation> + </message> + <message> + <source>Minimum Hei&ght:</source> + <translation>Najmanjša &višina:</translation> + </message> + <message> + <source> pixels</source> + <translation> pik</translation> + </message> + <message> + <source>Enhanced support for languages written right-to-left</source> + <translation>Izboljšana podpora za jezike, ki se pišejo od desne proti levi</translation> + </message> + <message> + <source>XIM Input Style:</source> + <translation>Način za vnašanje XIM:</translation> + </message> + <message> + <source>On The Spot</source> + <translation>Na mestu</translation> + </message> + <message> + <source>Over The Spot</source> + <translation>Prek mesta</translation> + </message> + <message> + <source>Off The Spot</source> + <translation>Z mesta</translation> + </message> + <message> + <source>Root</source> + <translation>Vrh</translation> + </message> + <message> + <source>Default Input Method:</source> + <translation>Privzeti način vnašanja:</translation> + </message> + <message> + <source>Printer</source> + <translation>Tiskalnik</translation> + </message> + <message> + <source>Enable Font embedding</source> + <translation>Omogoči vgrajevanje pisav</translation> + </message> + <message> + <source>Font Paths</source> + <translation>Poti do posav</translation> + </message> + <message> + <source>Browse...</source> + <translation>Brskanje ...</translation> + </message> + <message> + <source>Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list.</source> + <translation>Kliknite gumb <b>Brskanje</b> ali pa vnesite mapo in pritisnite vnašalko za dodajanje na seznam.</translation> + </message> + <message> + <source>Phonon</source> + <translation>Phonon</translation> + </message> + <message> + <source>About Phonon</source> + <translation>O Phononu</translation> + </message> + <message> + <source>Current Version:</source> + <translation>Trenutna različica:</translation> + </message> + <message> + <source>Not available</source> + <translation>Ni na voljo</translation> + </message> + <message> + <source>Website:</source> + <translation>Spletna stran:</translation> + </message> + <message> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org/</span></a></p></body></html></translation> + </message> + <message> + <source>About GStreamer</source> + <translation>O GStreamerju</translation> + </message> + <message> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html></translation> + </message> + <message> + <source>GStreamer backend settings</source> + <translation>Nastavitve hrbtenice GStreamer</translation> + </message> + <message> + <source>Preferred audio sink:</source> + <translation>Prednostni ponor zvoka:</translation> + </message> + <message> + <source>Preferred render method:</source> + <translation>Prednostni način izrisovanja:</translation> + </message> + <message> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Note: changes to these settings may prevent applications from starting up correctly.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Vedite: spremembe teh nastavitev lahko preprečijo pravilen zagon programov.</span></p></body></html></translation> + </message> + <message> + <source>&File</source> + <translation>&Datoteka</translation> + </message> + <message> + <source>&Help</source> + <translation>&Pomoč</translation> + </message> + <message> + <source>&Save</source> + <translation>&Shrani</translation> + </message> + <message> + <source>Save</source> + <translation>Shrani</translation> + </message> + <message> + <source>Ctrl+S</source> + <translation>Ctrl+S</translation> + </message> + <message> + <source>E&xit</source> + <translation>Konča&j</translation> + </message> + <message> + <source>Exit</source> + <translation>Končaj</translation> + </message> + <message> + <source>&About</source> + <translation>&O</translation> + </message> + <message> + <source>About</source> + <translation>O</translation> + </message> + <message> + <source>About &Qt</source> + <translation>O &Qt</translation> + </message> + <message> + <source>About Qt</source> + <translation>O Qt</translation> + </message> +</context> +<context> + <name>PaletteEditorAdvancedBase</name> + <message> + <source>Tune Palette</source> + <translation>Nastavitev palete</translation> + </message> + <message> + <source><b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p></source> + <translation><b>Nastavitev palete</b><p>Spremenite paleto za trenutni gradnik ali obrazec.</p><p>Uporabite ustvarjeno paleto ali pa za vsako barvno skupino in vsako barvno vlogo izberite barvo.</p><p>Paleto lahko v razdelku Ogled preizkusite z različnimi slogi gradnikov.</p></translation> + </message> + <message> + <source>Select &Palette:</source> + <translation>Izberite &paleto:</translation> + </message> + <message> + <source>Active Palette</source> + <translation>Paleta za aktivno</translation> + </message> + <message> + <source>Inactive Palette</source> + <translation>Paleta za neaktivno</translation> + </message> + <message> + <source>Disabled Palette</source> + <translation>Paleta za onemogočeno</translation> + </message> + <message> + <source>Auto</source> + <translation>Samodejno</translation> + </message> + <message> + <source>Build inactive palette from active</source> + <translation>Paleto za neaktivno zgradi iz palete za aktivno</translation> + </message> + <message> + <source>Build disabled palette from active</source> + <translation>Paleto za onemogočeno zgradi iz palete za aktivno</translation> + </message> + <message> + <source>Central color &roles</source> + <translation>Osrednje barvne &vloge</translation> + </message> + <message> + <source>Choose central color role</source> + <translation>Izberite osrednjo barvno vlogo</translation> + </message> + <message> + <source><b>Select a color role.</b><p>Available central roles are: <ul> <li>Window - general background color.</li> <li>WindowText - general foreground color. </li> <li>Base - used as background color for e.g. text entry widgets, usually white or another light color. </li> <li>Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. </li> <li>Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. </li> <li>ButtonText - a foreground color used with the Button color. </li> <li>Highlight - a color to indicate a selected or highlighted item. </li> <li>HighlightedText - a text color that contrasts to Highlight. </li> <li>BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. </li> </ul> </p></source> + <translation><b>Izberite barvno vlogo</b><p>Razpoložljive osrednje vloge so:<ul><li>Okno – splošna barva ozadja.</li><li>Besedilo okna – splošna barva ospredja</li><li>Osnova – uporabljena kot barva ozadja za npr. vnosne gradnike, običajno bela ali druga svetla barva.</li><li>Besedilo – barva ospredja, ki se uporablja z Osnovo. Običajno je to isto kot Besedilo okna in v tem primeru mora biti v kontrastu z barvama Okno in Osnova.</li><li>Gumb – splošna barva ozadja gumba, če gumb potrebuje ozadje, ki je drugačno od ozadja oken.</li><li>Besedilo gumba – barva ospredja, ki se uporablja z barvo Gumba<li>Poudarek – barva za nakazovanje izbranega ali poudarjenega.</li><li>Poudarjeno besedilo – barva besedila, ki se razlikuje od barve za Poudarek.</li><li>Svetlo besedilo – barva besedila, ki se zelo razlikuje od barve za Besedilo okna in je v kontrastu s črno.</li></ul></p></translation> + </message> + <message> + <source>Window</source> + <translation>Okno</translation> + </message> + <message> + <source>WindowText</source> + <translation>Besedilo okna</translation> + </message> + <message> + <source>Button</source> + <translation>Gumb</translation> + </message> + <message> + <source>Base</source> + <translation>Osnova</translation> + </message> + <message> + <source>Text</source> + <translation>Besedilo</translation> + </message> + <message> + <source>BrightText</source> + <translation>Svetlo besedilo</translation> + </message> + <message> + <source>ButtonText</source> + <translation>Besedilo gumba</translation> + </message> + <message> + <source>Highlight</source> + <translation>Poudarek</translation> + </message> + <message> + <source>HighlightedText</source> + <translation>Poudarjeno besedilo</translation> + </message> + <message> + <source>&Select Color:</source> + <translation>&Izberite barvo:</translation> + </message> + <message> + <source>Choose a color</source> + <translation>Izberite barvo</translation> + </message> + <message> + <source>Choose a color for the selected central color role.</source> + <translation>Izberite barvo za izbrano osrednjo barvno vlogo.</translation> + </message> + <message> + <source>3-D shadow &effects</source> + <translation>&Učinki 3D sence:</translation> + </message> + <message> + <source>Build &from button color</source> + <translation>&Zgradi iz barve za gumb</translation> + </message> + <message> + <source>Generate shadings</source> + <translation>Ustvari sence</translation> + </message> + <message> + <source>Check to let 3D-effect colors be calculated from button-color.</source> + <translation>Izberite, da se barve 3D učinka izračuna iz barve za gumb.</translation> + </message> + <message> + <source>Choose 3D-effect color role</source> + <translation>Izberite barvno vlogo 3D učinka</translation> + </message> + <message> + <source><b>Select a color role.</b><p>Available effect roles are: <ul> <li>Light - lighter than Button color. </li> <li>Midlight - between Button and Light. </li> <li>Mid - between Button and Dark. </li> <li>Dark - darker than Button. </li> <li>Shadow - a very dark color. </li> </ul></source> + <translation><b>Izberite barvno vlogo</b><p>Razpoložljive vloge za učinek so:<ul><li>Svetlo – svetlejše od barve za gumb.</li><li>Srednje svetlo – med barvama za gumb in Svetlo.</li><li>Srednje temno – med barvama za gumb in Temno</li><li>Temno – temnejše od barve za gumb.</li><li>Senca – zelo temna barva.</li></ul></translation> + </message> + <message> + <source>Light</source> + <translation>Svetlo</translation> + </message> + <message> + <source>Midlight</source> + <translation>Srednje svetlo</translation> + </message> + <message> + <source>Mid</source> + <translation>Srednje temno</translation> + </message> + <message> + <source>Dark</source> + <translation>Temno</translation> + </message> + <message> + <source>Shadow</source> + <translation>Senca</translation> + </message> + <message> + <source>Select Co&lor:</source> + <translation>Izberite b&arvo:</translation> + </message> + <message> + <source>Choose a color for the selected effect color role.</source> + <translation>Izberite barvo za izbrano barvno vlogo učinka.</translation> + </message> + <message> + <source>OK</source> + <translation>V redu</translation> + </message> + <message> + <source>Close dialog and apply all changes.</source> + <translation>Zapre pogovorno okno in uveljavi spremembe.</translation> + </message> + <message> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> + <message> + <source>Close dialog and discard all changes.</source> + <translation>Zapre pogovorno okno in zavrže spremembe.</translation> + </message> +</context> +<context> + <name>PreviewFrame</name> + <message> + <source>Desktop settings will only take effect after an application restart.</source> + <translation>Nastavitve namizja bodo stopile v veljavo po ponovnem zagonu programa.</translation> + </message> +</context> +<context> + <name>PreviewWidgetBase</name> + <message> + <source>Preview Window</source> + <translation>Okno ogleda</translation> + </message> + <message> + <source>ButtonGroup</source> + <translation>SkupinaGumbov</translation> + </message> + <message> + <source>RadioButton1</source> + <translation>IzbirniGumb1</translation> + </message> + <message> + <source>RadioButton2</source> + <translation>IzbirniGumb2</translation> + </message> + <message> + <source>RadioButton3</source> + <translation>IzbirniGumb3</translation> + </message> + <message> + <source>ButtonGroup2</source> + <translation>SkupinaGumbov2</translation> + </message> + <message> + <source>CheckBox1</source> + <translation>PotrditvenoPolje1</translation> + </message> + <message> + <source>CheckBox2</source> + <translation>PotrditvenoPolje2</translation> + </message> + <message> + <source>LineEdit</source> + <translation>UrejevalnaVrstica</translation> + </message> + <message> + <source>ComboBox</source> + <translation>SpustniSeznam</translation> + </message> + <message> + <source>PushButton</source> + <translation>Gumb</translation> + </message> + <message> + <source><p> +<a href="http://qt.nokia.com">http://qt.nokia.com</a> +</p> +<p> +<a href="http://www.kde.org">http://www.kde.org</a> +</p></source> + <translation><p> +<a href="http://qt.nokia.com/">qt.nokia.com</a> +</p> +<p> +<a href="http://www.kde.org/">www.kde.org</a> +</p></translation> + </message> +</context> +</TS> diff --git a/translations/qvfb_sl.ts b/translations/qvfb_sl.ts new file mode 100644 index 0000000..251ba19 --- /dev/null +++ b/translations/qvfb_sl.ts @@ -0,0 +1,422 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="sl"> + <extra-po-header-po_revision_date>2010-08-28 16:47+0200</extra-po-header-po_revision_date> + <extra-po-headers>MIME-Version,Content-Type,Content-Transfer-Encoding,Plural-Forms,X-Language,X-Qt-Contexts,Last-Translator,PO-Revision-Date,Project-Id-Version,Language-Team,X-Generator</extra-po-headers> + <extra-po-header-x_generator>Lokalize 1.1</extra-po-header-x_generator> + <extra-po-header-language_team>Slovenian <lugos-slo@lugos.si></extra-po-header-language_team> + <extra-po-header-project_id_version></extra-po-header-project_id_version> + <extra-po-header_comment># Jure Repinc <jlp@holodeck1.com>, 2010.</extra-po-header_comment> + <extra-po-header-last_translator>Jure Repinc <jlp@holodeck1.com></extra-po-header-last_translator> +<context> + <name>AnimationSaveWidget</name> + <message> + <source>Record</source> + <translation>Posnemi</translation> + </message> + <message> + <source>Reset</source> + <translation>Ponastavi</translation> + </message> + <message> + <source>Save</source> + <translation>Shrani</translation> + </message> + <message> + <source>Save in MPEG format (requires netpbm package installed)</source> + <translation>Shrani v obliko MPEG (potrebuje nameščen paket netpbm)</translation> + </message> + <message> + <source>Click record to begin recording.</source> + <translation>Kliknite Posnemi za začetek snemanja.</translation> + </message> + <message> + <source>Finished saving.</source> + <translation>Shranjevanje zaključeno.</translation> + </message> + <message> + <source>Paused. Click record to resume, or save if done.</source> + <translation>Premor. Za nadaljevanje kliknite Posnemi, če ste zaključili pa Shrani.</translation> + </message> + <message> + <source>Pause</source> + <translation>Premor</translation> + </message> + <message> + <source>Recording...</source> + <translation>Snemanje ...</translation> + </message> + <message> + <source>Saving... </source> + <translation>Shranjevanje ... </translation> + </message> + <message> + <source>Save animation...</source> + <translation>Shrani animacijo ...</translation> + </message> + <message> + <source>Save canceled.</source> + <translation>Shranjevanje preklicano</translation> + </message> + <message> + <source>Save failed!</source> + <translation>Shranjevanje ni uspelo.</translation> + </message> +</context> +<context> + <name>Config</name> + <message> + <source>Configure</source> + <translation>Nastavi</translation> + </message> + <message> + <source>Size</source> + <translation>Velikost</translation> + </message> + <message> + <source>176x220 "SmartPhone"</source> + <translation>176⨯220 (pametni telefon)</translation> + </message> + <message> + <source>240x320 "PDA"</source> + <translation>240⨯320 (dlančnik)</translation> + </message> + <message> + <source>320x240 "TV" / "QVGA"</source> + <translation>320⨯240 (TV/QVGA)</translation> + </message> + <message> + <source>640x480 "VGA"</source> + <translation>640⨯480 (VGA)</translation> + </message> + <message> + <source>800x480</source> + <translation>800⨯480</translation> + </message> + <message> + <source>800x600</source> + <translation>800⨯600</translation> + </message> + <message> + <source>1024x768</source> + <translation>1024⨯768</translation> + </message> + <message> + <source>Custom</source> + <translation>Po meri</translation> + </message> + <message> + <source>Depth</source> + <translation>Globina</translation> + </message> + <message> + <source>1 bit monochrome</source> + <translation>1 bit enobarvno</translation> + </message> + <message> + <source>2 bit grayscale</source> + <translation>2 bita sivine</translation> + </message> + <message> + <source>4 bit grayscale</source> + <translation>4 bite sivine</translation> + </message> + <message> + <source>8 bit</source> + <translation>8 bitov</translation> + </message> + <message> + <source>12 (16) bit</source> + <translation>12 (16) bitov</translation> + </message> + <message> + <source>15 bit</source> + <translation>15 bitov</translation> + </message> + <message> + <source>16 bit</source> + <translation>16 bitov</translation> + </message> + <message> + <source>18 bit</source> + <translation>18 bitov</translation> + </message> + <message> + <source>24 bit</source> + <translation>24 bitov</translation> + </message> + <message> + <source>32 bit</source> + <translation>32 bitov</translation> + </message> + <message> + <source>32 bit ARGB</source> + <translation>32-bitov ARGB</translation> + </message> + <message> + <source>Swap red and blue channels</source> + <translation>Izmenjaj modri in rdeči kanal</translation> + </message> + <message> + <source>BGR format</source> + <translation>Format BGR</translation> + </message> + <message> + <source>Skin</source> + <translation>Tema</translation> + </message> + <message> + <source>None</source> + <translation>Brez</translation> + </message> + <message> + <source>Emulate touch screen (no mouse move)</source> + <translation>Posnemaj zaslon na dotik (brez premikov miške)</translation> + </message> + <message> + <source>Emulate LCD screen (Only with fixed zoom of 3.0 times magnification)</source> + <translation>Posnemaj zaslon LCD (samo s stalno 3.0⨯ povećavo)</translation> + </message> + <message> + <source><p>Note that any applications using the virtual framebuffer will be terminated if you change the Size or Depth <i>above</i>. You may freely modify the Gamma <i>below</i>.</source> + <translation><p>Vedite, da bo ob spremembi velikosti ali globine vsak program, ki uporablja navidezni slikovni medpomnilnik, končan. Gamo lahko prosto spreminjate.</translation> + </message> + <message> + <source>Gamma</source> + <translation>Gama</translation> + </message> + <message> + <source>Blue</source> + <translation>Modra</translation> + </message> + <message> + <source>1.0</source> + <translation>1,0</translation> + </message> + <message> + <source>Green</source> + <translation>Zelena</translation> + </message> + <message> + <source>All</source> + <translation>Vse</translation> + </message> + <message> + <source>Red</source> + <translation>Rdeča</translation> + </message> + <message> + <source>Set all to 1.0</source> + <translation>Nastavi vse na 1,0</translation> + </message> + <message> + <source>&OK</source> + <translation>&V redu</translation> + </message> + <message> + <source>&Cancel</source> + <translation>&Prekliči</translation> + </message> +</context> +<context> + <name>DeviceSkin</name> + <message> + <source>The image file '%1' could not be loaded.</source> + <translation>Slikovne datoteke »%1« ni bilo moč naložiti.</translation> + </message> + <message> + <source>The skin directory '%1' does not contain a configuration file.</source> + <translation>Mapa s temo »%1« ne vsebuje nastavitvene datoteke.</translation> + </message> + <message> + <source>The skin configuration file '%1' could not be opened.</source> + <translation>Nastavitvene datoteke za temo »%1« ni bilo moč odpreti.</translation> + </message> + <message> + <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> + <source>Syntax error: %1</source> + <translation>Skladenjska napaka: %1</translation> + </message> + <message> + <source>The skin "up" image file '%1' does not exist.</source> + <translation>Datoteka slike »up« teme »%1« ne obstaja.</translation> + </message> + <message> + <source>The skin "down" image file '%1' does not exist.</source> + <translation>Datoteka slike »down« teme »%1« ne obstaja.</translation> + </message> + <message> + <source>The skin "closed" image file '%1' does not exist.</source> + <translation>Datoteka slike »closed« teme »%1« ne obstaja.</translation> + </message> + <message> + <source>The skin cursor image file '%1' does not exist.</source> + <translation>Slikovna datoteka s kazalcem za temo »%1« ne obstaja.</translation> + </message> + <message> + <source>Syntax error in area definition: %1</source> + <translation>Skladenjska napaka pri določitvi območja: %1</translation> + </message> + <message> + <source>Mismatch in number of areas, expected %1, got %2.</source> + <translation>Neujemanje v številu območij, pričakovano %1, dobljeno %2.</translation> + </message> +</context> +<context> + <name>QVFb</name> + <message> + <source>&File</source> + <translation>&Datoteka</translation> + </message> + <message> + <source>&Configure...</source> + <translation>&Nastavi ...</translation> + </message> + <message> + <source>&Save image...</source> + <translation>&Shrani sliko ...</translation> + </message> + <message> + <source>&Animation...</source> + <translation>&Animacija ...</translation> + </message> + <message> + <source>&Quit</source> + <translation>Konča&j</translation> + </message> + <message> + <source>&View</source> + <translation>&Videz</translation> + </message> + <message> + <source>Show &Cursor</source> + <translation>Prikaži &kazalec</translation> + </message> + <message> + <source>&Refresh Rate...</source> + <translation>&Hitrost osveževanja ...</translation> + </message> + <message> + <source>&No rotation</source> + <translation>&Brez zasuka</translation> + </message> + <message> + <source>&90° rotation</source> + <translation>Zasuk za &90°</translation> + </message> + <message> + <source>1&80° rotation</source> + <translation>Zasuk za 1&80°</translation> + </message> + <message> + <source>2&70° rotation</source> + <translation>Zasuk za 2&70°</translation> + </message> + <message> + <source>Zoom scale &0.5</source> + <translation>Povečava &0,5</translation> + </message> + <message> + <source>Zoom scale 0.7&5</source> + <translation>Povečava 0,7&5</translation> + </message> + <message> + <source>Zoom scale &1</source> + <translation>Povečeva &1,0</translation> + </message> + <message> + <source>Zoom scale &2</source> + <translation>Povečava &2,0</translation> + </message> + <message> + <source>Zoom scale &3</source> + <translation>Povečeva &3,0</translation> + </message> + <message> + <source>Zoom scale &4</source> + <translation>Povečava &4,0</translation> + </message> + <message> + <source>Zoom &scale...</source> + <translation>&Povečava ...</translation> + </message> + <message> + <source>&Help</source> + <translation>&Pomoč</translation> + </message> + <message> + <source>&About...</source> + <translation>&O ...</translation> + </message> + <message> + <source>Save Main Screen image</source> + <translation>Shrani sliko glavnega zaslona</translation> + </message> + <message> + <source>snapshot.png</source> + <translation>posnetek.png</translation> + </message> + <message> + <source>Portable Network Graphics (*.png)</source> + <translation>Portable Network Graphics (*.png)</translation> + </message> + <message> + <source>Save Main Screen Image</source> + <translation>Shrani sliko glavnega zaslona</translation> + </message> + <message> + <source>Save failed. Check that you have permission to write to the target directory.</source> + <translation>Shranjevanje ni uspelo. Preverite dovoljenja za pisanje v ciljno mapo.</translation> + </message> + <message> + <source>Save Second Screen image</source> + <translation>Shrani sliko drugega zaslona</translation> + </message> + <message> + <source>Save Second Screen Image</source> + <translation>Shrani sliko drugega zaslona</translation> + </message> + <message> + <source>About QVFB</source> + <translation>O QVFB</translation> + </message> + <message> + <source><h2>The Qt for Embedded Linux Virtual X11 Framebuffer</h2><p>This application runs under Qt for X11, emulating a simple framebuffer, which the Qt for Embedded Linux server and clients can attach to just as if it was a hardware Linux framebuffer. <p>With the aid of this development tool, you can develop Qt for Embedded Linux applications under X11 without having to switch to a virtual console. This means you can comfortably use your other development tools such as GUI profilers and debuggers.</source> + <translation><h2>Qt for Embedded Linux Virtual X11 Framebuffer</h2><p>Ta program teče pod okenskim sistemom X11 in posnema preprost slikovni medpomnilnik, na katerega se lahko strežniki in odjemalci, izdelani s Qt za vgrajeni Linux, priklopijo, kot da bi bil pravi strojni slikovni medpomnilnik Linuxa.<p>S pomočjo tega orodja lahko programe Qt za vgrajeni Linux razvijate pod X11, ne da bi bilo potrebno preklopiti v navidezno konzolo. To pomeni, da lahko še naprej udobno uporabljate druga razvojna orodja, kot so grafični profilirniki in razhroščevalniki.</translation> + </message> + <message> + <source>Browse...</source> + <translation>Brskanje ...</translation> + </message> + <message> + <source>Load Custom Skin...</source> + <translation>Naloži temo po meri ...</translation> + </message> + <message> + <source>All QVFB Skins (*.skin)</source> + <translation>Vse teme za QVFB (*.skin)</translation> + </message> +</context> +<context> + <name>QVFbRateDialog</name> + <message> + <source>Target frame rate:</source> + <translation>Ciljna hitrost sličic:</translation> + </message> + <message> + <source>%1fps</source> + <translation>%1 sl./s</translation> + </message> + <message> + <source>OK</source> + <translation>V redu</translation> + </message> + <message> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> +</context> +</TS> |