on xenial help sign in
Merge
cbc3134Albert Astals
Components/Stage.qml+1−1
@@ -438,7 +438,7 @@ Showable {
438 anchors.bottom: parent.bottom
438 anchors.bottom: parent.bottom
439 anchors.right: parent.right
439 anchors.right: parent.right
440
440
441− direction: DirectionalDragArea.Leftwards
441+ direction: Direction.Leftwards
442 maxDeviation: units.gu(1)
442 maxDeviation: units.gu(1)
443 wideningAngle: 20
443 wideningAngle: 20
444 distanceThreshold: units.gu(3)
444 distanceThreshold: units.gu(3)
Launcher/Launcher.qml+1−1
@@ -184,7 +184,7 @@ Item {
184 DirectionalDragArea {
184 DirectionalDragArea {
185 id: dragArea
185 id: dragArea
186
186
187− direction: DirectionalDragArea.Rightwards
187+ direction: Direction.Rightwards
188
188
189 // values to be tweaked and later removed from here and set in stone as defaults
189 // values to be tweaked and later removed from here and set in stone as defaults
190 // once we are confident it's all good.
190 // once we are confident it's all good.
cmake/modules/QmlTest.cmake+39−1
@@ -9,6 +9,10 @@
9# IMPORT_PATHS will pass those paths to qmltestrunner as "-import" arguments
9# IMPORT_PATHS will pass those paths to qmltestrunner as "-import" arguments
10# PROPERTIES will be set on the target and test target. See CMake's set_target_properties()
10# PROPERTIES will be set on the target and test target. See CMake's set_target_properties()
11#
11#
12+# Two targets will be created:
13+# - testComponentName - Runs the test with qmltestrunner
14+# - tryComponentName - Runs the test with uqmlscene, for manual interaction
15+#
12# To change/set a default value for the whole test suite, prior to calling add_qml_test, set:
16# To change/set a default value for the whole test suite, prior to calling add_qml_test, set:
13# qmltest_DEFAULT_NO_ADD_TEST (default: FALSE)
17# qmltest_DEFAULT_NO_ADD_TEST (default: FALSE)
14# qmltest_DEFAULT_TARGETS
18# qmltest_DEFAULT_TARGETS
@@ -21,6 +25,39 @@ if(NOT qmltestrunner_exe)
21 msg(FATAL_ERROR "Could not locate qmltestrunner.")
25 msg(FATAL_ERROR "Could not locate qmltestrunner.")
22endif()
26endif()
23
27
28+set(qmlscene_exe ${CMAKE_BINARY_DIR}/tests/uqmlscene/uqmlscene)
29+
30+macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
31+ set(options NO_ADD_TEST NO_TARGETS)
32+ set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
33+
34+ cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
35+
36+ set(qmlscene_TARGET try${COMPONENT_NAME})
37+ set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
38+
39+ set(qmlscene_imports "")
40+ if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "")
41+ foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS})
42+ list(APPEND qmlscene_imports "-I")
43+ list(APPEND qmlscene_imports ${IMPORT_PATH})
44+ endforeach(IMPORT_PATH)
45+ elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "")
46+ foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS})
47+ list(APPEND qmlscene_imports "-I")
48+ list(APPEND qmlscene_imports ${IMPORT_PATH})
49+ endforeach(IMPORT_PATH)
50+ endif()
51+
52+ set(qmlscene_command
53+ env ${qmltest_ENVIRONMENT}
54+ ${qmlscene_exe} ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
55+ ${qmlscene_imports}
56+ )
57+ add_custom_target(${qmlscene_TARGET} ${qmlscene_command})
58+
59+endmacro(add_manual_qml_test)
60+
24macro(add_qml_test SUBPATH COMPONENT_NAME)
61macro(add_qml_test SUBPATH COMPONENT_NAME)
25 set(options NO_ADD_TEST NO_TARGETS)
62 set(options NO_ADD_TEST NO_TARGETS)
26 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
63 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
@@ -50,7 +87,6 @@ macro(add_qml_test SUBPATH COMPONENT_NAME)
50 -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
87 -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
51 -o -,txt
88 -o -,txt
52 )
89 )
53−
54 add_custom_target(${qmltest_TARGET} ${qmltest_command})
90 add_custom_target(${qmltest_TARGET} ${qmltest_command})
55
91
56 if(NOT "${qmltest_PROPERTIES}" STREQUAL "")
92 if(NOT "${qmltest_PROPERTIES}" STREQUAL "")
@@ -80,4 +116,6 @@ macro(add_qml_test SUBPATH COMPONENT_NAME)
80 endforeach(TARGET)
116 endforeach(TARGET)
81 endif()
117 endif()
82 endif("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
118 endif("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
119+
120+ add_manual_qml_test(${SUBPATH} ${COMPONENT_NAME} ${ARGN})
83endmacro(add_qml_test)
121endmacro(add_qml_test)
plugins/Ubuntu/Gestures/CMakeLists.txt+1
@@ -7,6 +7,7 @@ find_package(Qt5Quick REQUIRED)
7set(UbuntuGestureQml_SOURCES
7set(UbuntuGestureQml_SOURCES
8 plugin.cpp
8 plugin.cpp
9 AxisVelocityCalculator.cpp
9 AxisVelocityCalculator.cpp
10+ Direction.cpp
10 DirectionalDragArea.cpp
11 DirectionalDragArea.cpp
11)
12)
12
13
plugins/Ubuntu/Gestures/Direction.cppnew file+27
@@ -0,0 +1,27 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "Direction.h"
18+
19+bool Direction::isHorizontal(Direction::Type type)
20+{
21+ return type == Direction::Leftwards || type == Direction::Rightwards;
22+}
23+
24+bool Direction::isVertical(Direction::Type type)
25+{
26+ return type == Direction::Upwards || type == Direction::Downwards;
27+}
plugins/Ubuntu/Gestures/Direction.hnew file+43
@@ -0,0 +1,43 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef DIRECTION_H
18+#define DIRECTION_H
19+
20+#include "UbuntuGesturesGlobal.h"
21+#include <QObject>
22+
23+/*
24+ A Direction enum wrapper so that we can do things like "direction: Direction.Righwards"
25+ from QML.
26+ */
27+class UBUNTUGESTURES_EXPORT Direction : public QObject {
28+ Q_OBJECT
29+ Q_ENUMS(Type)
30+
31+public:
32+ enum Type {
33+ Rightwards, // Along the positive direction of the X axis
34+ Leftwards, // Along the negative direction of the X axis
35+ Downwards, // Along the positive direction of the Y axis
36+ Upwards // Along the negative direction of the Y axis
37+ };
38+
39+ Q_INVOKABLE static bool isHorizontal(Direction::Type type);
40+ Q_INVOKABLE static bool isVertical(Direction::Type type);
41+};
42+
43+#endif // DIRECTION_H
plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+16−26
@@ -41,7 +41,7 @@ DirectionalDragArea::DirectionalDragArea(QQuickItem *parent)
41 : QQuickItem(parent)
41 : QQuickItem(parent)
42 , m_status(WaitingForTouch)
42 , m_status(WaitingForTouch)
43 , m_touchId(-1)
43 , m_touchId(-1)
44− , m_direction(DirectionalDragArea::Rightwards)
44+ , m_direction(Direction::Rightwards)
45 , m_wideningAngle(0)
45 , m_wideningAngle(0)
46 , m_wideningFactor(0)
46 , m_wideningFactor(0)
47 , m_distanceThreshold(0)
47 , m_distanceThreshold(0)
@@ -58,12 +58,12 @@ DirectionalDragArea::DirectionalDragArea(QQuickItem *parent)
58 m_velocityCalculator = new AxisVelocityCalculator(this);
58 m_velocityCalculator = new AxisVelocityCalculator(this);
59}
59}
60
60
61−DirectionalDragArea::Direction DirectionalDragArea::direction() const
61+Direction::Type DirectionalDragArea::direction() const
62{
62{
63 return m_direction;
63 return m_direction;
64}
64}
65
65
66−void DirectionalDragArea::setDirection(DirectionalDragArea::Direction direction)
66+void DirectionalDragArea::setDirection(Direction::Type direction)
67{
67{
68 if (direction != m_direction) {
68 if (direction != m_direction) {
69 m_direction = direction;
69 m_direction = direction;
@@ -151,7 +151,7 @@ void DirectionalDragArea::setAxisVelocityCalculator(AxisVelocityCalculator *newV
151
151
152qreal DirectionalDragArea::distance() const
152qreal DirectionalDragArea::distance() const
153{
153{
154− if (directionIsHorizontal()) {
154+ if (Direction::isHorizontal(m_direction)) {
155 return m_previousPos.x() - m_startPos.x();
155 return m_previousPos.x() - m_startPos.x();
156 } else {
156 } else {
157 return m_previousPos.y() - m_startPos.y();
157 return m_previousPos.y() - m_startPos.y();
@@ -286,13 +286,13 @@ bool DirectionalDragArea::pointInsideAllowedArea() const
286 qreal dY = m_dampedPos.y() - m_startPos.y();
286 qreal dY = m_dampedPos.y() - m_startPos.y();
287
287
288 switch (m_direction) {
288 switch (m_direction) {
289− case Upwards:
289+ case Direction::Upwards:
290 return dY <= 0 && qFabs(dX) <= qFabs(dY) * m_wideningFactor;
290 return dY <= 0 && qFabs(dX) <= qFabs(dY) * m_wideningFactor;
291− case Downwards:
291+ case Direction::Downwards:
292 return dY >= 0 && qFabs(dX) <= dY * m_wideningFactor;
292 return dY >= 0 && qFabs(dX) <= dY * m_wideningFactor;
293− case Leftwards:
293+ case Direction::Leftwards:
294 return dX <= 0 && qFabs(dY) <= qFabs(dX) * m_wideningFactor;
294 return dX <= 0 && qFabs(dY) <= qFabs(dX) * m_wideningFactor;
295− default: // Rightwards:
295+ default: // Direction::Rightwards:
296 return dX >= 0 && qFabs(dY) <= dX * m_wideningFactor;
296 return dX >= 0 && qFabs(dY) <= dX * m_wideningFactor;
297 }
297 }
298}
298}
@@ -300,20 +300,20 @@ bool DirectionalDragArea::pointInsideAllowedArea() const
300bool DirectionalDragArea::movingInRightDirection() const
300bool DirectionalDragArea::movingInRightDirection() const
301{
301{
302 switch (m_direction) {
302 switch (m_direction) {
303− case Upwards:
303+ case Direction::Upwards:
304 return m_dampedPos.y() <= m_previousDampedPos.y();
304 return m_dampedPos.y() <= m_previousDampedPos.y();
305− case Downwards:
305+ case Direction::Downwards:
306 return m_dampedPos.y() >= m_previousDampedPos.y();
306 return m_dampedPos.y() >= m_previousDampedPos.y();
307− case Leftwards:
307+ case Direction::Leftwards:
308 return m_dampedPos.x() <= m_previousDampedPos.x();
308 return m_dampedPos.x() <= m_previousDampedPos.x();
309− default: // Rightwards:
309+ default: // Direction::Rightwards:
310 return m_dampedPos.x() >= m_previousDampedPos.x();
310 return m_dampedPos.x() >= m_previousDampedPos.x();
311 }
311 }
312}
312}
313
313
314bool DirectionalDragArea::movedFarEnough(const QPointF &point) const
314bool DirectionalDragArea::movedFarEnough(const QPointF &point) const
315{
315{
316− if (directionIsHorizontal())
316+ if (Direction::isHorizontal(m_direction))
317 return qFabs(point.x() - m_startPos.x()) > m_distanceThreshold;
317 return qFabs(point.x() - m_startPos.x()) > m_distanceThreshold;
318 else
318 else
319 return qFabs(point.y() - m_startPos.y()) > m_distanceThreshold;
319 return qFabs(point.y() - m_startPos.y()) > m_distanceThreshold;
@@ -386,35 +386,25 @@ void DirectionalDragArea::setPreviousPos(QPointF point)
386
386
387 if (xChanged) {
387 if (xChanged) {
388 Q_EMIT touchXChanged(point.x());
388 Q_EMIT touchXChanged(point.x());
389− if (directionIsHorizontal())
389+ if (Direction::isHorizontal(m_direction))
390 Q_EMIT distanceChanged(distance());
390 Q_EMIT distanceChanged(distance());
391 }
391 }
392
392
393 if (yChanged) {
393 if (yChanged) {
394 Q_EMIT touchYChanged(point.y());
394 Q_EMIT touchYChanged(point.y());
395− if (directionIsVertical())
395+ if (Direction::isVertical(m_direction))
396 Q_EMIT distanceChanged(distance());
396 Q_EMIT distanceChanged(distance());
397 }
397 }
398}
398}
399
399
400void DirectionalDragArea::updateVelocityCalculator(QPointF point)
400void DirectionalDragArea::updateVelocityCalculator(QPointF point)
401{
401{
402− if (directionIsHorizontal()) {
402+ if (Direction::isHorizontal(m_direction)) {
403 m_velocityCalculator->setTrackedPosition(point.x());
403 m_velocityCalculator->setTrackedPosition(point.x());
404 } else {
404 } else {
405 m_velocityCalculator->setTrackedPosition(point.y());
405 m_velocityCalculator->setTrackedPosition(point.y());
406 }
406 }
407}
407}
408
408
409−bool DirectionalDragArea::directionIsHorizontal() const
410−{
411− return m_direction == Leftwards || m_direction == Rightwards;
412−}
413−
414−bool DirectionalDragArea::directionIsVertical() const
415−{
416− return m_direction == Upwards || m_direction == Downwards;
417−}
418−
419// Because we are defining a new QObject-based class (RecognitionTimer) here.
409// Because we are defining a new QObject-based class (RecognitionTimer) here.
420#include "DirectionalDragArea.moc"
410#include "DirectionalDragArea.moc"
plugins/Ubuntu/Gestures/DirectionalDragArea.h+6−13
@@ -21,6 +21,7 @@
21#include "AxisVelocityCalculator.h"
21#include "AxisVelocityCalculator.h"
22#include "UbuntuGesturesGlobal.h"
22#include "UbuntuGesturesGlobal.h"
23#include "Damper.h"
23#include "Damper.h"
24+#include "Direction.h"
24
25
25namespace UbuntuGestures {
26namespace UbuntuGestures {
26/* Defines an interface for a Timer. */
27/* Defines an interface for a Timer. */
@@ -53,7 +54,7 @@ class UBUNTUGESTURES_EXPORT DirectionalDragArea : public QQuickItem {
53 Q_OBJECT
54 Q_OBJECT
54
55
55 // The direction in which the gesture should move in order to be recognized.
56 // The direction in which the gesture should move in order to be recognized.
56− Q_PROPERTY(Direction direction READ direction WRITE setDirection NOTIFY directionChanged)
57+ Q_PROPERTY(Direction::Type direction READ direction WRITE setDirection NOTIFY directionChanged)
57
58
58 // The distance travelled by the finger along the axis specified by
59 // The distance travelled by the finger along the axis specified by
59 // DirectionalDragArea's direction.
60 // DirectionalDragArea's direction.
@@ -116,12 +117,8 @@ class UBUNTUGESTURES_EXPORT DirectionalDragArea : public QQuickItem {
116public:
117public:
117 DirectionalDragArea(QQuickItem *parent = 0);
118 DirectionalDragArea(QQuickItem *parent = 0);
118
119
119− enum Direction { Rightwards, // Along the positive direction of the X axis
120− Leftwards, // Along the negative direction of the X axis
121− Downwards, // Along the positive direction of the Y axis
122− Upwards }; // Along the negative direction of the Y axis
123− Direction direction() const;
120+ Direction::Type direction() const;
124− void setDirection(Direction);
121+ void setDirection(Direction::Type);
125
122
126 // Describes the state of the directional drag gesture.
123 // Describes the state of the directional drag gesture.
127 enum Status {
124 enum Status {
@@ -179,7 +176,7 @@ public:
179 void setAxisVelocityCalculator(AxisVelocityCalculator *velCalc);
176 void setAxisVelocityCalculator(AxisVelocityCalculator *velCalc);
180
177
181Q_SIGNALS:
178Q_SIGNALS:
182− void directionChanged(Direction direction);
179+ void directionChanged(Direction::Type direction);
183 void statusChanged(Status value);
180 void statusChanged(Status value);
184 void draggingChanged(bool value);
181 void draggingChanged(bool value);
185 void distanceChanged(qreal value);
182 void distanceChanged(qreal value);
@@ -210,10 +207,6 @@ private:
210 void setPreviousPos(QPointF point);
207 void setPreviousPos(QPointF point);
211 void updateVelocityCalculator(QPointF point);
208 void updateVelocityCalculator(QPointF point);
212
209
213− // convenience functions
214− bool directionIsHorizontal() const;
215− bool directionIsVertical() const;
216−
217 Status m_status;
210 Status m_status;
218
211
219 QPointF m_startPos;
212 QPointF m_startPos;
@@ -225,7 +218,7 @@ private:
225 DampedPointF m_dampedPos;
218 DampedPointF m_dampedPos;
226 QPointF m_previousDampedPos;
219 QPointF m_previousDampedPos;
227
220
228− Direction m_direction;
221+ Direction::Type m_direction;
229 qreal m_wideningAngle; // in degrees
222 qreal m_wideningAngle; // in degrees
230 qreal m_wideningFactor; // it's tan(degreesToRadian(m_wideningAngle))
223 qreal m_wideningFactor; // it's tan(degreesToRadian(m_wideningAngle))
231 qreal m_distanceThreshold;
224 qreal m_distanceThreshold;
plugins/Ubuntu/Gestures/plugin.cpp+8
@@ -16,12 +16,20 @@
16
16
17#include "plugin.h"
17#include "plugin.h"
18#include "AxisVelocityCalculator.h"
18#include "AxisVelocityCalculator.h"
19+#include "Direction.h"
19#include "DirectionalDragArea.h"
20#include "DirectionalDragArea.h"
20
21
21#include <qqml.h>
22#include <qqml.h>
22
23
24+static QObject* directionSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
25+ Q_UNUSED(engine);
26+ Q_UNUSED(scriptEngine);
27+ return new Direction;
28+}
29+
23void UbuntuGestureQmlPlugin::registerTypes(const char *uri)
30void UbuntuGestureQmlPlugin::registerTypes(const char *uri)
24{
31{
32+ qmlRegisterSingletonType<Direction>(uri, 0, 1, "Direction", directionSingleton);
25 qmlRegisterType<DirectionalDragArea>(uri, 0, 1, "DirectionalDragArea");
33 qmlRegisterType<DirectionalDragArea>(uri, 0, 1, "DirectionalDragArea");
26 qmlRegisterType<AxisVelocityCalculator>(uri, 0, 1, "AxisVelocityCalculator");
34 qmlRegisterType<AxisVelocityCalculator>(uri, 0, 1, "AxisVelocityCalculator");
27}
35}
po/ar.po+28−28
@@ -8,58 +8,58 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
11−"PO-Revision-Date: 2013-06-05 22:20+0000\n"
11+"PO-Revision-Date: 2013-06-14 21:09+0000\n"
12−"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12+"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
13"Language-Team: Arabic <ar@li.org>\n"
13"Language-Team: Arabic <ar@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2013-06-11 06:34+0000\n"
17+"X-Launchpad-Export-Date: 2013-06-15 06:22+0000\n"
18"X-Generator: Launchpad (build 16667)\n"
18"X-Generator: Launchpad (build 16667)\n"
19
19
20#: Applications/applications.js:23
20#: Applications/applications.js:23
21msgid "Phone"
21msgid "Phone"
22−msgstr ""
22+msgstr "الهاتف"
23
23
24#: Applications/applications.js:29
24#: Applications/applications.js:29
25msgid "Camera"
25msgid "Camera"
26−msgstr ""
26+msgstr "الكاميرا"
27
27
28#: Applications/applications.js:35
28#: Applications/applications.js:35
29msgid "Gallery"
29msgid "Gallery"
30−msgstr ""
30+msgstr "المعرض"
31
31
32#: Applications/applications.js:40
32#: Applications/applications.js:40
33msgid "Facebook"
33msgid "Facebook"
34−msgstr ""
34+msgstr "فيسبوك"
35
35
36#: Applications/applications.js:46
36#: Applications/applications.js:46
37msgid "Browser"
37msgid "Browser"
38−msgstr ""
38+msgstr "المتصفح"
39
39
40#: Applications/applications.js:51
40#: Applications/applications.js:51
41msgid "Twitter"
41msgid "Twitter"
42−msgstr ""
42+msgstr "تويتر"
43
43
44#: Applications/applications.js:57
44#: Applications/applications.js:57
45msgid "GMail"
45msgid "GMail"
46−msgstr ""
46+msgstr "جي ميل"
47
47
48#: Applications/applications.js:62
48#: Applications/applications.js:62
49msgid "Weather"
49msgid "Weather"
50−msgstr ""
50+msgstr "الطقس"
51
51
52#: Applications/applications.js:68
52#: Applications/applications.js:68
53msgid "Notepad"
53msgid "Notepad"
54−msgstr ""
54+msgstr "المذكرة"
55
55
56#: Applications/applications.js:74
56#: Applications/applications.js:74
57msgid "Calendar"
57msgid "Calendar"
58−msgstr ""
58+msgstr "التقويم"
59
59
60#: Applications/applications.js:80
60#: Applications/applications.js:80
61msgid "Media Player"
61msgid "Media Player"
62−msgstr ""
62+msgstr "مشغّل الوسائط"
63
63
64#: Applications/applications.js:86
64#: Applications/applications.js:86
65msgid "Evernote"
65msgid "Evernote"
@@ -67,7 +67,7 @@ msgstr ""
67
67
68#: Applications/applications.js:91
68#: Applications/applications.js:91
69msgid "Map"
69msgid "Map"
70−msgstr ""
70+msgstr "الخريطة"
71
71
72#: Applications/applications.js:96
72#: Applications/applications.js:96
73msgid "Pinterest"
73msgid "Pinterest"
@@ -79,11 +79,11 @@ msgstr ""
79
79
80#: Applications/applications.js:106
80#: Applications/applications.js:106
81msgid "Wikipedia"
81msgid "Wikipedia"
82−msgstr ""
82+msgstr "ويكيبيديا"
83
83
84#: Applications/applications.js:111
84#: Applications/applications.js:111
85msgid "YouTube"
85msgid "YouTube"
86−msgstr ""
86+msgstr "يوتيوب"
87
87
88#: Components/PageHeader.qml:300
88#: Components/PageHeader.qml:300
89msgid "Recent searches"
89msgid "Recent searches"
@@ -135,15 +135,15 @@ msgstr "الرئيسية"
135
135
136#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
136#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
137msgid "Featured"
137msgid "Featured"
138−msgstr ""
138+msgstr "المميز"
139
139
140#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
140#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
141msgid "Recent"
141msgid "Recent"
142−msgstr ""
142+msgstr "الحديث"
143
143
144#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
144#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
145msgid "New Releases"
145msgid "New Releases"
146−msgstr ""
146+msgstr "الإصدارات الجديدة"
147
147
148#: Dash/DashMusic.qml:30
148#: Dash/DashMusic.qml:30
149msgid "Top Charting"
149msgid "Top Charting"
@@ -155,19 +155,19 @@ msgstr "موسيقى"
155
155
156#: Dash/DashPeople.qml:31
156#: Dash/DashPeople.qml:31
157msgid "Favourites"
157msgid "Favourites"
158−msgstr ""
158+msgstr "المفضلات"
159
159
160#: Dash/DashPeople.qml:32
160#: Dash/DashPeople.qml:32
161msgid "Recently in touch"
161msgid "Recently in touch"
162−msgstr ""
162+msgstr "على اتصال موخرا"
163
163
164#: Dash/DashPeople.qml:33
164#: Dash/DashPeople.qml:33
165msgid "New Contacts"
165msgid "New Contacts"
166−msgstr ""
166+msgstr "أشخاص جدد"
167
167
168#: Dash/DashPeople.qml:34
168#: Dash/DashPeople.qml:34
169msgid "A-Z"
169msgid "A-Z"
170−msgstr ""
170+msgstr "A-Z"
171
171
172#: Dash/DashPeople.qml:123
172#: Dash/DashPeople.qml:123
173msgid "People"
173msgid "People"
@@ -175,7 +175,7 @@ msgstr "أشخاص"
175
175
176#: Dash/DashVideos.qml:31
176#: Dash/DashVideos.qml:31
177msgid "Popular Online"
177msgid "Popular Online"
178−msgstr ""
178+msgstr "الشائع على الإنترنت"
179
179
180#: Dash/DashVideos.qml:155
180#: Dash/DashVideos.qml:155
181msgid "Videos"
181msgid "Videos"
@@ -183,15 +183,15 @@ msgstr "فيديوهات"
183
183
184#: Dash/Video/VideoPreview.qml:98
184#: Dash/Video/VideoPreview.qml:98
185msgid "Directed by:"
185msgid "Directed by:"
186−msgstr ""
186+msgstr "أخرجه:"
187
187
188#: Dash/Video/VideoPreview.qml:121
188#: Dash/Video/VideoPreview.qml:121
189msgid "Starring:"
189msgid "Starring:"
190−msgstr ""
190+msgstr "النجوم:"
191
191
192#: Dash/Video/VideoPreview.qml:144
192#: Dash/Video/VideoPreview.qml:144
193msgid "Author:"
193msgid "Author:"
194−msgstr ""
194+msgstr "المؤلف:"
195
195
196#: Hud/HudParametrizedActionsPage.qml:132
196#: Hud/HudParametrizedActionsPage.qml:132
197msgid "Confirm"
197msgid "Confirm"
po/de.po+30−30
@@ -8,82 +8,82 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
11−"PO-Revision-Date: 2013-06-05 22:20+0000\n"
11+"PO-Revision-Date: 2013-06-15 20:04+0000\n"
12−"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12+"Last-Translator: Eduard Gotwig <eduardgotwig@gmail.com>\n"
13"Language-Team: German <de@li.org>\n"
13"Language-Team: German <de@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2013-06-11 06:34+0000\n"
17+"X-Launchpad-Export-Date: 2013-06-16 05:33+0000\n"
18"X-Generator: Launchpad (build 16667)\n"
18"X-Generator: Launchpad (build 16667)\n"
19
19
20#: Applications/applications.js:23
20#: Applications/applications.js:23
21msgid "Phone"
21msgid "Phone"
22−msgstr ""
22+msgstr "Telefon"
23
23
24#: Applications/applications.js:29
24#: Applications/applications.js:29
25msgid "Camera"
25msgid "Camera"
26−msgstr ""
26+msgstr "Kamera"
27
27
28#: Applications/applications.js:35
28#: Applications/applications.js:35
29msgid "Gallery"
29msgid "Gallery"
30−msgstr ""
30+msgstr "Galerie"
31
31
32#: Applications/applications.js:40
32#: Applications/applications.js:40
33msgid "Facebook"
33msgid "Facebook"
34−msgstr ""
34+msgstr "Facebook"
35
35
36#: Applications/applications.js:46
36#: Applications/applications.js:46
37msgid "Browser"
37msgid "Browser"
38−msgstr ""
38+msgstr "Browser"
39
39
40#: Applications/applications.js:51
40#: Applications/applications.js:51
41msgid "Twitter"
41msgid "Twitter"
42−msgstr ""
42+msgstr "Twitter"
43
43
44#: Applications/applications.js:57
44#: Applications/applications.js:57
45msgid "GMail"
45msgid "GMail"
46−msgstr ""
46+msgstr "GMail"
47
47
48#: Applications/applications.js:62
48#: Applications/applications.js:62
49msgid "Weather"
49msgid "Weather"
50−msgstr ""
50+msgstr "Wetter"
51
51
52#: Applications/applications.js:68
52#: Applications/applications.js:68
53msgid "Notepad"
53msgid "Notepad"
54−msgstr ""
54+msgstr "Notizen"
55
55
56#: Applications/applications.js:74
56#: Applications/applications.js:74
57msgid "Calendar"
57msgid "Calendar"
58−msgstr ""
58+msgstr "Kalender"
59
59
60#: Applications/applications.js:80
60#: Applications/applications.js:80
61msgid "Media Player"
61msgid "Media Player"
62−msgstr ""
62+msgstr "Medienwiedergabe"
63
63
64#: Applications/applications.js:86
64#: Applications/applications.js:86
65msgid "Evernote"
65msgid "Evernote"
66−msgstr ""
66+msgstr "Evernote"
67
67
68#: Applications/applications.js:91
68#: Applications/applications.js:91
69msgid "Map"
69msgid "Map"
70−msgstr ""
70+msgstr "Karte"
71
71
72#: Applications/applications.js:96
72#: Applications/applications.js:96
73msgid "Pinterest"
73msgid "Pinterest"
74−msgstr ""
74+msgstr "Pinterest"
75
75
76#: Applications/applications.js:101
76#: Applications/applications.js:101
77msgid "SoundCloud"
77msgid "SoundCloud"
78−msgstr ""
78+msgstr "SoundCloud"
79
79
80#: Applications/applications.js:106
80#: Applications/applications.js:106
81msgid "Wikipedia"
81msgid "Wikipedia"
82−msgstr ""
82+msgstr "Wikipedia"
83
83
84#: Applications/applications.js:111
84#: Applications/applications.js:111
85msgid "YouTube"
85msgid "YouTube"
86−msgstr ""
86+msgstr "YouTube"
87
87
88#: Components/PageHeader.qml:300
88#: Components/PageHeader.qml:300
89msgid "Recent searches"
89msgid "Recent searches"
@@ -135,15 +135,15 @@ msgstr "Start"
135
135
136#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
136#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
137msgid "Featured"
137msgid "Featured"
138−msgstr ""
138+msgstr "Empfehlungen"
139
139
140#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
140#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
141msgid "Recent"
141msgid "Recent"
142−msgstr ""
142+msgstr "Zuletzt verwendet"
143
143
144#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
144#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
145msgid "New Releases"
145msgid "New Releases"
146−msgstr ""
146+msgstr "Neue Veröffentlichungen"
147
147
148#: Dash/DashMusic.qml:30
148#: Dash/DashMusic.qml:30
149msgid "Top Charting"
149msgid "Top Charting"
@@ -155,19 +155,19 @@ msgstr "Musik"
155
155
156#: Dash/DashPeople.qml:31
156#: Dash/DashPeople.qml:31
157msgid "Favourites"
157msgid "Favourites"
158−msgstr ""
158+msgstr "Favoriten"
159
159
160#: Dash/DashPeople.qml:32
160#: Dash/DashPeople.qml:32
161msgid "Recently in touch"
161msgid "Recently in touch"
162−msgstr ""
162+msgstr "Kürzlich im Gespräch"
163
163
164#: Dash/DashPeople.qml:33
164#: Dash/DashPeople.qml:33
165msgid "New Contacts"
165msgid "New Contacts"
166−msgstr ""
166+msgstr "Neue Kontakte"
167
167
168#: Dash/DashPeople.qml:34
168#: Dash/DashPeople.qml:34
169msgid "A-Z"
169msgid "A-Z"
170−msgstr ""
170+msgstr "A-Z"
171
171
172#: Dash/DashPeople.qml:123
172#: Dash/DashPeople.qml:123
173msgid "People"
173msgid "People"
@@ -183,15 +183,15 @@ msgstr "Videos"
183
183
184#: Dash/Video/VideoPreview.qml:98
184#: Dash/Video/VideoPreview.qml:98
185msgid "Directed by:"
185msgid "Directed by:"
186−msgstr ""
186+msgstr "Regie:"
187
187
188#: Dash/Video/VideoPreview.qml:121
188#: Dash/Video/VideoPreview.qml:121
189msgid "Starring:"
189msgid "Starring:"
190−msgstr ""
190+msgstr "Darsteller:"
191
191
192#: Dash/Video/VideoPreview.qml:144
192#: Dash/Video/VideoPreview.qml:144
193msgid "Author:"
193msgid "Author:"
194−msgstr ""
194+msgstr "Autor:"
195
195
196#: Hud/HudParametrizedActionsPage.qml:132
196#: Hud/HudParametrizedActionsPage.qml:132
197msgid "Confirm"
197msgid "Confirm"
po/en_AU.po+44−44
@@ -8,82 +8,82 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
11−"PO-Revision-Date: 2013-06-05 22:20+0000\n"
11+"PO-Revision-Date: 2013-06-18 20:36+0000\n"
12−"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12+"Last-Translator: Jackson Doak <Doak.jackson@gmail.com>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2013-06-11 06:34+0000\n"
17+"X-Launchpad-Export-Date: 2013-06-19 06:19+0000\n"
18−"X-Generator: Launchpad (build 16667)\n"
18+"X-Generator: Launchpad (build 16673)\n"
19
19
20#: Applications/applications.js:23
20#: Applications/applications.js:23
21msgid "Phone"
21msgid "Phone"
22−msgstr ""
22+msgstr "Phone"
23
23
24#: Applications/applications.js:29
24#: Applications/applications.js:29
25msgid "Camera"
25msgid "Camera"
26−msgstr ""
26+msgstr "Camera"
27
27
28#: Applications/applications.js:35
28#: Applications/applications.js:35
29msgid "Gallery"
29msgid "Gallery"
30−msgstr ""
30+msgstr "Gallery"
31
31
32#: Applications/applications.js:40
32#: Applications/applications.js:40
33msgid "Facebook"
33msgid "Facebook"
34−msgstr ""
34+msgstr "Facebook"
35
35
36#: Applications/applications.js:46
36#: Applications/applications.js:46
37msgid "Browser"
37msgid "Browser"
38−msgstr ""
38+msgstr "Browser"
39
39
40#: Applications/applications.js:51
40#: Applications/applications.js:51
41msgid "Twitter"
41msgid "Twitter"
42−msgstr ""
42+msgstr "Twitter"
43
43
44#: Applications/applications.js:57
44#: Applications/applications.js:57
45msgid "GMail"
45msgid "GMail"
46−msgstr ""
46+msgstr "GMail"
47
47
48#: Applications/applications.js:62
48#: Applications/applications.js:62
49msgid "Weather"
49msgid "Weather"
50−msgstr ""
50+msgstr "Weather"
51
51
52#: Applications/applications.js:68
52#: Applications/applications.js:68
53msgid "Notepad"
53msgid "Notepad"
54−msgstr ""
54+msgstr "Notepad"
55
55
56#: Applications/applications.js:74
56#: Applications/applications.js:74
57msgid "Calendar"
57msgid "Calendar"
58−msgstr ""
58+msgstr "Calendar"
59
59
60#: Applications/applications.js:80
60#: Applications/applications.js:80
61msgid "Media Player"
61msgid "Media Player"
62−msgstr ""
62+msgstr "Media Player"
63
63
64#: Applications/applications.js:86
64#: Applications/applications.js:86
65msgid "Evernote"
65msgid "Evernote"
66−msgstr ""
66+msgstr "Evernote"
67
67
68#: Applications/applications.js:91
68#: Applications/applications.js:91
69msgid "Map"
69msgid "Map"
70−msgstr ""
70+msgstr "Map"
71
71
72#: Applications/applications.js:96
72#: Applications/applications.js:96
73msgid "Pinterest"
73msgid "Pinterest"
74−msgstr ""
74+msgstr "Pinterest"
75
75
76#: Applications/applications.js:101
76#: Applications/applications.js:101
77msgid "SoundCloud"
77msgid "SoundCloud"
78−msgstr ""
78+msgstr "SoundCloud"
79
79
80#: Applications/applications.js:106
80#: Applications/applications.js:106
81msgid "Wikipedia"
81msgid "Wikipedia"
82−msgstr ""
82+msgstr "Wikipedia"
83
83
84#: Applications/applications.js:111
84#: Applications/applications.js:111
85msgid "YouTube"
85msgid "YouTube"
86−msgstr ""
86+msgstr "YouTube"
87
87
88#: Components/PageHeader.qml:300
88#: Components/PageHeader.qml:300
89msgid "Recent searches"
89msgid "Recent searches"
@@ -91,19 +91,19 @@ msgstr "Recent searches"
91
91
92#: Dash/DashApps.qml:65
92#: Dash/DashApps.qml:65
93msgid "Running apps"
93msgid "Running apps"
94−msgstr ""
94+msgstr "Running apps"
95
95
96#: Dash/DashApps.qml:68
96#: Dash/DashApps.qml:68
97msgid "Frequently used"
97msgid "Frequently used"
98−msgstr ""
98+msgstr "Frequently used"
99
99
100#: Dash/DashApps.qml:71
100#: Dash/DashApps.qml:71
101msgid "Installed"
101msgid "Installed"
102−msgstr ""
102+msgstr "Installed"
103
103
104#: Dash/DashApps.qml:74
104#: Dash/DashApps.qml:74
105msgid "Available for download"
105msgid "Available for download"
106−msgstr ""
106+msgstr "Available for download"
107
107
108#: Dash/DashApps.qml:178
108#: Dash/DashApps.qml:178
109msgid "Apps"
109msgid "Apps"
@@ -111,23 +111,23 @@ msgstr "Apps"
111
111
112#: Dash/DashHome.qml:43
112#: Dash/DashHome.qml:43
113msgid "Frequent Apps"
113msgid "Frequent Apps"
114−msgstr ""
114+msgstr "Frequent Apps"
115
115
116#: Dash/DashHome.qml:46
116#: Dash/DashHome.qml:46
117msgid "Favourite People"
117msgid "Favourite People"
118−msgstr ""
118+msgstr "Favourite People"
119
119
120#: Dash/DashHome.qml:49
120#: Dash/DashHome.qml:49
121msgid "People Recently in Touch"
121msgid "People Recently in Touch"
122−msgstr ""
122+msgstr "People Recently in Touch"
123
123
124#: Dash/DashHome.qml:52
124#: Dash/DashHome.qml:52
125msgid "Recent Music"
125msgid "Recent Music"
126−msgstr ""
126+msgstr "Recent Music"
127
127
128#: Dash/DashHome.qml:55
128#: Dash/DashHome.qml:55
129msgid "Videos Popular Online"
129msgid "Videos Popular Online"
130−msgstr ""
130+msgstr "Videos Popular Online"
131
131
132#: Dash/DashHome.qml:197 plugins/Unity/lenses.cpp:38
132#: Dash/DashHome.qml:197 plugins/Unity/lenses.cpp:38
133msgid "Home"
133msgid "Home"
@@ -135,19 +135,19 @@ msgstr "Home"
135
135
136#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
136#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
137msgid "Featured"
137msgid "Featured"
138−msgstr ""
138+msgstr "Featured"
139
139
140#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
140#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
141msgid "Recent"
141msgid "Recent"
142−msgstr ""
142+msgstr "Recent"
143
143
144#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
144#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
145msgid "New Releases"
145msgid "New Releases"
146−msgstr ""
146+msgstr "New Releases"
147
147
148#: Dash/DashMusic.qml:30
148#: Dash/DashMusic.qml:30
149msgid "Top Charting"
149msgid "Top Charting"
150−msgstr ""
150+msgstr "Top Charting"
151
151
152#: Dash/DashMusic.qml:99
152#: Dash/DashMusic.qml:99
153msgid "Music"
153msgid "Music"
@@ -155,19 +155,19 @@ msgstr "Music"
155
155
156#: Dash/DashPeople.qml:31
156#: Dash/DashPeople.qml:31
157msgid "Favourites"
157msgid "Favourites"
158−msgstr ""
158+msgstr "Favourites"
159
159
160#: Dash/DashPeople.qml:32
160#: Dash/DashPeople.qml:32
161msgid "Recently in touch"
161msgid "Recently in touch"
162−msgstr ""
162+msgstr "Recently in touch"
163
163
164#: Dash/DashPeople.qml:33
164#: Dash/DashPeople.qml:33
165msgid "New Contacts"
165msgid "New Contacts"
166−msgstr ""
166+msgstr "New Contacts"
167
167
168#: Dash/DashPeople.qml:34
168#: Dash/DashPeople.qml:34
169msgid "A-Z"
169msgid "A-Z"
170−msgstr ""
170+msgstr "A-Z"
171
171
172#: Dash/DashPeople.qml:123
172#: Dash/DashPeople.qml:123
173msgid "People"
173msgid "People"
@@ -175,7 +175,7 @@ msgstr "People"
175
175
176#: Dash/DashVideos.qml:31
176#: Dash/DashVideos.qml:31
177msgid "Popular Online"
177msgid "Popular Online"
178−msgstr ""
178+msgstr "Popular Online"
179
179
180#: Dash/DashVideos.qml:155
180#: Dash/DashVideos.qml:155
181msgid "Videos"
181msgid "Videos"
@@ -183,15 +183,15 @@ msgstr "Videos"
183
183
184#: Dash/Video/VideoPreview.qml:98
184#: Dash/Video/VideoPreview.qml:98
185msgid "Directed by:"
185msgid "Directed by:"
186−msgstr ""
186+msgstr "Directed by:"
187
187
188#: Dash/Video/VideoPreview.qml:121
188#: Dash/Video/VideoPreview.qml:121
189msgid "Starring:"
189msgid "Starring:"
190−msgstr ""
190+msgstr "Starring:"
191
191
192#: Dash/Video/VideoPreview.qml:144
192#: Dash/Video/VideoPreview.qml:144
193msgid "Author:"
193msgid "Author:"
194−msgstr ""
194+msgstr "Author:"
195
195
196#: Hud/HudParametrizedActionsPage.qml:132
196#: Hud/HudParametrizedActionsPage.qml:132
197msgid "Confirm"
197msgid "Confirm"
@@ -215,11 +215,11 @@ msgstr "Speaking..."
215
215
216#: Panel/MenuContent.qml:192
216#: Panel/MenuContent.qml:192
217msgid "Device"
217msgid "Device"
218−msgstr ""
218+msgstr "Device"
219
219
220#: Panel/Menus/Overview/FlightModeWidget.qml:42
220#: Panel/Menus/Overview/FlightModeWidget.qml:42
221msgid "Flight mode"
221msgid "Flight mode"
222−msgstr ""
222+msgstr "Flight mode"
223
223
224#: Panel/SearchIndicator.qml:26 plugins/Unity/lenses.cpp:40
224#: Panel/SearchIndicator.qml:26 plugins/Unity/lenses.cpp:40
225msgid "Search"
225msgid "Search"
po/en_GB.ponew file+234
@@ -0,0 +1,234 @@
1+# English (United Kingdom) translation for unity
2+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
3+# This file is distributed under the same license as the unity package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-06-08 14:40+0200\n"
11+"PO-Revision-Date: 2013-06-14 12:43+0000\n"
12+"Last-Translator: Andi Chandler <Unknown>\n"
13+"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"X-Launchpad-Export-Date: 2013-06-15 06:22+0000\n"
18+"X-Generator: Launchpad (build 16667)\n"
19+
20+#: Applications/applications.js:23
21+msgid "Phone"
22+msgstr "Phone"
23+
24+#: Applications/applications.js:29
25+msgid "Camera"
26+msgstr "Camera"
27+
28+#: Applications/applications.js:35
29+msgid "Gallery"
30+msgstr "Gallery"
31+
32+#: Applications/applications.js:40
33+msgid "Facebook"
34+msgstr "Facebook"
35+
36+#: Applications/applications.js:46
37+msgid "Browser"
38+msgstr "Browser"
39+
40+#: Applications/applications.js:51
41+msgid "Twitter"
42+msgstr "Twitter"
43+
44+#: Applications/applications.js:57
45+msgid "GMail"
46+msgstr "GMail"
47+
48+#: Applications/applications.js:62
49+msgid "Weather"
50+msgstr "Weather"
51+
52+#: Applications/applications.js:68
53+msgid "Notepad"
54+msgstr "Notepad"
55+
56+#: Applications/applications.js:74
57+msgid "Calendar"
58+msgstr "Calendar"
59+
60+#: Applications/applications.js:80
61+msgid "Media Player"
62+msgstr "Media Player"
63+
64+#: Applications/applications.js:86
65+msgid "Evernote"
66+msgstr "Evernote"
67+
68+#: Applications/applications.js:91
69+msgid "Map"
70+msgstr "Map"
71+
72+#: Applications/applications.js:96
73+msgid "Pinterest"
74+msgstr "Pinterest"
75+
76+#: Applications/applications.js:101
77+msgid "SoundCloud"
78+msgstr "SoundCloud"
79+
80+#: Applications/applications.js:106
81+msgid "Wikipedia"
82+msgstr "Wikipedia"
83+
84+#: Applications/applications.js:111
85+msgid "YouTube"
86+msgstr "YouTube"
87+
88+#: Components/PageHeader.qml:300
89+msgid "Recent searches"
90+msgstr "Recent searches"
91+
92+#: Dash/DashApps.qml:65
93+msgid "Running apps"
94+msgstr "Running apps"
95+
96+#: Dash/DashApps.qml:68
97+msgid "Frequently used"
98+msgstr "Frequently used"
99+
100+#: Dash/DashApps.qml:71
101+msgid "Installed"
102+msgstr "Installed"
103+
104+#: Dash/DashApps.qml:74
105+msgid "Available for download"
106+msgstr "Available for download"
107+
108+#: Dash/DashApps.qml:178
109+msgid "Apps"
110+msgstr "Apps"
111+
112+#: Dash/DashHome.qml:43
113+msgid "Frequent Apps"
114+msgstr "Frequent Apps"
115+
116+#: Dash/DashHome.qml:46
117+msgid "Favourite People"
118+msgstr "Favourite People"
119+
120+#: Dash/DashHome.qml:49
121+msgid "People Recently in Touch"
122+msgstr "People Recently in Touch"
123+
124+#: Dash/DashHome.qml:52
125+msgid "Recent Music"
126+msgstr "Recent Music"
127+
128+#: Dash/DashHome.qml:55
129+msgid "Videos Popular Online"
130+msgstr "Videos Popular Online"
131+
132+#: Dash/DashHome.qml:197 plugins/Unity/lenses.cpp:38
133+msgid "Home"
134+msgstr "Home"
135+
136+#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
137+msgid "Featured"
138+msgstr "Featured"
139+
140+#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
141+msgid "Recent"
142+msgstr "Recent"
143+
144+#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
145+msgid "New Releases"
146+msgstr "New Releases"
147+
148+#: Dash/DashMusic.qml:30
149+msgid "Top Charting"
150+msgstr "Top Charting"
151+
152+#: Dash/DashMusic.qml:99
153+msgid "Music"
154+msgstr "Music"
155+
156+#: Dash/DashPeople.qml:31
157+msgid "Favourites"
158+msgstr "Favourites"
159+
160+#: Dash/DashPeople.qml:32
161+msgid "Recently in touch"
162+msgstr "Recently in touch"
163+
164+#: Dash/DashPeople.qml:33
165+msgid "New Contacts"
166+msgstr "New Contacts"
167+
168+#: Dash/DashPeople.qml:34
169+msgid "A-Z"
170+msgstr "A-Z"
171+
172+#: Dash/DashPeople.qml:123
173+msgid "People"
174+msgstr "People"
175+
176+#: Dash/DashVideos.qml:31
177+msgid "Popular Online"
178+msgstr "Popular Online"
179+
180+#: Dash/DashVideos.qml:155
181+msgid "Videos"
182+msgstr "Videos"
183+
184+#: Dash/Video/VideoPreview.qml:98
185+msgid "Directed by:"
186+msgstr "Directed by:"
187+
188+#: Dash/Video/VideoPreview.qml:121
189+msgid "Starring:"
190+msgstr "Starring:"
191+
192+#: Dash/Video/VideoPreview.qml:144
193+msgid "Author:"
194+msgstr "Author:"
195+
196+#: Hud/HudParametrizedActionsPage.qml:132
197+msgid "Confirm"
198+msgstr "Confirm"
199+
200+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
201+msgid "Type or say a command"
202+msgstr "Type or say a command"
203+
204+#: Hud/Hud.qml:84
205+msgid "Loading. Please Wait..."
206+msgstr "Loading. Please Wait..."
207+
208+#: Hud/Hud.qml:89
209+msgid "Speak Now..."
210+msgstr "Speak Now..."
211+
212+#: Hud/Hud.qml:94
213+msgid "Speaking..."
214+msgstr "Speaking..."
215+
216+#: Panel/MenuContent.qml:192
217+msgid "Device"
218+msgstr "Device"
219+
220+#: Panel/Menus/Overview/FlightModeWidget.qml:42
221+msgid "Flight mode"
222+msgstr "Flight mode"
223+
224+#: Panel/SearchIndicator.qml:26 plugins/Unity/lenses.cpp:40
225+msgid "Search"
226+msgstr "Search"
227+
228+#: plugins/Unity/lens.cpp:333
229+msgid "Sorry, there is nothing that matches your search."
230+msgstr "Sorry, there is nothing that matches your search."
231+
232+#: plugins/Unity/lenses.cpp:39
233+msgid "Home screen"
234+msgstr "Home screen"
po/es.po+4−4
@@ -8,13 +8,13 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
11−"PO-Revision-Date: 2013-06-13 23:18+0000\n"
11+"PO-Revision-Date: 2013-06-16 23:44+0000\n"
12"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
12"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
13"Language-Team: Spanish <es@li.org>\n"
13"Language-Team: Spanish <es@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2013-06-14 07:06+0000\n"
17+"X-Launchpad-Export-Date: 2013-06-17 06:22+0000\n"
18"X-Generator: Launchpad (build 16667)\n"
18"X-Generator: Launchpad (build 16667)\n"
19
19
20#: Applications/applications.js:23
20#: Applications/applications.js:23
@@ -147,7 +147,7 @@ msgstr "Lanzamientos nuevos"
147
147
148#: Dash/DashMusic.qml:30
148#: Dash/DashMusic.qml:30
149msgid "Top Charting"
149msgid "Top Charting"
150−msgstr ""
150+msgstr "Mejor posicionadas"
151
151
152#: Dash/DashMusic.qml:99
152#: Dash/DashMusic.qml:99
153msgid "Music"
153msgid "Music"
@@ -175,7 +175,7 @@ msgstr "Gente"
175
175
176#: Dash/DashVideos.qml:31
176#: Dash/DashVideos.qml:31
177msgid "Popular Online"
177msgid "Popular Online"
178−msgstr "Populares en lìnea"
178+msgstr "Populares en línea"
179
179
180#: Dash/DashVideos.qml:155
180#: Dash/DashVideos.qml:155
181msgid "Videos"
181msgid "Videos"
po/ja.ponew file+234
@@ -0,0 +1,234 @@
1+# Japanese translation for unity
2+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
3+# This file is distributed under the same license as the unity package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-06-08 14:40+0200\n"
11+"PO-Revision-Date: 2013-06-15 14:12+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Japanese <ja@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"X-Launchpad-Export-Date: 2013-06-16 05:33+0000\n"
18+"X-Generator: Launchpad (build 16667)\n"
19+
20+#: Applications/applications.js:23
21+msgid "Phone"
22+msgstr ""
23+
24+#: Applications/applications.js:29
25+msgid "Camera"
26+msgstr ""
27+
28+#: Applications/applications.js:35
29+msgid "Gallery"
30+msgstr ""
31+
32+#: Applications/applications.js:40
33+msgid "Facebook"
34+msgstr ""
35+
36+#: Applications/applications.js:46
37+msgid "Browser"
38+msgstr ""
39+
40+#: Applications/applications.js:51
41+msgid "Twitter"
42+msgstr ""
43+
44+#: Applications/applications.js:57
45+msgid "GMail"
46+msgstr ""
47+
48+#: Applications/applications.js:62
49+msgid "Weather"
50+msgstr ""
51+
52+#: Applications/applications.js:68
53+msgid "Notepad"
54+msgstr ""
55+
56+#: Applications/applications.js:74
57+msgid "Calendar"
58+msgstr ""
59+
60+#: Applications/applications.js:80
61+msgid "Media Player"
62+msgstr ""
63+
64+#: Applications/applications.js:86
65+msgid "Evernote"
66+msgstr ""
67+
68+#: Applications/applications.js:91
69+msgid "Map"
70+msgstr ""
71+
72+#: Applications/applications.js:96
73+msgid "Pinterest"
74+msgstr ""
75+
76+#: Applications/applications.js:101
77+msgid "SoundCloud"
78+msgstr ""
79+
80+#: Applications/applications.js:106
81+msgid "Wikipedia"
82+msgstr ""
83+
84+#: Applications/applications.js:111
85+msgid "YouTube"
86+msgstr ""
87+
88+#: Components/PageHeader.qml:300
89+msgid "Recent searches"
90+msgstr ""
91+
92+#: Dash/DashApps.qml:65
93+msgid "Running apps"
94+msgstr ""
95+
96+#: Dash/DashApps.qml:68
97+msgid "Frequently used"
98+msgstr ""
99+
100+#: Dash/DashApps.qml:71
101+msgid "Installed"
102+msgstr ""
103+
104+#: Dash/DashApps.qml:74
105+msgid "Available for download"
106+msgstr ""
107+
108+#: Dash/DashApps.qml:178
109+msgid "Apps"
110+msgstr ""
111+
112+#: Dash/DashHome.qml:43
113+msgid "Frequent Apps"
114+msgstr ""
115+
116+#: Dash/DashHome.qml:46
117+msgid "Favourite People"
118+msgstr ""
119+
120+#: Dash/DashHome.qml:49
121+msgid "People Recently in Touch"
122+msgstr ""
123+
124+#: Dash/DashHome.qml:52
125+msgid "Recent Music"
126+msgstr ""
127+
128+#: Dash/DashHome.qml:55
129+msgid "Videos Popular Online"
130+msgstr ""
131+
132+#: Dash/DashHome.qml:197 plugins/Unity/lenses.cpp:38
133+msgid "Home"
134+msgstr ""
135+
136+#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
137+msgid "Featured"
138+msgstr ""
139+
140+#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
141+msgid "Recent"
142+msgstr ""
143+
144+#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
145+msgid "New Releases"
146+msgstr ""
147+
148+#: Dash/DashMusic.qml:30
149+msgid "Top Charting"
150+msgstr ""
151+
152+#: Dash/DashMusic.qml:99
153+msgid "Music"
154+msgstr ""
155+
156+#: Dash/DashPeople.qml:31
157+msgid "Favourites"
158+msgstr ""
159+
160+#: Dash/DashPeople.qml:32
161+msgid "Recently in touch"
162+msgstr ""
163+
164+#: Dash/DashPeople.qml:33
165+msgid "New Contacts"
166+msgstr ""
167+
168+#: Dash/DashPeople.qml:34
169+msgid "A-Z"
170+msgstr ""
171+
172+#: Dash/DashPeople.qml:123
173+msgid "People"
174+msgstr ""
175+
176+#: Dash/DashVideos.qml:31
177+msgid "Popular Online"
178+msgstr ""
179+
180+#: Dash/DashVideos.qml:155
181+msgid "Videos"
182+msgstr ""
183+
184+#: Dash/Video/VideoPreview.qml:98
185+msgid "Directed by:"
186+msgstr ""
187+
188+#: Dash/Video/VideoPreview.qml:121
189+msgid "Starring:"
190+msgstr ""
191+
192+#: Dash/Video/VideoPreview.qml:144
193+msgid "Author:"
194+msgstr ""
195+
196+#: Hud/HudParametrizedActionsPage.qml:132
197+msgid "Confirm"
198+msgstr ""
199+
200+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
201+msgid "Type or say a command"
202+msgstr ""
203+
204+#: Hud/Hud.qml:84
205+msgid "Loading. Please Wait..."
206+msgstr ""
207+
208+#: Hud/Hud.qml:89
209+msgid "Speak Now..."
210+msgstr ""
211+
212+#: Hud/Hud.qml:94
213+msgid "Speaking..."
214+msgstr ""
215+
216+#: Panel/MenuContent.qml:192
217+msgid "Device"
218+msgstr ""
219+
220+#: Panel/Menus/Overview/FlightModeWidget.qml:42
221+msgid "Flight mode"
222+msgstr ""
223+
224+#: Panel/SearchIndicator.qml:26 plugins/Unity/lenses.cpp:40
225+msgid "Search"
226+msgstr ""
227+
228+#: plugins/Unity/lens.cpp:333
229+msgid "Sorry, there is nothing that matches your search."
230+msgstr ""
231+
232+#: plugins/Unity/lenses.cpp:39
233+msgid "Home screen"
234+msgstr ""
po/nb.po+9−9
@@ -8,22 +8,22 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
11−"PO-Revision-Date: 2013-06-05 22:20+0000\n"
11+"PO-Revision-Date: 2013-06-17 09:10+0000\n"
12−"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12+"Last-Translator: Joakim Langvand <jlangvand@gmail.com>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2013-06-11 06:34+0000\n"
17+"X-Launchpad-Export-Date: 2013-06-18 06:53+0000\n"
18−"X-Generator: Launchpad (build 16667)\n"
18+"X-Generator: Launchpad (build 16673)\n"
19
19
20#: Applications/applications.js:23
20#: Applications/applications.js:23
21msgid "Phone"
21msgid "Phone"
22−msgstr ""
22+msgstr "Telefon"
23
23
24#: Applications/applications.js:29
24#: Applications/applications.js:29
25msgid "Camera"
25msgid "Camera"
26−msgstr ""
26+msgstr "Kamera"
27
27
28#: Applications/applications.js:35
28#: Applications/applications.js:35
29msgid "Gallery"
29msgid "Gallery"
@@ -47,15 +47,15 @@ msgstr ""
47
47
48#: Applications/applications.js:62
48#: Applications/applications.js:62
49msgid "Weather"
49msgid "Weather"
50−msgstr ""
50+msgstr "Vær"
51
51
52#: Applications/applications.js:68
52#: Applications/applications.js:68
53msgid "Notepad"
53msgid "Notepad"
54−msgstr ""
54+msgstr "Notisblokk"
55
55
56#: Applications/applications.js:74
56#: Applications/applications.js:74
57msgid "Calendar"
57msgid "Calendar"
58−msgstr ""
58+msgstr "Kalender"
59
59
60#: Applications/applications.js:80
60#: Applications/applications.js:80
61msgid "Media Player"
61msgid "Media Player"
po/uk.po+43−43
@@ -8,82 +8,82 @@ msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
10"POT-Creation-Date: 2013-06-08 14:40+0200\n"
11−"PO-Revision-Date: 2013-06-05 22:20+0000\n"
11+"PO-Revision-Date: 2013-06-14 11:26+0000\n"
12−"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12+"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2013-06-11 06:34+0000\n"
17+"X-Launchpad-Export-Date: 2013-06-15 06:22+0000\n"
18"X-Generator: Launchpad (build 16667)\n"
18"X-Generator: Launchpad (build 16667)\n"
19
19
20#: Applications/applications.js:23
20#: Applications/applications.js:23
21msgid "Phone"
21msgid "Phone"
22−msgstr ""
22+msgstr "Телефон"
23
23
24#: Applications/applications.js:29
24#: Applications/applications.js:29
25msgid "Camera"
25msgid "Camera"
26−msgstr ""
26+msgstr "Фотоапарат"
27
27
28#: Applications/applications.js:35
28#: Applications/applications.js:35
29msgid "Gallery"
29msgid "Gallery"
30−msgstr ""
30+msgstr "Галерея"
31
31
32#: Applications/applications.js:40
32#: Applications/applications.js:40
33msgid "Facebook"
33msgid "Facebook"
34−msgstr ""
34+msgstr "Facebook"
35
35
36#: Applications/applications.js:46
36#: Applications/applications.js:46
37msgid "Browser"
37msgid "Browser"
38−msgstr ""
38+msgstr "Навігатор"
39
39
40#: Applications/applications.js:51
40#: Applications/applications.js:51
41msgid "Twitter"
41msgid "Twitter"
42−msgstr ""
42+msgstr "Twitter"
43
43
44#: Applications/applications.js:57
44#: Applications/applications.js:57
45msgid "GMail"
45msgid "GMail"
46−msgstr ""
46+msgstr "GMail"
47
47
48#: Applications/applications.js:62
48#: Applications/applications.js:62
49msgid "Weather"
49msgid "Weather"
50−msgstr ""
50+msgstr "Погода"
51
51
52#: Applications/applications.js:68
52#: Applications/applications.js:68
53msgid "Notepad"
53msgid "Notepad"
54−msgstr ""
54+msgstr "Блокнот"
55
55
56#: Applications/applications.js:74
56#: Applications/applications.js:74
57msgid "Calendar"
57msgid "Calendar"
58−msgstr ""
58+msgstr "Календар"
59
59
60#: Applications/applications.js:80
60#: Applications/applications.js:80
61msgid "Media Player"
61msgid "Media Player"
62−msgstr ""
62+msgstr "Програвач"
63
63
64#: Applications/applications.js:86
64#: Applications/applications.js:86
65msgid "Evernote"
65msgid "Evernote"
66−msgstr ""
66+msgstr "Evernote"
67
67
68#: Applications/applications.js:91
68#: Applications/applications.js:91
69msgid "Map"
69msgid "Map"
70−msgstr ""
70+msgstr "Карта"
71
71
72#: Applications/applications.js:96
72#: Applications/applications.js:96
73msgid "Pinterest"
73msgid "Pinterest"
74−msgstr ""
74+msgstr "Pinterest"
75
75
76#: Applications/applications.js:101
76#: Applications/applications.js:101
77msgid "SoundCloud"
77msgid "SoundCloud"
78−msgstr ""
78+msgstr "SoundCloud"
79
79
80#: Applications/applications.js:106
80#: Applications/applications.js:106
81msgid "Wikipedia"
81msgid "Wikipedia"
82−msgstr ""
82+msgstr "Вікіпедія"
83
83
84#: Applications/applications.js:111
84#: Applications/applications.js:111
85msgid "YouTube"
85msgid "YouTube"
86−msgstr ""
86+msgstr "YouTube"
87
87
88#: Components/PageHeader.qml:300
88#: Components/PageHeader.qml:300
89msgid "Recent searches"
89msgid "Recent searches"
@@ -91,19 +91,19 @@ msgstr "Нещодавні пошуки"
91
91
92#: Dash/DashApps.qml:65
92#: Dash/DashApps.qml:65
93msgid "Running apps"
93msgid "Running apps"
94−msgstr ""
94+msgstr "Запущені програми"
95
95
96#: Dash/DashApps.qml:68
96#: Dash/DashApps.qml:68
97msgid "Frequently used"
97msgid "Frequently used"
98−msgstr ""
98+msgstr "Найчастіше використовувані"
99
99
100#: Dash/DashApps.qml:71
100#: Dash/DashApps.qml:71
101msgid "Installed"
101msgid "Installed"
102−msgstr ""
102+msgstr "Встановлені"
103
103
104#: Dash/DashApps.qml:74
104#: Dash/DashApps.qml:74
105msgid "Available for download"
105msgid "Available for download"
106−msgstr ""
106+msgstr "Доступно до завантаження"
107
107
108#: Dash/DashApps.qml:178
108#: Dash/DashApps.qml:178
109msgid "Apps"
109msgid "Apps"
@@ -111,23 +111,23 @@ msgstr "Програми"
111
111
112#: Dash/DashHome.qml:43
112#: Dash/DashHome.qml:43
113msgid "Frequent Apps"
113msgid "Frequent Apps"
114−msgstr ""
114+msgstr "Часто використовувані програми"
115
115
116#: Dash/DashHome.qml:46
116#: Dash/DashHome.qml:46
117msgid "Favourite People"
117msgid "Favourite People"
118−msgstr ""
118+msgstr "Вибрані контакти"
119
119
120#: Dash/DashHome.qml:49
120#: Dash/DashHome.qml:49
121msgid "People Recently in Touch"
121msgid "People Recently in Touch"
122−msgstr ""
122+msgstr "Недавні контакти"
123
123
124#: Dash/DashHome.qml:52
124#: Dash/DashHome.qml:52
125msgid "Recent Music"
125msgid "Recent Music"
126−msgstr ""
126+msgstr "Нещодавно прослухана музика"
127
127
128#: Dash/DashHome.qml:55
128#: Dash/DashHome.qml:55
129msgid "Videos Popular Online"
129msgid "Videos Popular Online"
130−msgstr ""
130+msgstr "Популярні в мережі відео"
131
131
132#: Dash/DashHome.qml:197 plugins/Unity/lenses.cpp:38
132#: Dash/DashHome.qml:197 plugins/Unity/lenses.cpp:38
133msgid "Home"
133msgid "Home"
@@ -135,19 +135,19 @@ msgstr "Домівка"
135
135
136#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
136#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
137msgid "Featured"
137msgid "Featured"
138−msgstr ""
138+msgstr "Рекомендовані"
139
139
140#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
140#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
141msgid "Recent"
141msgid "Recent"
142−msgstr ""
142+msgstr "Нещодавні"
143
143
144#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
144#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
145msgid "New Releases"
145msgid "New Releases"
146−msgstr ""
146+msgstr "Нові випуски"
147
147
148#: Dash/DashMusic.qml:30
148#: Dash/DashMusic.qml:30
149msgid "Top Charting"
149msgid "Top Charting"
150−msgstr ""
150+msgstr "З високими оцінками"
151
151
152#: Dash/DashMusic.qml:99
152#: Dash/DashMusic.qml:99
153msgid "Music"
153msgid "Music"
@@ -155,19 +155,19 @@ msgstr "Музика"
155
155
156#: Dash/DashPeople.qml:31
156#: Dash/DashPeople.qml:31
157msgid "Favourites"
157msgid "Favourites"
158−msgstr ""
158+msgstr "Улюблене"
159
159
160#: Dash/DashPeople.qml:32
160#: Dash/DashPeople.qml:32
161msgid "Recently in touch"
161msgid "Recently in touch"
162−msgstr ""
162+msgstr "Нещодавні контакти"
163
163
164#: Dash/DashPeople.qml:33
164#: Dash/DashPeople.qml:33
165msgid "New Contacts"
165msgid "New Contacts"
166−msgstr ""
166+msgstr "Нові контакти"
167
167
168#: Dash/DashPeople.qml:34
168#: Dash/DashPeople.qml:34
169msgid "A-Z"
169msgid "A-Z"
170−msgstr ""
170+msgstr "А-Я"
171
171
172#: Dash/DashPeople.qml:123
172#: Dash/DashPeople.qml:123
173msgid "People"
173msgid "People"
@@ -175,7 +175,7 @@ msgstr "Люди"
175
175
176#: Dash/DashVideos.qml:31
176#: Dash/DashVideos.qml:31
177msgid "Popular Online"
177msgid "Popular Online"
178−msgstr ""
178+msgstr "Популярне у мережі"
179
179
180#: Dash/DashVideos.qml:155
180#: Dash/DashVideos.qml:155
181msgid "Videos"
181msgid "Videos"
@@ -183,15 +183,15 @@ msgstr "Відео"
183
183
184#: Dash/Video/VideoPreview.qml:98
184#: Dash/Video/VideoPreview.qml:98
185msgid "Directed by:"
185msgid "Directed by:"
186−msgstr ""
186+msgstr "Режисер:"
187
187
188#: Dash/Video/VideoPreview.qml:121
188#: Dash/Video/VideoPreview.qml:121
189msgid "Starring:"
189msgid "Starring:"
190−msgstr ""
190+msgstr "Актори:"
191
191
192#: Dash/Video/VideoPreview.qml:144
192#: Dash/Video/VideoPreview.qml:144
193msgid "Author:"
193msgid "Author:"
194−msgstr ""
194+msgstr "Автор:"
195
195
196#: Hud/HudParametrizedActionsPage.qml:132
196#: Hud/HudParametrizedActionsPage.qml:132
197msgid "Confirm"
197msgid "Confirm"
@@ -215,11 +215,11 @@ msgstr "Мовлення…"
215
215
216#: Panel/MenuContent.qml:192
216#: Panel/MenuContent.qml:192
217msgid "Device"
217msgid "Device"
218−msgstr ""
218+msgstr "Пристрій"
219
219
220#: Panel/Menus/Overview/FlightModeWidget.qml:42
220#: Panel/Menus/Overview/FlightModeWidget.qml:42
221msgid "Flight mode"
221msgid "Flight mode"
222−msgstr ""
222+msgstr "Автономний режим"
223
223
224#: Panel/SearchIndicator.qml:26 plugins/Unity/lenses.cpp:40
224#: Panel/SearchIndicator.qml:26 plugins/Unity/lenses.cpp:40
225msgid "Search"
225msgid "Search"
tests/CMakeLists.txt+1
@@ -12,3 +12,4 @@ add_subdirectory(mocks)
12add_subdirectory(whitespace)
12add_subdirectory(whitespace)
13add_subdirectory(plugins)
13add_subdirectory(plugins)
14add_subdirectory(utils)
14add_subdirectory(utils)
15+add_subdirectory(uqmlscene)
tests/mocks/LightDM/demo/GreeterPrivate.cpp+24−3
@@ -18,6 +18,8 @@
18
18
19#include "../Greeter.h"
19#include "../Greeter.h"
20#include "../GreeterPrivate.h"
20#include "../GreeterPrivate.h"
21+#include <QtCore/QDir>
22+#include <QtCore/QSettings>
21
23
22namespace QLightDM
24namespace QLightDM
23{
25{
@@ -33,13 +35,32 @@ void GreeterPrivate::handleAuthenticate()
33{
35{
34 Q_Q(Greeter);
36 Q_Q(Greeter);
35
37
38+ QSettings settings(QDir::homePath() + "/.unity8-greeter-demo", QSettings::NativeFormat);
39+ QVariant password = settings.value("password", "none");
40+
41+ if (password == "pin") {
42+ Q_EMIT q->showPrompt("PIN", Greeter::PromptTypeSecret);
43+ } else if (password == "keyboard") {
44+ Q_EMIT q->showPrompt("Password", Greeter::PromptTypeSecret);
45+ } else {
36− authenticated = true;
46+ authenticated = true;
37− Q_EMIT q->authenticationComplete();
47+ Q_EMIT q->authenticationComplete();
48+ }
38}
49}
39
50
40void GreeterPrivate::handleRespond(const QString &response)
51void GreeterPrivate::handleRespond(const QString &response)
41{
52{
42− Q_UNUSED(response);
53+ Q_Q(Greeter);
54+
55+ QSettings settings(QDir::homePath() + "/.unity8-greeter-demo", QSettings::NativeFormat);
56+ QVariant password = settings.value("password", "none");
57+
58+ if (password == "pin") {
59+ authenticated = (response == "1234");
60+ } else {
61+ authenticated = (response == "password");
62+ }
63+ Q_EMIT q->authenticationComplete();
43}
64}
44
65
45}
66}
tests/mocks/LightDM/demo/InfographicModelPrivate.cpp+19−26
@@ -27,27 +27,20 @@ void InfographicModelPrivate::generateFakeData()
27 std::normal_distribution<qreal> distribution(0.5, 0.2);
27 std::normal_distribution<qreal> distribution(0.5, 0.2);
28 auto rand = std::bind(distribution, generator);
28 auto rand = std::bind(distribution, generator);
29
29
30− QVector<QColor> colours;
30+ QColor orange(QColor::fromRgbF(0.9, 0.3, 0.1, 1.0));
31+ QColor yellow(QColor::fromRgbF(1.0, 0.6, 0.0, 1.0));
31− colours.push_back(QColor::fromRgbF(0.3, 0.27, 0.32));
32+ QColor red(QColor::fromRgbF(0.8, 0.0, 0.0, 1.0));
32− colours.push_back(QColor::fromRgbF(0.83, 0.49, 0.58));
33+ QColor darkPurple(QColor::fromRgbF(0.5, 0.2, 0.3, 1.0));
34+ QColor lightPurple(QColor::fromRgbF(0.8, 0.1, 0.8, 1.0));
33− colours.push_back(QColor::fromRgbF(0.63, 0.51, 0.59));
35+ QColor pink(QColor::fromRgbF(0.75, 0.13, 0.75));
34
36
35− colours.push_back(QColor::fromRgbF(0.28, 0.26, 0.4));
37+ InfographicColorTheme orangeTheme(yellow, orange, red);
36− colours.push_back(QColor::fromRgbF(0.47, 0.38, 0.56));
38+ InfographicColorTheme yellowTheme(orange, yellow, orange);
37− colours.push_back(QColor::fromRgbF(0.69, 0.65, 0.78));
39+ InfographicColorTheme redTheme(red, red, red);
38−
40+ InfographicColorTheme darkPurpleTheme(lightPurple, darkPurple, pink);
39− colours.push_back(QColor::fromRgbF(0.32, 0.21, 0.16));
41+ InfographicColorTheme lightPurpleTheme(lightPurple, lightPurple,
40− colours.push_back(QColor::fromRgbF(0.55, 0.45, 0.32));
42+ lightPurple);
41− colours.push_back(QColor::fromRgbF(0.85, 0.74, 0.53));
43+ InfographicColorTheme pinkTheme(lightPurple, pink, darkPurple);
42−
43− colours.push_back(QColor::fromRgbF(0.25, 0.31, 0.19));
44− colours.push_back(QColor::fromRgbF(0.63, 0.53, 0.3));
45− colours.push_back(QColor::fromRgbF(0.89, 0.56, 0.31));
46−
47− InfographicColorTheme first(colours[0], colours[1], colours[2]);
48− InfographicColorTheme second(colours[3], colours[4], colours[5]);
49− InfographicColorTheme eighth(colours[6], colours[7], colours[8]);
50− InfographicColorTheme ninth(colours[9], colours[10], colours[11]);
51
44
52 {
45 {
53 QVariantList firstMonth;
46 QVariantList firstMonth;
@@ -59,8 +52,8 @@ void InfographicModelPrivate::generateFakeData()
59 while (secondMonth.size() < 31)
52 while (secondMonth.size() < 31)
60 secondMonth.push_back(QVariant(rand()));
53 secondMonth.push_back(QVariant(rand()));
61 QSharedPointer<InfographicData> data(
54 QSharedPointer<InfographicData> data(
62− new InfographicData("<b>52km</b> travelled", first, firstMonth,
55+ new InfographicData("<b>52km</b> travelled", yellowTheme, firstMonth,
63− ninth, secondMonth, this));
56+ orangeTheme, secondMonth, this));
64 m_fakeData.insert("guest", data);
57 m_fakeData.insert("guest", data);
65 }
58 }
66
59
@@ -74,8 +67,8 @@ void InfographicModelPrivate::generateFakeData()
74 while (secondMonth.size() < 31)
67 while (secondMonth.size() < 31)
75 secondMonth.push_back(QVariant(rand()));
68 secondMonth.push_back(QVariant(rand()));
76 QSharedPointer<InfographicData> data(
69 QSharedPointer<InfographicData> data(
77− new InfographicData("<b>33</b> messages today", second,
70+ new InfographicData("<b>33</b> messages today", pinkTheme,
78− firstMonth, eighth, secondMonth, this));
71+ firstMonth, orangeTheme, secondMonth, this));
79 m_fakeData.insert("guest", data);
72 m_fakeData.insert("guest", data);
80 }
73 }
81
74
@@ -89,8 +82,8 @@ void InfographicModelPrivate::generateFakeData()
89 while (secondMonth.size() < 31)
82 while (secondMonth.size() < 31)
90 secondMonth.push_back(QVariant(rand()));
83 secondMonth.push_back(QVariant(rand()));
91 QSharedPointer<InfographicData> data(
84 QSharedPointer<InfographicData> data(
92− new InfographicData("<b>69</b> minutes talk time", eighth,
85+ new InfographicData("<b>69</b> minutes talk time", darkPurpleTheme,
93− firstMonth, second, secondMonth, this));
86+ firstMonth, redTheme, secondMonth, this));
94 m_fakeData.insert("guest", data);
87 m_fakeData.insert("guest", data);
95 }
88 }
96}
89}
tests/plugins/Ubuntu/Gestures/DownwardsLauncher.qml+1−1
@@ -51,7 +51,7 @@ Item {
51
51
52 height: units.gu(5)
52 height: units.gu(5)
53
53
54− direction: DirectionalDragArea.Downwards
54+ direction: Direction.Downwards
55 maxDeviation: units.gu(2)
55 maxDeviation: units.gu(2)
56 wideningAngle: 10
56 wideningAngle: 10
57 distanceThreshold: units.gu(4)
57 distanceThreshold: units.gu(4)
tests/plugins/Ubuntu/Gestures/LeftwardsLauncher.qml+1−1
@@ -54,7 +54,7 @@ Item {
54
54
55 width: units.gu(5)
55 width: units.gu(5)
56
56
57− direction: DirectionalDragArea.Leftwards
57+ direction: Direction.Leftwards
58 maxDeviation: units.gu(2)
58 maxDeviation: units.gu(2)
59 wideningAngle: 10
59 wideningAngle: 10
60 distanceThreshold: units.gu(4)
60 distanceThreshold: units.gu(4)
tests/plugins/Ubuntu/Gestures/RightwardsLauncher.qml+1−1
@@ -50,7 +50,7 @@ Item {
50
50
51 width: units.gu(5)
51 width: units.gu(5)
52
52
53− direction: DirectionalDragArea.Rightwards
53+ direction: Direction.Rightwards
54 maxDeviation: units.gu(2)
54 maxDeviation: units.gu(2)
55 wideningAngle: 10
55 wideningAngle: 10
56 distanceThreshold: units.gu(4)
56 distanceThreshold: units.gu(4)
tests/plugins/Ubuntu/Gestures/UpwardsLauncher.qml+1−1
@@ -54,7 +54,7 @@ Item {
54
54
55 height: units.gu(5)
55 height: units.gu(5)
56
56
57− direction: DirectionalDragArea.Upwards
57+ direction: Direction.Upwards
58 maxDeviation: units.gu(2)
58 maxDeviation: units.gu(2)
59 wideningAngle: 10
59 wideningAngle: 10
60 distanceThreshold: units.gu(4)
60 distanceThreshold: units.gu(4)
tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp+9−10
@@ -132,13 +132,13 @@ namespace {
132QPointF calculateInitialTouchPos(DirectionalDragArea *edgeDragArea, QQuickView *view)
132QPointF calculateInitialTouchPos(DirectionalDragArea *edgeDragArea, QQuickView *view)
133{
133{
134 switch (edgeDragArea->direction()) {
134 switch (edgeDragArea->direction()) {
135− case DirectionalDragArea::Upwards:
135+ case Direction::Upwards:
136 return QPointF(view->width()/2.0f, view->height() - (edgeDragArea->height()/2.0f));
136 return QPointF(view->width()/2.0f, view->height() - (edgeDragArea->height()/2.0f));
137− case DirectionalDragArea::Downwards:
137+ case Direction::Downwards:
138 return QPointF(view->width()/2.0f, edgeDragArea->height()/2.0f);
138 return QPointF(view->width()/2.0f, edgeDragArea->height()/2.0f);
139− case DirectionalDragArea::Leftwards:
139+ case Direction::Leftwards:
140 return QPointF(view->width() - (edgeDragArea->width()/2.0f), view->height()/2.0f);
140 return QPointF(view->width() - (edgeDragArea->width()/2.0f), view->height()/2.0f);
141− default: // DirectionalDragArea::Rightwards:
141+ default: // Direction::Rightwards:
142 return QPointF(edgeDragArea->width()/2.0f, view->height()/2.0f);
142 return QPointF(edgeDragArea->width()/2.0f, view->height()/2.0f);
143 }
143 }
144}
144}
@@ -153,13 +153,13 @@ QPointF calculateDirectionVector(DirectionalDragArea *edgeDragArea,
153 qreal angleSin = qSin(angleRadians);
153 qreal angleSin = qSin(angleRadians);
154
154
155 switch (edgeDragArea->direction()) {
155 switch (edgeDragArea->direction()) {
156− case DirectionalDragArea::Upwards:
156+ case Direction::Upwards:
157 return QPointF(angleSin, -angleCos);
157 return QPointF(angleSin, -angleCos);
158− case DirectionalDragArea::Downwards:
158+ case Direction::Downwards:
159 return QPointF(angleSin, angleCos);
159 return QPointF(angleSin, angleCos);
160− case DirectionalDragArea::Leftwards:
160+ case Direction::Leftwards:
161 return QPointF(-angleCos, angleSin);
161 return QPointF(-angleCos, angleSin);
162− default: // DirectionalDragArea::Rightwards:
162+ default: // Direction::Rightwards:
163 return QPointF(angleCos, angleSin);
163 return QPointF(angleCos, angleSin);
164 }
164 }
165}
165}
@@ -168,8 +168,7 @@ QPointF createTouchDeviation(DirectionalDragArea *edgeDragArea)
168{
168{
169 qreal deviation = edgeDragArea->maxDeviation() * 0.8;
169 qreal deviation = edgeDragArea->maxDeviation() * 0.8;
170
170
171− if (edgeDragArea->direction() == DirectionalDragArea::Leftwards
171+ if (Direction::isHorizontal(edgeDragArea->direction())) {
172− || edgeDragArea->direction() == DirectionalDragArea::Rightwards) {
173 return QPointF(0, deviation);
172 return QPointF(0, deviation);
174 } else {
173 } else {
175 return QPointF(deviation, 0);
174 return QPointF(deviation, 0);
tests/uqmlscene/CMakeLists.txtnew file+18
@@ -0,0 +1,18 @@
1+add_executable(uqmlscene
2+ ${shellapplication_MOC_SRCS}
3+ main.cpp
4+ ../../MouseTouchAdaptor.cpp
5+ )
6+
7+qt5_use_modules(uqmlscene Qml Quick Test)
8+pkg_check_modules(XCB REQUIRED xcb)
9+
10+if (NOT "${XCB_INCLUDE_DIRS}" STREQUAL "")
11+ set_target_properties(uqmlscene PROPERTIES INCLUDE_DIRECTORIES ${XCB_INCLUDE_DIRS})
12+endif()
13+
14+target_link_libraries(uqmlscene
15+ ${Qt5Qml_LIBRARIES}
16+ ${Qt5Quick_LIBRARIES}
17+ ${XCB_LDFLAGS}
18+ )
tests/uqmlscene/READMEnew file+1
@@ -0,0 +1 @@
1+Qt's qmlscene tool modified to use MouseTouchAdaptor. That way we can interact with touch-only components
tests/uqmlscene/main.cppnew file+543
@@ -0,0 +1,543 @@
1+/****************************************************************************
2+**
3+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
4+** Contact: http://www.qt-project.org/legal
5+**
6+** This file is part of the tools applications of the Qt Toolkit.
7+**
8+** $QT_BEGIN_LICENSE:LGPL$
9+** Commercial License Usage
10+** Licensees holding valid commercial Qt licenses may use this file in
11+** accordance with the commercial license agreement provided with the
12+** Software or, alternatively, in accordance with the terms contained in
13+** a written agreement between you and Digia. For licensing terms and
14+** conditions see http://qt.digia.com/licensing. For further information
15+** use the contact form at http://qt.digia.com/contact-us.
16+**
17+** GNU Lesser General Public License Usage
18+** Alternatively, this file may be used under the terms of the GNU Lesser
19+** General Public License version 2.1 as published by the Free Software
20+** Foundation and appearing in the file LICENSE.LGPL included in the
21+** packaging of this file. Please review the following information to
22+** ensure the GNU Lesser General Public License version 2.1 requirements
23+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24+**
25+** In addition, as a special exception, Digia gives you certain additional
26+** rights. These rights are described in the Digia Qt LGPL Exception
27+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28+**
29+** GNU General Public License Usage
30+** Alternatively, this file may be used under the terms of the GNU
31+** General Public License version 3.0 as published by the Free Software
32+** Foundation and appearing in the file LICENSE.GPL included in the
33+** packaging of this file. Please review the following information to
34+** ensure the GNU General Public License version 3.0 requirements will be
35+** met: http://www.gnu.org/copyleft/gpl.html.
36+**
37+**
38+** $QT_END_LICENSE$
39+**
40+****************************************************************************/
41+
42+#include <QtCore/qdebug.h>
43+#include <QtCore/qabstractanimation.h>
44+#include <QtCore/qdir.h>
45+#include <QtCore/qmath.h>
46+#include <QtCore/qdatetime.h>
47+
48+#include <QtGui/QGuiApplication>
49+
50+#include <QtQml/qqml.h>
51+#include <QtQml/qqmlengine.h>
52+#include <QtQml/qqmlcomponent.h>
53+#include <QtQml/qqmlcontext.h>
54+
55+#include <QtQuick/qquickitem.h>
56+#include <QtQuick/qquickview.h>
57+
58+#ifdef QT_WIDGETS_LIB
59+#include <QtWidgets/QApplication>
60+#include <QtWidgets/QFileDialog>
61+#endif
62+
63+#include <QtCore/QTranslator>
64+#include <QtCore/QLibraryInfo>
65+
66+#include "../../MouseTouchAdaptor.h"
67+
68+#ifdef QML_RUNTIME_TESTING
69+class RenderStatistics
70+{
71+public:
72+ static void updateStats();
73+ static void printTotalStats();
74+private:
75+ static QVector<qreal> timePerFrame;
76+ static QVector<int> timesPerFrames;
77+};
78+
79+QVector<qreal> RenderStatistics::timePerFrame;
80+QVector<int> RenderStatistics::timesPerFrames;
81+
82+void RenderStatistics::updateStats()
83+{
84+ static QTime time;
85+ static int frames;
86+ static int lastTime;
87+
88+ if (frames == 0) {
89+ time.start();
90+ } else {
91+ int elapsed = time.elapsed();
92+ timesPerFrames.append(elapsed - lastTime);
93+ lastTime = elapsed;
94+
95+ if (elapsed > 5000) {
96+ qreal avgtime = elapsed / (qreal) frames;
97+ qreal var = 0;
98+ for (int i = 0; i < timesPerFrames.size(); ++i) {
99+ qreal diff = timesPerFrames.at(i) - avgtime;
100+ var += diff * diff;
101+ }
102+ var /= timesPerFrames.size();
103+
104+ qDebug("Average time per frame: %f ms (%i fps), std.dev: %f ms", avgtime, qRound(1000. / avgtime), qSqrt(var));
105+
106+ timePerFrame.append(avgtime);
107+ timesPerFrames.clear();
108+ time.start();
109+ lastTime = 0;
110+ frames = 0;
111+ }
112+ }
113+ ++frames;
114+}
115+
116+void RenderStatistics::printTotalStats()
117+{
118+ int count = timePerFrame.count();
119+ if (count == 0)
120+ return;
121+
122+ qreal minTime = 0;
123+ qreal maxTime = 0;
124+ qreal avg = 0;
125+ for (int i = 0; i < count; ++i) {
126+ minTime = minTime == 0 ? timePerFrame.at(i) : qMin(minTime, timePerFrame.at(i));
127+ maxTime = qMax(maxTime, timePerFrame.at(i));
128+ avg += timePerFrame.at(i);
129+ }
130+ avg /= count;
131+
132+ qDebug(" ");
133+ qDebug("----- Statistics -----");
134+ qDebug("Average time per frame: %f ms (%i fps)", avg, qRound(1000. / avg));
135+ qDebug("Best time per frame: %f ms (%i fps)", minTime, int(1000 / minTime));
136+ qDebug("Worst time per frame: %f ms (%i fps)", maxTime, int(1000 / maxTime));
137+ qDebug("----------------------");
138+ qDebug(" ");
139+}
140+#endif
141+
142+struct Options
143+{
144+ Options()
145+ : originalQml(false)
146+ , originalQmlRaster(false)
147+ , maximized(false)
148+ , fullscreen(false)
149+ , transparent(false)
150+ , clip(false)
151+ , versionDetection(true)
152+ , quitImmediately(false)
153+ , resizeViewToRootItem(false)
154+ , multisample(false)
155+ {
156+ }
157+
158+ QUrl file;
159+ bool originalQml;
160+ bool originalQmlRaster;
161+ bool maximized;
162+ bool fullscreen;
163+ bool transparent;
164+ bool scenegraphOnGraphicsview;
165+ bool clip;
166+ bool versionDetection;
167+ bool quitImmediately;
168+ bool resizeViewToRootItem;
169+ bool multisample;
170+ QString translationFile;
171+};
172+
173+#if defined(QMLSCENE_BUNDLE)
174+QFileInfoList findQmlFiles(const QString &dirName)
175+{
176+ QDir dir(dirName);
177+
178+ QFileInfoList ret;
179+ if (dir.exists()) {
180+ QFileInfoList fileInfos = dir.entryInfoList(QStringList() << "*.qml",
181+ QDir::Files | QDir::AllDirs | QDir::NoDotAndDotDot);
182+
183+ Q_FOREACH (QFileInfo fileInfo, fileInfos) {
184+ if (fileInfo.isDir())
185+ ret += findQmlFiles(fileInfo.filePath());
186+ else if (fileInfo.fileName().length() > 0 && fileInfo.fileName().at(0).isLower())
187+ ret.append(fileInfo);
188+ }
189+ }
190+
191+ return ret;
192+}
193+
194+static int displayOptionsDialog(Options *options)
195+{
196+ QDialog dialog;
197+
198+ QFormLayout *layout = new QFormLayout(&dialog);
199+
200+ QComboBox *qmlFileComboBox = new QComboBox(&dialog);
201+ QFileInfoList fileInfos = findQmlFiles(":/bundle") + findQmlFiles("./qmlscene-resources");
202+
203+ Q_FOREACH (QFileInfo fileInfo, fileInfos)
204+ qmlFileComboBox->addItem(fileInfo.dir().dirName() + "/" + fileInfo.fileName(), QVariant::fromValue(fileInfo));
205+
206+ QCheckBox *originalCheckBox = new QCheckBox(&dialog);
207+ originalCheckBox->setText("Use original QML viewer");
208+ originalCheckBox->setChecked(options->originalQml);
209+
210+ QCheckBox *fullscreenCheckBox = new QCheckBox(&dialog);
211+ fullscreenCheckBox->setText("Start fullscreen");
212+ fullscreenCheckBox->setChecked(options->fullscreen);
213+
214+ QCheckBox *maximizedCheckBox = new QCheckBox(&dialog);
215+ maximizedCheckBox->setText("Start maximized");
216+ maximizedCheckBox->setChecked(options->maximized);
217+
218+ QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
219+ Qt::Horizontal,
220+ &dialog);
221+ QObject::connect(buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept()));
222+ QObject::connect(buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject()));
223+
224+ layout->addRow("Qml file:", qmlFileComboBox);
225+ layout->addWidget(originalCheckBox);
226+ layout->addWidget(maximizedCheckBox);
227+ layout->addWidget(fullscreenCheckBox);
228+ layout->addWidget(buttonBox);
229+
230+ int result = dialog.exec();
231+ if (result == QDialog::Accepted) {
232+ QVariant variant = qmlFileComboBox->itemData(qmlFileComboBox->currentIndex());
233+ QFileInfo fileInfo = variant.value<QFileInfo>();
234+
235+ if (fileInfo.canonicalFilePath().startsWith(":"))
236+ options->file = QUrl("qrc" + fileInfo.canonicalFilePath());
237+ else
238+ options->file = QUrl::fromLocalFile(fileInfo.canonicalFilePath());
239+ options->originalQml = originalCheckBox->isChecked();
240+ options->maximized = maximizedCheckBox->isChecked();
241+ options->fullscreen = fullscreenCheckBox->isChecked();
242+ }
243+ return result;
244+}
245+#endif
246+
247+static bool checkVersion(const QUrl &url)
248+{
249+ if (!qgetenv("QMLSCENE_IMPORT_NAME").isEmpty())
250+ qWarning("QMLSCENE_IMPORT_NAME is no longer supported.");
251+
252+ QString fileName = url.toLocalFile();
253+ if (fileName.isEmpty()) {
254+ qWarning("qmlscene: filename required.");
255+ return false;
256+ }
257+
258+ QFile f(fileName);
259+ if (!f.open(QFile::ReadOnly | QFile::Text)) {
260+ qWarning("qmlscene: failed to check version of file '%s', could not open...",
261+ qPrintable(fileName));
262+ return false;
263+ }
264+
265+ QRegExp quick1("^\\s*import +QtQuick +1\\.\\w*");
266+ QRegExp qt47("^\\s*import +Qt +4\\.7");
267+
268+ QTextStream stream(&f);
269+ bool codeFound= false;
270+ while (!codeFound) {
271+ QString line = stream.readLine();
272+ if (line.contains("{")) {
273+ codeFound = true;
274+ } else {
275+ QString import;
276+ if (quick1.indexIn(line) >= 0)
277+ import = quick1.cap(0).trimmed();
278+ else if (qt47.indexIn(line) >= 0)
279+ import = qt47.cap(0).trimmed();
280+
281+ if (!import.isNull()) {
282+ qWarning("qmlscene: '%s' is no longer supported.\n"
283+ "Use qmlviewer to load file '%s'.",
284+ qPrintable(import),
285+ qPrintable(fileName));
286+ return false;
287+ }
288+ }
289+ }
290+
291+ return true;
292+}
293+
294+static void displayFileDialog(Options *options)
295+{
296+#if defined(QT_WIDGETS_LIB) && !defined(QT_NO_FILEDIALOG)
297+ QString fileName = QFileDialog::getOpenFileName(0, "Open QML file", QString(), "QML Files (*.qml)");
298+ if (!fileName.isEmpty()) {
299+ QFileInfo fi(fileName);
300+ options->file = QUrl::fromLocalFile(fi.canonicalFilePath());
301+ }
302+#else
303+ Q_UNUSED(options);
304+ qWarning("No filename specified...");
305+#endif
306+}
307+
308+#ifndef QT_NO_TRANSLATION
309+static void loadTranslationFile(QTranslator &translator, const QString& directory)
310+{
311+ translator.load(QLatin1String("qml_" )+QLocale::system().name(), directory + QLatin1String("/i18n"));
312+ QCoreApplication::installTranslator(&translator);
313+}
314+#endif
315+
316+static void loadDummyDataFiles(QQmlEngine &engine, const QString& directory)
317+{
318+ QDir dir(directory+"/dummydata", "*.qml");
319+ QStringList list = dir.entryList();
320+ for (int i = 0; i < list.size(); ++i) {
321+ QString qml = list.at(i);
322+ QFile f(dir.filePath(qml));
323+ f.open(QIODevice::ReadOnly);
324+ QByteArray data = f.readAll();
325+ QQmlComponent comp(&engine);
326+ comp.setData(data, QUrl());
327+ QObject *dummyData = comp.create();
328+
329+ if(comp.isError()) {
330+ QList<QQmlError> errors = comp.errors();
331+ Q_FOREACH (const QQmlError &error, errors)
332+ qWarning() << error;
333+ }
334+
335+ if (dummyData) {
336+ qWarning() << "Loaded dummy data:" << dir.filePath(qml);
337+ qml.truncate(qml.length()-4);
338+ engine.rootContext()->setContextProperty(qml, dummyData);
339+ dummyData->setParent(&engine);
340+ }
341+ }
342+}
343+
344+static void usage()
345+{
346+ qWarning("Usage: uqmlscene [options] <filename>");
347+ qWarning(" ");
348+ qWarning(" Options:");
349+ qWarning(" --maximized ............................... Run maximized");
350+ qWarning(" --fullscreen .............................. Run fullscreen");
351+ qWarning(" --transparent ............................. Make the window transparent");
352+ qWarning(" --multisample ............................. Enable multisampling (OpenGL anti-aliasing)");
353+ qWarning(" --no-version-detection .................... Do not try to detect the version of the .qml file");
354+ qWarning(" --resize-to-root .......................... Resize the window to the size of the root item");
355+ qWarning(" --quit .................................... Quit immediately after starting");
356+ qWarning(" -I <path> ................................. Add <path> to the list of import paths");
357+ qWarning(" -B <name> <file> .......................... Add a named bundle");
358+ qWarning(" -translation <translationfile> ............ Set the language to run in");
359+
360+ qWarning(" ");
361+ exit(1);
362+}
363+
364+int main(int argc, char ** argv)
365+{
366+ Options options;
367+
368+ QStringList imports;
369+ QList<QPair<QString, QString> > bundles;
370+ for (int i = 1; i < argc; ++i) {
371+ if (*argv[i] != '-' && QFileInfo(QFile::decodeName(argv[i])).exists()) {
372+ options.file = QUrl::fromLocalFile(argv[i]);
373+ } else {
374+ const QString lowerArgument = QString::fromLatin1(argv[i]).toLower();
375+ if (lowerArgument == QLatin1String("--maximized"))
376+ options.maximized = true;
377+ else if (lowerArgument == QLatin1String("--fullscreen"))
378+ options.fullscreen = true;
379+ else if (lowerArgument == QLatin1String("--transparent"))
380+ options.transparent = true;
381+ else if (lowerArgument == QLatin1String("--clip"))
382+ options.clip = true;
383+ else if (lowerArgument == QLatin1String("--no-version-detection"))
384+ options.versionDetection = false;
385+ else if (lowerArgument == QLatin1String("--quit"))
386+ options.quitImmediately = true;
387+ else if (lowerArgument == QLatin1String("-translation"))
388+ options.translationFile = QLatin1String(argv[++i]);
389+ else if (lowerArgument == QLatin1String("--resize-to-root"))
390+ options.resizeViewToRootItem = true;
391+ else if (lowerArgument == QLatin1String("--multisample"))
392+ options.multisample = true;
393+ else if (lowerArgument == QLatin1String("-i") && i + 1 < argc)
394+ imports.append(QString::fromLatin1(argv[++i]));
395+ else if (lowerArgument == QLatin1String("-b") && i + 2 < argc) {
396+ QString name = QString::fromLatin1(argv[++i]);
397+ QString file = QString::fromLatin1(argv[++i]);
398+ bundles.append(qMakePair(name, file));
399+ } else if (lowerArgument == QLatin1String("--help")
400+ || lowerArgument == QLatin1String("-help")
401+ || lowerArgument == QLatin1String("--h")
402+ || lowerArgument == QLatin1String("-h"))
403+ usage();
404+ }
405+ }
406+
407+#ifdef QT_WIDGETS_LIB
408+ QApplication app(argc, argv);
409+#else
410+ QGuiApplication app(argc, argv);
411+#endif
412+ app.setApplicationName("Unity8 QtQmlViewer");
413+ app.setOrganizationName("Qt Project");
414+ app.setOrganizationDomain("qt-project.org");
415+
416+ MouseTouchAdaptor mouseTouchAdaptor;
417+ app.installNativeEventFilter(&mouseTouchAdaptor);
418+
419+#ifndef QT_NO_TRANSLATION
420+ QTranslator translator;
421+ QTranslator qtTranslator;
422+ QString sysLocale = QLocale::system().name();
423+ if (translator.load(QLatin1String("qmlscene_") + sysLocale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) {
424+ app.installTranslator(&translator);
425+ if (qtTranslator.load(QLatin1String("qt_") + sysLocale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) {
426+ app.installTranslator(&qtTranslator);
427+ } else {
428+ app.removeTranslator(&translator);
429+ }
430+ }
431+
432+ QTranslator qmlTranslator;
433+ if (!options.translationFile.isEmpty()) {
434+ if (qmlTranslator.load(options.translationFile)) {
435+ app.installTranslator(&qmlTranslator);
436+ } else {
437+ qWarning() << "Could not load the translation file" << options.translationFile;
438+ }
439+ }
440+#endif
441+
442+ if (options.file.isEmpty())
443+#if defined(QMLSCENE_BUNDLE)
444+ displayOptionsDialog(&options);
445+#else
446+ displayFileDialog(&options);
447+#endif
448+
449+ int exitCode = 0;
450+
451+ if (!options.file.isEmpty()) {
452+ if (!options.versionDetection || checkVersion(options.file)) {
453+#ifndef QT_NO_TRANSLATION
454+ QTranslator translator;
455+#endif
456+
457+ // TODO: as soon as the engine construction completes, the debug service is
458+ // listening for connections. But actually we aren't ready to debug anything.
459+ QQmlEngine engine;
460+ QQmlComponent *component = new QQmlComponent(&engine);
461+ for (int i = 0; i < imports.size(); ++i)
462+ engine.addImportPath(imports.at(i));
463+ for (int i = 0; i < bundles.size(); ++i)
464+ engine.addNamedBundle(bundles.at(i).first, bundles.at(i).second);
465+ if (options.file.isLocalFile()) {
466+ QFileInfo fi(options.file.toLocalFile());
467+#ifndef QT_NO_TRANSLATION
468+ loadTranslationFile(translator, fi.path());
469+#endif
470+ loadDummyDataFiles(engine, fi.path());
471+ }
472+ QObject::connect(&engine, SIGNAL(quit()), QCoreApplication::instance(), SLOT(quit()));
473+ component->loadUrl(options.file);
474+ if ( !component->isReady() ) {
475+ qWarning("%s", qPrintable(component->errorString()));
476+ return -1;
477+ }
478+
479+ QObject *topLevel = component->create();
480+ QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);
481+ QQuickView* qxView = 0;
482+ if (!window) {
483+ QQuickItem *contentItem = qobject_cast<QQuickItem *>(topLevel);
484+ if (contentItem) {
485+ qxView = new QQuickView(&engine, NULL);
486+ window = qxView;
487+ // Set window default properties; the qml can still override them
488+ QString oname = contentItem->objectName();
489+ window->setTitle(oname.isEmpty() ? QString::fromLatin1("qmlscene") : QString::fromLatin1("qmlscene: ") + oname);
490+ window->setFlags(Qt::Window | Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint | Qt::WindowFullscreenButtonHint);
491+ if (options.resizeViewToRootItem)
492+ qxView->setResizeMode(QQuickView::SizeViewToRootObject);
493+ else
494+ qxView->setResizeMode(QQuickView::SizeRootObjectToView);
495+ qxView->setContent(options.file, component, contentItem);
496+ }
497+ }
498+
499+ if (window) {
500+ mouseTouchAdaptor.setTargetWindow(window);
501+
502+ QSurfaceFormat surfaceFormat = window->requestedFormat();
503+ if (options.multisample)
504+ surfaceFormat.setSamples(16);
505+ if (options.transparent) {
506+ surfaceFormat.setAlphaBufferSize(8);
507+ window->setClearBeforeRendering(true);
508+ window->setColor(QColor(Qt::transparent));
509+ window->setFlags(Qt::FramelessWindowHint);
510+ }
511+ window->setFormat(surfaceFormat);
512+
513+ if (options.fullscreen)
514+ window->showFullScreen();
515+ else if (options.maximized)
516+ window->showMaximized();
517+ else
518+ window->show();
519+ }
520+
521+ if (options.quitImmediately)
522+ QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection);
523+
524+ // Now would be a good time to inform the debug service to start listening.
525+
526+ exitCode = app.exec();
527+
528+#ifdef QML_RUNTIME_TESTING
529+ RenderStatistics::printTotalStats();
530+#endif
531+ // Ready to exit. If we created qxView, it owns the component;
532+ // otherwise, the ownership is still right here. Nobody deletes the engine
533+ // (which is odd since the container constructor takes the engine pointer),
534+ // but it's stack-allocated anyway.
535+ if (qxView)
536+ delete qxView;
537+ else
538+ delete component;
539+ }
540+ }
541+
542+ return exitCode;
543+}