diff options
author | Martin Jones <martin.jones@nokia.com> | 2010-08-31 21:39:35 (GMT) |
---|---|---|
committer | Martin Jones <martin.jones@nokia.com> | 2010-08-31 21:39:35 (GMT) |
commit | 62c23329fd61b016edbdc8dba758ca785a56fca7 (patch) | |
tree | c8bcaeec55d33a5decfba82af70cbc51c1129397 | |
parent | da038b5f74f98d73e25c10e12817cf46ad48f7f9 (diff) | |
parent | 882992494e0c6f6510e95976abdac5d57966eb6c (diff) | |
download | Qt-62c23329fd61b016edbdc8dba758ca785a56fca7.zip Qt-62c23329fd61b016edbdc8dba758ca785a56fca7.tar.gz Qt-62c23329fd61b016edbdc8dba758ca785a56fca7.tar.bz2 |
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-qml into 4.7
95 files changed, 7936 insertions, 1928 deletions
diff --git a/bin/createpackage.pl b/bin/createpackage.pl index 984c1fd..2569a66 100755 --- a/bin/createpackage.pl +++ b/bin/createpackage.pl @@ -81,11 +81,14 @@ Where supported options are as follows: [-o|only-unsigned] = Creates only unsigned package. [-s|stub] = Generates stub sis for ROM. [-n|sisname <name>] = Specifies the final sis name. + [-g|gcce-is-armv5] = Convert gcce platform to armv5. Where parameters are as follows: templatepkg = Name of .pkg file template target = Either debug or release platform = One of the supported platform winscw | gcce | armv5 | armv6 | armv7 + Note that when packaging binaries built using gcce and symbian-sbsv2 + mkspec, armv5 must be used for platform instead of gcce. certificate = The certificate file used for signing key = The certificate's private key file passphrase = The passphrase of the certificate's private key file @@ -123,6 +126,7 @@ my $preserveUnsigned = ""; my $stub = ""; my $signed_sis_name = ""; my $onlyUnsigned = ""; +my $convertGcce = ""; unless (GetOptions('i|install' => \$install, 'p|preprocess' => \$preprocessonly, @@ -130,7 +134,8 @@ unless (GetOptions('i|install' => \$install, 'u|unsigned' => \$preserveUnsigned, 'o|only-unsigned' => \$onlyUnsigned, 's|stub' => \$stub, - 'n|sisname=s' => \$signed_sis_name,)) { + 'n|sisname=s' => \$signed_sis_name, + 'g|gcce-is-armv5' => \$convertGcce,)) { Usage(); } @@ -146,6 +151,16 @@ $target = $tmpvalues[0] or $target = ""; my $platform; $platform = $tmpvalues[1] or $platform = ""; +if ($platform =~ m/^gcce$/i) { + if (($convertGcce ne "")) { + $platform = "armv5"; + } elsif ($ENV{SBS_HOME}) { + # Print a informative note in case suspected misuse is detected. + print "\nNote: You should use armv5 as platform or specify -g parameter to convert platform\n"; + print " when packaging gcce binaries built using symbian-sbsv2 mkspec.\n\n"; + } +} + # Convert visual target to real target (debug->udeb and release->urel) $target =~ s/debug/udeb/i; $target =~ s/release/urel/i; diff --git a/bin/patch_capabilities.pl b/bin/patch_capabilities.pl index 7d6f5dc..0c0538c 100755 --- a/bin/patch_capabilities.pl +++ b/bin/patch_capabilities.pl @@ -54,7 +54,9 @@ sub Usage() { print("If no capabilities are given, the binaries will be given the\n"); print("capabilities supported by self-signed certificates.\n\n"); print(" *** NOTE: If *_template.pkg file is given and one is using symbian-abld or\n"); - print(" symbian-sbsv2 platform, 'target-platform' is REQUIRED. ***\n"); + print(" symbian-sbsv2 platform, 'target-platform' is REQUIRED. ***\n\n"); + print(" *** NOTE2: When patching gcce binaries built with symbian-sbsv2 toolchain,\n"); + print(" armv5 must be specified as platform.\n"); print("\nUsage: patch_capabilities.pl pkg_filename [target-platform [capability list]]\n"); print("\nE.g. patch_capabilities.pl myapp_template.pkg release-armv5 \"All -TCB\"\n"); exit(); @@ -104,6 +106,11 @@ if (@ARGV) # Convert visual target to real target (debug->udeb and release->urel) $target =~ s/debug/udeb/i; $target =~ s/release/urel/i; + + if (($platform =~ m/^gcce$/i) && ($ENV{SBS_HOME})) { + # Print a informative note in case suspected misuse is detected. + print "\nNote: You must use armv5 as platform when packaging gcce binaries built using symbian-sbsv2 mkspec.\n"; + } } # If the specified ".pkg" file exists (and can be read), @@ -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/doc/src/declarative/qml-intro.qdoc b/doc/src/declarative/qml-intro.qdoc index 69dd500..63d6825 100644 --- a/doc/src/declarative/qml-intro.qdoc +++ b/doc/src/declarative/qml-intro.qdoc @@ -47,7 +47,7 @@ Javascript is easier to learn than C++ and can be embedded into the QML files or imported from a separate file. \bold{In QML the types of various 'objects' are referred to as \l {QML -Elements}{ elements}}. +Elements}{elements}}. An element usually has various \e properties that help define the element. For example, if we created an element called Circle then the radius of the circle @@ -56,7 +56,7 @@ would be a property. \section1 A First Look -The basic syntax of an \l {QML Elements}{element} is +The basic syntax of an \l{QML Elements}{element} is \snippet doc/src/snippets/declarative/qml-intro/basic-syntax.qml basic syntax @@ -82,7 +82,7 @@ want a rectangle that is 500 pixels by 400 pixels in the x and y directions We can implement this \l Rectangle with these properties this way -\quotefile doc/src/snippets/declarative/qml-intro/rectangle.qml +\snippet doc/src/snippets/declarative/qml-intro/rectangle.qml document This is a valid QML script. To run it, copy it and save it to a file, say myexample.qml, and on the command line run the following command: @@ -113,7 +113,7 @@ Text is handled by a different element called \l Text. We need to create a property to "Hello World!". So to set the text to "Hello world" and the background colour to light gray, -\quotefile doc/src/snippets/declarative/qml-intro/hello-world1.qml +\snippet doc/src/snippets/declarative/qml-intro/hello-world1.qml document \section1 Hello World Again @@ -172,7 +172,7 @@ text, also make it 150 by 150 pixels in size, Adding the Hello World example, with the text and the image example we can write a simple piece of QML that starts to look a bit better. -\quotefile doc/src/snippets/declarative/qml-intro/hello-world5.qml +\snippet doc/src/snippets/declarative/qml-intro/hello-world5.qml document The result is still quite simple @@ -203,7 +203,7 @@ If we want to position an image at the bottom of the rectangle it is inside. I have to specify that the bottom of the image is also at the bottom of the rectangle -\quotefile doc/src/snippets/declarative/qml-intro/anchors1.qml +\snippet doc/src/snippets/declarative/qml-intro/anchors1.qml document This places the logo at the bottom left of the window. @@ -222,7 +222,7 @@ the bottomMargin property is used. So the new actions for the script are Encoded into QML the script becomes -\quotefile doc/src/snippets/declarative/qml-intro/anchors2.qml +\snippet doc/src/snippets/declarative/qml-intro/anchors2.qml document Run this and resize the window. You will see that now the position of the image adjusts during the resize. @@ -282,7 +282,7 @@ vertically by a factor of 1.5 and by 1.2 horizontally. Using the example above as the basis for this we have, -\quotefile doc/src/snippets/declarative/qml-intro/transformations1.qml +\snippet doc/src/snippets/declarative/qml-intro/transformations1.qml document The code block in \c image1 starting with \c transform specifies that the \l {Item::transform}{transform} property will be a Rotation through -90 @@ -320,7 +320,7 @@ from \l Item. The rotation property is a real number that specifies the angle in a clockwise direction for the rotation of the object. Here is the code for our animated rotating image. -\quotefile doc/src/snippets/declarative/number-animation1.qml +\snippet doc/src/snippets/declarative/qml-intro/number-animation1.qml document The \c {transformOrigin: Item.Center} is redundant since this is the default axis of rotation anyway. But if you change \c Center to \c BottomRight you @@ -333,7 +333,7 @@ combination. For example, if the task had been to animate the rotation about the y-axis passing through the center of the image then the following code would do it. -\quotefile doc/src/snippets/declarative/number-animation2.qml +\snippet doc/src/snippets/declarative/qml-intro/number-animation2.qml document Here there is a rectangle 600 by 400 pixels. Placed within that rectangle is an image 100 by 100 pixels. It is rotated about the center of the image @@ -362,7 +362,7 @@ will be animating the position and the size of the image. First create two images -\quotefile doc/src/snippets/declarative/sequential-animation1.qml +\snippet doc/src/snippets/declarative/qml-intro/sequential-animation1.qml document We will add to 'image1' a SequentialAnimation from x = 20 to the target of x = 450. The 'from' values will be used because we will be repeating the @@ -375,7 +375,7 @@ between the x values and over a given duration. After the NumberAnimation there will be a PauseAnimation that will pause the animation for 500 milliseconds (half a second) simply for the visual effect. -\snippet doc/src/snippets/declarative/sequential-animation2.qml adding a sequential animation +\snippet doc/src/snippets/declarative/qml-intro/sequential-animation2.qml adding a sequential animation A similar block of code is written for the animation of the 'y' value of the position. @@ -390,7 +390,7 @@ and image1 to 1 and image2 to 2 then image2 will be in the foreground and image1 in the background. When image1 passes image2 it will pass behind it. The completed code looks like -\quotefile doc/src/snippets/declarative/sequential-animation3.qml +\snippet doc/src/snippets/declarative/qml-intro/sequential-animation3.qml document The \c {easing.type} has many options, expressed as a string. It specifies the kind of equation that describes the acceleration of the property value, not @@ -439,9 +439,6 @@ delivers some of the best examples that illustrate these new elements. \endtable - - - \section1 Using States A state is a defined set of values in the configuration of an object and @@ -471,7 +468,7 @@ will be the default state. We will just go to 'night' by clicking and holding the left mouse button down, releasing the mouse button will reverse the process -\quotefile doc/src/snippets/declarative/states1.qml +\snippet doc/src/snippets/declarative/qml-intro/states1.qml document Several new things appear in this sample. Firstly, we use a \l MouseArea element to detect mouse clicks in the \e mainRectangle. Secondly, we use @@ -549,15 +546,15 @@ needle_shadow have the same default \e x and \e y values but the rotation origin for the needle is slightly different so that a shadow will be evident as the needle moves. -\snippet ../../examples/declarative/ui-components/dialcontrol/content/Dial.qml needle_shadow +\snippet examples/declarative/ui-components/dialcontrol/content/Dial.qml needle_shadow And the needle -\snippet ../../examples/declarative/ui-components/dialcontrol/content/Dial.qml needle +\snippet examples/declarative/ui-components/dialcontrol/content/Dial.qml needle The final image is the overlay which simply has a position defined. -\snippet ../../examples/declarative/ui-components/dialcontrol/content/Dial.qml overlay +\snippet examples/declarative/ui-components/dialcontrol/content/Dial.qml overlay \e {dialcontrol.qml} in the \e {examples/declarative/ui-components/dialcontrol} directory is the main file of the example. It defines the visual environment that the Dial @@ -565,17 +562,14 @@ will fit into. Because the \e Dial component and the images live in the \e content sub-directory we will have to import this into \e dialcontrol.qml. So the start of the file looks like - \code - import Qt 4.7 - import "content" - \endcode +\snippet examples/declarative/ui-components/dialcontrol/dialcontrol.qml imports The visual space is bound by a 300 by 300 pixel \l Rectangle which is given a gray color. Inside this rectangle is our component \e Dial and a \l Rectangle. Inside the rectangle called 'container' is another rectangle with the interesting name 'slider'. -\snippet ../../examples/declarative/ui-components/dialcontrol/dialcontrol.qml 0 +\snippet examples/declarative/ui-components/dialcontrol/dialcontrol.qml 0 The Dial component, named 'dial, is \e anchored to the center of the main rectangle. The \c value attribute of 'dial' is set to a value based on the @@ -584,15 +578,7 @@ rectangle. The \c value attribute of 'dial' is set to a value based on the the rotation of the needle image. Notice this piece of code in Dial where the change in \c value modifies the position of the needle. - \code - angle: Math.min(Math.max(-130, root.value*2.6 - 130), 133) - Behavior on angle { - SpringAnimation { - spring: 1.4 - damping: .15 - } - } - \endcode +\snippet examples/declarative/ui-components/dialcontrol/Dial.qml needle angle This is part of the \c needleRotation that rotates the needle and causes the rotation of its shadow. \l SpringAnimation is an element that modifies the value diff --git a/doc/src/platforms/symbian-introduction.qdoc b/doc/src/platforms/symbian-introduction.qdoc index 701707e..fafe007 100644 --- a/doc/src/platforms/symbian-introduction.qdoc +++ b/doc/src/platforms/symbian-introduction.qdoc @@ -219,6 +219,7 @@ \row \o -o \o Creates only unsigned package. \row \o -s \o Generates stub sis for ROM. \row \o -n <name> \o Specifies the final sis name. + \row \o -g \o Treat gcce platform as armv5. \endtable Execute the \c{createpackage.pl} script without any diff --git a/doc/src/snippets/declarative/qml-intro/anchors1.qml b/doc/src/snippets/declarative/qml-intro/anchors1.qml new file mode 100644 index 0000000..09ef3b2 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/anchors1.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +//! [document] +import Qt 4.7 + +Rectangle { + id: myWin + width: 500 + height: 400 + + Image { + id: image1 + source: "images/qt-logo.png" + width: 150; height: 150 + anchors.bottom: myWin.bottom + } +} +//! [document] diff --git a/doc/src/snippets/declarative/qml-intro/anchors2.qml b/doc/src/snippets/declarative/qml-intro/anchors2.qml new file mode 100644 index 0000000..ef0ec1f --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/anchors2.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +//! [document] +import Qt 4.7 + +Rectangle { + id: myWin + width: 500 + height: 400 + + Image { + id: image1 + source: "images/qt-logo.png" + width: 150; height: 150 + anchors.bottom: myWin.bottom + anchors.horizontalCenter: myWin.horizontalCenter + anchors.bottomMargin: 10 + } +} +//! [document] diff --git a/doc/src/snippets/declarative/qml-intro/anchors3.qml b/doc/src/snippets/declarative/qml-intro/anchors3.qml new file mode 100644 index 0000000..008ad1a --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/anchors3.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** 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 + +Rectangle { + id: myWin + width: 500 + height: 400 + + Image { + id: image1 + source: "images/qt-logo.png" + width: 150; height: 150 + anchors.bottom: myWin.bottom + anchors.horizontalCenter: myWin.horizontalCenter + anchors.bottomMargin: 10 + } + +//! [adding some text] + Text { + text: "<h2>The Qt Logo</h2>" + anchors.bottom: image1.top + anchors.horizontalCenter: myWin.horizontalCenter + anchors.bottomMargin: 15 + } +//! [adding some text] +} diff --git a/doc/src/snippets/declarative/qml-intro/basic-syntax.qml b/doc/src/snippets/declarative/qml-intro/basic-syntax.qml new file mode 100644 index 0000000..686a927 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/basic-syntax.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +// Note: this file is not intended to be run. + +//! [basic syntax] +SomeElement { + id: myObject + ... some other things here ... +} +//! [basic syntax] diff --git a/doc/src/snippets/declarative/qml-intro/hello-world1.qml b/doc/src/snippets/declarative/qml-intro/hello-world1.qml new file mode 100644 index 0000000..9b91049 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/hello-world1.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +//! [document] +import Qt 4.7 + +Rectangle { + id: myRectangle + width: 500 + height: 400 + + Text { text: "Hello World!" } + + color: "lightgray" +} +//! [document] diff --git a/doc/src/snippets/declarative/qml-intro/hello-world2.qml b/doc/src/snippets/declarative/qml-intro/hello-world2.qml new file mode 100644 index 0000000..ddc1017 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/hello-world2.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** 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 + +Rectangle { + id: myRectangle + width: 500 + height: 400 + +//! [updated text] + Text { + text: "<h2>Hello World</h2>"; color: "darkgreen" + x: 100; y:100 + } +//! [updated text] + + color: "lightgray" +} diff --git a/doc/src/snippets/declarative/qml-intro/hello-world3.qml b/doc/src/snippets/declarative/qml-intro/hello-world3.qml new file mode 100644 index 0000000..f1102c2 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/hello-world3.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** 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 + +Rectangle { + id: myRectangle + width: 500 + height: 400 + +//! [updated text] + Text { + text: "<h1>Hello world again</h1>" + color: "#002288" + x: 100; y: 100 + } +//! [updated text] + + color: "lightgray" +} diff --git a/doc/src/snippets/declarative/qml-intro/hello-world4.qml b/doc/src/snippets/declarative/qml-intro/hello-world4.qml new file mode 100644 index 0000000..c18fe15 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/hello-world4.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** 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 + +Rectangle { + id: myRectangle + width: 500 + height: 400 + + Text { + text: "<h1>Hello world again</h1>" + color: "#002288" + x: 100; y: 100 + } + +//! [added an image] + Image { + source: "images/qt-logo.png" + } +//! [added an image] + + color: "lightgray" +} diff --git a/doc/src/snippets/declarative/qml-intro/hello-world5.qml b/doc/src/snippets/declarative/qml-intro/hello-world5.qml new file mode 100644 index 0000000..bde8dc3 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/hello-world5.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +//! [document] +import Qt 4.7 + +Rectangle { + id: myRectangle + width: 500 + height: 400 + + Text { + text: "<h1>Hello world again</h1>" + color: "#002288" + x: 100; y: 100 + } + +//! [positioning the image] + Image { + source: "images/qt-logo.png" + x: 100; y: 150 + width: 150; height: 150 + } +//! [positioning the image] + + color: "lightgray" +} +//! [document] diff --git a/doc/src/snippets/declarative/qml-intro/number-animation1.qml b/doc/src/snippets/declarative/qml-intro/number-animation1.qml new file mode 100644 index 0000000..8d8d747 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/number-animation1.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +//! [document] +import Qt 4.7 + +Rectangle { + id: mainRec + width: 600 + height: 400 + + Image { + id: image1 + source: "images/qt-logo.png" + x: 200; y: 100 + width: 100; height: 100 + + // Animate a rotation + transformOrigin: Item.Center + NumberAnimation on rotation { + from: 0; to: 360 + duration: 2000 + loops: Animation.Infinite + } + } +} +//! [document] diff --git a/doc/src/snippets/declarative/qml-intro/number-animation2.qml b/doc/src/snippets/declarative/qml-intro/number-animation2.qml new file mode 100644 index 0000000..d556c21 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/number-animation2.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +//! [document] +import Qt 4.7 + +Rectangle { + id: mainRec + width: 600 + height: 400 + + Image { + id: image1 + source: "images/qt-logo.png" + x: 200; y: 100 + width: 100; height: 100 + + // Animate a rotation + transform: Rotation { + origin.x: 50; origin.y: 50; axis {x:0; y:1; z:0} angle:0 + NumberAnimation on angle { + from: 0; to: 360; + duration: 3000; + loops: Animation.Infinite + } + } + } +} +//! [document] diff --git a/doc/src/snippets/declarative/qml-intro/rectangle.qml b/doc/src/snippets/declarative/qml-intro/rectangle.qml new file mode 100644 index 0000000..0078813 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/rectangle.qml @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +//! [document] +import Qt 4.7 + +// This is a comment. And below myRectangle is defined. +Rectangle { + id: myRectangle + width: 500 + height: 400 +} +//! [document] diff --git a/doc/src/snippets/declarative/qml-intro/sequential-animation1.qml b/doc/src/snippets/declarative/qml-intro/sequential-animation1.qml new file mode 100644 index 0000000..e68de20 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/sequential-animation1.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +//! [document] +import Qt 4.7 + +Rectangle { + id: mainRec + width: 600 + height: 400 + z: 0 + + Image { + id: image1 + source: "images/qt-logo.png" + x: 20; y: 20 ; z: 1 + width: 100; height: 100 + } + + Image { + id: image2 + source: "images/qt-logo.png" + width: 100; height: 100 + x: (mainRec.width - 100)/2; y: (mainRec.height - 100)/2 + z: 2 + } +} +//! [document] diff --git a/doc/src/snippets/declarative/qml-intro/sequential-animation2.qml b/doc/src/snippets/declarative/qml-intro/sequential-animation2.qml new file mode 100644 index 0000000..31835a1 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/sequential-animation2.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** 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 + +Rectangle { + id: mainRec + width: 600 + height: 400 + z: 0 + +//! [adding a sequential animation] + Image { + id: image1 + source: "images/qt-logo.png" + width: 100; height: 100 + + SequentialAnimation on x { + loops: Animation.Infinite + NumberAnimation { + from: 20; to: 450; easing.type: "InOutQuad"; + duration: 2000 + } + PauseAnimation { duration: 500 } + } + } +//! [adding a sequential animation] + + Image { + id: image2 + source: "images/qt-logo.png" + width: 100; height: 100 + x: (mainRec.width - 100)/2; y: (mainRec.height - 100)/2 + z: 2 + } +} diff --git a/doc/src/snippets/declarative/qml-intro/sequential-animation3.qml b/doc/src/snippets/declarative/qml-intro/sequential-animation3.qml new file mode 100644 index 0000000..f83a966 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/sequential-animation3.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +//! [document] +Rectangle { + id: mainRec + width: 600 + height: 400 + z: 0 + + Image { + id: image2 + source: "images/qt-logo.png" + width: 100; height: 100 + x: (mainRec.width - 100)/2; y: (mainRec.height - 100)/2 + z: 2 + } + + Image { + id: image1 + source: "images/qt-logo.png" + x: 20; y: 20 ; z: 1 + width: 100; height: 100 + + SequentialAnimation on x { + loops: Animation.Infinite + NumberAnimation { + from: 20; to: 450 + easing.type: "InOutQuad"; duration: 2000 + } + PauseAnimation { duration: 500 } + } + + SequentialAnimation on y { + loops: Animation.Infinite + NumberAnimation { + from: 20; to: 250 + easing.type: "InOutQuad"; duration: 2000 + } + PauseAnimation { duration: 500 } + } + + SequentialAnimation on scale { + loops: Animation.Infinite + NumberAnimation { from: 1; to: 0.5; duration: 1000 } + NumberAnimation { from: 0.5; to: 1; duration: 1000 } + PauseAnimation { duration: 500 } + } + } +} +//! [document] diff --git a/doc/src/snippets/declarative/qml-intro/states1.qml b/doc/src/snippets/declarative/qml-intro/states1.qml new file mode 100644 index 0000000..9619eb7 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/states1.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +//! [document] +import Qt 4.7 + +Rectangle { + id: mainRectangle + width: 600 + height: 400 + color: "black" + + Rectangle { + id: sky + width: 600 + height: 200 + y: 0 + color: "lightblue" + } + + Rectangle { + id: ground + width: 600; height: 200 + y: 200 + color: "green" + } + + MouseArea { + id: mousearea + anchors.fill: mainRectangle + } + + states: [ State { + name: "night" + when: mousearea.pressed == true + PropertyChanges { target: sky; color: "darkblue" } + PropertyChanges { target: ground; color: "black" } + }, + State { + name: "daylight" + when: mousearea.pressed == false + PropertyChanges { target: sky; color: "lightblue" } + PropertyChanges { target: ground; color: "green" } + } + ] + + transitions: [ Transition { + from: "daylight"; to: "night" + ColorAnimation { duration: 1000 } + }, + Transition { + from: "night"; to: "daylight" + ColorAnimation { duration: 500 } + } + ] +} +//! [document] diff --git a/doc/src/snippets/declarative/qml-intro/transformations1.qml b/doc/src/snippets/declarative/qml-intro/transformations1.qml new file mode 100644 index 0000000..af39e69 --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/transformations1.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +//! [document] +import Qt 4.7 + +Rectangle { + id: myWin + width: 500 + height: 400 + + Image { + id: image1 + source: "images/qt-logo.png" + width: 150; height: 150 + anchors.bottom: myWin.bottom + anchors.horizontalCenter: myWin.horizontalCenter + anchors.bottomMargin: 10 + + transform: Rotation { + origin.x: 75; origin.y: 75 + axis{ x: 0; y: 0; z:1 } angle: -90 + } + + } + + Text { + text: "<h2>The Qt Logo -- taking it easy</h2>" + anchors.bottom: image1.top + anchors.horizontalCenter: myWin.horizontalCenter + anchors.bottomMargin: 15 + + transform: [ + Scale { xScale: 1.5; yScale: 1.2 } , + + Rotation { + origin.x: 75; origin.y: 75 + axis{ x: 0; y: 0; z:1 } angle: -45 + } + ] + } +} +//! [document] diff --git a/mkspecs/features/sis_targets.prf b/mkspecs/features/sis_targets.prf index abdf2d4..e069ee1 100644 --- a/mkspecs/features/sis_targets.prf +++ b/mkspecs/features/sis_targets.prf @@ -11,6 +11,12 @@ else:!equals(DEPLOYMENT, default_deployment) { equals(GENERATE_SIS_TARGETS, true) { symbian-abld|symbian-sbsv2 { + symbian-sbsv2 { + CONVERT_GCCE_PARAM = -g + } else { + CONVERT_GCCE_PARAM = + } + make_cache_name = .make.cache sis_target.target = sis sis_target.commands = $(if $(wildcard $$basename(TARGET)_template.pkg), \ @@ -28,7 +34,7 @@ equals(GENERATE_SIS_TARGETS, true) { ) ok_sis_target.target = ok_sis - ok_sis_target.commands = createpackage.bat $(QT_SIS_OPTIONS) $$basename(TARGET)_template.pkg \ + ok_sis_target.commands = createpackage.bat $$CONVERT_GCCE_PARAM $(QT_SIS_OPTIONS) $$basename(TARGET)_template.pkg \ $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE) unsigned_sis_target.target = unsigned_sis @@ -47,7 +53,7 @@ equals(GENERATE_SIS_TARGETS, true) { ) ok_unsigned_sis_target.target = ok_unsigned_sis - ok_unsigned_sis_target.commands = createpackage.bat $(QT_SIS_OPTIONS) -o $$basename(TARGET)_template.pkg $(QT_SIS_TARGET) + ok_unsigned_sis_target.commands = createpackage.bat $$CONVERT_GCCE_PARAM $(QT_SIS_OPTIONS) -o $$basename(TARGET)_template.pkg $(QT_SIS_TARGET) target_sis_target.target = $$basename(TARGET).sis target_sis_target.commands = $(MAKE) -f $(MAKEFILE) sis diff --git a/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm b/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm index 47c3f1e..21638ea 100644 --- a/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm +++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm @@ -38,7 +38,7 @@ $(STORE_BUILD_TARGET): echo "# make sis target." >> $(CACHE_FILENAME) && \ echo "# Version : " >> $(CACHE_FILENAME) && \ echo "# ==============================================================================" >> $(CACHE_FILENAME) && \ - echo QT_SIS_TARGET ?= $(VISUAL_CFG)-$(VARIANTPLATFORM) >> $(CACHE_FILENAME) + echo QT_SIS_TARGET ?= $(VISUAL_CFG)-$(PLATFORM_PATH) >> $(CACHE_FILENAME) $(call endrule,qmake_store_build) endef diff --git a/mkspecs/symbian-sbsv2/flm/qt/qt.xml b/mkspecs/symbian-sbsv2/flm/qt/qt.xml index 12857a2..0f7db3c 100644 --- a/mkspecs/symbian-sbsv2/flm/qt/qt.xml +++ b/mkspecs/symbian-sbsv2/flm/qt/qt.xml @@ -37,6 +37,5 @@ <interface name="qt.qmake_store_build" extends="Symbian.UserFLM" flm="qmake_store_build.flm"> - <param name='VARIANTPLATFORM' /> </interface> </build> diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index 036eb1d..e794351 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -202,10 +202,18 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo QString genericClause = " -c %1_%2" + testClause; QString winscwClause = " -c winscw_%1.mwccinc" + testClause; QString gcceClause; - if (QString::compare(gcceVersion(), UNDETECTED_GCCE_VERSION) == 0) - allPlatforms.removeAll(PLATFORM_GCCE); - else - gcceClause = " -c arm.v5.%1." + gcceVersion() + ".release_gcce" + testClause; + bool stripArmv5 = false; + + if (allPlatforms.contains(PLATFORM_GCCE)) { + if (QString::compare(gcceVersion(), UNDETECTED_GCCE_VERSION) == 0) { + allPlatforms.removeAll(PLATFORM_GCCE); + } else { + gcceClause = " -c arm.v5.%1." + gcceVersion() + testClause; + // Since gcce building is enabled, do not add armv5 for any sbs command + // that also contains gcce, because those will build same targets. + stripArmv5 = true; + } + } QStringList allClauses; QStringList debugClauses; @@ -216,14 +224,15 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo releasePlatforms.removeAll(PLATFORM_WINSCW); // No release for emulator foreach(QString item, debugPlatforms) { - debugClauses << configClause(item, debugBuild, winscwClause, gcceClause, genericClause); + if (item != PLATFORM_ARMV5 || !stripArmv5) + debugClauses << configClause(item, debugBuild, winscwClause, gcceClause, genericClause); } foreach(QString item, releasePlatforms) { - releaseClauses << configClause(item, releaseBuild, winscwClause, gcceClause, genericClause); + if (item != PLATFORM_ARMV5 || !stripArmv5) + releaseClauses << configClause(item, releaseBuild, winscwClause, gcceClause, genericClause); } allClauses << debugClauses << releaseClauses; - QTextStream t(&wrapperFile); t << "# ==============================================================================" << endl; 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/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h index 2626657..664543b 100644 --- a/src/corelib/tools/qsimd_p.h +++ b/src/corelib/tools/qsimd_p.h @@ -51,8 +51,13 @@ QT_BEGIN_HEADER #if defined(QT_NO_MAC_XARCH) || (defined(Q_OS_DARWIN) && (defined(__ppc__) || defined(__ppc64__))) // Disable MMX and SSE on Mac/PPC builds, or if the compiler // does not support -Xarch argument passing -#undef QT_HAVE_SSE2 #undef QT_HAVE_SSE +#undef QT_HAVE_SSE2 +#undef QT_HAVE_SSE3 +#undef QT_HAVE_SSSE3 +#undef QT_HAVE_SSE4_1 +#undef QT_HAVE_SSE4_2 +#undef QT_HAVE_AVX #undef QT_HAVE_3DNOW #undef QT_HAVE_MMX #endif diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index f044e1a..7847303 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; @@ -1375,7 +1362,7 @@ bool QDeclarativeCompiler::doesPropertyExist(QDeclarativeParser::Property *prop, return p.name() != 0; } else { int idx = mo->indexOfProperty(prop->name.constData()); - return idx != -1; + return idx != -1 && mo->property(idx).isScriptable(); } } @@ -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 @@ -1440,6 +1427,11 @@ bool QDeclarativeCompiler::buildProperty(QDeclarativeParser::Property *prop, if (prop->index != -1) { p = metaObject->property(prop->index); Q_ASSERT(p.name()); + + if (!p.isScriptable()) { + prop->index = -1; + p = QMetaProperty(); + } } } @@ -1512,7 +1504,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")); @@ -1826,6 +1818,8 @@ bool QDeclarativeCompiler::buildValueTypeProperty(QObject *type, if (idx == -1) COMPILE_EXCEPTION(prop, tr("Cannot assign to non-existent property \"%1\"").arg(QString::fromUtf8(prop->name))); QMetaProperty p = type->metaObject()->property(idx); + if (!p.isScriptable()) + COMPILE_EXCEPTION(prop, tr("Cannot assign to non-existent property \"%1\"").arg(QString::fromUtf8(prop->name))); prop->index = idx; prop->type = p.userType(); prop->isValueTypeSubProperty = true; @@ -2139,7 +2133,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 +2160,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 +2178,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 +2336,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(); } @@ -2417,7 +2413,6 @@ bool QDeclarativeCompiler::buildDynamicMeta(QDeclarativeParser::Object *obj, Dyn builder.addSignal(p.name + "Changed()"); QMetaPropertyBuilder propBuilder = builder.addProperty(p.name, type, builder.methodCount() - 1); - propBuilder.setScriptable(true); propBuilder.setWritable(!readonly); } @@ -2583,6 +2578,9 @@ bool QDeclarativeCompiler::compileAlias(QMetaObjectBuilder &builder, COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias location")); QMetaProperty aliasProperty = idObject->metaObject()->property(propIdx); + if (!aliasProperty.isScriptable()) + COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias location")); + writable = aliasProperty.isWritable(); if (aliasProperty.isEnumType()) @@ -2619,7 +2617,6 @@ bool QDeclarativeCompiler::compileAlias(QMetaObjectBuilder &builder, builder.addSignal(prop.name + "Changed()"); QMetaPropertyBuilder propBuilder = builder.addProperty(prop.name, typeName.constData(), builder.methodCount() - 1); - propBuilder.setScriptable(true); propBuilder.setWritable(writable); return true; } @@ -2746,7 +2743,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 0fe1ea3..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(); } /*! 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/qdeclarativepropertycache.cpp b/src/declarative/qml/qdeclarativepropertycache.cpp index 839d79f..08503c2 100644 --- a/src/declarative/qml/qdeclarativepropertycache.cpp +++ b/src/declarative/qml/qdeclarativepropertycache.cpp @@ -134,8 +134,9 @@ QDeclarativePropertyCache::~QDeclarativePropertyCache() void QDeclarativePropertyCache::clear() { - for (int ii = 0; ii < indexCache.count(); ++ii) - indexCache.at(ii)->release(); + for (int ii = 0; ii < indexCache.count(); ++ii) { + if (indexCache.at(ii)) indexCache.at(ii)->release(); + } for (StringCache::ConstIterator iter = stringCache.begin(); iter != stringCache.end(); ++iter) @@ -156,14 +157,27 @@ QDeclarativePropertyCache::Data QDeclarativePropertyCache::create(const QMetaObj Q_ASSERT(metaObject); QDeclarativePropertyCache::Data rv; - int idx = metaObject->indexOfProperty(property.toUtf8()); - if (idx != -1) { - rv.load(metaObject->property(idx)); - return rv; + { + const QMetaObject *cmo = metaObject; + while (cmo) { + int idx = metaObject->indexOfProperty(property.toUtf8()); + if (idx != -1) { + QMetaProperty p = metaObject->property(idx); + if (p.isScriptable()) { + rv.load(metaObject->property(idx)); + return rv; + } else { + while (cmo && cmo->propertyOffset() >= idx) + cmo = cmo->superClass(); + } + } else { + cmo = 0; + } + } } int methodCount = metaObject->methodCount(); - for (int ii = methodCount - 1; ii >= 2; --ii) { // >=2 to block the destroyed signal + for (int ii = methodCount - 1; ii >= 3; --ii) { // >=3 to block the destroyed signal and deleteLater() slot QMetaMethod m = metaObject->method(ii); if (m.access() == QMetaMethod::Private) continue; @@ -189,8 +203,9 @@ QDeclarativePropertyCache *QDeclarativePropertyCache::copy() const cache->stringCache = stringCache; cache->identifierCache = identifierCache; - for (int ii = 0; ii < indexCache.count(); ++ii) - indexCache.at(ii)->addref(); + for (int ii = 0; ii < indexCache.count(); ++ii) { + if (indexCache.at(ii)) indexCache.at(ii)->addref(); + } for (StringCache::ConstIterator iter = stringCache.begin(); iter != stringCache.end(); ++iter) (*iter)->addref(); for (IdentifierCache::ConstIterator iter = identifierCache.begin(); iter != identifierCache.end(); ++iter) @@ -210,6 +225,9 @@ void QDeclarativePropertyCache::append(QDeclarativeEngine *engine, const QMetaOb indexCache.resize(propCount); for (int ii = propOffset; ii < propCount; ++ii) { QMetaProperty p = metaObject->property(ii); + if (!p.isScriptable()) + continue; + QString propName = QString::fromUtf8(p.name()); RData *data = new RData; @@ -275,6 +293,10 @@ void QDeclarativePropertyCache::update(QDeclarativeEngine *engine, const QMetaOb indexCache.resize(propCount); for (int ii = propCount - 1; ii >= 0; --ii) { QMetaProperty p = metaObject->property(ii); + if (!p.isScriptable()) { + indexCache[ii] = 0; + continue; + } QString propName = QString::fromUtf8(p.name()); RData *data = new RData; @@ -294,7 +316,7 @@ void QDeclarativePropertyCache::update(QDeclarativeEngine *engine, const QMetaOb } int methodCount = metaObject->methodCount(); - for (int ii = methodCount - 1; ii >= 2; --ii) { // >=2 to block the destroyed signal + for (int ii = methodCount - 1; ii >= 3; --ii) { // >=3 to block the destroyed signal and deleteLater() slot QMetaMethod m = metaObject->method(ii); if (m.access() == QMetaMethod::Private) continue; 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/qmetaobjectbuilder.cpp b/src/declarative/qml/qmetaobjectbuilder.cpp index 0954248..58f8811 100644 --- a/src/declarative/qml/qmetaobjectbuilder.cpp +++ b/src/declarative/qml/qmetaobjectbuilder.cpp @@ -205,7 +205,7 @@ public: (const QByteArray& _name, const QByteArray& _type, int notifierIdx=-1) : name(_name), type(QMetaObject::normalizedType(_type.constData())), - flags(Readable | Writable), notifySignal(-1) + flags(Readable | Writable | Scriptable), notifySignal(-1) { if (notifierIdx >= 0) { flags |= Notify; @@ -2187,7 +2187,7 @@ bool QMetaPropertyBuilder::isDesignable() const /*! Returns true if the property is scriptable; otherwise returns false. - This default value is false. + This default value is true. \sa setScriptable(), isDesignable(), isStored() */ 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/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 0b3b164..7a622f1 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -7758,18 +7758,21 @@ void QGraphicsItemPrivate::resetHeight() } /*! - \property QGraphicsObject::children - \internal + \property QGraphicsObject::children + \since 4.7 + \internal */ /*! - \property QGraphicsObject::width - \internal + \property QGraphicsObject::width + \since 4.7 + \internal */ /*! - \property QGraphicsObject::height - \internal + \property QGraphicsObject::height + \since 4.7 + \internal */ /*! @@ -7985,24 +7988,6 @@ void QGraphicsItemPrivate::resetHeight() */ /*! - \property QGraphicsObject::children - \since 4.7 - \internal -*/ - -/*! - \property QGraphicsObject::width - \since 4.7 - \internal -*/ - -/*! - \property QGraphicsObject::height - \since 4.7 - \internal -*/ - -/*! \class QAbstractGraphicsShapeItem \brief The QAbstractGraphicsShapeItem class provides a common base for all path items. diff --git a/src/gui/graphicsview/qgraphicstransform.cpp b/src/gui/graphicsview/qgraphicstransform.cpp index bd3f2ef..1f155c6 100644 --- a/src/gui/graphicsview/qgraphicstransform.cpp +++ b/src/gui/graphicsview/qgraphicstransform.cpp @@ -346,21 +346,24 @@ void QGraphicsScale::applyTo(QMatrix4x4 *matrix) const /*! \fn QGraphicsScale::xScaleChanged() + \since 4.7 - QGraphicsScale emits this signal when its xScale changes. + This signal is emitted whenever the \l xScale property changes. */ /*! \fn QGraphicsScale::yScaleChanged() + \since 4.7 - QGraphicsScale emits this signal when its yScale changes. + This signal is emitted whenever the \l yScale property changes. */ /*! \fn QGraphicsScale::zScaleChanged() + \since 4.7 - QGraphicsScale emits this signal when its zScale changes. -*/ + This signal is emitted whenever the \l zScale property changes. +*/ /*! \fn QGraphicsScale::scaleChanged() @@ -583,27 +586,6 @@ void QGraphicsRotation::applyTo(QMatrix4x4 *matrix) const \sa QGraphicsRotation::axis */ -/*! - \fn QGraphicsScale::xScaleChanged() - \since 4.7 - - This signal is emitted whenever the \l xScale property changes. -*/ - -/*! - \fn QGraphicsScale::yScaleChanged() - \since 4.7 - - This signal is emitted whenever the \l yScale property changes. -*/ - -/*! - \fn QGraphicsScale::zScaleChanged() - \since 4.7 - - This signal is emitted whenever the \l zScale property changes. -*/ - #include "moc_qgraphicstransform.cpp" QT_END_NAMESPACE diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index be4275c..5223458 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -46,7 +46,6 @@ #include <private/qdrawhelper_armv6_p.h> #include <private/qdrawhelper_neon_p.h> #include <private/qmath_p.h> -#include <private/qsimd_p.h> #include <qmath.h> QT_BEGIN_NAMESPACE @@ -656,6 +655,46 @@ const uint * QT_FASTCALL fetchTransformed(uint *buffer, const Operator *, const return buffer; } +/** \internal + interpolate 4 argb pixels with the distx and disty factor. + distx and disty bust be between 0 and 16 + */ +static inline uint interpolate_4_pixels_16(uint tl, uint tr, uint bl, uint br, int distx, int disty, int idistx, int idisty) +{ + uint tlrb = ((tl & 0x00ff00ff) * idistx * idisty); + uint tlag = (((tl & 0xff00ff00) >> 8) * idistx * idisty); + uint trrb = ((tr & 0x00ff00ff) * distx * idisty); + uint trag = (((tr & 0xff00ff00) >> 8) * distx * idisty); + uint blrb = ((bl & 0x00ff00ff) * idistx * disty); + uint blag = (((bl & 0xff00ff00) >> 8) * idistx * disty); + uint brrb = ((br & 0x00ff00ff) * distx * disty); + uint brag = (((br & 0xff00ff00) >> 8) * distx * disty); + return (((tlrb + trrb + blrb + brrb) >> 8) & 0x00ff00ff) | ((tlag + trag + blag + brag) & 0xff00ff00); +} + + +template<TextureBlendType blendType> +Q_STATIC_TEMPLATE_FUNCTION inline void fetchTransformedBilinear_pixelBounds(int max, int l1, int l2, int &v1, int &v2) +{ + if (blendType == BlendTransformedBilinearTiled) { + v1 %= max; + if (v1 < 0) v1 += max; + v2 = v1 + 1; + v2 %= max; + } else { + if (v1 < l1) { + v2 = v1 = l1; + } else if (v1 >= l2 - 1) { + v2 = v1 = l2 - 1; + } else { + v2 = v1 + 1; + } + } + + Q_ASSERT(v1 >= 0 && v1 < max); + Q_ASSERT(v2 >= 0 && v2 < max); +} + template<TextureBlendType blendType, QImage::Format format> /* blendType = BlendTransformedBilinear or BlendTransformedBilinearTiled */ Q_STATIC_TEMPLATE_FUNCTION const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator *, const QSpanData *data, @@ -696,64 +735,230 @@ const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator * fx -= half_point; fy -= half_point; - while (b < end) { - int x1 = (fx >> 16); - int x2; + + if (fdy == 0) { //simple scale, no rotation int y1 = (fy >> 16); int y2; + fetchTransformedBilinear_pixelBounds<blendType>(image_height, image_y1, image_y2, y1, y2); + const uchar *s1 = data->texture.scanLine(y1); + const uchar *s2 = data->texture.scanLine(y2); - if (blendType == BlendTransformedBilinearTiled) { - x1 %= image_width; - if (x1 < 0) x1 += image_width; - x2 = x1 + 1; - x2 %= image_width; - - y1 %= image_height; - if (y1 < 0) y1 += image_height; - y2 = y1 + 1; - y2 %= image_height; - } else { - if (x1 < image_x1) { - x2 = x1 = image_x1; - } else if (x1 >= image_x2 - 1) { - x2 = x1 = image_x2 - 1; + if (fdx <= fixed_scale && fdx > 0) { // scale up on X + int disty = (fy & 0x0000ffff) >> 8; + int idisty = 256 - disty; + int x = fx >> 16; + + // The idea is first to do the interpolation between the row s1 and the row s2 + // into an intermediate buffer, then we interpolate between two pixel of this buffer. + + // intermediate_buffer[0] is a buffer of red-blue component of the pixel, in the form 0x00RR00BB + // intermediate_buffer[1] is the alpha-green component of the pixel, in the form 0x00AA00GG + quint32 intermediate_buffer[2][buffer_size + 2]; + // count is the size used in the intermediate_buffer. + int count = qCeil(length * data->m11) + 2; //+1 for the last pixel to interpolate with, and +1 for rounding errors. + Q_ASSERT(count <= buffer_size + 2); //length is supposed to be <= buffer_size and data->m11 < 1 in this case + int f = 0; + int lim = count; + if (blendType == BlendTransformedBilinearTiled) { + x %= image_width; + if (x < 0) x += image_width; } else { - x2 = x1 + 1; + lim = qMin(count, image_x2-x); + if (x < image_x1) { + Q_ASSERT(x < image_x2); + uint t = fetch(s1, image_x1, data->texture.colorTable); + uint b = fetch(s2, image_x1, data->texture.colorTable); + quint32 rb = (((t & 0xff00ff) * idisty + (b & 0xff00ff) * disty) >> 8) & 0xff00ff; + quint32 ag = ((((t>>8) & 0xff00ff) * idisty + ((b>>8) & 0xff00ff) * disty) >> 8) & 0xff00ff; + do { + intermediate_buffer[0][f] = rb; + intermediate_buffer[1][f] = ag; + f++; + x++; + } while (x < image_x1 && f < lim); + } } - if (y1 < image_y1) { - y2 = y1 = image_y1; - } else if (y1 >= image_y2 - 1) { - y2 = y1 = image_y2 - 1; - } else { - y2 = y1 + 1; + +#if defined(QT_ALWAYS_HAVE_SSE2) + if (blendType != BlendTransformedBilinearTiled && + (format == QImage::Format_ARGB32_Premultiplied || format == QImage::Format_RGB32)) { + + const __m128i disty_ = _mm_set1_epi16(disty); + const __m128i idisty_ = _mm_set1_epi16(idisty); + const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); + + lim -= 3; + for (; f < lim; x += 4, f += 4) { + // Load 4 pixels from s1, and split the alpha-green and red-blue component + __m128i top = _mm_loadu_si128((__m128i*)((const uint *)(s1)+x)); + __m128i topAG = _mm_srli_epi16(top, 8); + __m128i topRB = _mm_and_si128(top, colorMask); + // Multiplies each colour component by idisty + topAG = _mm_mullo_epi16 (topAG, idisty_); + topRB = _mm_mullo_epi16 (topRB, idisty_); + + // Same for the s2 vector + __m128i bottom = _mm_loadu_si128((__m128i*)((const uint *)(s2)+x)); + __m128i bottomAG = _mm_srli_epi16(bottom, 8); + __m128i bottomRB = _mm_and_si128(bottom, colorMask); + bottomAG = _mm_mullo_epi16 (bottomAG, disty_); + bottomRB = _mm_mullo_epi16 (bottomRB, disty_); + + // Add the values, and shift to only keep 8 significant bits per colors + __m128i rAG =_mm_add_epi16(topAG, bottomAG); + rAG = _mm_srli_epi16(rAG, 8); + _mm_storeu_si128((__m128i*)(&intermediate_buffer[1][f]), rAG); + __m128i rRB =_mm_add_epi16(topRB, bottomRB); + rRB = _mm_srli_epi16(rRB, 8); + _mm_storeu_si128((__m128i*)(&intermediate_buffer[0][f]), rRB); + } + } +#endif + for (; f < count; f++) { // Same as above but without sse2 + if (blendType == BlendTransformedBilinearTiled) { + if (x >= image_width) x -= image_width; + } else { + x = qMin(x, image_x2 - 1); + } + + uint t = fetch(s1, x, data->texture.colorTable); + uint b = fetch(s2, x, data->texture.colorTable); + + intermediate_buffer[0][f] = (((t & 0xff00ff) * idisty + (b & 0xff00ff) * disty) >> 8) & 0xff00ff; + intermediate_buffer[1][f] = ((((t>>8) & 0xff00ff) * idisty + ((b>>8) & 0xff00ff) * disty) >> 8) & 0xff00ff; + x++; + } + // Now interpolate the values from the intermediate_buffer to get the final result. + fx &= fixed_scale - 1; + Q_ASSERT((fx >> 16) == 0); + while (b < end) { + register int x1 = (fx >> 16); + register int x2 = x1 + 1; + Q_ASSERT(x1 >= 0); + Q_ASSERT(x2 < count); + + register int distx = (fx & 0x0000ffff) >> 8; + register int idistx = 256 - distx; + int rb = ((intermediate_buffer[0][x1] * idistx + intermediate_buffer[0][x2] * distx) >> 8) & 0xff00ff; + int ag = (intermediate_buffer[1][x1] * idistx + intermediate_buffer[1][x2] * distx) & 0xff00ff00; + *b = rb | ag; + b++; + fx += fdx; + } + } else if ((fdx < 0 && fdx > -(fixed_scale / 8)) || fabs(data->m22) < (1./8.)) { // scale up more than 8x + int y1 = (fy >> 16); + int y2; + fetchTransformedBilinear_pixelBounds<blendType>(image_height, image_y1, image_y2, y1, y2); + const uchar *s1 = data->texture.scanLine(y1); + const uchar *s2 = data->texture.scanLine(y2); + int disty = (fy & 0x0000ffff) >> 8; + int idisty = 256 - disty; + while (b < end) { + int x1 = (fx >> 16); + int x2; + fetchTransformedBilinear_pixelBounds<blendType>(image_width, image_x1, image_x2, x1, x2); + uint tl = fetch(s1, x1, data->texture.colorTable); + uint tr = fetch(s1, x2, data->texture.colorTable); + uint bl = fetch(s2, x1, data->texture.colorTable); + uint br = fetch(s2, x2, data->texture.colorTable); + + int distx = (fx & 0x0000ffff) >> 8; + int idistx = 256 - distx; + + uint xtop = INTERPOLATE_PIXEL_256(tl, idistx, tr, distx); + uint xbot = INTERPOLATE_PIXEL_256(bl, idistx, br, distx); + *b = INTERPOLATE_PIXEL_256(xtop, idisty, xbot, disty); + + fx += fdx; + ++b; + } + } else { //scale down + int y1 = (fy >> 16); + int y2; + fetchTransformedBilinear_pixelBounds<blendType>(image_height, image_y1, image_y2, y1, y2); + const uchar *s1 = data->texture.scanLine(y1); + const uchar *s2 = data->texture.scanLine(y2); + int disty = (fy & 0x0000ffff) >> 12; + int idisty = 16 - disty; + while (b < end) { + int x1 = (fx >> 16); + int x2; + fetchTransformedBilinear_pixelBounds<blendType>(image_width, image_x1, image_x2, x1, x2); + uint tl = fetch(s1, x1, data->texture.colorTable); + uint tr = fetch(s1, x2, data->texture.colorTable); + uint bl = fetch(s2, x1, data->texture.colorTable); + uint br = fetch(s2, x2, data->texture.colorTable); + int distx = (fx & 0x0000ffff) >> 12; + int idistx = 16 - distx; + *b = interpolate_4_pixels_16(tl, tr, bl, br, distx, disty, idistx, idisty); + fx += fdx; + ++b; } } + } else { //rotation + if (fabs(data->m11) > 8 || fabs(data->m22) > 8) { + //if we are zooming more than 8 times, we use 8bit precision for the position. + while (b < end) { + int x1 = (fx >> 16); + int x2; + int y1 = (fy >> 16); + int y2; - Q_ASSERT(x1 >= 0 && x1 < image_width); - Q_ASSERT(x2 >= 0 && x2 < image_width); - Q_ASSERT(y1 >= 0 && y1 < image_height); - Q_ASSERT(y2 >= 0 && y2 < image_height); + fetchTransformedBilinear_pixelBounds<blendType>(image_width, image_x1, image_x2, x1, x2); + fetchTransformedBilinear_pixelBounds<blendType>(image_height, image_y1, image_y2, y1, y2); - const uchar *s1 = data->texture.scanLine(y1); - const uchar *s2 = data->texture.scanLine(y2); + const uchar *s1 = data->texture.scanLine(y1); + const uchar *s2 = data->texture.scanLine(y2); - uint tl = fetch(s1, x1, data->texture.colorTable); - uint tr = fetch(s1, x2, data->texture.colorTable); - uint bl = fetch(s2, x1, data->texture.colorTable); - uint br = fetch(s2, x2, data->texture.colorTable); + uint tl = fetch(s1, x1, data->texture.colorTable); + uint tr = fetch(s1, x2, data->texture.colorTable); + uint bl = fetch(s2, x1, data->texture.colorTable); + uint br = fetch(s2, x2, data->texture.colorTable); - int distx = (fx & 0x0000ffff) >> 8; - int disty = (fy & 0x0000ffff) >> 8; - int idistx = 256 - distx; - int idisty = 256 - disty; + int distx = (fx & 0x0000ffff) >> 8; + int disty = (fy & 0x0000ffff) >> 8; + int idistx = 256 - distx; + int idisty = 256 - disty; - uint xtop = INTERPOLATE_PIXEL_256(tl, idistx, tr, distx); - uint xbot = INTERPOLATE_PIXEL_256(bl, idistx, br, distx); - *b = INTERPOLATE_PIXEL_256(xtop, idisty, xbot, disty); + uint xtop = INTERPOLATE_PIXEL_256(tl, idistx, tr, distx); + uint xbot = INTERPOLATE_PIXEL_256(bl, idistx, br, distx); + *b = INTERPOLATE_PIXEL_256(xtop, idisty, xbot, disty); - fx += fdx; - fy += fdy; - ++b; + fx += fdx; + fy += fdy; + ++b; + } + } else { + //we are zooming less than 8x, use 4bit precision + while (b < end) { + int x1 = (fx >> 16); + int x2; + int y1 = (fy >> 16); + int y2; + + fetchTransformedBilinear_pixelBounds<blendType>(image_width, image_x1, image_x2, x1, x2); + fetchTransformedBilinear_pixelBounds<blendType>(image_height, image_y1, image_y2, y1, y2); + + const uchar *s1 = data->texture.scanLine(y1); + const uchar *s2 = data->texture.scanLine(y2); + + uint tl = fetch(s1, x1, data->texture.colorTable); + uint tr = fetch(s1, x2, data->texture.colorTable); + uint bl = fetch(s2, x1, data->texture.colorTable); + uint br = fetch(s2, x2, data->texture.colorTable); + + int distx = (fx & 0x0000ffff) >> 12; + int disty = (fy & 0x0000ffff) >> 12; + int idistx = 16 - distx; + int idisty = 16 - disty; + + *b = interpolate_4_pixels_16(tl, tr, bl, br, distx, disty, idistx, idisty); + + fx += fdx; + fy += fdy; + ++b; + } + } } } else { const qreal fdx = data->m11; @@ -779,37 +984,8 @@ const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator * int idistx = 256 - distx; int idisty = 256 - disty; - if (blendType == BlendTransformedBilinearTiled) { - x1 %= image_width; - if (x1 < 0) x1 += image_width; - x2 = x1 + 1; - x2 %= image_width; - - y1 %= image_height; - if (y1 < 0) y1 += image_height; - y2 = y1 + 1; - y2 %= image_height; - } else { - if (x1 < 0) { - x2 = x1 = 0; - } else if (x1 >= image_width - 1) { - x2 = x1 = image_width - 1; - } else { - x2 = x1 + 1; - } - if (y1 < 0) { - y2 = y1 = 0; - } else if (y1 >= image_height - 1) { - y2 = y1 = image_height - 1; - } else { - y2 = y1 + 1; - } - } - - Q_ASSERT(x1 >= 0 && x1 < image_width); - Q_ASSERT(x2 >= 0 && x2 < image_width); - Q_ASSERT(y1 >= 0 && y1 < image_height); - Q_ASSERT(y2 >= 0 && y2 < image_height); + fetchTransformedBilinear_pixelBounds<blendType>(image_width, image_x1, image_x2, x1, x2); + fetchTransformedBilinear_pixelBounds<blendType>(image_height, image_y1, image_y2, y1, y2); const uchar *s1 = data->texture.scanLine(y1); const uchar *s2 = data->texture.scanLine(y2); @@ -5212,37 +5388,8 @@ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const int y1 = (y >> 16); int y2; - if (blendType == BlendTransformedBilinearTiled) { - x1 %= image_width; - if (x1 < 0) x1 += image_width; - x2 = x1 + 1; - x2 %= image_width; - - y1 %= image_height; - if (y1 < 0) y1 += image_height; - y2 = y1 + 1; - y2 %= image_height; - - Q_ASSERT(x1 >= 0 && x1 < image_width); - Q_ASSERT(x2 >= 0 && x2 < image_width); - Q_ASSERT(y1 >= 0 && y1 < image_height); - Q_ASSERT(y2 >= 0 && y2 < image_height); - } else { - if (x1 < image_x1) { - x2 = x1 = image_x1; - } else if (x1 >= image_x2 - 1) { - x2 = x1 = image_x2 - 1; - } else { - x2 = x1 + 1; - } - if (y1 < image_y1) { - y2 = y1 = image_y1; - } else if (y1 >= image_y2 - 1) { - y2 = y1 = image_y2 - 1; - } else { - y2 = y1 + 1; - } - } + fetchTransformedBilinear_pixelBounds<blendType>(image_width, image_x1, image_x2, x1, x2); + fetchTransformedBilinear_pixelBounds<blendType>(image_height, image_y1, image_y2, y1, y2); int y1_offset = y1 * scanline_offset; int y2_offset = y2 * scanline_offset; @@ -5322,37 +5469,8 @@ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const int idistx = 256 - distx; int idisty = 256 - disty; - if (blendType == BlendTransformedBilinearTiled) { - x1 %= image_width; - if (x1 < 0) x1 += image_width; - x2 = x1 + 1; - x2 %= image_width; - - y1 %= image_height; - if (y1 < 0) y1 += image_height; - y2 = y1 + 1; - y2 %= image_height; - - Q_ASSERT(x1 >= 0 && x1 < image_width); - Q_ASSERT(x2 >= 0 && x2 < image_width); - Q_ASSERT(y1 >= 0 && y1 < image_height); - Q_ASSERT(y2 >= 0 && y2 < image_height); - } else { - if (x1 < image_x1) { - x2 = x1 = image_x1; - } else if (x1 >= image_x2 - 1) { - x2 = x1 = image_x2 - 1; - } else { - x2 = x1 + 1; - } - if (y1 < image_y1) { - y2 = y1 = image_y1; - } else if (y1 >= image_y2 - 1) { - y2 = y1 = image_y2 - 1; - } else { - y2 = y1 + 1; - } - } + fetchTransformedBilinear_pixelBounds<blendType>(image_width, image_x1, image_x2, x1, x2); + fetchTransformedBilinear_pixelBounds<blendType>(image_height, image_y1, image_y2, y1, y2); int y1_offset = y1 * scanline_offset; int y2_offset = y2 * scanline_offset; diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h index 75f42a0..5747da5 100644 --- a/src/gui/painting/qdrawhelper_p.h +++ b/src/gui/painting/qdrawhelper_p.h @@ -62,6 +62,7 @@ #define QT_FT_END_HEADER #endif #include "private/qrasterdefs_p.h" +#include <private/qsimd_p.h> #ifdef Q_WS_QWS #include "QtGui/qscreen_qws.h" @@ -69,13 +70,6 @@ QT_BEGIN_NAMESPACE -#if defined(Q_OS_MAC) && (defined(__ppc__) || defined(__ppc64__)) -#undef QT_HAVE_MMX -#undef QT_HAVE_SSE -#undef QT_HAVE_SSE2 -#undef QT_HAVE_3DNOW -#endif - #if defined(Q_CC_MSVC) && _MSCVER <= 1300 && !defined(Q_CC_INTEL) #define Q_STATIC_TEMPLATE_SPECIALIZATION static #else diff --git a/src/gui/painting/qdrawhelper_sse2.cpp b/src/gui/painting/qdrawhelper_sse2.cpp index 30454af..5b674b5 100644 --- a/src/gui/painting/qdrawhelper_sse2.cpp +++ b/src/gui/painting/qdrawhelper_sse2.cpp @@ -43,7 +43,6 @@ #ifdef QT_HAVE_SSE2 -#include <private/qsimd_p.h> #include <private/qdrawingprimitive_sse2_p.h> #include <private/qpaintengine_raster_p.h> diff --git a/src/gui/painting/qdrawhelper_ssse3.cpp b/src/gui/painting/qdrawhelper_ssse3.cpp index 9c02009..4cb4089 100644 --- a/src/gui/painting/qdrawhelper_ssse3.cpp +++ b/src/gui/painting/qdrawhelper_ssse3.cpp @@ -39,11 +39,10 @@ ** ****************************************************************************/ +#include <private/qdrawhelper_x86_p.h> #ifdef QT_HAVE_SSSE3 -#include <private/qsimd_p.h> -#include <private/qdrawhelper_x86_p.h> #include <private/qdrawingprimitive_sse2_p.h> QT_BEGIN_NAMESPACE diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index ee590a4..4e10671 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -5863,7 +5863,8 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText } bool paintEngineSupportsTransformations = d->extended->type() == QPaintEngine::OpenGL2 - || d->extended->type() == QPaintEngine::OpenVG; + || d->extended->type() == QPaintEngine::OpenVG + || d->extended->type() == QPaintEngine::OpenGL; if (paintEngineSupportsTransformations && !staticText_d->untransformedCoordinates) { staticText_d->untransformedCoordinates = true; diff --git a/src/gui/widgets/qdatetimeedit.cpp b/src/gui/widgets/qdatetimeedit.cpp index 7a61dc7..bd6c577 100644 --- a/src/gui/widgets/qdatetimeedit.cpp +++ b/src/gui/widgets/qdatetimeedit.cpp @@ -248,7 +248,7 @@ void QDateTimeEdit::setDateTime(const QDateTime &datetime) /*! \property QDateTimeEdit::date - \brief the QDate that is set in the QDateTimeEdit + \brief the QDate that is set in the widget By default, this property contains a date that refers to January 1, 2000. @@ -279,7 +279,7 @@ void QDateTimeEdit::setDate(const QDate &date) /*! \property QDateTimeEdit::time - \brief the QTime that is set in the QDateTimeEdit + \brief the QTime that is set in the widget By default, this property contains a time of 00:00:00 and 0 milliseconds. @@ -1555,13 +1555,6 @@ QTimeEdit::QTimeEdit(const QTime &time, QWidget *parent) { } -/*! - \property QTimeEdit::time - \brief the QTime that is shown in the widget - - By default, this property contains a time of 00:00:00 and 0 milliseconds. -*/ - /*! \class QDateEdit @@ -1616,13 +1609,6 @@ QDateEdit::QDateEdit(const QDate &date, QWidget *parent) { } -/*! - \property QDateEdit::date - \brief the QDate that is shown in the widget - - By default, this property contains a date referring to January 1, 2000. -*/ - // --- QDateTimeEditPrivate --- 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/opengl/qgl.cpp b/src/opengl/qgl.cpp index 943a195..c49dba4 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -2103,11 +2103,8 @@ void QGLContextPrivate::syncGlState() #ifdef QT_NO_EGL void QGLContextPrivate::swapRegion(const QRegion *) { - static bool firstWarning = true; - if (firstWarning) { - qWarning() << "::swapRegion called but not supported!"; - firstWarning = false; - } + Q_Q(QGLContext); + q->swapBuffers(); } #endif diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index b86fb78..d602000 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -426,6 +426,20 @@ static void drawTexture(const QRectF &rect, GLuint tex_id, const QSize &texSize, void QGLWindowSurface::beginPaint(const QRegion &) { + if (! context()) + return; + + int clearFlags = 0; + + if (context()->d_func()->workaround_needsFullClearOnEveryFrame) + clearFlags = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT; + else if (context()->format().alpha()) + clearFlags = GL_COLOR_BUFFER_BIT; + + if (clearFlags) { + glClearColor(0.0, 0.0, 0.0, 0.0); + glClear(clearFlags); + } } void QGLWindowSurface::endPaint(const QRegion &rgn) 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/qdeclarativeecmascript/data/deleteLater.qml b/tests/auto/declarative/qdeclarativeecmascript/data/deleteLater.qml new file mode 100644 index 0000000..6d23e5f7 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/deleteLater.qml @@ -0,0 +1,14 @@ +import Qt 4.7 + +QtObject { + id: root + property bool test: false + + Component.onCompleted: { + try { + root.deleteLater() + } catch(e) { + test = true; + } + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/nonscriptable.qml b/tests/auto/declarative/qdeclarativeecmascript/data/nonscriptable.qml new file mode 100644 index 0000000..024d82e --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/nonscriptable.qml @@ -0,0 +1,19 @@ +import Qt.test 1.0 +import Qt 4.7 + +MyQmlObject { + id: root + + property bool readOk: false; + property bool writeOk: false + + Component.onCompleted: { + readOk = (root.nonscriptable == undefined); + + try { + root.nonscriptable = 10 + } catch (e) { + writeOk = true; + } + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h index 37d6dbd..7d7e3d9 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h +++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h @@ -92,6 +92,7 @@ class MyQmlObject : public QObject Q_PROPERTY(QDeclarativeListProperty<QObject> objectListProperty READ objectListProperty CONSTANT) Q_PROPERTY(int resettableProperty READ resettableProperty WRITE setResettableProperty RESET resetProperty) Q_PROPERTY(QRegExp regExp READ regExp WRITE setRegExp) + Q_PROPERTY(int nonscriptable READ nonscriptable WRITE setNonscriptable SCRIPTABLE false); public: MyQmlObject(): m_methodCalled(false), m_methodIntCalled(false), m_object(0), m_value(0), m_resetProperty(13) {} @@ -144,6 +145,10 @@ public: void setRegExp(const QRegExp ®Exp) { m_regExp = regExp; } int console() const { return 11; } + + int nonscriptable() const { return 0; } + void setNonscriptable(int) {} + signals: void basicSignal(); void argumentSignal(int a, QString b, qreal c); diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index a6d2dac..496cc05 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -157,6 +157,8 @@ private slots: void qtbug_10696(); void qtbug_11606(); void qtbug_11600(); + void nonscriptable(); + void deleteLater(); void include(); @@ -2530,6 +2532,26 @@ void tst_qdeclarativeecmascript::qtbug_11600() delete o; } +// Reading and writing non-scriptable properties should fail +void tst_qdeclarativeecmascript::nonscriptable() +{ + QDeclarativeComponent component(&engine, TEST_FILE("nonscriptable.qml")); + QObject *o = component.create(); + QVERIFY(o != 0); + QCOMPARE(o->property("readOk").toBool(), true); + QCOMPARE(o->property("writeOk").toBool(), true); + delete o; +} + +// deleteLater() should not be callable from QML +void tst_qdeclarativeecmascript::deleteLater() +{ + QDeclarativeComponent component(&engine, TEST_FILE("deleteLater.qml")); + QObject *o = component.create(); + QVERIFY(o != 0); + QCOMPARE(o->property("test").toBool(), true); + delete o; +} QTEST_MAIN(tst_qdeclarativeecmascript) 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/invalidAlias.7.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.7.errors.txt new file mode 100644 index 0000000..93652a7 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.7.errors.txt @@ -0,0 +1 @@ +5:23:Invalid alias location diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.7.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.7.qml new file mode 100644 index 0000000..2a09648 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.7.qml @@ -0,0 +1,6 @@ +import Test 1.0 + +MyTypeObject { + id: root + property alias a: root.nonScriptable +} 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/data/nonScriptableProperty.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/nonScriptableProperty.errors.txt new file mode 100644 index 0000000..cdfa4b2 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/nonScriptableProperty.errors.txt @@ -0,0 +1 @@ +4:5:Cannot assign to non-existent property "nonScriptable" diff --git a/tests/auto/declarative/qdeclarativelanguage/data/nonScriptableProperty.qml b/tests/auto/declarative/qdeclarativelanguage/data/nonScriptableProperty.qml new file mode 100644 index 0000000..bd59bc8 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/nonScriptableProperty.qml @@ -0,0 +1,5 @@ +import Test 1.0 + +MyQmlObject { + nonScriptable: 11 +} 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..ac55bae 100644 --- a/tests/auto/declarative/qdeclarativelanguage/testtypes.h +++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.h @@ -112,6 +112,7 @@ class MyQmlObject : public QObject, public MyInterface Q_PROPERTY(MyCustomVariantType customType READ customType WRITE setCustomType) Q_PROPERTY(MyQmlObject *qmlobjectProperty READ qmlobject WRITE setQmlobject) Q_PROPERTY(int propertyWithNotify READ propertyWithNotify WRITE setPropertyWithNotify NOTIFY oddlyNamedNotifySignal) + Q_PROPERTY(int nonScriptable READ nonScriptable WRITE setNonScriptable SCRIPTABLE false); Q_INTERFACES(MyInterface) public: @@ -150,6 +151,9 @@ public: int propertyWithNotify() const { return m_propertyWithNotify; } void setPropertyWithNotify(int i) { m_propertyWithNotify = i; emit oddlyNamedNotifySignal(); } + + int nonScriptable() const { return 0; } + void setNonScriptable(int) {} public slots: void basicSlot() { qWarning("MyQmlObject::basicSlot"); } void basicSlotWithArgs(int v) { qWarning("MyQmlObject::basicSlotWithArgs(%d)", v); } @@ -170,7 +174,6 @@ private: QML_DECLARE_TYPE(MyQmlObject) QML_DECLARE_TYPEINFO(MyQmlObject, QML_HAS_ATTACHED_PROPERTIES) - class MyGroupedObject : public QObject { Q_OBJECT @@ -576,6 +579,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..fc78663 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(); @@ -342,6 +343,7 @@ void tst_qdeclarativelanguage::errors_data() QTest::newRow("invalidAlias.4") << "invalidAlias.4.qml" << "invalidAlias.4.errors.txt" << false; QTest::newRow("invalidAlias.5") << "invalidAlias.5.qml" << "invalidAlias.5.errors.txt" << false; QTest::newRow("invalidAlias.6") << "invalidAlias.6.qml" << "invalidAlias.6.errors.txt" << false; + QTest::newRow("invalidAlias.7") << "invalidAlias.7.qml" << "invalidAlias.7.errors.txt" << false; QTest::newRow("invalidAttachedProperty.1") << "invalidAttachedProperty.1.qml" << "invalidAttachedProperty.1.errors.txt" << false; QTest::newRow("invalidAttachedProperty.2") << "invalidAttachedProperty.2.qml" << "invalidAttachedProperty.2.errors.txt" << false; @@ -372,6 +374,7 @@ void tst_qdeclarativelanguage::errors_data() QTest::newRow("assignToNamespace") << "assignToNamespace.qml" << "assignToNamespace.errors.txt" << false; QTest::newRow("invalidOn") << "invalidOn.qml" << "invalidOn.errors.txt" << false; QTest::newRow("invalidProperty") << "invalidProperty.qml" << "invalidProperty.errors.txt" << false; + QTest::newRow("nonScriptableProperty") << "nonScriptableProperty.qml" << "nonScriptableProperty.errors.txt" << false; } @@ -1192,6 +1195,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/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/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp b/tests/auto/declarative/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp index 8ba9d45..0f6d531 100644 --- a/tests/auto/declarative/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp +++ b/tests/auto/declarative/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp @@ -558,7 +558,7 @@ void tst_QMetaObjectBuilder::property() QVERIFY(prop1.isWritable()); QVERIFY(!prop1.isResettable()); QVERIFY(!prop1.isDesignable()); - QVERIFY(!prop1.isScriptable()); + QVERIFY(prop1.isScriptable()); QVERIFY(!prop1.isStored()); QVERIFY(!prop1.isEditable()); QVERIFY(!prop1.isUser()); @@ -577,7 +577,7 @@ void tst_QMetaObjectBuilder::property() QVERIFY(prop2.isWritable()); QVERIFY(!prop2.isResettable()); QVERIFY(!prop2.isDesignable()); - QVERIFY(!prop2.isScriptable()); + QVERIFY(prop2.isScriptable()); QVERIFY(!prop2.isStored()); QVERIFY(!prop2.isEditable()); QVERIFY(!prop2.isUser()); @@ -599,7 +599,7 @@ void tst_QMetaObjectBuilder::property() prop1.setWritable(false); prop1.setResettable(true); prop1.setDesignable(true); - prop1.setScriptable(true); + prop1.setScriptable(false); prop1.setStored(true); prop1.setEditable(true); prop1.setUser(true); @@ -614,7 +614,7 @@ void tst_QMetaObjectBuilder::property() QVERIFY(!prop1.isWritable()); QVERIFY(prop1.isResettable()); QVERIFY(prop1.isDesignable()); - QVERIFY(prop1.isScriptable()); + QVERIFY(!prop1.isScriptable()); QVERIFY(prop1.isStored()); QVERIFY(prop1.isEditable()); QVERIFY(prop1.isUser()); @@ -627,7 +627,7 @@ void tst_QMetaObjectBuilder::property() QCOMPARE(prop2.type(), QByteArray("int")); QVERIFY(!prop2.isResettable()); QVERIFY(!prop2.isDesignable()); - QVERIFY(!prop2.isScriptable()); + QVERIFY(prop2.isScriptable()); QVERIFY(!prop2.isStored()); QVERIFY(!prop2.isEditable()); QVERIFY(!prop2.isUser()); @@ -643,7 +643,7 @@ void tst_QMetaObjectBuilder::property() QCOMPARE(prop2.type(), QByteArray("int")); QVERIFY(!prop2.isResettable()); QVERIFY(!prop2.isDesignable()); - QVERIFY(!prop2.isScriptable()); + QVERIFY(prop2.isScriptable()); QVERIFY(!prop2.isStored()); QVERIFY(!prop2.isEditable()); QVERIFY(!prop2.isUser()); 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/qimage/tst_qimage.cpp b/tests/auto/qimage/tst_qimage.cpp index 49514dc..ec0ecec 100644 --- a/tests/auto/qimage/tst_qimage.cpp +++ b/tests/auto/qimage/tst_qimage.cpp @@ -1451,11 +1451,6 @@ static inline int rand8() return int(256. * (qrand() / (RAND_MAX + 1.0))); } -static inline bool compare(int a, int b, int tolerance) -{ - return qAbs(a - b) <= tolerance; -} - // compares img.scale against the bilinear filtering used by QPainter void tst_QImage::smoothScale3() { @@ -1483,6 +1478,7 @@ void tst_QImage::smoothScale3() p.scale(scales[i], scales[i]); p.drawImage(0, 0, img); p.end(); + int err = 0; for (int y = 0; y < a.height(); ++y) { for (int x = 0; x < a.width(); ++x) { @@ -1490,11 +1486,15 @@ void tst_QImage::smoothScale3() QRgb cb = b.pixel(x, y); // tolerate a little bit of rounding errors - QVERIFY(compare(qRed(ca), qRed(cb), 3)); - QVERIFY(compare(qGreen(ca), qGreen(cb), 3)); - QVERIFY(compare(qBlue(ca), qBlue(cb), 3)); + bool r = true; + r &= qAbs(qRed(ca) - qRed(cb)) <= 18; + r &= qAbs(qGreen(ca) - qGreen(cb)) <= 18; + r &= qAbs(qBlue(ca) - qBlue(cb)) <= 18; + if (!r) + err++; } } + QCOMPARE(err, 0); } } 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/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/qdoc3/test/qt-defines.qdocconf b/tools/qdoc3/test/qt-defines.qdocconf index 9e41d93..344bbb0 100644 --- a/tools/qdoc3/test/qt-defines.qdocconf +++ b/tools/qdoc3/test/qt-defines.qdocconf @@ -20,29 +20,29 @@ codeindent = 1 # See also qhp.Qt.extraFiles extraimages.HTML = qt-logo \ trolltech-logo \ - bg_l.png \ - bg_l_blank.png \ - bg_ll_blank.png \ - bg_ul_blank.png \ - header_bg.png \ - bg_r.png \ - box_bg.png \ - breadcrumb.png \ - bullet_gt.png \ - bullet_dn.png \ - bullet_sq.png \ - bullet_up.png \ - arrow_down.png \ - feedbackground.png \ - horBar.png \ - page.png \ - page_bg.png \ - sprites-combined.png \ - spinner.gif \ - stylesheet-coffee-plastique.png \ - taskmenuextension-example.png \ - coloreditorfactoryimage.png \ - dynamiclayouts-example.png \ + bg_l.png \ + bg_l_blank.png \ + bg_ll_blank.png \ + bg_ul_blank.png \ + header_bg.png \ + bg_r.png \ + box_bg.png \ + breadcrumb.png \ + bullet_gt.png \ + bullet_dn.png \ + bullet_sq.png \ + bullet_up.png \ + arrow_down.png \ + feedbackground.png \ + horBar.png \ + page.png \ + page_bg.png \ + sprites-combined.png \ + spinner.gif \ + stylesheet-coffee-plastique.png \ + taskmenuextension-example.png \ + coloreditorfactoryimage.png \ + dynamiclayouts-example.png # This stuff is used by the new doc format. scriptdirs = $QT_SOURCE_TREE/doc/src/template/scripts diff --git a/tools/qml/startup/startup.qml b/tools/qml/startup/startup.qml index be67598..ddc7217 100644 --- a/tools/qml/startup/startup.qml +++ b/tools/qml/startup/startup.qml @@ -49,14 +49,53 @@ Rectangle { Component.onCompleted: treatsApp.state = "part1" signal animationFinished - Logo { - id: logo - x: 165 - y: 35 - rotation: -15 - scale: 0.6 - opacity: 0 - onAnimationFinished: treatsApp.animationFinished(); + Item { + width: 800 + height: 480 + anchors.centerIn: parent + clip: true + + Logo { + id: logo + x: 165 + y: 35 + rotation: -15 + scale: 0.6 + opacity: 0 + onAnimationFinished: treatsApp.animationFinished(); + } + + Item { + id: quickblur + x: 800//325 + y: 344 + Image { + id: blurText + source: "quick-blur.png" + } + Image { + id: quickregular + x: -1 + y: 0 + opacity: 0 + source: "quick-regular.png" + } + Image { + id: star + x: -1 + y: 0 + opacity: 0 + source: "white-star.png" + smooth: true + NumberAnimation on rotation { + from: 0 + to: 360 + loops: NumberAnimation.Infinite + running: true + duration: 2000 + } + } + } } states: [ @@ -96,39 +135,6 @@ Rectangle { } ] - - Item { - id: quickblur - x: 800//325 - y: 344 - Image { - id: blurText - source: "quick-blur.png" - } - Image { - id: quickregular - x: -1 - y: 0 - opacity: 0 - source: "quick-regular.png" - } - Image { - id: star - x: -1 - y: 0 - opacity: 0 - source: "white-star.png" - smooth: true - NumberAnimation on rotation { - from: 0 - to: 360 - loops: NumberAnimation.Infinite - running: true - duration: 2000 - } - } - } - transitions: [ Transition { ParallelAnimation { 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> |