on xenial help sign in
Merge trunk.
commitd8fc42a2f6de18b9760464450e0f3adeaf409cec authorMichał Sawicz <michal.sawicz@canonical.com> dateTue 28 Jan 2014, 10:11 (13 years ago) parent3541cb7eba4742
75 files changed+4116−439
data/unity8.conf+1 debian/control+2 debian/unity8-fake-env.install+1 plugins/DashViews/CMakeLists.txt+2−1 plugins/DashViews/abstractjournal.cpp → plugins/DashViews/abstractdashview.cpp+34−34 plugins/DashViews/abstractjournal.h → plugins/DashViews/abstractdashview.h+7−6 plugins/DashViews/horizontaljournal.cpp+4−3 plugins/DashViews/horizontaljournal.h+3−3 plugins/DashViews/organicgrid.cpp+268 plugins/DashViews/organicgrid.h+95 plugins/DashViews/plugin.cpp+2 plugins/DashViews/verticaljournal.cpp+4−3 plugins/DashViews/verticaljournal.h+3−3 po/am.po+158 po/az.po+34−31 po/bs.po+159 po/ckb.po+160 po/da.po+158 po/de.po+8−8 po/el.po+32−28 po/en_GB.po+28−26 po/es.po+7−6 po/eu.po+160 po/fo.po+5−5 po/fr.po+29−29 po/hi.po+158 po/hu.po+5−5 po/it.po+7−7 po/ja.po+20−20 po/lt.po+165 po/mr.po+158 po/ms.po+160 po/nl.po+29−27 po/pt.po+158 po/pt_BR.po+9−7 po/ru.po+9−6 po/sq.po+159 po/sw.po+158 po/tr.po+6−4 po/ug.po+7−7 po/vi.po+158 po/zh_HK.po+157 po/zh_TW.po+24−25 qml/Dash/Apps/AppPreview.qml+1 qml/Panel/IndicatorRow.qml+51−29 qml/Panel/Indicators.qml+46−34 qml/Panel/MenuContent.qml+2−2 tests/autopilot/unity8/shell/emulators/__init__.py+1−1 tests/autopilot/unity8/shell/emulators/dash.py+53−2 tests/autopilot/unity8/shell/tests/test_emulators.py+89−2 tests/mocks/LightDM/CMakeLists.txt+1−1 tests/mocks/Unity/CMakeLists.txt+9−2 tests/mocks/Unity/Indicators/IndicatorsModel.qml+2−5 tests/mocks/Unity/Indicators/qml/fake_menu_widget2.qml+1−3 tests/mocks/Unity/Indicators/qml/fake_menu_widget3.qml+1−1 tests/mocks/Unity/fake_applications_scope.cpp+2−1 tests/mocks/Unity/fake_preview.cpp+5−3 tests/mocks/Unity/fake_preview.h+5−2 tests/mocks/Unity/fake_scope.cpp+3−2 tests/mocks/Unity/fake_scope.h+3−1 tests/plugins/DashViews/CMakeLists.txt+12−15 tests/plugins/DashViews/horizontaljournaltest.cpp+35−9 tests/plugins/DashViews/organicgridtest.cpp+531 tests/plugins/DashViews/organicgridtest.qml+43 tests/plugins/DashViews/organicgridtry.cpp+98 tests/plugins/DashViews/organicgridtry.qml+94 tests/plugins/DashViews/verticaljournaltest.cpp+32 tests/plugins/LightDM/CMakeLists.txt+1 tests/qmltests/Greeter/tst_Lockscreen.qml+1−1 tests/qmltests/Panel/tst_IndicatorRow.qml+2−1 tests/qmltests/Panel/tst_Indicators.qml+59−8 tests/qmltests/Panel/tst_MenuContent.qml+2−2 tests/qmltests/Panel/tst_Panel.qml+14−12 tests/qmltests/tst_Shell.qml+4−4 tests/utils/modules/Unity/Test/UnityTestCase.qml+2−2
data/unity8.conf+1
@@ -24,6 +24,7 @@ pre-start script
2424 # Point all future jobs in this session to our Mir socket instead of
2525 # unity-system-compositor's socket.
2626 initctl set-env --global MIR_SOCKET=$MIR_SERVER_FILE
27+ gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.UpdateActivationEnvironment "@a{ss} {'MIR_SOCKET': '$MIR_SERVER_FILE'}"
2728 fi
2829end script
2930
debian/control+2
@@ -72,6 +72,7 @@ Package: unity8
7272Architecture: any
7373Provides: indicator-renderer,
7474Depends: gsettings-desktop-schemas,
75+ libglib2.0-bin,
7576 qmenumodel-qml (>= 0.2.7),
7677 qtdeclarative5-dee-plugin,
7778 qtdeclarative5-gsettings1.0,
@@ -102,6 +103,7 @@ Depends: gir1.2-glib-2.0,
102103 libqt5test5,
103104 libqt5widgets5,
104105 python-evdev,
106+ python-fixtures,
105107 python-gi,
106108 python-mock,
107109 unity8 (>= ${source:Version}),
debian/unity8-fake-env.install+1
@@ -1,2 +1,3 @@
11usr/lib/*/unity8/qml/mocks
2+usr/lib/*/unity8/qml/scopefakes
23usr/share/unity8/mocks
plugins/DashViews/CMakeLists.txt+2−1
@@ -24,9 +24,10 @@ remove_definitions(-DQT_NO_KEYWORDS)
2424set(QMLPLUGIN_SRC
2525 plugin.cpp
2626 listviewwithpageheader.cpp
27− abstractjournal.cpp
27+ abstractdashview.cpp
2828 verticaljournal.cpp
2929 horizontaljournal.cpp
30+ organicgrid.cpp
3031 )
3132
3233add_library(DashViews-qml MODULE
plugins/DashViews/abstractjournal.cpp → plugins/DashViews/abstractdashview.cpprenamed+34−34
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013, 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -14,11 +14,11 @@
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17−#include "abstractjournal.h"
17+#include "abstractdashview.h"
1818
1919static const qreal bufferRatio = 0.5;
2020
21−AbstractJournal::AbstractJournal()
21+AbstractDashView::AbstractDashView()
2222 : m_delegateModel(nullptr)
2323 , m_asyncRequestedIndex(-1)
2424 , m_columnSpacing(0)
@@ -35,12 +35,12 @@ AbstractJournal::AbstractJournal()
3535 connect(this, SIGNAL(heightChanged()), this, SLOT(onHeightChanged()));
3636}
3737
38−QAbstractItemModel *AbstractJournal::model() const
38+QAbstractItemModel *AbstractDashView::model() const
3939{
4040 return m_delegateModel ? m_delegateModel->model().value<QAbstractItemModel *>() : nullptr;
4141}
4242
43−void AbstractJournal::setModel(QAbstractItemModel *model)
43+void AbstractDashView::setModel(QAbstractItemModel *model)
4444{
4545 if (model != this->model()) {
4646 if (!m_delegateModel) {
@@ -65,12 +65,12 @@ void AbstractJournal::setModel(QAbstractItemModel *model)
6565 }
6666}
6767
68−QQmlComponent *AbstractJournal::delegate() const
68+QQmlComponent *AbstractDashView::delegate() const
6969{
7070 return m_delegateModel ? m_delegateModel->delegate() : nullptr;
7171}
7272
73−void AbstractJournal::setDelegate(QQmlComponent *delegate)
73+void AbstractDashView::setDelegate(QQmlComponent *delegate)
7474{
7575 if (delegate != this->delegate()) {
7676 if (!m_delegateModel) {
@@ -87,12 +87,12 @@ void AbstractJournal::setDelegate(QQmlComponent *delegate)
8787 }
8888}
8989
90−qreal AbstractJournal::columnSpacing() const
90+qreal AbstractDashView::columnSpacing() const
9191{
9292 return m_columnSpacing;
9393}
9494
95−void AbstractJournal::setColumnSpacing(qreal columnSpacing)
95+void AbstractDashView::setColumnSpacing(qreal columnSpacing)
9696{
9797 if (columnSpacing != m_columnSpacing) {
9898 m_columnSpacing = columnSpacing;
@@ -104,12 +104,12 @@ void AbstractJournal::setColumnSpacing(qreal columnSpacing)
104104 }
105105}
106106
107−qreal AbstractJournal::rowSpacing() const
107+qreal AbstractDashView::rowSpacing() const
108108{
109109 return m_rowSpacing;
110110}
111111
112−void AbstractJournal::setRowSpacing(qreal rowSpacing)
112+void AbstractDashView::setRowSpacing(qreal rowSpacing)
113113{
114114 if (rowSpacing != m_rowSpacing) {
115115 m_rowSpacing = rowSpacing;
@@ -121,12 +121,12 @@ void AbstractJournal::setRowSpacing(qreal rowSpacing)
121121 }
122122}
123123
124−qreal AbstractJournal::delegateCreationBegin() const
124+qreal AbstractDashView::delegateCreationBegin() const
125125{
126126 return m_delegateCreationBegin;
127127}
128128
129−void AbstractJournal::setDelegateCreationBegin(qreal begin)
129+void AbstractDashView::setDelegateCreationBegin(qreal begin)
130130{
131131 m_delegateCreationBeginValid = true;
132132 if (m_delegateCreationBegin == begin)
@@ -138,7 +138,7 @@ void AbstractJournal::setDelegateCreationBegin(qreal begin)
138138 emit delegateCreationBeginChanged();
139139}
140140
141−void AbstractJournal::resetDelegateCreationBegin()
141+void AbstractDashView::resetDelegateCreationBegin()
142142{
143143 m_delegateCreationBeginValid = false;
144144 if (m_delegateCreationBegin == 0)
@@ -150,12 +150,12 @@ void AbstractJournal::resetDelegateCreationBegin()
150150 emit delegateCreationBeginChanged();
151151}
152152
153−qreal AbstractJournal::delegateCreationEnd() const
153+qreal AbstractDashView::delegateCreationEnd() const
154154{
155155 return m_delegateCreationEnd;
156156}
157157
158−void AbstractJournal::setDelegateCreationEnd(qreal end)
158+void AbstractDashView::setDelegateCreationEnd(qreal end)
159159{
160160 m_delegateCreationEndValid = true;
161161 if (m_delegateCreationEnd == end)
@@ -167,7 +167,7 @@ void AbstractJournal::setDelegateCreationEnd(qreal end)
167167 emit delegateCreationEndChanged();
168168}
169169
170−void AbstractJournal::resetDelegateCreationEnd()
170+void AbstractDashView::resetDelegateCreationEnd()
171171{
172172 m_delegateCreationEndValid = false;
173173 if (m_delegateCreationEnd == 0)
@@ -179,7 +179,7 @@ void AbstractJournal::resetDelegateCreationEnd()
179179 emit delegateCreationEndChanged();
180180}
181181
182−void AbstractJournal::createDelegateModel()
182+void AbstractDashView::createDelegateModel()
183183{
184184#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
185185 m_delegateModel = new QQuickVisualDataModel(qmlContext(this), this);
@@ -192,9 +192,9 @@ void AbstractJournal::createDelegateModel()
192192 m_delegateModel->componentComplete();
193193}
194194
195−void AbstractJournal::refill()
195+void AbstractDashView::refill()
196196{
197− if (!isComponentComplete()) {
197+ if (!isComponentComplete() || height() < 0) {
198198 return;
199199 }
200200
@@ -215,7 +215,7 @@ void AbstractJournal::refill()
215215 }
216216}
217217
218−bool AbstractJournal::addVisibleItems(qreal fillFromY, qreal fillToY, bool asynchronous)
218+bool AbstractDashView::addVisibleItems(qreal fillFromY, qreal fillToY, bool asynchronous)
219219{
220220 if (!delegate())
221221 return false;
@@ -247,7 +247,7 @@ bool AbstractJournal::addVisibleItems(qreal fillFromY, qreal fillToY, bool async
247247 return changed;
248248}
249249
250−QQuickItem *AbstractJournal::createItem(int modelIndex, bool asynchronous)
250+QQuickItem *AbstractDashView::createItem(int modelIndex, bool asynchronous)
251251{
252252 if (asynchronous && m_asyncRequestedIndex != -1)
253253 return nullptr;
@@ -276,12 +276,12 @@ QQuickItem *AbstractJournal::createItem(int modelIndex, bool asynchronous)
276276#endif
277277 return nullptr;
278278 } else {
279− positionItem(modelIndex, item);
279+ addItemToView(modelIndex, item);
280280 return item;
281281 }
282282}
283283
284−void AbstractJournal::releaseItem(QQuickItem *item)
284+void AbstractDashView::releaseItem(QQuickItem *item)
285285{
286286#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
287287 QQuickVisualModel::ReleaseFlags flags = m_delegateModel->release(item);
@@ -294,20 +294,20 @@ void AbstractJournal::releaseItem(QQuickItem *item)
294294 }
295295}
296296
297−void AbstractJournal::setImplicitHeightDirty()
297+void AbstractDashView::setImplicitHeightDirty()
298298{
299299 m_implicitHeightDirty = true;
300300}
301301
302302#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
303−void AbstractJournal::itemCreated(int modelIndex, QQuickItem *item)
303+void AbstractDashView::itemCreated(int modelIndex, QQuickItem *item)
304304{
305305#else
306−void AbstractJournal::itemCreated(int modelIndex, QObject *object)
306+void AbstractDashView::itemCreated(int modelIndex, QObject *object)
307307{
308308 QQuickItem *item = qmlobject_cast<QQuickItem*>(object);
309309 if (!item) {
310− qWarning() << "AbstractJournal::itemCreated got a non item for index" << modelIndex;
310+ qWarning() << "AbstractDashView::itemCreated got a non item for index" << modelIndex;
311311 return;
312312 }
313313#endif
@@ -326,9 +326,9 @@ void AbstractJournal::itemCreated(int modelIndex, QObject *object)
326326}
327327
328328#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
329−void AbstractJournal::onModelUpdated(const QQuickChangeSet &changeSet, bool reset)
329+void AbstractDashView::onModelUpdated(const QQuickChangeSet &changeSet, bool reset)
330330#else
331−void AbstractJournal::onModelUpdated(const QQmlChangeSet &changeSet, bool reset)
331+void AbstractDashView::onModelUpdated(const QQmlChangeSet &changeSet, bool reset)
332332#endif
333333{
334334 if (reset) {
@@ -340,18 +340,18 @@ void AbstractJournal::onModelUpdated(const QQmlChangeSet &changeSet, bool reset)
340340}
341341
342342
343−void AbstractJournal::relayout()
343+void AbstractDashView::relayout()
344344{
345345 m_needsRelayout = true;
346346 polish();
347347}
348348
349−void AbstractJournal::onHeightChanged()
349+void AbstractDashView::onHeightChanged()
350350{
351351 polish();
352352}
353353
354−void AbstractJournal::updatePolish()
354+void AbstractDashView::updatePolish()
355355{
356356 if (!model())
357357 return;
@@ -375,7 +375,7 @@ void AbstractJournal::updatePolish()
375375 }
376376}
377377
378−void AbstractJournal::componentComplete()
378+void AbstractDashView::componentComplete()
379379{
380380 if (m_delegateModel)
381381 m_delegateModel->componentComplete();
plugins/DashViews/abstractjournal.h → plugins/DashViews/abstractdashview.hrenamed+7−6
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013, 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -14,8 +14,8 @@
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17−#ifndef ABSTRACTJOURNAL_H
18−#define ABSTRACTJOURNAL_H
17+#ifndef ABSTRACTDASHVIEW_H
18+#define ABSTRACTDASHVIEW_H
1919
2020#include <QQuickItem>
2121
@@ -31,7 +31,7 @@ class QQmlComponent;
3131#endif
3232#pragma GCC diagnostic pop
3333
34−class AbstractJournal : public QQuickItem
34+class AbstractDashView : public QQuickItem
3535{
3636 Q_OBJECT
3737
@@ -50,9 +50,10 @@ class AbstractJournal : public QQuickItem
5050
5151friend class VerticalJournalTest;
5252friend class HorizontalJournalTest;
53+friend class OrganicGridTest;
5354
5455public:
55− AbstractJournal();
56+ AbstractDashView();
5657
5758 QAbstractItemModel *model() const;
5859 void setModel(QAbstractItemModel *model);
@@ -110,7 +111,7 @@ private:
110111
111112 virtual void findBottomModelIndexToAdd(int *modelIndex, qreal *yPos) = 0;
112113 virtual void findTopModelIndexToAdd(int *modelIndex, qreal *yPos) = 0;
113− virtual void positionItem(int modelIndex, QQuickItem *item) = 0;
114+ virtual void addItemToView(int modelIndex, QQuickItem *item) = 0;
114115 virtual bool removeNonVisibleItems(qreal bufferFromY, qreal bufferToY) = 0;
115116 virtual void cleanupExistingItems() = 0;
116117 virtual void doRelayout() = 0;
plugins/DashViews/horizontaljournal.cpp+4−3
@@ -118,7 +118,7 @@ bool HorizontalJournal::removeNonVisibleItems(qreal bufferFromY, qreal bufferToY
118118 return changed;
119119}
120120
121−void HorizontalJournal::positionItem(int modelIndex, QQuickItem *item)
121+void HorizontalJournal::addItemToView(int modelIndex, QQuickItem *item)
122122{
123123 if (item->height() != m_rowHeight) {
124124 qWarning() << "Item" << modelIndex << "height is not the one that the rowHeight mandates, resetting it";
@@ -159,7 +159,7 @@ void HorizontalJournal::positionItem(int modelIndex, QQuickItem *item)
159159 m_firstVisibleIndex = modelIndex;
160160 m_visibleItems.prepend(item);
161161 } else {
162− qWarning() << "HorizontalJournal::positionItem - Got unexpected modelIndex"
162+ qWarning() << "HorizontalJournal::addItemToView - Got unexpected modelIndex"
163163 << modelIndex << m_firstVisibleIndex << m_visibleItems.count();
164164 }
165165 }
@@ -173,6 +173,7 @@ void HorizontalJournal::cleanupExistingItems()
173173 m_visibleItems.clear();
174174 m_lastInRowIndexPosition.clear();
175175 m_firstVisibleIndex = -1;
176+ setImplicitHeightDirty();
176177}
177178
178179void HorizontalJournal::calculateImplicitHeight()
@@ -232,7 +233,7 @@ void HorizontalJournal::doRelayout()
232233 m_visibleItems.clear();
233234 m_lastInRowIndexPosition.clear();
234235 Q_FOREACH(QQuickItem *item, allItems) {
235− positionItem(i, item);
236+ addItemToView(i, item);
236237 ++i;
237238 }
238239 } else {
plugins/DashViews/horizontaljournal.h+3−3
@@ -17,7 +17,7 @@
1717#ifndef HORIZONTALJOURNAL_H
1818#define HORIZONTALJOURNAL_H
1919
20−#include "abstractjournal.h"
20+#include "abstractdashview.h"
2121
2222 /** A horizontal journal is a view that creates delegates
2323 * based on a model and layouts them one after the other
@@ -26,7 +26,7 @@
2626 *
2727 * All delegates are forced to rowHeight if they don't have it.
2828 */
29− class HorizontalJournal : public AbstractJournal
29+ class HorizontalJournal : public AbstractDashView
3030{
3131 Q_OBJECT
3232
@@ -47,7 +47,7 @@ private:
4747 void findBottomModelIndexToAdd(int *modelIndex, qreal *yPos) override;
4848 void findTopModelIndexToAdd(int *modelIndex, qreal *yPos) override;
4949 bool removeNonVisibleItems(qreal bufferFromY, qreal bufferToY) override;
50− void positionItem(int modelIndex, QQuickItem *item) override;
50+ void addItemToView(int modelIndex, QQuickItem *item) override;
5151 void cleanupExistingItems() override;
5252 void calculateImplicitHeight() override;
5353 void doRelayout() override;
plugins/DashViews/organicgrid.cppnew file+268
@@ -0,0 +1,268 @@
1+/*
2+ * Copyright (C) 2014 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 "organicgrid.h"
18+
19+#pragma GCC diagnostic push
20+#pragma GCC diagnostic ignored "-pedantic"
21+#include <private/qquickitem_p.h>
22+#pragma GCC diagnostic pop
23+
24+static const qreal bufferRatio = 0.5;
25+
26+OrganicGrid::OrganicGrid()
27+ : m_firstVisibleIndex(-1)
28+ , m_numberOfModulesPerRow(-1)
29+{
30+}
31+
32+QSizeF OrganicGrid::smallDelegateSize() const
33+{
34+ return m_smallDelegateSize;
35+}
36+
37+void OrganicGrid::setSmallDelegateSize(const QSizeF &size)
38+{
39+ if (m_smallDelegateSize != size) {
40+ m_smallDelegateSize = size;
41+ Q_EMIT smallDelegateSizeChanged();
42+
43+ if (isComponentComplete()) {
44+ relayout();
45+ }
46+ }
47+}
48+
49+QSizeF OrganicGrid::bigDelegateSize() const
50+{
51+ return m_bigDelegateSize;
52+}
53+
54+void OrganicGrid::setBigDelegateSize(const QSizeF &size)
55+{
56+ if (m_bigDelegateSize != size) {
57+ m_bigDelegateSize = size;
58+ Q_EMIT bigDelegateSizeChanged();
59+
60+ if (isComponentComplete()) {
61+ relayout();
62+ }
63+ }
64+}
65+
66+QPointF OrganicGrid::positionForIndex(int modelIndex) const
67+{
68+ const qreal moduleHeight = m_smallDelegateSize.height() + rowSpacing() + m_bigDelegateSize.height();
69+ const qreal moduleWidth = m_smallDelegateSize.width() * 2 + columnSpacing() * 2 + m_bigDelegateSize.width();
70+ const int itemsPerRow = m_numberOfModulesPerRow * 6;
71+ const int rowIndex = floor(modelIndex / itemsPerRow);
72+ const int columnIndex = floor((modelIndex - rowIndex * itemsPerRow) / 6);
73+
74+ qreal yPos = (moduleHeight + rowSpacing()) * rowIndex;
75+ const int moduleIndex = modelIndex % 6;
76+ if (moduleIndex == 2) {
77+ yPos += m_smallDelegateSize.height() + rowSpacing();
78+ } else if (moduleIndex == 3 || moduleIndex == 5) {
79+ yPos += m_bigDelegateSize.height() + rowSpacing();
80+ }
81+
82+ qreal xPos = (moduleWidth + columnSpacing()) * columnIndex;
83+ if (moduleIndex == 1) {
84+ xPos += m_smallDelegateSize.width() + columnSpacing();
85+ } else if (moduleIndex == 3) {
86+ xPos += m_bigDelegateSize.width() + columnSpacing();
87+ } else if (moduleIndex == 4) {
88+ xPos += (m_smallDelegateSize.width() + columnSpacing()) * 2;
89+ } else if (moduleIndex == 5) {
90+ xPos += m_bigDelegateSize.width() + m_smallDelegateSize.width() + columnSpacing() * 2;
91+ }
92+
93+ return QPointF(xPos, yPos);
94+}
95+
96+QSizeF OrganicGrid::sizeForIndex(int modelIndex) const
97+{
98+ const int moduleIndex = modelIndex % 6;
99+ if (moduleIndex == 0 || moduleIndex == 1 || moduleIndex == 3 || moduleIndex == 5) {
100+ return m_smallDelegateSize;
101+ } else {
102+ return m_bigDelegateSize;
103+ }
104+}
105+
106+void OrganicGrid::findBottomModelIndexToAdd(int *modelIndex, qreal *yPos)
107+{
108+ if (m_visibleItems.isEmpty()) {
109+ *modelIndex = 0;
110+ *yPos = 0;
111+ } else {
112+ *modelIndex = m_firstVisibleIndex + m_visibleItems.count();
113+ // We create stuff in a 6-module basis, so always return back
114+ // the y position of the first item
115+ const int firstModuleIndex = ((*modelIndex) / 6) * 6;
116+ *yPos = positionForIndex(firstModuleIndex).y();
117+ }
118+}
119+
120+void OrganicGrid::findTopModelIndexToAdd(int *modelIndex, qreal *yPos)
121+{
122+ if (m_visibleItems.isEmpty()) {
123+ *modelIndex = 0;
124+ *yPos = 0;
125+ } else {
126+ *modelIndex = m_firstVisibleIndex - 1;
127+ // We create stuff in a 6-module basis, so always return back
128+ // the y position of the last item bottom
129+ const int lastModuleIndex = ((*modelIndex) / 6) * 6 + 5;
130+ *yPos = positionForIndex(lastModuleIndex).y();
131+ *yPos += sizeForIndex(lastModuleIndex).height();
132+ }
133+}
134+
135+void OrganicGrid::addItemToView(int modelIndex, QQuickItem *item)
136+{
137+ // modelIndex has to be either m_firstVisibleIndex - 1 or m_firstVisibleIndex + m_visibleItems.count() or the first
138+ if (modelIndex == m_firstVisibleIndex + m_visibleItems.count()) {
139+ m_visibleItems << item;
140+ } else if (modelIndex == m_firstVisibleIndex - 1) {
141+ m_firstVisibleIndex = modelIndex;
142+ m_visibleItems.prepend(item);
143+ } else if (modelIndex == 0) {
144+ m_firstVisibleIndex = 0;
145+ m_visibleItems << item;
146+ } else {
147+ qWarning() << "OrganicGrid::addItemToView - Got unexpected modelIndex"
148+ << modelIndex << m_firstVisibleIndex << m_visibleItems.count();
149+ return;
150+ }
151+
152+ const QPointF pos = positionForIndex(modelIndex);
153+ item->setPosition(pos);
154+
155+ item->setSize(sizeForIndex(modelIndex));
156+}
157+
158+bool OrganicGrid::removeNonVisibleItems(qreal bufferFromY, qreal bufferToY)
159+{
160+ bool changed = false;
161+
162+ // As adding, we also remove in a 6-module basis
163+ int lastModuleIndex = (m_firstVisibleIndex / 6) * 6 + 5;
164+ bool removeIndex = positionForIndex(lastModuleIndex).y() + sizeForIndex(lastModuleIndex).height() < bufferFromY;
165+ while (removeIndex && !m_visibleItems.isEmpty()) {
166+ releaseItem(m_visibleItems.takeFirst());
167+ changed = true;
168+ m_firstVisibleIndex++;
169+
170+ lastModuleIndex = (m_firstVisibleIndex / 6) * 6 + 5;
171+ removeIndex = positionForIndex(lastModuleIndex).y() + sizeForIndex(lastModuleIndex).height() < bufferFromY;
172+ }
173+
174+ int firstModuleIndex = ((m_firstVisibleIndex + m_visibleItems.count() - 1) / 6) * 6;
175+ removeIndex = positionForIndex(firstModuleIndex).y() > bufferToY;
176+ while (removeIndex && !m_visibleItems.isEmpty()) {
177+ releaseItem(m_visibleItems.takeLast());
178+ changed = true;
179+
180+ firstModuleIndex = ((m_firstVisibleIndex + m_visibleItems.count() - 1) / 6) * 6;
181+ removeIndex = positionForIndex(firstModuleIndex).y() > bufferToY;
182+ }
183+
184+ if (m_visibleItems.isEmpty()) {
185+ m_firstVisibleIndex = -1;
186+ }
187+
188+ return changed;
189+}
190+
191+void OrganicGrid::cleanupExistingItems()
192+{
193+ Q_FOREACH(QQuickItem *item, m_visibleItems)
194+ releaseItem(item);
195+ m_visibleItems.clear();
196+ m_firstVisibleIndex = -1;
197+ setImplicitHeightDirty();
198+}
199+
200+void OrganicGrid::doRelayout()
201+{
202+ const qreal moduleWidth = m_smallDelegateSize.width() * 2 + columnSpacing() * 2 + m_bigDelegateSize.width();
203+ m_numberOfModulesPerRow = floor((width() + columnSpacing()) / (moduleWidth + columnSpacing()));
204+ m_numberOfModulesPerRow = qMax(1, m_numberOfModulesPerRow);
205+
206+ int i = m_firstVisibleIndex;
207+ const QList<QQuickItem*> allItems = m_visibleItems;
208+ m_visibleItems.clear();
209+ Q_FOREACH(QQuickItem *item, allItems) {
210+ addItemToView(i, item);
211+ ++i;
212+ }
213+}
214+
215+void OrganicGrid::updateItemCulling(qreal visibleFromY, qreal visibleToY)
216+{
217+ Q_FOREACH(QQuickItem *item, m_visibleItems) {
218+ QQuickItemPrivate::get(item)->setCulled(item->y() + item->height() <= visibleFromY || item->y() >= visibleToY);
219+ }
220+}
221+
222+void OrganicGrid::calculateImplicitHeight()
223+{
224+ const qreal moduleHeight = m_smallDelegateSize.height() + rowSpacing() + m_bigDelegateSize.height();
225+ const int itemCount = !model() ? 0 : model()->rowCount();
226+ const int itemsPerRow = m_numberOfModulesPerRow * 6;
227+ const int fullRows = floor(itemCount / itemsPerRow);
228+ const qreal fullRowsHeight = fullRows == 0 ? 0 : fullRows * moduleHeight + rowSpacing() * (fullRows - 1);
229+
230+ const int remainingItems = itemCount - fullRows * itemsPerRow;
231+ if (remainingItems == 0) {
232+ setImplicitHeight(fullRowsHeight);
233+ } else if (remainingItems <= 2) {
234+ setImplicitHeight(fullRowsHeight + m_smallDelegateSize.height() + rowSpacing());
235+ } else {
236+ setImplicitHeight(fullRowsHeight + rowSpacing() + moduleHeight);
237+ }
238+}
239+
240+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
241+void OrganicGrid::processModelRemoves(const QVector<QQuickChangeSet::Remove> &removes)
242+#else
243+void OrganicGrid::processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes)
244+#endif
245+{
246+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
247+ Q_FOREACH(const QQuickChangeSet::Remove &remove, removes) {
248+#else
249+ Q_FOREACH(const QQmlChangeSet::Remove &remove, removes) {
250+#endif
251+ for (int i = remove.count - 1; i >= 0; --i) {
252+ const int indexToRemove = remove.index + i;
253+ // We only support removing from the end
254+ const int lastIndex = m_firstVisibleIndex + m_visibleItems.count() - 1;
255+ if (indexToRemove == lastIndex) {
256+ releaseItem(m_visibleItems.takeLast());
257+ } else {
258+ if (indexToRemove < lastIndex) {
259+ qFatal("OrganicGrid only supports removal from the end of the model");
260+ }
261+ }
262+ }
263+ }
264+ if (m_visibleItems.isEmpty()) {
265+ m_firstVisibleIndex = -1;
266+ }
267+ setImplicitHeightDirty();
268+}
plugins/DashViews/organicgrid.hnew file+95
@@ -0,0 +1,95 @@
1+/*
2+ * Copyright (C) 2014 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 ORGANICGRID_H
18+#define ORGANICGRID_H
19+
20+#include "abstractdashview.h"
21+
22+ /** An Organic Grid is is a view that creates delegates
23+ * based on a model and layouts them in groups of six items (called module).
24+ *
25+ * In each module there are 4 items that are forced to the small delegate size
26+ * and two that are forced to the big delegate size.
27+ *
28+ * Example:
29+ *
30+ * +---+ +---+ +-----+
31+ * | 1 | | 2 | | |
32+ * +---+ +---+ | 5 |
33+ * +-----+ | |
34+ * | | +-----+
35+ * | 3 | +---+ +---+
36+ * | | | 4 | | 6 |
37+ * +-----+ +---+ +---+
38+ *
39+ * Modules are positioned one after the other in a grid like fashion, i.e.
40+ *
41+ * +---+ +---+
42+ * | 1 | | 2 |
43+ * +---+ +---+
44+ * +---+ +---+
45+ * | 3 | | 4 |
46+ * +---+ +---+
47+ */
48+
49+class OrganicGrid : public AbstractDashView
50+{
51+ Q_OBJECT
52+
53+ Q_PROPERTY(QSizeF smallDelegateSize READ smallDelegateSize WRITE setSmallDelegateSize NOTIFY smallDelegateSizeChanged)
54+ Q_PROPERTY(QSizeF bigDelegateSize READ bigDelegateSize WRITE setBigDelegateSize NOTIFY bigDelegateSizeChanged)
55+
56+friend class OrganicGridTest;
57+
58+public:
59+ OrganicGrid();
60+
61+ QSizeF smallDelegateSize() const;
62+ void setSmallDelegateSize(const QSizeF &size);
63+
64+ QSizeF bigDelegateSize() const;
65+ void setBigDelegateSize(const QSizeF &size);
66+
67+Q_SIGNALS:
68+ void smallDelegateSizeChanged();
69+ void bigDelegateSizeChanged();
70+private:
71+ QPointF positionForIndex(int modelIndex) const;
72+ QSizeF sizeForIndex(int modelIndex) const;
73+
74+ void findBottomModelIndexToAdd(int *modelIndex, qreal *yPos) override;
75+ void findTopModelIndexToAdd(int *modelIndex, qreal *yPos) override;
76+ void addItemToView(int modelIndex, QQuickItem *item) override;
77+ bool removeNonVisibleItems(qreal bufferFromY, qreal bufferToY) override;
78+ void cleanupExistingItems() override;
79+ void doRelayout() override;
80+ void updateItemCulling(qreal visibleFromY, qreal visibleToY) override;
81+ void calculateImplicitHeight() override;
82+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
83+ void processModelRemoves(const QVector<QQuickChangeSet::Remove> &removes) override;
84+#else
85+ void processModelRemoves(const QVector<QQmlChangeSet::Remove> &removes) override;
86+#endif
87+
88+ QSizeF m_smallDelegateSize;
89+ QSizeF m_bigDelegateSize;
90+ int m_firstVisibleIndex;
91+ int m_numberOfModulesPerRow;
92+ QList<QQuickItem*> m_visibleItems;
93+};
94+
95+#endif
plugins/DashViews/plugin.cpp+2
@@ -19,6 +19,7 @@
1919
2020#include "horizontaljournal.h"
2121#include "listviewwithpageheader.h"
22+#include "organicgrid.h"
2223#include "verticaljournal.h"
2324
2425#include <QAbstractItemModel>
@@ -29,5 +30,6 @@ void DashViewsPlugin::registerTypes(const char *uri)
2930 qmlRegisterType<QAbstractItemModel>();
3031 qmlRegisterType<HorizontalJournal>(uri, 0, 1, "HorizontalJournal");
3132 qmlRegisterType<ListViewWithPageHeader>(uri, 0, 1, "ListViewWithPageHeader");
33+ qmlRegisterType<OrganicGrid>(uri, 0, 1, "OrganicGrid");
3234 qmlRegisterType<VerticalJournal>(uri, 0, 1, "VerticalJournal");
3335}
plugins/DashViews/verticaljournal.cpp+4−3
@@ -79,7 +79,7 @@ void VerticalJournal::findBottomModelIndexToAdd(int *modelIndex, qreal *yPos)
7979
8080void VerticalJournal::findTopModelIndexToAdd(int *modelIndex, qreal *yPos)
8181{
82− *modelIndex = INT_MAX;
82+ *modelIndex = 0;
8383 *yPos = std::numeric_limits<qreal>::lowest();
8484 int columnToAddTo = -1;
8585
@@ -130,7 +130,7 @@ bool VerticalJournal::removeNonVisibleItems(qreal bufferFromY, qreal bufferToY)
130130 return changed;
131131}
132132
133−void VerticalJournal::positionItem(int modelIndex, QQuickItem *item)
133+void VerticalJournal::addItemToView(int modelIndex, QQuickItem *item)
134134{
135135 if (item->width() != m_columnWidth) {
136136 qWarning() << "Item" << modelIndex << "width is not the one that the columnWidth mandates, resetting it";
@@ -179,6 +179,7 @@ void VerticalJournal::cleanupExistingItems()
179179 column.clear();
180180 }
181181 m_indexColumnMap.clear();
182+ setImplicitHeightDirty();
182183}
183184
184185void VerticalJournal::calculateImplicitHeight()
@@ -220,7 +221,7 @@ void VerticalJournal::doRelayout()
220221 if (!allItems.isEmpty()) {
221222 if (allItems.first().m_modelIndex == 0) {
222223 Q_FOREACH(const ViewItem &item, allItems)
223− positionItem(item.m_modelIndex, item.m_item);
224+ addItemToView(item.m_modelIndex, item.m_item);
224225 } else {
225226 Q_FOREACH(const ViewItem &item, allItems)
226227 releaseItem(item.m_item);
plugins/DashViews/verticaljournal.h+3−3
@@ -17,7 +17,7 @@
1717#ifndef VERTICALJOURNAL_H
1818#define VERTICALJOURNAL_H
1919
20−#include "abstractjournal.h"
20+#include "abstractdashview.h"
2121
2222 /** A vertical journal is a view that creates delegates
2323 * based on a model and layouts them in columns following
@@ -51,7 +51,7 @@
5151 *
5252 */
5353
54−class VerticalJournal : public AbstractJournal
54+class VerticalJournal : public AbstractDashView
5555{
5656 Q_OBJECT
5757
@@ -85,7 +85,7 @@ private:
8585 void findBottomModelIndexToAdd(int *modelIndex, qreal *yPos) override;
8686 void findTopModelIndexToAdd(int *modelIndex, qreal *yPos) override;
8787 bool removeNonVisibleItems(qreal bufferFromY, qreal bufferToY) override;
88− void positionItem(int modelIndex, QQuickItem *item) override;
88+ void addItemToView(int modelIndex, QQuickItem *item) override;
8989 void cleanupExistingItems() override;
9090 void calculateImplicitHeight() override;
9191 void doRelayout() override;
po/am.ponew file+158
@@ -0,0 +1,158 @@
1+# Amharic translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-18 19:28+0000\n"
12+"Last-Translator: samson <Unknown>\n"
13+"Language-Team: Amharic <am@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+"Plural-Forms: nplurals=2; plural=n > 1;\n"
18+"X-Launchpad-Export-Date: 2014-01-19 06:02+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr ""
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr "የቀኝ ጠርዝ"
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr ""
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr "የላይ ጠርዝ"
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr ""
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr "መዝጊያ"
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr ""
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr "የግራ ጠርዝ"
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr ""
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr ""
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr ""
66+
67+#: Components/PageHeader.qml:364
68+msgid "Recent searches"
69+msgstr ""
70+
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
75+#. TRANSLATORS: Number of persons who rated this app/video/whatever
76+#: Dash/Previews/Header.qml:93
77+#, qt-format
78+msgid "(%1)"
79+msgstr "(%1)"
80+
81+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82+#: Dash/Previews/Header.qml:105
83+#, qt-format
84+msgid "%1 review"
85+msgid_plural "%1 reviews"
86+msgstr[0] ""
87+msgstr[1] ""
88+
89+#: Dash/Previews/Reviews.qml:74
90+msgid "Add a review"
91+msgstr ""
92+
93+#: Dash/Previews/Reviews.qml:86
94+msgid "Review"
95+msgstr ""
96+
97+#: Dash/Previews/Reviews.qml:121
98+msgid "Send"
99+msgstr "መላኪያ"
100+
101+#: Dash/Previews/Reviews.qml:139
102+msgid "Comments:"
103+msgstr "አስተያየቶች:"
104+
105+#: Greeter/Lockscreen.qml:149
106+msgid "Emergency Call"
107+msgstr ""
108+
109+#: Greeter/PassphraseLockscreen.qml:59
110+#, qt-format
111+msgid "Hello %1"
112+msgstr "ሰላም %1"
113+
114+#: Greeter/PassphraseLockscreen.qml:59
115+msgid "Hello"
116+msgstr "ሰላም"
117+
118+#: Hud/HudParametrizedActionsPage.qml:132
119+msgid "Confirm"
120+msgstr "ማረጋገጫ"
121+
122+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
123+msgid "Type or say a command"
124+msgstr "ትእዛዝ ይናገሩ ወይንም ይጻፉ"
125+
126+#: Hud/Hud.qml:84
127+msgid "Loading. Please Wait..."
128+msgstr "እባክዎን ይቆዩ በመጫን ላይ..."
129+
130+#: Hud/Hud.qml:89
131+msgid "Speak Now..."
132+msgstr "አሁን ይናገሩ..."
133+
134+#: Hud/Hud.qml:94
135+msgid "Speaking..."
136+msgstr "በመናገር ላይ..."
137+
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr "የመግቢያ ቃል ማሳያ"
141+
142+#: Panel/SearchIndicator.qml:27
143+msgid "Search"
144+msgstr "መፈለጊያ"
145+
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr "ማስነሻው ላይ መቆለፊያ"
150+
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
153+msgstr "ከማስነሻው ላይ ማላቀቂያ"
154+
155+#: Shell.qml:439
156+#, qt-format
157+msgid "Please enter %1"
158+msgstr "እባክዎን ያስገቡ %1"
po/az.po+34−31
@@ -8,61 +8,64 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-06-26 23:48+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
11+"PO-Revision-Date: 2014-01-15 09:50+0000\n"
12+"Last-Translator: Turan Mahmudov <turan.mahmudov@gmail.com>\n"
1313"Language-Team: Azerbaijani <az@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-16 06:09+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
23−msgstr ""
23+msgstr "Intro -nu keç"
2424
2525#: Components/EdgeDemo.qml:112
2626msgid "Right edge"
27−msgstr ""
27+msgstr "Sağ Künc"
2828
2929#: Components/EdgeDemo.qml:113
3030msgid "Try swiping from the right edge to unlock the phone"
31−msgstr ""
31+msgstr "Kilidi açmaq üçün sağ küncdən çəkin"
3232
3333#: Components/EdgeDemo.qml:144
3434msgid "Top edge"
35−msgstr ""
35+msgstr "Yuxarı künc"
3636
3737#: Components/EdgeDemo.qml:145
3838msgid "Try swiping from the top edge to access the indicators"
39−msgstr ""
39+msgstr "Göstəricilərə keçid üçün yuxarı küncdən çəkin"
4040
4141#: Components/EdgeDemo.qml:170
4242msgid "Close"
43−msgstr ""
43+msgstr "Bağla"
4444
4545#: Components/EdgeDemo.qml:171
4646msgid "Swipe up again to close the settings screen"
47−msgstr ""
47+msgstr "Nizamlamalar ekranını bağlamaq üçün yenidən yuxarı çəkin"
4848
4949#: Components/EdgeDemo.qml:198
5050msgid "Left edge"
51−msgstr ""
51+msgstr "Sol künc"
5252
5353#: Components/EdgeDemo.qml:199
5454msgid "Swipe from the left to reveal the launcher for quick access to apps"
5555msgstr ""
56+"Applikasiyalara sürətli keçid üçün paneli açmaq üçün sol küncdən çəkin"
5657
5758#: Components/EdgeDemo.qml:226
5859msgid "Well done"
59−msgstr ""
60+msgstr "Təbriklər"
6061
6162#: Components/EdgeDemo.qml:227
6263msgid ""
6364"You have now mastered the edge gestures and can start using the "
6465"phone<br><br>Tap anywhere to start"
6566msgstr ""
67+"Siz indi künc hərəkətlərini mənimsəmisiniz və telefonu işlətməyə başlaya "
68+"bilərsiniz<br><br>Başlamaq üçün toxunun"
6669
6770#: Components/PageHeader.qml:364
6871msgid "Recent searches"
@@ -70,50 +73,50 @@ msgstr "Son axtarışlar"
7073
7174#: Dash/Apps/AppPreview.qml:135
7275msgid "Rate this"
73−msgstr ""
76+msgstr "Qiymət ver"
7477
7578#. TRANSLATORS: Number of persons who rated this app/video/whatever
7679#: Dash/Previews/Header.qml:93
7780#, qt-format
7881msgid "(%1)"
79−msgstr ""
82+msgstr "(%1)"
8083
8184#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
8285#: Dash/Previews/Header.qml:105
8386#, qt-format
8487msgid "%1 review"
8588msgid_plural "%1 reviews"
86−msgstr[0] ""
87−msgstr[1] ""
89+msgstr[0] "%1 rəy"
90+msgstr[1] "%1 rəy"
8891
8992#: Dash/Previews/Reviews.qml:74
9093msgid "Add a review"
91−msgstr ""
94+msgstr "Rəy yaz"
9295
9396#: Dash/Previews/Reviews.qml:86
9497msgid "Review"
95−msgstr ""
98+msgstr "Rəy"
9699
97100#: Dash/Previews/Reviews.qml:121
98101msgid "Send"
99−msgstr ""
102+msgstr "Göndər"
100103
101104#: Dash/Previews/Reviews.qml:139
102105msgid "Comments:"
103−msgstr ""
106+msgstr "Şərhlər:"
104107
105108#: Greeter/Lockscreen.qml:149
106109msgid "Emergency Call"
107−msgstr ""
110+msgstr "Zərurət zəngi"
108111
109112#: Greeter/PassphraseLockscreen.qml:59
110113#, qt-format
111114msgid "Hello %1"
112−msgstr ""
115+msgstr "Xoş gördük %1"
113116
114117#: Greeter/PassphraseLockscreen.qml:59
115118msgid "Hello"
116−msgstr ""
119+msgstr "Xoş gördük"
117120
118121#: Hud/HudParametrizedActionsPage.qml:132
119122msgid "Confirm"
@@ -125,19 +128,19 @@ msgstr "Əmri söyləyin və ya yazın"
125128
126129#: Hud/Hud.qml:84
127130msgid "Loading. Please Wait..."
128−msgstr "Yüklənir. Zəhmət olmasa, Gözləyin..."
131+msgstr "Yüklənir. Zəhmət olmasa, gözləyin..."
129132
130133#: Hud/Hud.qml:89
131134msgid "Speak Now..."
132−msgstr "Söyləyin..."
135+msgstr "Danışın..."
133136
134137#: Hud/Hud.qml:94
135138msgid "Speaking..."
136−msgstr "Söylənilir..."
139+msgstr "Danışır..."
137140
138141#: Notifications/NotificationMenuItemFactory.qml:89
139142msgid "Show password"
140−msgstr ""
143+msgstr "Parolu göstər"
141144
142145#: Panel/SearchIndicator.qml:27
143146msgid "Search"
@@ -146,13 +149,13 @@ msgstr "Axtar"
146149#: plugins/Unity/Launcher/launcheritem.cpp:43
147150#: plugins/Unity/Launcher/launcheritem.cpp:73
148151msgid "Lock to Launcher"
149−msgstr ""
152+msgstr "Panelə Bərkit"
150153
151154#: plugins/Unity/Launcher/launcheritem.cpp:73
152155msgid "Unlock from Launcher"
153−msgstr ""
156+msgstr "Paneldən Qaldır"
154157
155158#: Shell.qml:439
156159#, qt-format
157160msgid "Please enter %1"
158−msgstr ""
161+msgstr "Xahiş edirik daxil edin: %1"
po/bs.ponew file+159
@@ -0,0 +1,159 @@
1+# Bosnian translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-16 22:33+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Bosnian <bs@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+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19+"X-Launchpad-Export-Date: 2014-01-17 07:08+0000\n"
20+"X-Generator: Launchpad (build 16901)\n"
21+
22+#: Components/EdgeDemoOverlay.qml:151
23+msgid "Skip intro"
24+msgstr ""
25+
26+#: Components/EdgeDemo.qml:112
27+msgid "Right edge"
28+msgstr ""
29+
30+#: Components/EdgeDemo.qml:113
31+msgid "Try swiping from the right edge to unlock the phone"
32+msgstr ""
33+
34+#: Components/EdgeDemo.qml:144
35+msgid "Top edge"
36+msgstr ""
37+
38+#: Components/EdgeDemo.qml:145
39+msgid "Try swiping from the top edge to access the indicators"
40+msgstr ""
41+
42+#: Components/EdgeDemo.qml:170
43+msgid "Close"
44+msgstr ""
45+
46+#: Components/EdgeDemo.qml:171
47+msgid "Swipe up again to close the settings screen"
48+msgstr ""
49+
50+#: Components/EdgeDemo.qml:198
51+msgid "Left edge"
52+msgstr ""
53+
54+#: Components/EdgeDemo.qml:199
55+msgid "Swipe from the left to reveal the launcher for quick access to apps"
56+msgstr ""
57+
58+#: Components/EdgeDemo.qml:226
59+msgid "Well done"
60+msgstr ""
61+
62+#: Components/EdgeDemo.qml:227
63+msgid ""
64+"You have now mastered the edge gestures and can start using the "
65+"phone<br><br>Tap anywhere to start"
66+msgstr ""
67+
68+#: Components/PageHeader.qml:364
69+msgid "Recent searches"
70+msgstr ""
71+
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
76+#. TRANSLATORS: Number of persons who rated this app/video/whatever
77+#: Dash/Previews/Header.qml:93
78+#, qt-format
79+msgid "(%1)"
80+msgstr ""
81+
82+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
83+#: Dash/Previews/Header.qml:105
84+#, qt-format
85+msgid "%1 review"
86+msgid_plural "%1 reviews"
87+msgstr[0] ""
88+msgstr[1] ""
89+
90+#: Dash/Previews/Reviews.qml:74
91+msgid "Add a review"
92+msgstr ""
93+
94+#: Dash/Previews/Reviews.qml:86
95+msgid "Review"
96+msgstr ""
97+
98+#: Dash/Previews/Reviews.qml:121
99+msgid "Send"
100+msgstr ""
101+
102+#: Dash/Previews/Reviews.qml:139
103+msgid "Comments:"
104+msgstr ""
105+
106+#: Greeter/Lockscreen.qml:149
107+msgid "Emergency Call"
108+msgstr ""
109+
110+#: Greeter/PassphraseLockscreen.qml:59
111+#, qt-format
112+msgid "Hello %1"
113+msgstr ""
114+
115+#: Greeter/PassphraseLockscreen.qml:59
116+msgid "Hello"
117+msgstr ""
118+
119+#: Hud/HudParametrizedActionsPage.qml:132
120+msgid "Confirm"
121+msgstr ""
122+
123+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
124+msgid "Type or say a command"
125+msgstr ""
126+
127+#: Hud/Hud.qml:84
128+msgid "Loading. Please Wait..."
129+msgstr ""
130+
131+#: Hud/Hud.qml:89
132+msgid "Speak Now..."
133+msgstr ""
134+
135+#: Hud/Hud.qml:94
136+msgid "Speaking..."
137+msgstr ""
138+
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
143+#: Panel/SearchIndicator.qml:27
144+msgid "Search"
145+msgstr ""
146+
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
149+msgid "Lock to Launcher"
150+msgstr ""
151+
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
153+msgid "Unlock from Launcher"
154+msgstr ""
155+
156+#: Shell.qml:439
157+#, qt-format
158+msgid "Please enter %1"
159+msgstr ""
po/ckb.ponew file+160
@@ -0,0 +1,160 @@
1+# Kurdish (Sorani) translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-21 11:05+0000\n"
12+"Last-Translator: Aras <aras.noori@gmail.com>\n"
13+"Language-Team: Kurdish (Sorani) <ckb@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+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-01-22 06:16+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr "پێشەکیی بپەڕێنە"
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr "لێواری ڕاست"
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr "لێواری ڕاست ڕابکێشە بۆ کردنەوەی مۆبایلەکە"
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr "لێواری سەرەوە"
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr "لێواری سەرەوە ڕابکێشە بۆ گەیشتن بە نیشاندەرەکان"
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr "داخستن"
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr "ڕایکێشەوە سەرەوە جارێکی تر بۆ داخستنی پەردەی ڕێکخستنەکان"
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr "لێواری چەپ"
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr "لە چەپەوە بچۆرەوە سەر دەستپێک بۆئەوەی بتوانی هەموو ئەپەکان ببینی"
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr "دەستخۆش"
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr ""
66+"ئێستا شارەزایییت پەیدا کرد لە جوڵەی لێوارەکان و دەتوانی مۆبایلەکە بەکار "
67+"بهێنییت<br><br>پەنجە بە شوێنێکدا بنێ بۆ دەست پێ کردن"
68+
69+#: Components/PageHeader.qml:364
70+msgid "Recent searches"
71+msgstr "دوایین گەڕانەکان"
72+
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "پلە دابنی بۆی"
76+
77+#. TRANSLATORS: Number of persons who rated this app/video/whatever
78+#: Dash/Previews/Header.qml:93
79+#, qt-format
80+msgid "(%1)"
81+msgstr "(%1)"
82+
83+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
84+#: Dash/Previews/Header.qml:105
85+#, qt-format
86+msgid "%1 review"
87+msgid_plural "%1 reviews"
88+msgstr[0] "%1 پێداچوونەوە"
89+msgstr[1] "%1 پێداچوونەوەکان"
90+
91+#: Dash/Previews/Reviews.qml:74
92+msgid "Add a review"
93+msgstr "پێداچوونەوە زۆر بکە"
94+
95+#: Dash/Previews/Reviews.qml:86
96+msgid "Review"
97+msgstr "پێداچوونەوە"
98+
99+#: Dash/Previews/Reviews.qml:121
100+msgid "Send"
101+msgstr "ناردن"
102+
103+#: Dash/Previews/Reviews.qml:139
104+msgid "Comments:"
105+msgstr "لێدوانەکان:"
106+
107+#: Greeter/Lockscreen.qml:149
108+msgid "Emergency Call"
109+msgstr "هێڵی فریاگوزاری"
110+
111+#: Greeter/PassphraseLockscreen.qml:59
112+#, qt-format
113+msgid "Hello %1"
114+msgstr "سڵاو %1"
115+
116+#: Greeter/PassphraseLockscreen.qml:59
117+msgid "Hello"
118+msgstr "سڵاو"
119+
120+#: Hud/HudParametrizedActionsPage.qml:132
121+msgid "Confirm"
122+msgstr "پشتڕاستکردنەوە"
123+
124+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
125+msgid "Type or say a command"
126+msgstr "فەرمانێک بێژە یان بنووسە"
127+
128+#: Hud/Hud.qml:84
129+msgid "Loading. Please Wait..."
130+msgstr "لە بارکردندایە. تکایە چاوەڕێ بکە..."
131+
132+#: Hud/Hud.qml:89
133+msgid "Speak Now..."
134+msgstr "ئێستا قسە بکە"
135+
136+#: Hud/Hud.qml:94
137+msgid "Speaking..."
138+msgstr "قسە دەکات..."
139+
140+#: Notifications/NotificationMenuItemFactory.qml:89
141+msgid "Show password"
142+msgstr "تێپەڕەوشە پیشان بدە"
143+
144+#: Panel/SearchIndicator.qml:27
145+msgid "Search"
146+msgstr "گەڕان"
147+
148+#: plugins/Unity/Launcher/launcheritem.cpp:43
149+#: plugins/Unity/Launcher/launcheritem.cpp:73
150+msgid "Lock to Launcher"
151+msgstr "چەسباندن بە لانچرەوە"
152+
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
154+msgid "Unlock from Launcher"
155+msgstr "ھەڵکەندن لە لانچر"
156+
157+#: Shell.qml:439
158+#, qt-format
159+msgid "Please enter %1"
160+msgstr "تکایە %1 بنووسە"
po/da.ponew file+158
@@ -0,0 +1,158 @@
1+# Danish translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-14 20:16+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Danish <da@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+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-01-15 06:35+0000\n"
19+"X-Generator: Launchpad (build 16890)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr ""
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr ""
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr ""
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr ""
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr ""
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr ""
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr ""
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr ""
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr ""
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr ""
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr ""
66+
67+#: Components/PageHeader.qml:364
68+msgid "Recent searches"
69+msgstr ""
70+
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
75+#. TRANSLATORS: Number of persons who rated this app/video/whatever
76+#: Dash/Previews/Header.qml:93
77+#, qt-format
78+msgid "(%1)"
79+msgstr ""
80+
81+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82+#: Dash/Previews/Header.qml:105
83+#, qt-format
84+msgid "%1 review"
85+msgid_plural "%1 reviews"
86+msgstr[0] ""
87+msgstr[1] ""
88+
89+#: Dash/Previews/Reviews.qml:74
90+msgid "Add a review"
91+msgstr ""
92+
93+#: Dash/Previews/Reviews.qml:86
94+msgid "Review"
95+msgstr ""
96+
97+#: Dash/Previews/Reviews.qml:121
98+msgid "Send"
99+msgstr ""
100+
101+#: Dash/Previews/Reviews.qml:139
102+msgid "Comments:"
103+msgstr ""
104+
105+#: Greeter/Lockscreen.qml:149
106+msgid "Emergency Call"
107+msgstr ""
108+
109+#: Greeter/PassphraseLockscreen.qml:59
110+#, qt-format
111+msgid "Hello %1"
112+msgstr ""
113+
114+#: Greeter/PassphraseLockscreen.qml:59
115+msgid "Hello"
116+msgstr ""
117+
118+#: Hud/HudParametrizedActionsPage.qml:132
119+msgid "Confirm"
120+msgstr ""
121+
122+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
123+msgid "Type or say a command"
124+msgstr ""
125+
126+#: Hud/Hud.qml:84
127+msgid "Loading. Please Wait..."
128+msgstr ""
129+
130+#: Hud/Hud.qml:89
131+msgid "Speak Now..."
132+msgstr ""
133+
134+#: Hud/Hud.qml:94
135+msgid "Speaking..."
136+msgstr ""
137+
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
142+#: Panel/SearchIndicator.qml:27
143+msgid "Search"
144+msgstr ""
145+
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
150+
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
153+msgstr ""
154+
155+#: Shell.qml:439
156+#, qt-format
157+msgid "Please enter %1"
158+msgstr ""
po/de.po+8−8
@@ -8,19 +8,19 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-18 12:26+0000\n"
12−"Last-Translator: Phillip Sz <Unknown>\n"
11+"PO-Revision-Date: 2014-01-15 11:01+0000\n"
12+"Last-Translator: Dennis Baudys <Unknown>\n"
1313"Language-Team: German <de@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-16 06:09+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
23−msgstr "Überspringe Einführung"
23+msgstr "Einführung überspringen"
2424
2525#: Components/EdgeDemo.qml:112
2626msgid "Right edge"
@@ -125,7 +125,7 @@ msgstr "Bestätigen"
125125
126126#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
127127msgid "Type or say a command"
128−msgstr "Geben Sie einen Befehl ein oder sprechen Sie ihn"
128+msgstr "Befehl eingeben oder sprechen"
129129
130130#: Hud/Hud.qml:84
131131msgid "Loading. Please Wait..."
@@ -137,11 +137,11 @@ msgstr "Sprechen Sie jetzt …"
137137
138138#: Hud/Hud.qml:94
139139msgid "Speaking..."
140−msgstr "Sie sprechen …"
140+msgstr "Sprechen Sie …"
141141
142142#: Notifications/NotificationMenuItemFactory.qml:89
143143msgid "Show password"
144−msgstr ""
144+msgstr "Passwort anzeigen"
145145
146146#: Panel/SearchIndicator.qml:27
147147msgid "Search"
po/el.po+32−28
@@ -8,61 +8,65 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-06-27 00:53+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
11+"PO-Revision-Date: 2014-01-15 16:34+0000\n"
12+"Last-Translator: Filippos Kolyvas <Unknown>\n"
1313"Language-Team: Greek <el@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-16 06:09+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
23−msgstr ""
23+msgstr "Παράλειψη εισαγωγής"
2424
2525#: Components/EdgeDemo.qml:112
2626msgid "Right edge"
27−msgstr ""
27+msgstr "Δεξί άκρο"
2828
2929#: Components/EdgeDemo.qml:113
3030msgid "Try swiping from the right edge to unlock the phone"
31−msgstr ""
31+msgstr "Σύρετε από το δεξί άκρο για ξεκλείδωμα του τηλεφώνου"
3232
3333#: Components/EdgeDemo.qml:144
3434msgid "Top edge"
35−msgstr ""
35+msgstr "Πάνω άκρο"
3636
3737#: Components/EdgeDemo.qml:145
3838msgid "Try swiping from the top edge to access the indicators"
39−msgstr ""
39+msgstr "Σύρετε από το πάνω άκρο για πρόσβαση στις ρυθμίσεις"
4040
4141#: Components/EdgeDemo.qml:170
4242msgid "Close"
43−msgstr ""
43+msgstr "Κλείσιμο"
4444
4545#: Components/EdgeDemo.qml:171
4646msgid "Swipe up again to close the settings screen"
47−msgstr ""
47+msgstr "Σύρετε προς τα επάνω για κλείσιμο των ρυθμίσεων"
4848
4949#: Components/EdgeDemo.qml:198
5050msgid "Left edge"
51−msgstr ""
51+msgstr "Αριστερό άκρο"
5252
5353#: Components/EdgeDemo.qml:199
5454msgid "Swipe from the left to reveal the launcher for quick access to apps"
5555msgstr ""
56+"Σύρετε από τα αριστερό άκρο για εμφάνιση του εκκινητή για άμεση πρόσβαση "
57+"στις εφαρμογές"
5658
5759#: Components/EdgeDemo.qml:226
5860msgid "Well done"
59−msgstr ""
61+msgstr "Συγχαρητήρια"
6062
6163#: Components/EdgeDemo.qml:227
6264msgid ""
6365"You have now mastered the edge gestures and can start using the "
6466"phone<br><br>Tap anywhere to start"
6567msgstr ""
68+"Τώρα γνωρίζετε τις χειρονομίες άκρων και μπορείτε να αρχίσετε να "
69+"χρησιμοποιείτε το τηλέφωνο<br><br>Πατήστε οπουδήποτε για να ξεκινήσετε"
6670
6771#: Components/PageHeader.qml:364
6872msgid "Recent searches"
@@ -70,50 +74,50 @@ msgstr "Πρόσφατες αναζητήσεις"
7074
7175#: Dash/Apps/AppPreview.qml:135
7276msgid "Rate this"
73−msgstr ""
77+msgstr "Βαθμολογήστε το"
7478
7579#. TRANSLATORS: Number of persons who rated this app/video/whatever
7680#: Dash/Previews/Header.qml:93
7781#, qt-format
7882msgid "(%1)"
79−msgstr ""
83+msgstr "(%1)"
8084
8185#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
8286#: Dash/Previews/Header.qml:105
8387#, qt-format
8488msgid "%1 review"
8589msgid_plural "%1 reviews"
86−msgstr[0] ""
87−msgstr[1] ""
90+msgstr[0] "%1 αξιολόγηση"
91+msgstr[1] "%1 αξιολογήσεις"
8892
8993#: Dash/Previews/Reviews.qml:74
9094msgid "Add a review"
91−msgstr ""
95+msgstr "Προσθέστε την αξιολόγησή σας"
9296
9397#: Dash/Previews/Reviews.qml:86
9498msgid "Review"
95−msgstr ""
99+msgstr "Αξιολόγηση"
96100
97101#: Dash/Previews/Reviews.qml:121
98102msgid "Send"
99−msgstr ""
103+msgstr "Αποστολή"
100104
101105#: Dash/Previews/Reviews.qml:139
102106msgid "Comments:"
103−msgstr ""
107+msgstr "Σχόλια:"
104108
105109#: Greeter/Lockscreen.qml:149
106110msgid "Emergency Call"
107−msgstr ""
111+msgstr "Κλήση έκτακτης ανάγκης"
108112
109113#: Greeter/PassphraseLockscreen.qml:59
110114#, qt-format
111115msgid "Hello %1"
112−msgstr ""
116+msgstr "Γεια σας %1"
113117
114118#: Greeter/PassphraseLockscreen.qml:59
115119msgid "Hello"
116−msgstr ""
120+msgstr "Γεια σας"
117121
118122#: Hud/HudParametrizedActionsPage.qml:132
119123msgid "Confirm"
@@ -137,7 +141,7 @@ msgstr "Ομιλία..."
137141
138142#: Notifications/NotificationMenuItemFactory.qml:89
139143msgid "Show password"
140−msgstr ""
144+msgstr "Εμφάνιση κωδικού"
141145
142146#: Panel/SearchIndicator.qml:27
143147msgid "Search"
@@ -146,13 +150,13 @@ msgstr "Αναζήτηση"
146150#: plugins/Unity/Launcher/launcheritem.cpp:43
147151#: plugins/Unity/Launcher/launcheritem.cpp:73
148152msgid "Lock to Launcher"
149−msgstr ""
153+msgstr "Διατήρηση στον εκκινητή"
150154
151155#: plugins/Unity/Launcher/launcheritem.cpp:73
152156msgid "Unlock from Launcher"
153−msgstr ""
157+msgstr "Απομάκρυνση από τον εκκινητή"
154158
155159#: Shell.qml:439
156160#, qt-format
157161msgid "Please enter %1"
158−msgstr ""
162+msgstr "Πληκτρολογήστε %1"
po/en_GB.po+28−26
@@ -8,61 +8,63 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-06-27 08:53+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
11+"PO-Revision-Date: 2014-01-14 20:46+0000\n"
12+"Last-Translator: Dan Bishop <dan@danbishop.org>\n"
1313"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-15 06:35+0000\n"
19+"X-Generator: Launchpad (build 16890)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
23−msgstr ""
23+msgstr "Skip intro"
2424
2525#: Components/EdgeDemo.qml:112
2626msgid "Right edge"
27−msgstr ""
27+msgstr "Right edge"
2828
2929#: Components/EdgeDemo.qml:113
3030msgid "Try swiping from the right edge to unlock the phone"
31−msgstr ""
31+msgstr "Try swiping from the right edge to unlock the phone"
3232
3333#: Components/EdgeDemo.qml:144
3434msgid "Top edge"
35−msgstr ""
35+msgstr "Top edge"
3636
3737#: Components/EdgeDemo.qml:145
3838msgid "Try swiping from the top edge to access the indicators"
39−msgstr ""
39+msgstr "Try swiping from the top edge to access the indicators"
4040
4141#: Components/EdgeDemo.qml:170
4242msgid "Close"
43−msgstr ""
43+msgstr "Close"
4444
4545#: Components/EdgeDemo.qml:171
4646msgid "Swipe up again to close the settings screen"
47−msgstr ""
47+msgstr "Swipe up again to close the settings screen"
4848
4949#: Components/EdgeDemo.qml:198
5050msgid "Left edge"
51−msgstr ""
51+msgstr "Left edge"
5252
5353#: Components/EdgeDemo.qml:199
5454msgid "Swipe from the left to reveal the launcher for quick access to apps"
55−msgstr ""
55+msgstr "Swipe from the left to reveal the launcher for quick access to apps"
5656
5757#: Components/EdgeDemo.qml:226
5858msgid "Well done"
59−msgstr ""
59+msgstr "Well done"
6060
6161#: Components/EdgeDemo.qml:227
6262msgid ""
6363"You have now mastered the edge gestures and can start using the "
6464"phone<br><br>Tap anywhere to start"
6565msgstr ""
66+"You have now mastered the edge gestures and can start using the "
67+"phone<br><br>Tap anywhere to start"
6668
6769#: Components/PageHeader.qml:364
6870msgid "Recent searches"
@@ -70,41 +72,41 @@ msgstr "Recent searches"
7072
7173#: Dash/Apps/AppPreview.qml:135
7274msgid "Rate this"
73−msgstr ""
75+msgstr "Rate this"
7476
7577#. TRANSLATORS: Number of persons who rated this app/video/whatever
7678#: Dash/Previews/Header.qml:93
7779#, qt-format
7880msgid "(%1)"
79−msgstr ""
81+msgstr "(%1)"
8082
8183#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
8284#: Dash/Previews/Header.qml:105
8385#, qt-format
8486msgid "%1 review"
8587msgid_plural "%1 reviews"
86−msgstr[0] ""
87−msgstr[1] ""
88+msgstr[0] "%1 review"
89+msgstr[1] "%1 reviews"
8890
8991#: Dash/Previews/Reviews.qml:74
9092msgid "Add a review"
91−msgstr ""
93+msgstr "Add a review"
9294
9395#: Dash/Previews/Reviews.qml:86
9496msgid "Review"
95−msgstr ""
97+msgstr "Review"
9698
9799#: Dash/Previews/Reviews.qml:121
98100msgid "Send"
99−msgstr ""
101+msgstr "Send"
100102
101103#: Dash/Previews/Reviews.qml:139
102104msgid "Comments:"
103−msgstr ""
105+msgstr "Comments:"
104106
105107#: Greeter/Lockscreen.qml:149
106108msgid "Emergency Call"
107−msgstr ""
109+msgstr "Emergency Call"
108110
109111#: Greeter/PassphraseLockscreen.qml:59
110112#, qt-format
@@ -137,7 +139,7 @@ msgstr "Speaking..."
137139
138140#: Notifications/NotificationMenuItemFactory.qml:89
139141msgid "Show password"
140−msgstr ""
142+msgstr "Show password"
141143
142144#: Panel/SearchIndicator.qml:27
143145msgid "Search"
@@ -146,11 +148,11 @@ msgstr "Search"
146148#: plugins/Unity/Launcher/launcheritem.cpp:43
147149#: plugins/Unity/Launcher/launcheritem.cpp:73
148150msgid "Lock to Launcher"
149−msgstr ""
151+msgstr "Lock to Launcher"
150152
151153#: plugins/Unity/Launcher/launcheritem.cpp:73
152154msgid "Unlock from Launcher"
153−msgstr ""
155+msgstr "Unlock from Launcher"
154156
155157#: Shell.qml:439
156158#, qt-format
po/es.po+7−6
@@ -8,15 +8,15 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-11-20 08:46+0000\n"
12−"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
11+"PO-Revision-Date: 2014-01-15 18:49+0000\n"
12+"Last-Translator: Paco Molinero <paco@byasl.com>\n"
1313"Language-Team: Spanish <es@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-16 06:09+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
@@ -36,7 +36,8 @@ msgstr "Borde superior"
3636
3737#: Components/EdgeDemo.qml:145
3838msgid "Try swiping from the top edge to access the indicators"
39−msgstr "Deslice el dedo desde el borde superior para acceder a los menús"
39+msgstr ""
40+"Deslice el dedo desde el borde superior para acceder a los indicadores"
4041
4142#: Components/EdgeDemo.qml:170
4243msgid "Close"
@@ -113,7 +114,7 @@ msgstr "Llamada de emergencia"
113114#: Greeter/PassphraseLockscreen.qml:59
114115#, qt-format
115116msgid "Hello %1"
116−msgstr "Hola %1"
117+msgstr "Hola, %1"
117118
118119#: Greeter/PassphraseLockscreen.qml:59
119120msgid "Hello"
po/eu.ponew file+160
@@ -0,0 +1,160 @@
1+# Basque translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-18 12:16+0000\n"
12+"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
13+"Language-Team: Basque <eu@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+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-01-19 06:02+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr "Saltatu aurkezpena"
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr "Eskuineko ertza"
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr "Probatu eskuineko ertzetik irristatzen telefonoa desblokeatzeko"
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr "Goiko ertza"
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr "Probatu goiko ertzetik irristatzen adierazleak ikusteko"
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr "Itxi"
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr "Irristatu gora berriro ezarpenen leihoa ixteko"
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr "Ezkerreko ertza"
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr ""
56+"Irristatu ezkerretik abiarazlea erakutsi eta aplikazioak eskura berehala "
57+"izateko"
58+
59+#: Components/EdgeDemo.qml:226
60+msgid "Well done"
61+msgstr "Bikain"
62+
63+#: Components/EdgeDemo.qml:227
64+msgid ""
65+"You have now mastered the edge gestures and can start using the "
66+"phone<br><br>Tap anywhere to start"
67+msgstr ""
68+
69+#: Components/PageHeader.qml:364
70+msgid "Recent searches"
71+msgstr ""
72+
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr ""
76+
77+#. TRANSLATORS: Number of persons who rated this app/video/whatever
78+#: Dash/Previews/Header.qml:93
79+#, qt-format
80+msgid "(%1)"
81+msgstr ""
82+
83+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
84+#: Dash/Previews/Header.qml:105
85+#, qt-format
86+msgid "%1 review"
87+msgid_plural "%1 reviews"
88+msgstr[0] ""
89+msgstr[1] ""
90+
91+#: Dash/Previews/Reviews.qml:74
92+msgid "Add a review"
93+msgstr ""
94+
95+#: Dash/Previews/Reviews.qml:86
96+msgid "Review"
97+msgstr ""
98+
99+#: Dash/Previews/Reviews.qml:121
100+msgid "Send"
101+msgstr ""
102+
103+#: Dash/Previews/Reviews.qml:139
104+msgid "Comments:"
105+msgstr ""
106+
107+#: Greeter/Lockscreen.qml:149
108+msgid "Emergency Call"
109+msgstr ""
110+
111+#: Greeter/PassphraseLockscreen.qml:59
112+#, qt-format
113+msgid "Hello %1"
114+msgstr ""
115+
116+#: Greeter/PassphraseLockscreen.qml:59
117+msgid "Hello"
118+msgstr ""
119+
120+#: Hud/HudParametrizedActionsPage.qml:132
121+msgid "Confirm"
122+msgstr ""
123+
124+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
125+msgid "Type or say a command"
126+msgstr ""
127+
128+#: Hud/Hud.qml:84
129+msgid "Loading. Please Wait..."
130+msgstr ""
131+
132+#: Hud/Hud.qml:89
133+msgid "Speak Now..."
134+msgstr ""
135+
136+#: Hud/Hud.qml:94
137+msgid "Speaking..."
138+msgstr ""
139+
140+#: Notifications/NotificationMenuItemFactory.qml:89
141+msgid "Show password"
142+msgstr ""
143+
144+#: Panel/SearchIndicator.qml:27
145+msgid "Search"
146+msgstr ""
147+
148+#: plugins/Unity/Launcher/launcheritem.cpp:43
149+#: plugins/Unity/Launcher/launcheritem.cpp:73
150+msgid "Lock to Launcher"
151+msgstr ""
152+
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
154+msgid "Unlock from Launcher"
155+msgstr ""
156+
157+#: Shell.qml:439
158+#, qt-format
159+msgid "Please enter %1"
160+msgstr ""
po/fo.po+5−5
@@ -8,15 +8,15 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-01 15:13+0000\n"
11+"PO-Revision-Date: 2014-01-14 20:08+0000\n"
1212"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
1313"Language-Team: Faroese <fo@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-15 06:35+0000\n"
19+"X-Generator: Launchpad (build 16890)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
@@ -24,7 +24,7 @@ msgstr ""
2424
2525#: Components/EdgeDemo.qml:112
2626msgid "Right edge"
27−msgstr ""
27+msgstr "Høgra kant"
2828
2929#: Components/EdgeDemo.qml:113
3030msgid "Try swiping from the right edge to unlock the phone"
@@ -32,7 +32,7 @@ msgstr ""
3232
3333#: Components/EdgeDemo.qml:144
3434msgid "Top edge"
35−msgstr ""
35+msgstr "Topp kantur"
3636
3737#: Components/EdgeDemo.qml:145
3838msgid "Try swiping from the top edge to access the indicators"
po/fr.po+29−29
@@ -8,23 +8,23 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-06-27 03:21+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
11+"PO-Revision-Date: 2014-01-28 00:34+0000\n"
12+"Last-Translator: Pierre <Unknown>\n"
1313"Language-Team: French <fr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-28 07:06+0000\n"
19+"X-Generator: Launchpad (build 16914)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
23−msgstr ""
23+msgstr "Passer l'intro"
2424
2525#: Components/EdgeDemo.qml:112
2626msgid "Right edge"
27−msgstr ""
27+msgstr "Bord droit"
2828
2929#: Components/EdgeDemo.qml:113
3030msgid "Try swiping from the right edge to unlock the phone"
@@ -32,7 +32,7 @@ msgstr ""
3232
3333#: Components/EdgeDemo.qml:144
3434msgid "Top edge"
35−msgstr ""
35+msgstr "Bord supérieur"
3636
3737#: Components/EdgeDemo.qml:145
3838msgid "Try swiping from the top edge to access the indicators"
@@ -40,7 +40,7 @@ msgstr ""
4040
4141#: Components/EdgeDemo.qml:170
4242msgid "Close"
43−msgstr ""
43+msgstr "Fermer"
4444
4545#: Components/EdgeDemo.qml:171
4646msgid "Swipe up again to close the settings screen"
@@ -48,7 +48,7 @@ msgstr ""
4848
4949#: Components/EdgeDemo.qml:198
5050msgid "Left edge"
51−msgstr ""
51+msgstr "Bord gauche"
5252
5353#: Components/EdgeDemo.qml:199
5454msgid "Swipe from the left to reveal the launcher for quick access to apps"
@@ -66,70 +66,70 @@ msgstr ""
6666
6767#: Components/PageHeader.qml:364
6868msgid "Recent searches"
69−msgstr ""
69+msgstr "Recherches récentes"
7070
7171#: Dash/Apps/AppPreview.qml:135
7272msgid "Rate this"
73−msgstr ""
73+msgstr "Evaluez ceci"
7474
7575#. TRANSLATORS: Number of persons who rated this app/video/whatever
7676#: Dash/Previews/Header.qml:93
7777#, qt-format
7878msgid "(%1)"
79−msgstr ""
79+msgstr "(%1)"
8080
8181#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
8282#: Dash/Previews/Header.qml:105
8383#, qt-format
8484msgid "%1 review"
8585msgid_plural "%1 reviews"
86−msgstr[0] ""
87−msgstr[1] ""
86+msgstr[0] "%1 avis"
87+msgstr[1] "%1 avis"
8888
8989#: Dash/Previews/Reviews.qml:74
9090msgid "Add a review"
91−msgstr ""
91+msgstr "Ajouter un avis"
9292
9393#: Dash/Previews/Reviews.qml:86
9494msgid "Review"
95−msgstr ""
95+msgstr "Avis"
9696
9797#: Dash/Previews/Reviews.qml:121
9898msgid "Send"
99−msgstr ""
99+msgstr "Envoyer"
100100
101101#: Dash/Previews/Reviews.qml:139
102102msgid "Comments:"
103−msgstr ""
103+msgstr "Commentaires :"
104104
105105#: Greeter/Lockscreen.qml:149
106106msgid "Emergency Call"
107−msgstr ""
107+msgstr "Appel d'urgence"
108108
109109#: Greeter/PassphraseLockscreen.qml:59
110110#, qt-format
111111msgid "Hello %1"
112−msgstr ""
112+msgstr "Bonjour %1"
113113
114114#: Greeter/PassphraseLockscreen.qml:59
115115msgid "Hello"
116−msgstr ""
116+msgstr "Bonjour"
117117
118118#: Hud/HudParametrizedActionsPage.qml:132
119119msgid "Confirm"
120−msgstr ""
120+msgstr "Confirmez"
121121
122122#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
123123msgid "Type or say a command"
124−msgstr ""
124+msgstr "Rédigez ou dictez une commande"
125125
126126#: Hud/Hud.qml:84
127127msgid "Loading. Please Wait..."
128−msgstr ""
128+msgstr "Chargement. Veuillez patienter…"
129129
130130#: Hud/Hud.qml:89
131131msgid "Speak Now..."
132−msgstr ""
132+msgstr "Parlez maintenant…"
133133
134134#: Hud/Hud.qml:94
135135msgid "Speaking..."
@@ -137,16 +137,16 @@ msgstr ""
137137
138138#: Notifications/NotificationMenuItemFactory.qml:89
139139msgid "Show password"
140−msgstr ""
140+msgstr "Afficher le mot de passe"
141141
142142#: Panel/SearchIndicator.qml:27
143143msgid "Search"
144−msgstr ""
144+msgstr "Rechercher"
145145
146146#: plugins/Unity/Launcher/launcheritem.cpp:43
147147#: plugins/Unity/Launcher/launcheritem.cpp:73
148148msgid "Lock to Launcher"
149−msgstr ""
149+msgstr "Conserver dans le lanceur"
150150
151151#: plugins/Unity/Launcher/launcheritem.cpp:73
152152msgid "Unlock from Launcher"
@@ -155,4 +155,4 @@ msgstr ""
155155#: Shell.qml:439
156156#, qt-format
157157msgid "Please enter %1"
158−msgstr ""
158+msgstr "Veuillez saisir %1"
po/hi.ponew file+158
@@ -0,0 +1,158 @@
1+# Hindi translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-15 01:49+0000\n"
12+"Last-Translator: Siddhanathan S. <Unknown>\n"
13+"Language-Team: Hindi <hi@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+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-01-16 06:09+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr "परिचय छोड़"
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr "दायाँ किनारा"
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr ""
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr "ऊपर किनारे"
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr ""
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr "बंद करें"
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr ""
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr "बायाँ किनारा"
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr ""
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr "शाबाश"
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr ""
66+
67+#: Components/PageHeader.qml:364
68+msgid "Recent searches"
69+msgstr "पिछले खोजों"
70+
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
75+#. TRANSLATORS: Number of persons who rated this app/video/whatever
76+#: Dash/Previews/Header.qml:93
77+#, qt-format
78+msgid "(%1)"
79+msgstr ""
80+
81+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82+#: Dash/Previews/Header.qml:105
83+#, qt-format
84+msgid "%1 review"
85+msgid_plural "%1 reviews"
86+msgstr[0] ""
87+msgstr[1] ""
88+
89+#: Dash/Previews/Reviews.qml:74
90+msgid "Add a review"
91+msgstr "समीक्षा दे"
92+
93+#: Dash/Previews/Reviews.qml:86
94+msgid "Review"
95+msgstr "समीक्षा"
96+
97+#: Dash/Previews/Reviews.qml:121
98+msgid "Send"
99+msgstr "भेजें"
100+
101+#: Dash/Previews/Reviews.qml:139
102+msgid "Comments:"
103+msgstr ""
104+
105+#: Greeter/Lockscreen.qml:149
106+msgid "Emergency Call"
107+msgstr "आपातकालीन कॉल"
108+
109+#: Greeter/PassphraseLockscreen.qml:59
110+#, qt-format
111+msgid "Hello %1"
112+msgstr ""
113+
114+#: Greeter/PassphraseLockscreen.qml:59
115+msgid "Hello"
116+msgstr "नमस्ते"
117+
118+#: Hud/HudParametrizedActionsPage.qml:132
119+msgid "Confirm"
120+msgstr ""
121+
122+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
123+msgid "Type or say a command"
124+msgstr ""
125+
126+#: Hud/Hud.qml:84
127+msgid "Loading. Please Wait..."
128+msgstr "काम कर रहा है | कृपया प्रतीक्षा करे |"
129+
130+#: Hud/Hud.qml:89
131+msgid "Speak Now..."
132+msgstr "अब बात करें"
133+
134+#: Hud/Hud.qml:94
135+msgid "Speaking..."
136+msgstr "अब बोल रहे हैं"
137+
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
142+#: Panel/SearchIndicator.qml:27
143+msgid "Search"
144+msgstr "खोजें"
145+
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
150+
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
153+msgstr ""
154+
155+#: Shell.qml:439
156+#, qt-format
157+msgid "Please enter %1"
158+msgstr ""
po/hu.po+5−5
@@ -8,15 +8,15 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2014-01-07 18:02+0000\n"
12−"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
11+"PO-Revision-Date: 2014-01-14 23:02+0000\n"
12+"Last-Translator: Kristóf Kiszel <Unknown>\n"
1313"Language-Team: Hungarian <hu@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2014-01-08 05:43+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-15 06:35+0000\n"
19+"X-Generator: Launchpad (build 16890)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
@@ -133,7 +133,7 @@ msgstr "Betöltés, kis türelmet…"
133133
134134#: Hud/Hud.qml:89
135135msgid "Speak Now..."
136−msgstr "Beszéljen most…"
136+msgstr "Most beszéljen…"
137137
138138#: Hud/Hud.qml:94
139139msgid "Speaking..."
po/it.po+7−7
@@ -8,15 +8,15 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-07 09:34+0000\n"
12−"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
11+"PO-Revision-Date: 2014-01-22 09:15+0000\n"
12+"Last-Translator: Domenico <domenico.verde125@live.it>\n"
1313"Language-Team: Italian <it@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-23 06:00+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
@@ -144,7 +144,7 @@ msgstr "Sto parlando..."
144144
145145#: Notifications/NotificationMenuItemFactory.qml:89
146146msgid "Show password"
147−msgstr ""
147+msgstr "Mostra password"
148148
149149#: Panel/SearchIndicator.qml:27
150150msgid "Search"
@@ -153,11 +153,11 @@ msgstr "Cerca"
153153#: plugins/Unity/Launcher/launcheritem.cpp:43
154154#: plugins/Unity/Launcher/launcheritem.cpp:73
155155msgid "Lock to Launcher"
156−msgstr ""
156+msgstr "Blocca nel Launcher"
157157
158158#: plugins/Unity/Launcher/launcheritem.cpp:73
159159msgid "Unlock from Launcher"
160−msgstr ""
160+msgstr "Sblocca dal Launcher"
161161
162162#: Shell.qml:439
163163#, qt-format
po/ja.po+20−20
@@ -8,15 +8,15 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-06-26 22:36+0000\n"
12−"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
11+"PO-Revision-Date: 2014-01-18 07:01+0000\n"
12+"Last-Translator: Shushi Kurose <md81bird@hitaki.net>\n"
1313"Language-Team: Japanese <ja@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-19 06:02+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
@@ -24,7 +24,7 @@ msgstr ""
2424
2525#: Components/EdgeDemo.qml:112
2626msgid "Right edge"
27−msgstr ""
27+msgstr "右端"
2828
2929#: Components/EdgeDemo.qml:113
3030msgid "Try swiping from the right edge to unlock the phone"
@@ -32,7 +32,7 @@ msgstr ""
3232
3333#: Components/EdgeDemo.qml:144
3434msgid "Top edge"
35−msgstr ""
35+msgstr "上端"
3636
3737#: Components/EdgeDemo.qml:145
3838msgid "Try swiping from the top edge to access the indicators"
@@ -40,7 +40,7 @@ msgstr ""
4040
4141#: Components/EdgeDemo.qml:170
4242msgid "Close"
43−msgstr ""
43+msgstr "閉じる"
4444
4545#: Components/EdgeDemo.qml:171
4646msgid "Swipe up again to close the settings screen"
@@ -48,7 +48,7 @@ msgstr ""
4848
4949#: Components/EdgeDemo.qml:198
5050msgid "Left edge"
51−msgstr ""
51+msgstr "左端"
5252
5353#: Components/EdgeDemo.qml:199
5454msgid "Swipe from the left to reveal the launcher for quick access to apps"
@@ -66,7 +66,7 @@ msgstr ""
6666
6767#: Components/PageHeader.qml:364
6868msgid "Recent searches"
69−msgstr ""
69+msgstr "最近の検索"
7070
7171#: Dash/Apps/AppPreview.qml:135
7272msgid "Rate this"
@@ -76,7 +76,7 @@ msgstr ""
7676#: Dash/Previews/Header.qml:93
7777#, qt-format
7878msgid "(%1)"
79−msgstr ""
79+msgstr "(%1)"
8080
8181#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
8282#: Dash/Previews/Header.qml:105
@@ -96,11 +96,11 @@ msgstr ""
9696
9797#: Dash/Previews/Reviews.qml:121
9898msgid "Send"
99−msgstr ""
99+msgstr "送信"
100100
101101#: Dash/Previews/Reviews.qml:139
102102msgid "Comments:"
103−msgstr ""
103+msgstr "コメント:"
104104
105105#: Greeter/Lockscreen.qml:149
106106msgid "Emergency Call"
@@ -113,11 +113,11 @@ msgstr ""
113113
114114#: Greeter/PassphraseLockscreen.qml:59
115115msgid "Hello"
116−msgstr ""
116+msgstr "こんにちは"
117117
118118#: Hud/HudParametrizedActionsPage.qml:132
119119msgid "Confirm"
120−msgstr ""
120+msgstr "確認"
121121
122122#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
123123msgid "Type or say a command"
@@ -125,11 +125,11 @@ msgstr ""
125125
126126#: Hud/Hud.qml:84
127127msgid "Loading. Please Wait..."
128−msgstr ""
128+msgstr "読み込み中です。お待ちください..."
129129
130130#: Hud/Hud.qml:89
131131msgid "Speak Now..."
132−msgstr ""
132+msgstr "音声入力を開始..."
133133
134134#: Hud/Hud.qml:94
135135msgid "Speaking..."
@@ -137,20 +137,20 @@ msgstr ""
137137
138138#: Notifications/NotificationMenuItemFactory.qml:89
139139msgid "Show password"
140−msgstr ""
140+msgstr "パスワードを表示"
141141
142142#: Panel/SearchIndicator.qml:27
143143msgid "Search"
144−msgstr ""
144+msgstr "検索"
145145
146146#: plugins/Unity/Launcher/launcheritem.cpp:43
147147#: plugins/Unity/Launcher/launcheritem.cpp:73
148148msgid "Lock to Launcher"
149−msgstr ""
149+msgstr "Launcherに登録"
150150
151151#: plugins/Unity/Launcher/launcheritem.cpp:73
152152msgid "Unlock from Launcher"
153−msgstr ""
153+msgstr "Launcherへの登録を解除"
154154
155155#: Shell.qml:439
156156#, qt-format
po/lt.ponew file+165
@@ -0,0 +1,165 @@
1+# Lithuanian translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-15 12:42+0000\n"
12+"Last-Translator: Gediminas Paulauskas <menesis@pov.lt>\n"
13+"Language-Team: Lithuanian <lt@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+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18+"(n%100<10 || n%100>=20) ? 1 : 2;\n"
19+"X-Launchpad-Export-Date: 2014-01-16 06:09+0000\n"
20+"X-Generator: Launchpad (build 16901)\n"
21+
22+#: Components/EdgeDemoOverlay.qml:151
23+msgid "Skip intro"
24+msgstr "Praleisti įžangą"
25+
26+#: Components/EdgeDemo.qml:112
27+msgid "Right edge"
28+msgstr "Dešinysis kraštas"
29+
30+#: Components/EdgeDemo.qml:113
31+msgid "Try swiping from the right edge to unlock the phone"
32+msgstr "Pabandykite braukti nuo dešiniojo krašto, kad atrakintumėte telefoną"
33+
34+#: Components/EdgeDemo.qml:144
35+msgid "Top edge"
36+msgstr "Viršutinis kraštas"
37+
38+#: Components/EdgeDemo.qml:145
39+msgid "Try swiping from the top edge to access the indicators"
40+msgstr ""
41+"Pabandykite braukti nuo dešiniojo krašto, kad pasiektumėte indikatorius"
42+
43+#: Components/EdgeDemo.qml:170
44+msgid "Close"
45+msgstr "Užverti"
46+
47+#: Components/EdgeDemo.qml:171
48+msgid "Swipe up again to close the settings screen"
49+msgstr "Braukite aukštyn, kad užvertumėte nustatymų langą"
50+
51+#: Components/EdgeDemo.qml:198
52+msgid "Left edge"
53+msgstr "Kairysis kraštas"
54+
55+#: Components/EdgeDemo.qml:199
56+msgid "Swipe from the left to reveal the launcher for quick access to apps"
57+msgstr ""
58+"Braukite nuo kairiojo krašto, kad pamatytumėte skydelį greitam programų "
59+"paleidimui"
60+
61+#: Components/EdgeDemo.qml:226
62+msgid "Well done"
63+msgstr "Šaunu"
64+
65+#: Components/EdgeDemo.qml:227
66+msgid ""
67+"You have now mastered the edge gestures and can start using the "
68+"phone<br><br>Tap anywhere to start"
69+msgstr ""
70+"Jūs išmokote kraštų gestus, ir galite pradėti naudotis "
71+"telefonu.<br><br>Palieskite bet kur ir pradėkite"
72+
73+#: Components/PageHeader.qml:364
74+msgid "Recent searches"
75+msgstr "Paskiausios paieškos"
76+
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr "Įvertinkite tai"
80+
81+#. TRANSLATORS: Number of persons who rated this app/video/whatever
82+#: Dash/Previews/Header.qml:93
83+#, qt-format
84+msgid "(%1)"
85+msgstr "(%1)"
86+
87+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
88+#: Dash/Previews/Header.qml:105
89+#, qt-format
90+msgid "%1 review"
91+msgid_plural "%1 reviews"
92+msgstr[0] "%1 apžvalga"
93+msgstr[1] "%1 apžvalgos"
94+msgstr[2] "%1 apžvalgų"
95+
96+#: Dash/Previews/Reviews.qml:74
97+msgid "Add a review"
98+msgstr "Pridėkite apžvalgą"
99+
100+#: Dash/Previews/Reviews.qml:86
101+msgid "Review"
102+msgstr "Apžvalga"
103+
104+#: Dash/Previews/Reviews.qml:121
105+msgid "Send"
106+msgstr "Siųsti"
107+
108+#: Dash/Previews/Reviews.qml:139
109+msgid "Comments:"
110+msgstr "Komentarai:"
111+
112+#: Greeter/Lockscreen.qml:149
113+msgid "Emergency Call"
114+msgstr "Pagalbos skambutis"
115+
116+#: Greeter/PassphraseLockscreen.qml:59
117+#, qt-format
118+msgid "Hello %1"
119+msgstr "Laba diena, %1"
120+
121+#: Greeter/PassphraseLockscreen.qml:59
122+msgid "Hello"
123+msgstr "Sveiki"
124+
125+#: Hud/HudParametrizedActionsPage.qml:132
126+msgid "Confirm"
127+msgstr "Patvirtinti"
128+
129+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
130+msgid "Type or say a command"
131+msgstr "Rašykite arba sakykite komandą"
132+
133+#: Hud/Hud.qml:84
134+msgid "Loading. Please Wait..."
135+msgstr "Įkeliama. Prašom palaukti..."
136+
137+#: Hud/Hud.qml:89
138+msgid "Speak Now..."
139+msgstr "Kalbėkite..."
140+
141+#: Hud/Hud.qml:94
142+msgid "Speaking..."
143+msgstr "Kalbama..."
144+
145+#: Notifications/NotificationMenuItemFactory.qml:89
146+msgid "Show password"
147+msgstr "Rodyti slaptažodį"
148+
149+#: Panel/SearchIndicator.qml:27
150+msgid "Search"
151+msgstr "Paieška"
152+
153+#: plugins/Unity/Launcher/launcheritem.cpp:43
154+#: plugins/Unity/Launcher/launcheritem.cpp:73
155+msgid "Lock to Launcher"
156+msgstr "Palikti mygtukų juostoje"
157+
158+#: plugins/Unity/Launcher/launcheritem.cpp:73
159+msgid "Unlock from Launcher"
160+msgstr "Nelaikyti mygtukų juostoje"
161+
162+#: Shell.qml:439
163+#, qt-format
164+msgid "Please enter %1"
165+msgstr "Prašom įvesti %1"
po/mr.ponew file+158
@@ -0,0 +1,158 @@
1+# Marathi translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-14 19:54+0000\n"
12+"Last-Translator: Rohan Deshmukh <Unknown>\n"
13+"Language-Team: Marathi <mr@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+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-01-15 06:35+0000\n"
19+"X-Generator: Launchpad (build 16890)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr "परिचय वगळा"
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr "उजवा काठ"
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr "फोन अनलॉक करण्यासाठी उजव्या काठावरुन स्वाइप करण्याचा प्रयत्न करा"
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr "वरचा काठ"
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr "इंडिकेटर वापरण्याकरिता वरचा काठावरून स्वाइप करण्याचा प्रयत्न करा"
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr "बंद करा"
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr "सेटिंग्ज स्क्रीन बंद करण्यासाठी पुन्हा एकदा स्वाइप करा"
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr "डावा काठ"
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr "लाँचर वरील अॕप्प्स त्वरित वापरण्याकरिता डाव्या बाजूने स्वाइप करा"
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr "कौशल्यपूर्वक केले"
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr ""
66+
67+#: Components/PageHeader.qml:364
68+msgid "Recent searches"
69+msgstr ""
70+
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
75+#. TRANSLATORS: Number of persons who rated this app/video/whatever
76+#: Dash/Previews/Header.qml:93
77+#, qt-format
78+msgid "(%1)"
79+msgstr ""
80+
81+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82+#: Dash/Previews/Header.qml:105
83+#, qt-format
84+msgid "%1 review"
85+msgid_plural "%1 reviews"
86+msgstr[0] ""
87+msgstr[1] ""
88+
89+#: Dash/Previews/Reviews.qml:74
90+msgid "Add a review"
91+msgstr ""
92+
93+#: Dash/Previews/Reviews.qml:86
94+msgid "Review"
95+msgstr ""
96+
97+#: Dash/Previews/Reviews.qml:121
98+msgid "Send"
99+msgstr ""
100+
101+#: Dash/Previews/Reviews.qml:139
102+msgid "Comments:"
103+msgstr ""
104+
105+#: Greeter/Lockscreen.qml:149
106+msgid "Emergency Call"
107+msgstr ""
108+
109+#: Greeter/PassphraseLockscreen.qml:59
110+#, qt-format
111+msgid "Hello %1"
112+msgstr ""
113+
114+#: Greeter/PassphraseLockscreen.qml:59
115+msgid "Hello"
116+msgstr ""
117+
118+#: Hud/HudParametrizedActionsPage.qml:132
119+msgid "Confirm"
120+msgstr ""
121+
122+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
123+msgid "Type or say a command"
124+msgstr ""
125+
126+#: Hud/Hud.qml:84
127+msgid "Loading. Please Wait..."
128+msgstr ""
129+
130+#: Hud/Hud.qml:89
131+msgid "Speak Now..."
132+msgstr ""
133+
134+#: Hud/Hud.qml:94
135+msgid "Speaking..."
136+msgstr ""
137+
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
142+#: Panel/SearchIndicator.qml:27
143+msgid "Search"
144+msgstr ""
145+
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
150+
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
153+msgstr ""
154+
155+#: Shell.qml:439
156+#, qt-format
157+msgid "Please enter %1"
158+msgstr ""
po/ms.ponew file+160
@@ -0,0 +1,160 @@
1+# Malay translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-17 09:05+0000\n"
12+"Last-Translator: abuyop <Unknown>\n"
13+"Language-Team: Malay <ms@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+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-01-18 07:11+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr "Langkau pengenalan"
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr "Pinggir kanan"
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr "Cuba meleret dari pinggir kanan untuk buka aktifkan telefon"
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr "Pinggir atas"
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr "Cuba meleret dari pinggir atas untuk buka aktifkan telefon"
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr "Tutup"
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr "Leret ke atas sekali lagi untuk menutup skrin tetapan"
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr "Pinggir kiri"
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr "Leret dari kiri untuk munculkan pelancar untuk capaian pantas ke apl"
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr "Bagus"
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr ""
66+"Anda kini sudah mahir gerak isyarat pinggir dan boleh mulakan "
67+"telefon<br><br>Ketik dimana shaja untuk mula"
68+
69+#: Components/PageHeader.qml:364
70+msgid "Recent searches"
71+msgstr "Gelintar baru-baru ini"
72+
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "Kadar ini"
76+
77+#. TRANSLATORS: Number of persons who rated this app/video/whatever
78+#: Dash/Previews/Header.qml:93
79+#, qt-format
80+msgid "(%1)"
81+msgstr "(%1)"
82+
83+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
84+#: Dash/Previews/Header.qml:105
85+#, qt-format
86+msgid "%1 review"
87+msgid_plural "%1 reviews"
88+msgstr[0] "%1 ulasan"
89+msgstr[1] "%1 ulasan"
90+
91+#: Dash/Previews/Reviews.qml:74
92+msgid "Add a review"
93+msgstr "Tambah ulasan"
94+
95+#: Dash/Previews/Reviews.qml:86
96+msgid "Review"
97+msgstr "Tinjauan"
98+
99+#: Dash/Previews/Reviews.qml:121
100+msgid "Send"
101+msgstr "Hantar"
102+
103+#: Dash/Previews/Reviews.qml:139
104+msgid "Comments:"
105+msgstr "Ulasan:"
106+
107+#: Greeter/Lockscreen.qml:149
108+msgid "Emergency Call"
109+msgstr "panggilan Kecemasan"
110+
111+#: Greeter/PassphraseLockscreen.qml:59
112+#, qt-format
113+msgid "Hello %1"
114+msgstr "Hai %1"
115+
116+#: Greeter/PassphraseLockscreen.qml:59
117+msgid "Hello"
118+msgstr "Hello"
119+
120+#: Hud/HudParametrizedActionsPage.qml:132
121+msgid "Confirm"
122+msgstr "Sahkan"
123+
124+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
125+msgid "Type or say a command"
126+msgstr "Taip atau sebut satu perintah"
127+
128+#: Hud/Hud.qml:84
129+msgid "Loading. Please Wait..."
130+msgstr "Memuatkan. Tunggu Sebentar..."
131+
132+#: Hud/Hud.qml:89
133+msgid "Speak Now..."
134+msgstr "Cakap Sekarang..."
135+
136+#: Hud/Hud.qml:94
137+msgid "Speaking..."
138+msgstr "Bercakap..."
139+
140+#: Notifications/NotificationMenuItemFactory.qml:89
141+msgid "Show password"
142+msgstr "Tunjuk kata laluan"
143+
144+#: Panel/SearchIndicator.qml:27
145+msgid "Search"
146+msgstr "Gelintar"
147+
148+#: plugins/Unity/Launcher/launcheritem.cpp:43
149+#: plugins/Unity/Launcher/launcheritem.cpp:73
150+msgid "Lock to Launcher"
151+msgstr "Kunci ke Pelancar"
152+
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
154+msgid "Unlock from Launcher"
155+msgstr "Tanggalkan dari Pelancar"
156+
157+#: Shell.qml:439
158+#, qt-format
159+msgid "Please enter %1"
160+msgstr "Sila masukkan %1"
po/nl.po+29−27
@@ -8,23 +8,23 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-06-27 07:19+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
11+"PO-Revision-Date: 2014-01-15 16:42+0000\n"
12+"Last-Translator: Hannie Dumoleyn <Unknown>\n"
1313"Language-Team: Dutch <nl@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-16 06:09+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
23−msgstr ""
23+msgstr "Intro overslaan"
2424
2525#: Components/EdgeDemo.qml:112
2626msgid "Right edge"
27−msgstr ""
27+msgstr "Rechterrand"
2828
2929#: Components/EdgeDemo.qml:113
3030msgid "Try swiping from the right edge to unlock the phone"
@@ -32,7 +32,7 @@ msgstr ""
3232
3333#: Components/EdgeDemo.qml:144
3434msgid "Top edge"
35−msgstr ""
35+msgstr "Bovenrand"
3636
3737#: Components/EdgeDemo.qml:145
3838msgid "Try swiping from the top edge to access the indicators"
@@ -40,29 +40,31 @@ msgstr ""
4040
4141#: Components/EdgeDemo.qml:170
4242msgid "Close"
43−msgstr ""
43+msgstr "Sluiten"
4444
4545#: Components/EdgeDemo.qml:171
4646msgid "Swipe up again to close the settings screen"
47−msgstr ""
47+msgstr "Veeg nogmaals omhoog om het instellingenscherm te sluiten"
4848
4949#: Components/EdgeDemo.qml:198
5050msgid "Left edge"
51−msgstr ""
51+msgstr "Linkerrand"
5252
5353#: Components/EdgeDemo.qml:199
5454msgid "Swipe from the left to reveal the launcher for quick access to apps"
55−msgstr ""
55+msgstr "Veeg vanaf links om de Starter te tonen voor snelle toegang tot apps"
5656
5757#: Components/EdgeDemo.qml:226
5858msgid "Well done"
59−msgstr ""
59+msgstr "Goed gedaan"
6060
6161#: Components/EdgeDemo.qml:227
6262msgid ""
6363"You have now mastered the edge gestures and can start using the "
6464"phone<br><br>Tap anywhere to start"
6565msgstr ""
66+"Nu je het vegen onder de knie hebt, kun je de telefoon gebruiken<br><br>Tik "
67+"ergens om te beginnen"
6668
6769#: Components/PageHeader.qml:364
6870msgid "Recent searches"
@@ -70,50 +72,50 @@ msgstr "Recente zoekopdrachten"
7072
7173#: Dash/Apps/AppPreview.qml:135
7274msgid "Rate this"
73−msgstr ""
75+msgstr "Beoordeel dit"
7476
7577#. TRANSLATORS: Number of persons who rated this app/video/whatever
7678#: Dash/Previews/Header.qml:93
7779#, qt-format
7880msgid "(%1)"
79−msgstr ""
81+msgstr "(%1)"
8082
8183#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
8284#: Dash/Previews/Header.qml:105
8385#, qt-format
8486msgid "%1 review"
8587msgid_plural "%1 reviews"
86−msgstr[0] ""
87−msgstr[1] ""
88+msgstr[0] "%1 recensie"
89+msgstr[1] "%1 recensies"
8890
8991#: Dash/Previews/Reviews.qml:74
9092msgid "Add a review"
91−msgstr ""
93+msgstr "Voeg recensie toe"
9294
9395#: Dash/Previews/Reviews.qml:86
9496msgid "Review"
95−msgstr ""
97+msgstr "Recensie"
9698
9799#: Dash/Previews/Reviews.qml:121
98100msgid "Send"
99−msgstr ""
101+msgstr "Versturen"
100102
101103#: Dash/Previews/Reviews.qml:139
102104msgid "Comments:"
103−msgstr ""
105+msgstr "Reacties:"
104106
105107#: Greeter/Lockscreen.qml:149
106108msgid "Emergency Call"
107−msgstr ""
109+msgstr "Noodoproep"
108110
109111#: Greeter/PassphraseLockscreen.qml:59
110112#, qt-format
111113msgid "Hello %1"
112−msgstr ""
114+msgstr "Hallo %1"
113115
114116#: Greeter/PassphraseLockscreen.qml:59
115117msgid "Hello"
116−msgstr ""
118+msgstr "Hallo"
117119
118120#: Hud/HudParametrizedActionsPage.qml:132
119121msgid "Confirm"
@@ -137,7 +139,7 @@ msgstr "Inspreken…"
137139
138140#: Notifications/NotificationMenuItemFactory.qml:89
139141msgid "Show password"
140−msgstr ""
142+msgstr "Wachtwoord tonen"
141143
142144#: Panel/SearchIndicator.qml:27
143145msgid "Search"
@@ -146,13 +148,13 @@ msgstr "Zoeken"
146148#: plugins/Unity/Launcher/launcheritem.cpp:43
147149#: plugins/Unity/Launcher/launcheritem.cpp:73
148150msgid "Lock to Launcher"
149−msgstr ""
151+msgstr "In Starter vastzetten"
150152
151153#: plugins/Unity/Launcher/launcheritem.cpp:73
152154msgid "Unlock from Launcher"
153−msgstr ""
155+msgstr "Uit Starter verwijderen"
154156
155157#: Shell.qml:439
156158#, qt-format
157159msgid "Please enter %1"
158−msgstr ""
160+msgstr "Voer %1 in"
po/pt.ponew file+158
@@ -0,0 +1,158 @@
1+# Portuguese translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-14 19:18+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Portuguese <pt@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+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-01-15 06:35+0000\n"
19+"X-Generator: Launchpad (build 16890)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr ""
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr ""
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr ""
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr ""
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr ""
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr ""
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr ""
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr ""
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr ""
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr ""
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr ""
66+
67+#: Components/PageHeader.qml:364
68+msgid "Recent searches"
69+msgstr ""
70+
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
75+#. TRANSLATORS: Number of persons who rated this app/video/whatever
76+#: Dash/Previews/Header.qml:93
77+#, qt-format
78+msgid "(%1)"
79+msgstr ""
80+
81+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82+#: Dash/Previews/Header.qml:105
83+#, qt-format
84+msgid "%1 review"
85+msgid_plural "%1 reviews"
86+msgstr[0] ""
87+msgstr[1] ""
88+
89+#: Dash/Previews/Reviews.qml:74
90+msgid "Add a review"
91+msgstr ""
92+
93+#: Dash/Previews/Reviews.qml:86
94+msgid "Review"
95+msgstr ""
96+
97+#: Dash/Previews/Reviews.qml:121
98+msgid "Send"
99+msgstr ""
100+
101+#: Dash/Previews/Reviews.qml:139
102+msgid "Comments:"
103+msgstr ""
104+
105+#: Greeter/Lockscreen.qml:149
106+msgid "Emergency Call"
107+msgstr ""
108+
109+#: Greeter/PassphraseLockscreen.qml:59
110+#, qt-format
111+msgid "Hello %1"
112+msgstr ""
113+
114+#: Greeter/PassphraseLockscreen.qml:59
115+msgid "Hello"
116+msgstr ""
117+
118+#: Hud/HudParametrizedActionsPage.qml:132
119+msgid "Confirm"
120+msgstr ""
121+
122+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
123+msgid "Type or say a command"
124+msgstr ""
125+
126+#: Hud/Hud.qml:84
127+msgid "Loading. Please Wait..."
128+msgstr ""
129+
130+#: Hud/Hud.qml:89
131+msgid "Speak Now..."
132+msgstr ""
133+
134+#: Hud/Hud.qml:94
135+msgid "Speaking..."
136+msgstr ""
137+
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
142+#: Panel/SearchIndicator.qml:27
143+msgid "Search"
144+msgstr ""
145+
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
150+
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
153+msgstr ""
154+
155+#: Shell.qml:439
156+#, qt-format
157+msgid "Please enter %1"
158+msgstr ""
po/pt_BR.po+9−7
@@ -8,15 +8,15 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-01 13:05+0000\n"
12−"Last-Translator: Rafael Neri <Unknown>\n"
11+"PO-Revision-Date: 2014-01-18 23:24+0000\n"
12+"Last-Translator: Fábio Nogueira <deb-user-ba@ubuntu.com>\n"
1313"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-19 06:02+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
@@ -65,6 +65,8 @@ msgid ""
6565"You have now mastered the edge gestures and can start using the "
6666"phone<br><br>Tap anywhere to start"
6767msgstr ""
68+"Agora você já domina o uso dos gestos de borda e pode começar a utilizar o "
69+"telefone<br><br>Toque na tela para começar"
6870
6971#: Components/PageHeader.qml:364
7072msgid "Recent searches"
@@ -139,7 +141,7 @@ msgstr "Falando..."
139141
140142#: Notifications/NotificationMenuItemFactory.qml:89
141143msgid "Show password"
142−msgstr ""
144+msgstr "Exibir senha"
143145
144146#: Panel/SearchIndicator.qml:27
145147msgid "Search"
@@ -148,11 +150,11 @@ msgstr "Pesquisar"
148150#: plugins/Unity/Launcher/launcheritem.cpp:43
149151#: plugins/Unity/Launcher/launcheritem.cpp:73
150152msgid "Lock to Launcher"
151−msgstr ""
153+msgstr "Bloquear no lançador"
152154
153155#: plugins/Unity/Launcher/launcheritem.cpp:73
154156msgid "Unlock from Launcher"
155−msgstr ""
157+msgstr "Desbloquear do lançador"
156158
157159#: Shell.qml:439
158160#, qt-format
po/ru.po+9−6
@@ -8,16 +8,16 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2014-01-07 05:21+0000\n"
12−"Last-Translator: Ivlev Denis <Unknown>\n"
11+"PO-Revision-Date: 2014-01-26 15:56+0000\n"
12+"Last-Translator: Zonov Roman <Unknown>\n"
1313"Language-Team: Russian <ru@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2014-01-08 05:43+0000\n"
20−"X-Generator: Launchpad (build 16877)\n"
19+"X-Launchpad-Export-Date: 2014-01-27 05:48+0000\n"
20+"X-Generator: Launchpad (build 16914)\n"
2121
2222#: Components/EdgeDemoOverlay.qml:151
2323msgid "Skip intro"
@@ -69,6 +69,8 @@ msgid ""
6969"You have now mastered the edge gestures and can start using the "
7070"phone<br><br>Tap anywhere to start"
7171msgstr ""
72+"Теперь, когда вы изучили основные движения, вы можете начать использовать "
73+"телефон.<br><br>Нажмите, чтобы начать"
7274
7375#: Components/PageHeader.qml:364
7476msgid "Recent searches"
@@ -89,8 +91,9 @@ msgstr "(%1)"
8991#, qt-format
9092msgid "%1 review"
9193msgid_plural "%1 reviews"
92−msgstr[0] "%1 отзыва"
93−msgstr[1] "%1 отзывов"
94+msgstr[0] "%1 отзыв"
95+msgstr[1] "%1 отзыва"
96+msgstr[2] "%1 отзывов"
9497
9598#: Dash/Previews/Reviews.qml:74
9699msgid "Add a review"
po/sq.ponew file+159
@@ -0,0 +1,159 @@
1+# Albanian translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-15 13:51+0000\n"
12+"Last-Translator: Besmir Zanaj <besmirzanaj@gmail.com>\n"
13+"Language-Team: Albanian <sq@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+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-01-16 06:09+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr ""
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr "Cepi djathtas"
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr ""
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr "Cepi i sipërm"
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr ""
40+"Përpiqu te fërkosh gishtin prej cepit të sipërm për te zhblokuar telefonin"
41+
42+#: Components/EdgeDemo.qml:170
43+msgid "Close"
44+msgstr "Mbylle"
45+
46+#: Components/EdgeDemo.qml:171
47+msgid "Swipe up again to close the settings screen"
48+msgstr ""
49+
50+#: Components/EdgeDemo.qml:198
51+msgid "Left edge"
52+msgstr "Cepi majtas"
53+
54+#: Components/EdgeDemo.qml:199
55+msgid "Swipe from the left to reveal the launcher for quick access to apps"
56+msgstr ""
57+
58+#: Components/EdgeDemo.qml:226
59+msgid "Well done"
60+msgstr "Shumë mirë"
61+
62+#: Components/EdgeDemo.qml:227
63+msgid ""
64+"You have now mastered the edge gestures and can start using the "
65+"phone<br><br>Tap anywhere to start"
66+msgstr ""
67+
68+#: Components/PageHeader.qml:364
69+msgid "Recent searches"
70+msgstr ""
71+
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr "Vlerësoje këtë"
75+
76+#. TRANSLATORS: Number of persons who rated this app/video/whatever
77+#: Dash/Previews/Header.qml:93
78+#, qt-format
79+msgid "(%1)"
80+msgstr "(%1)"
81+
82+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
83+#: Dash/Previews/Header.qml:105
84+#, qt-format
85+msgid "%1 review"
86+msgid_plural "%1 reviews"
87+msgstr[0] "%1 rishikim"
88+msgstr[1] "%1 rishikime"
89+
90+#: Dash/Previews/Reviews.qml:74
91+msgid "Add a review"
92+msgstr "Shto një rishikim"
93+
94+#: Dash/Previews/Reviews.qml:86
95+msgid "Review"
96+msgstr ""
97+
98+#: Dash/Previews/Reviews.qml:121
99+msgid "Send"
100+msgstr ""
101+
102+#: Dash/Previews/Reviews.qml:139
103+msgid "Comments:"
104+msgstr ""
105+
106+#: Greeter/Lockscreen.qml:149
107+msgid "Emergency Call"
108+msgstr ""
109+
110+#: Greeter/PassphraseLockscreen.qml:59
111+#, qt-format
112+msgid "Hello %1"
113+msgstr ""
114+
115+#: Greeter/PassphraseLockscreen.qml:59
116+msgid "Hello"
117+msgstr ""
118+
119+#: Hud/HudParametrizedActionsPage.qml:132
120+msgid "Confirm"
121+msgstr ""
122+
123+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
124+msgid "Type or say a command"
125+msgstr ""
126+
127+#: Hud/Hud.qml:84
128+msgid "Loading. Please Wait..."
129+msgstr ""
130+
131+#: Hud/Hud.qml:89
132+msgid "Speak Now..."
133+msgstr ""
134+
135+#: Hud/Hud.qml:94
136+msgid "Speaking..."
137+msgstr ""
138+
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
143+#: Panel/SearchIndicator.qml:27
144+msgid "Search"
145+msgstr ""
146+
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
149+msgid "Lock to Launcher"
150+msgstr ""
151+
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
153+msgid "Unlock from Launcher"
154+msgstr ""
155+
156+#: Shell.qml:439
157+#, qt-format
158+msgid "Please enter %1"
159+msgstr ""
po/sw.ponew file+158
@@ -0,0 +1,158 @@
1+# Swahili translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-14 19:28+0000\n"
12+"Last-Translator: Damas Mlabwa <Unknown>\n"
13+"Language-Team: Swahili <sw@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+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-01-15 06:35+0000\n"
19+"X-Generator: Launchpad (build 16890)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr ""
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr ""
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr ""
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr ""
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr ""
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr "Funga"
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr ""
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr ""
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr ""
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr ""
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr ""
66+
67+#: Components/PageHeader.qml:364
68+msgid "Recent searches"
69+msgstr ""
70+
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
75+#. TRANSLATORS: Number of persons who rated this app/video/whatever
76+#: Dash/Previews/Header.qml:93
77+#, qt-format
78+msgid "(%1)"
79+msgstr ""
80+
81+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82+#: Dash/Previews/Header.qml:105
83+#, qt-format
84+msgid "%1 review"
85+msgid_plural "%1 reviews"
86+msgstr[0] ""
87+msgstr[1] ""
88+
89+#: Dash/Previews/Reviews.qml:74
90+msgid "Add a review"
91+msgstr ""
92+
93+#: Dash/Previews/Reviews.qml:86
94+msgid "Review"
95+msgstr ""
96+
97+#: Dash/Previews/Reviews.qml:121
98+msgid "Send"
99+msgstr "Tuma"
100+
101+#: Dash/Previews/Reviews.qml:139
102+msgid "Comments:"
103+msgstr "Maoni:"
104+
105+#: Greeter/Lockscreen.qml:149
106+msgid "Emergency Call"
107+msgstr ""
108+
109+#: Greeter/PassphraseLockscreen.qml:59
110+#, qt-format
111+msgid "Hello %1"
112+msgstr ""
113+
114+#: Greeter/PassphraseLockscreen.qml:59
115+msgid "Hello"
116+msgstr ""
117+
118+#: Hud/HudParametrizedActionsPage.qml:132
119+msgid "Confirm"
120+msgstr "Thibitisha"
121+
122+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
123+msgid "Type or say a command"
124+msgstr ""
125+
126+#: Hud/Hud.qml:84
127+msgid "Loading. Please Wait..."
128+msgstr ""
129+
130+#: Hud/Hud.qml:89
131+msgid "Speak Now..."
132+msgstr ""
133+
134+#: Hud/Hud.qml:94
135+msgid "Speaking..."
136+msgstr ""
137+
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
142+#: Panel/SearchIndicator.qml:27
143+msgid "Search"
144+msgstr "Tafuta"
145+
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
150+
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
153+msgstr ""
154+
155+#: Shell.qml:439
156+#, qt-format
157+msgid "Please enter %1"
158+msgstr ""
po/tr.po+6−4
@@ -8,15 +8,15 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-12-12 16:06+0000\n"
12−"Last-Translator: Arda Ünlü <aarda.uunlu@gmail.com>\n"
11+"PO-Revision-Date: 2014-01-14 19:05+0000\n"
12+"Last-Translator: Osman Coşkun <Unknown>\n"
1313"Language-Team: Turkish <tr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-15 06:35+0000\n"
19+"X-Generator: Launchpad (build 16890)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
@@ -64,6 +64,8 @@ msgid ""
6464"You have now mastered the edge gestures and can start using the "
6565"phone<br><br>Tap anywhere to start"
6666msgstr ""
67+"Kenar hareketlerini öğrendiniz ve herhangi bir yere dokunarak telefonunuzu "
68+"<br><br> kullanmaya başlayabilirsiniz"
6769
6870#: Components/PageHeader.qml:364
6971msgid "Recent searches"
po/ug.po+7−7
@@ -8,15 +8,15 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-10-09 22:38+0000\n"
11+"PO-Revision-Date: 2014-01-17 04:33+0000\n"
1212"Last-Translator: Gheyret T.Kenji <Unknown>\n"
1313"Language-Team: Uyghur <ug@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-18 07:11+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
@@ -91,7 +91,7 @@ msgstr ""
9191
9292#: Dash/Previews/Reviews.qml:86
9393msgid "Review"
94−msgstr ""
94+msgstr "تەكشۈر"
9595
9696#: Dash/Previews/Reviews.qml:121
9797msgid "Send"
@@ -136,7 +136,7 @@ msgstr "سۆزلەۋاتىسىز…"
136136
137137#: Notifications/NotificationMenuItemFactory.qml:89
138138msgid "Show password"
139−msgstr ""
139+msgstr "ئىم كۆرسەت"
140140
141141#: Panel/SearchIndicator.qml:27
142142msgid "Search"
@@ -145,11 +145,11 @@ msgstr "ئىزدە"
145145#: plugins/Unity/Launcher/launcheritem.cpp:43
146146#: plugins/Unity/Launcher/launcheritem.cpp:73
147147msgid "Lock to Launcher"
148−msgstr ""
148+msgstr "ئىجراچىغا سولىۋەت"
149149
150150#: plugins/Unity/Launcher/launcheritem.cpp:73
151151msgid "Unlock from Launcher"
152−msgstr ""
152+msgstr "ئىجراچىدىن چىقار"
153153
154154#: Shell.qml:439
155155#, qt-format
po/vi.ponew file+158
@@ -0,0 +1,158 @@
1+# Vietnamese translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-15 01:19+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Vietnamese <vi@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+"Plural-Forms: nplurals=1; plural=0;\n"
18+"X-Launchpad-Export-Date: 2014-01-16 06:09+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr ""
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr ""
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr ""
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr ""
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr ""
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr ""
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr ""
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr ""
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr ""
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr ""
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr ""
66+
67+#: Components/PageHeader.qml:364
68+msgid "Recent searches"
69+msgstr ""
70+
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
75+#. TRANSLATORS: Number of persons who rated this app/video/whatever
76+#: Dash/Previews/Header.qml:93
77+#, qt-format
78+msgid "(%1)"
79+msgstr ""
80+
81+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82+#: Dash/Previews/Header.qml:105
83+#, qt-format
84+msgid "%1 review"
85+msgid_plural "%1 reviews"
86+msgstr[0] ""
87+msgstr[1] ""
88+
89+#: Dash/Previews/Reviews.qml:74
90+msgid "Add a review"
91+msgstr ""
92+
93+#: Dash/Previews/Reviews.qml:86
94+msgid "Review"
95+msgstr ""
96+
97+#: Dash/Previews/Reviews.qml:121
98+msgid "Send"
99+msgstr ""
100+
101+#: Dash/Previews/Reviews.qml:139
102+msgid "Comments:"
103+msgstr ""
104+
105+#: Greeter/Lockscreen.qml:149
106+msgid "Emergency Call"
107+msgstr ""
108+
109+#: Greeter/PassphraseLockscreen.qml:59
110+#, qt-format
111+msgid "Hello %1"
112+msgstr ""
113+
114+#: Greeter/PassphraseLockscreen.qml:59
115+msgid "Hello"
116+msgstr ""
117+
118+#: Hud/HudParametrizedActionsPage.qml:132
119+msgid "Confirm"
120+msgstr ""
121+
122+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
123+msgid "Type or say a command"
124+msgstr ""
125+
126+#: Hud/Hud.qml:84
127+msgid "Loading. Please Wait..."
128+msgstr ""
129+
130+#: Hud/Hud.qml:89
131+msgid "Speak Now..."
132+msgstr ""
133+
134+#: Hud/Hud.qml:94
135+msgid "Speaking..."
136+msgstr ""
137+
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
142+#: Panel/SearchIndicator.qml:27
143+msgid "Search"
144+msgstr ""
145+
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
150+
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
153+msgstr ""
154+
155+#: Shell.qml:439
156+#, qt-format
157+msgid "Please enter %1"
158+msgstr ""
po/zh_HK.ponew file+157
@@ -0,0 +1,157 @@
1+# Chinese (Hong Kong) translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2014-01-25 13:32+0000\n"
12+"Last-Translator: Daniel Cheung <daniel.2345@hotmail.com>\n"
13+"Language-Team: Chinese (Hong Kong) <zh_HK@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+"Plural-Forms: nplurals=1; plural=0;\n"
18+"X-Launchpad-Export-Date: 2014-01-26 05:18+0000\n"
19+"X-Generator: Launchpad (build 16914)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr "跳過介紹"
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr "右邊緣"
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr "試從右邊緣輕掃解鎖手機"
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr "頂部邊緣"
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr "試從頂部邊緣輕掃存取指示器"
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr "關閉"
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr "再向上掃一次以關閉設定畫面"
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr "左邊緣"
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr "從左邊緣輕掃以顯示啟動器快速訪問應用"
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr "做得好"
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr "現在你已經掌握了邊緣手勢,可以開始使用手機<br><br>點擊任意位置以開始"
66+
67+#: Components/PageHeader.qml:364
68+msgid "Recent searches"
69+msgstr "最近的搜尋"
70+
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr "評價"
74+
75+#. TRANSLATORS: Number of persons who rated this app/video/whatever
76+#: Dash/Previews/Header.qml:93
77+#, qt-format
78+msgid "(%1)"
79+msgstr "(%1)"
80+
81+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82+#: Dash/Previews/Header.qml:105
83+#, qt-format
84+msgid "%1 review"
85+msgid_plural "%1 reviews"
86+msgstr[0] "%1 評論"
87+
88+#: Dash/Previews/Reviews.qml:74
89+msgid "Add a review"
90+msgstr "新增評論"
91+
92+#: Dash/Previews/Reviews.qml:86
93+msgid "Review"
94+msgstr "評論"
95+
96+#: Dash/Previews/Reviews.qml:121
97+msgid "Send"
98+msgstr "傳送"
99+
100+#: Dash/Previews/Reviews.qml:139
101+msgid "Comments:"
102+msgstr "評論:"
103+
104+#: Greeter/Lockscreen.qml:149
105+msgid "Emergency Call"
106+msgstr "緊急電話"
107+
108+#: Greeter/PassphraseLockscreen.qml:59
109+#, qt-format
110+msgid "Hello %1"
111+msgstr "您好 %1"
112+
113+#: Greeter/PassphraseLockscreen.qml:59
114+msgid "Hello"
115+msgstr "您好"
116+
117+#: Hud/HudParametrizedActionsPage.qml:132
118+msgid "Confirm"
119+msgstr "確認"
120+
121+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
122+msgid "Type or say a command"
123+msgstr "輸入或說出指令"
124+
125+#: Hud/Hud.qml:84
126+msgid "Loading. Please Wait..."
127+msgstr "正載入。請稍候..."
128+
129+#: Hud/Hud.qml:89
130+msgid "Speak Now..."
131+msgstr "馬上講..."
132+
133+#: Hud/Hud.qml:94
134+msgid "Speaking..."
135+msgstr "正在講..."
136+
137+#: Notifications/NotificationMenuItemFactory.qml:89
138+msgid "Show password"
139+msgstr "顯示密碼"
140+
141+#: Panel/SearchIndicator.qml:27
142+msgid "Search"
143+msgstr "搜尋"
144+
145+#: plugins/Unity/Launcher/launcheritem.cpp:43
146+#: plugins/Unity/Launcher/launcheritem.cpp:73
147+msgid "Lock to Launcher"
148+msgstr "鎖定至啟動器"
149+
150+#: plugins/Unity/Launcher/launcheritem.cpp:73
151+msgid "Unlock from Launcher"
152+msgstr "從啟動器解除鎖定"
153+
154+#: Shell.qml:439
155+#, qt-format
156+msgid "Please enter %1"
157+msgstr "請輸入 %1"
po/zh_TW.po+24−25
@@ -8,47 +8,47 @@ msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1010"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11−"PO-Revision-Date: 2013-06-27 10:24+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
11+"PO-Revision-Date: 2014-01-16 06:04+0000\n"
12+"Last-Translator: Henry Yang <henry9846@hotmail.com>\n"
1313"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-12-29 06:04+0000\n"
19−"X-Generator: Launchpad (build 16877)\n"
18+"X-Launchpad-Export-Date: 2014-01-17 07:08+0000\n"
19+"X-Generator: Launchpad (build 16901)\n"
2020
2121#: Components/EdgeDemoOverlay.qml:151
2222msgid "Skip intro"
23−msgstr ""
23+msgstr "略過導覽"
2424
2525#: Components/EdgeDemo.qml:112
2626msgid "Right edge"
27−msgstr ""
27+msgstr "右方邊界"
2828
2929#: Components/EdgeDemo.qml:113
3030msgid "Try swiping from the right edge to unlock the phone"
31−msgstr ""
31+msgstr "向左滑動以解鎖手機"
3232
3333#: Components/EdgeDemo.qml:144
3434msgid "Top edge"
35−msgstr ""
35+msgstr "頂部邊界"
3636
3737#: Components/EdgeDemo.qml:145
3838msgid "Try swiping from the top edge to access the indicators"
39−msgstr ""
39+msgstr "向下滑動以開啟指引"
4040
4141#: Components/EdgeDemo.qml:170
4242msgid "Close"
43−msgstr ""
43+msgstr "關閉"
4444
4545#: Components/EdgeDemo.qml:171
4646msgid "Swipe up again to close the settings screen"
47−msgstr ""
47+msgstr "再次向上滑動以關財設定頁面"
4848
4949#: Components/EdgeDemo.qml:198
5050msgid "Left edge"
51−msgstr ""
51+msgstr "左方邊界"
5252
5353#: Components/EdgeDemo.qml:199
5454msgid "Swipe from the left to reveal the launcher for quick access to apps"
@@ -70,50 +70,49 @@ msgstr "最近搜尋"
7070
7171#: Dash/Apps/AppPreview.qml:135
7272msgid "Rate this"
73−msgstr ""
73+msgstr "對此評比"
7474
7575#. TRANSLATORS: Number of persons who rated this app/video/whatever
7676#: Dash/Previews/Header.qml:93
7777#, qt-format
7878msgid "(%1)"
79−msgstr ""
79+msgstr "(%1)"
8080
8181#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
8282#: Dash/Previews/Header.qml:105
8383#, qt-format
8484msgid "%1 review"
8585msgid_plural "%1 reviews"
86−msgstr[0] ""
87−msgstr[1] ""
86+msgstr[0] "%1 回覆"
8887
8988#: Dash/Previews/Reviews.qml:74
9089msgid "Add a review"
91−msgstr ""
90+msgstr "新增回覆"
9291
9392#: Dash/Previews/Reviews.qml:86
9493msgid "Review"
95−msgstr ""
94+msgstr "回覆"
9695
9796#: Dash/Previews/Reviews.qml:121
9897msgid "Send"
99−msgstr ""
98+msgstr "發送"
10099
101100#: Dash/Previews/Reviews.qml:139
102101msgid "Comments:"
103−msgstr ""
102+msgstr "備註:"
104103
105104#: Greeter/Lockscreen.qml:149
106105msgid "Emergency Call"
107−msgstr ""
106+msgstr "緊急連絡"
108107
109108#: Greeter/PassphraseLockscreen.qml:59
110109#, qt-format
111110msgid "Hello %1"
112−msgstr ""
111+msgstr "%1 您好"
113112
114113#: Greeter/PassphraseLockscreen.qml:59
115114msgid "Hello"
116−msgstr ""
115+msgstr "您好"
117116
118117#: Hud/HudParametrizedActionsPage.qml:132
119118msgid "Confirm"
@@ -137,7 +136,7 @@ msgstr "說話中..."
137136
138137#: Notifications/NotificationMenuItemFactory.qml:89
139138msgid "Show password"
140−msgstr ""
139+msgstr "顯示密碼"
141140
142141#: Panel/SearchIndicator.qml:27
143142msgid "Search"
@@ -146,7 +145,7 @@ msgstr "搜尋"
146145#: plugins/Unity/Launcher/launcheritem.cpp:43
147146#: plugins/Unity/Launcher/launcheritem.cpp:73
148147msgid "Lock to Launcher"
149−msgstr ""
148+msgstr "鎖定至啟動欄"
150149
151150#: plugins/Unity/Launcher/launcheritem.cpp:73
152151msgid "Unlock from Launcher"
qml/Dash/Apps/AppPreview.qml+1
@@ -97,6 +97,7 @@ GenericPreview {
9797 spacing: units.gu(1)
9898
9999 Label {
100+ objectName: "descriptionLabel"
100101 anchors { left: parent.left; right: parent.right }
101102 text: root.previewData.description
102103 fontSize: "medium"
qml/Panel/IndicatorRow.qml+51−29
@@ -26,7 +26,7 @@ Item {
2626 readonly property int currentItemIndex: currentItem ? currentItem.ownIndex : -1
2727 property alias row: row
2828 property QtObject indicatorsModel: null
29− property var visibleIndicators: defined
29+ property var visibleIndicators: undefined
3030 property int overFlowWidth: width
3131 property bool showAll: false
3232 property real currentItemOffset: 0.0
@@ -94,34 +94,56 @@ Item {
9494 property real opacityMultiplier: highlighted ? 1 : (1 - indicatorRow.unitProgress)
9595
9696 IndicatorItem {
97− id: indicatorItem
98− identifier: model.identifier
99− height: parent.height
100−
101− dimmed: itemWrapper.dimmed
102−
103− widgetSource: model.widgetSource
104− indicatorProperties : model.indicatorProperties
105−
106− Component.onCompleted: {
107− if (visibleIndicators == undefined) {
108− visibleIndicators = {}
109− }
110− indicatorRow.visibleIndicators[model.identifier] = indicatorVisible;
111− indicatorRow.visibleIndicatorsChanged();
112− }
113− onIndicatorVisibleChanged: {
114− if (visibleIndicators == undefined) {
115− visibleIndicators = {}
116− }
117− indicatorRow.visibleIndicators[model.identifier] = indicatorVisible;
118− indicatorRow.visibleIndicatorsChanged();
119−
120− if (indicatorVisible) {
121− showAll = true;
122− allVisible.start();
123− }
124− }
97+ id: indicatorItem
98+ identifier: model.identifier
99+ height: parent.height
100+
101+ dimmed: itemWrapper.dimmed
102+
103+ widgetSource: model.widgetSource
104+ indicatorProperties : model.indicatorProperties
105+
106+ Component.onCompleted: {
107+ updateVisiblility();
108+ }
109+ onIndicatorVisibleChanged: {
110+ updateVisiblility();
111+
112+ if (indicatorVisible) {
113+ showAll = true;
114+ allVisible.start();
115+ }
116+ }
117+
118+ function updateVisiblility() {
119+ if (visibleIndicators == undefined) {
120+ visibleIndicators = {}
121+ }
122+ indicatorRow.visibleIndicators[model.identifier] = indicatorVisible;
123+
124+ // removed current index?
125+ if (indicatorRow.currentItemIndex === index && !indicatorVisible) {
126+ // find the next closest visible indicator (after current, else before)
127+ var newIndex = -1;
128+ for (var i = index+1; i < rowRepeater.count; i++) {
129+ if (indicatorRow.visibleIndicators[i] === undefined || indicatorRow.visibleIndicators[model.identifier]) {
130+ newIndex = i;
131+ break;
132+ }
133+ }
134+ if (newIndex === -1) {
135+ for (i = index - 1; i >= 0; i--) {
136+ if (indicatorRow.visibleIndicators[i] === undefined || indicatorRow.visibleIndicators[model.identifier]) {
137+ newIndex = i;
138+ break;
139+ }
140+ }
141+ }
142+ indicatorRow.setCurrentItem(newIndex);
143+ }
144+
145+ indicatorRow.visibleIndicatorsChanged();
146+ }
125147 }
126148
127149 states: [
qml/Panel/Indicators.qml+46−34
@@ -193,21 +193,6 @@ Showable {
193193 clip: !indicators.fullyOpened
194194 activeHeader: indicators.state == "hint" || indicators.state == "reveal"
195195 enabled: contentEnabled
196− visibleIndicators: indicatorRow.visibleIndicators
197−
198− Connections {
199− property bool enableIndexChangeSignal: true
200−
201− target: enableIndexChangeSignal ? indicatorRow : null
202− onCurrentItemIndexChanged: {
203− var oldActive = enableIndexChangeSignal;
204− enableIndexChangeSignal = false;
205−
206− menuContent.setCurrentMenuIndex(indicatorRow.currentItemIndex);
207−
208− enableIndexChangeSignal = oldActive;
209− }
210− }
211196
212197 //small shadow gradient at bottom of menu
213198 Rectangle {
@@ -263,8 +248,6 @@ Showable {
263248
264249 Indicators.IndicatorsModel {
265250 id: indicatorsModel
266−
267− Component.onCompleted: load()
268251 }
269252
270253 IndicatorRow {
@@ -279,17 +262,11 @@ Showable {
279262 state: indicators.state
280263 unitProgress: indicators.unitProgress
281264
282− Connections {
283− property bool enableIndexChangeSignal: true
284−
285− target: enableIndexChangeSignal ? menuContent : null
286− onCurrentMenuIndexChanged: {
287− var oldActive = enableIndexChangeSignal;
288− enableIndexChangeSignal = false;
289−
290− indicatorRow.setCurrentItem(menuContent.currentMenuIndex);
291−
292− enableIndexChangeSignal = oldActive;
265+ onVisibleIndicatorsChanged: {
266+ // need to do it here so we can control sequence
267+ if (visibleIndicators !== undefined) {
268+ menuContent.visibleIndicators = visibleIndicators;
269+ menuContent.setCurrentMenuIndex(currentItemIndex);
293270 }
294271 }
295272
@@ -341,15 +318,45 @@ Showable {
341318 }
342319 }
343320
344− property var activeDragHandle: showDragHandle.dragging ? showDragHandle : hideDragHandle.dragging ? hideDragHandle : null
321+ QtObject {
322+ id: d
323+ property bool enableIndexChangeSignal: true
324+ property var activeDragHandle: showDragHandle.dragging ? showDragHandle : hideDragHandle.dragging ? hideDragHandle : null
325+ }
326+
327+ Connections {
328+ target: menuContent
329+ onCurrentMenuIndexChanged: {
330+ var oldActive = d.enableIndexChangeSignal;
331+ if (!oldActive) return;
332+ d.enableIndexChangeSignal = false;
333+
334+ indicatorRow.setCurrentItem(menuContent.currentMenuIndex);
335+
336+ d.enableIndexChangeSignal = oldActive;
337+ }
338+ }
339+
340+ Connections {
341+ target: indicatorRow
342+ onCurrentItemIndexChanged: {
343+ var oldActive = d.enableIndexChangeSignal;
344+ if (!oldActive) return;
345+ d.enableIndexChangeSignal = false;
346+
347+ menuContent.setCurrentMenuIndex(indicatorRow.currentItemIndex);
348+
349+ d.enableIndexChangeSignal = oldActive;
350+ }
351+ }
345352 // connections to the active drag handle
346353 Connections {
347− target: activeDragHandle
354+ target: d.activeDragHandle
348355 onTouchXChanged: {
349− indicators.calculateCurrentItem(activeDragHandle.touchX, true);
356+ indicators.calculateCurrentItem(d.activeDragHandle.touchX, true);
350357 }
351358 onTouchSceneYChanged: {
352− yVelocityCalculator.trackedPosition = activeDragHandle.touchSceneY;
359+ yVelocityCalculator.trackedPosition = d.activeDragHandle.touchSceneY;
353360 }
354361 }
355362
@@ -403,8 +410,8 @@ Showable {
403410 }
404411 StateChangeScript {
405412 script: {
406− if (activeDragHandle) {
407− calculateCurrentItem(activeDragHandle.touchX, false);
413+ if (d.activeDragHandle) {
414+ calculateCurrentItem(d.activeDragHandle.touchX, false);
408415 }
409416 }
410417 }
@@ -429,4 +436,9 @@ Showable {
429436 NumberAnimation {targets: [indicatorRow, menuContent]; property: "y"; duration: 300; easing.type: Easing.OutCubic}
430437 }
431438 ]
439+
440+ Component.onCompleted: initialise();
441+ function initialise() {
442+ indicatorsModel.load();
443+ }
432444}
qml/Panel/MenuContent.qml+2−2
@@ -39,10 +39,10 @@ MainView {
3939 height: units.gu(42)
4040
4141 function setCurrentMenuIndex(index) {
42− var filteredIndex = filteredIndicators.mapFromSource(index)
42+ var filteredIndex = filteredIndicators.mapFromSource(index);
4343
4444 if (tabs.selectedTabIndex !== filteredIndex) {
45− if (tabs.selectedTabIndex == -1 || !animateNextMenuChange) {
45+ if (tabs.selectedTabIndex === -1 || !animateNextMenuChange) {
4646 tabs.tabBar.animate = false;
4747 }
4848 tabs.selectedTabIndex = filteredIndex;
tests/autopilot/unity8/shell/emulators/__init__.py+1−1
@@ -25,7 +25,7 @@ class UnityEmulatorBase(introspection.CustomEmulatorBase):
2525
2626 def __init__(self, *args):
2727 super(UnityEmulatorBase, self).__init__(*args)
28− self.pointing_device = input.Touch.create()
28+ self.pointing_device = input.Pointer(device=input.Touch.create())
2929
3030
3131class UnityEmulatorException(Exception):
tests/autopilot/unity8/shell/emulators/dash.py+53−2
@@ -138,8 +138,59 @@ class Dash(emulators.UnityEmulatorBase):
138138
139139
140140class GenericScopeView(emulators.UnityEmulatorBase):
141− """Autopilot emulators for generic scopes."""
141+ """Autopilot emulator for generic scopes."""
142142
143143
144144class DashApps(emulators.UnityEmulatorBase):
145− """Autopilot emulators for the applications scope."""
145+ """Autopilot emulator for the applications scope."""
146+
147+ def get_applications(self, category):
148+ """Return the list of applications on a category.
149+
150+ :parameter category: The name of the category.
151+
152+ """
153+ category_element = self._get_category_element(category)
154+ application_tiles = category_element.select_many('Tile')
155+ # TODO return them on the same order they are displayed.
156+ # --elopio - 2014-1-15
157+ return [tile.text for tile in application_tiles]
158+
159+ def _get_category_element(self, category):
160+ try:
161+ return self.select_single(
162+ 'Base', objectName='dashCategory{}'.format(category))
163+ except dbus.StateNotFoundError:
164+ raise emulators.UnityEmulatorException(
165+ 'No category found with name {}'.format(category))
166+
167+ @autopilot_logging.log_action(logger.info)
168+ def open_preview(self, category, app_name):
169+ """Open the preview of an application.
170+
171+ :parameter category: The name of the category where the application is.
172+ :app_name: The name of the application.
173+
174+ """
175+ category_element = self._get_category_element(category)
176+ icon = category_element.select_single('Tile', text=app_name)
177+ # FIXME some categories need a long press in order to see the preview.
178+ # Some categories do not show previews, like recent apps.
179+ # --elopio - 2014-1-14
180+ self.pointing_device.click_object(icon)
181+ return self.get_root_instance().wait_select_single(AppPreview)
182+
183+
184+class AppPreview(emulators.UnityEmulatorBase):
185+ """Autopilot emulator for the application preview."""
186+
187+ def get_details(self):
188+ """Return the details of the application showed in its preview."""
189+ title = self.select_single('Label', objectName='titleLabel').text
190+ publisher = self.select_single(
191+ 'Label', objectName='subtitleLabel').text
192+ description = self.select_single(
193+ 'Label', objectName='descriptionLabel').text
194+ # TODO return screenshots, icon, rating and reviews.
195+ # --elopio - 2014-1-15
196+ return dict(title=title, publisher=publisher, description=description)
tests/autopilot/unity8/shell/tests/test_emulators.py+89−2
@@ -17,23 +17,43 @@
1717# along with this program. If not, see <http://www.gnu.org/licenses/>.
1818#
1919
20+"""Tests for the Dash autopilot emulators.
21+
22+The autopilot emulators are helpers for tests that check a user journey that
23+involves the dash. The code for some of those tests will not be inside this
24+branch, but in projects that depend on unity or that test the whole system
25+integration. So, we need to test the helpers in order to make sure that we
26+don't break them for those external projects.
27+
28+"""
29+
30+import os
31+import sysconfig
32+
2033import mock
2134
35+import fixtures
36+from testtools.matchers import Contains, HasLength
37+
38+import unity8
2239from unity8 import process_helpers
2340from unity8.shell import emulators, tests
2441from unity8.shell.emulators import dash as dash_emulators
2542
2643
27−class DashEmulatorTestCase(tests.UnityTestCase):
44+class DashBaseTestCase(tests.UnityTestCase):
2845
2946 scenarios = tests._get_device_emulation_scenarios()
3047
3148 def setUp(self):
32− super(DashEmulatorTestCase, self).setUp()
49+ super(DashBaseTestCase, self).setUp()
3350 unity_proxy = self.launch_unity()
3451 process_helpers.unlock_unity(unity_proxy)
3552 self.dash = self.main_window.get_dash()
3653
54+
55+class DashEmulatorTestCase(DashBaseTestCase):
56+
3757 def test_open_unexisting_scope(self):
3858 scope_name = 'unexisting'
3959 with mock.patch.object(self.dash, 'pointing_device') as mock_pointer:
@@ -118,3 +138,70 @@ class DashEmulatorTestCase(tests.UnityTestCase):
118138 scope = self.dash.open_scope(self._get_scope_name_from_id(scope_id))
119139 self._assert_scope_is_opened(scope, scope_id)
120140 self.assertIsInstance(scope, dash_emulators.DashApps)
141+
142+
143+class DashAppsEmulatorTestCase(DashBaseTestCase):
144+
145+ available_applications = [
146+ 'Title.1', 'Title.21', 'Title.41', 'Title.61', 'Title.81',
147+ 'Title.101', 'Title.121', 'Title.141', 'Title.161', 'Title.181',
148+ 'Title.201', 'Title.221', 'Title.241', 'Title.261', 'Title.281']
149+
150+ def setUp(self):
151+ self._use_scope_fakes()
152+ super(DashAppsEmulatorTestCase, self).setUp()
153+ self.applications_scope = self.dash.open_scope('applications')
154+
155+ def _use_scope_fakes(self):
156+ self.useFixture(
157+ fixtures.EnvironmentVariable(
158+ 'QML2_IMPORT_PATH',
159+ newvalue=self._get_fake_scopes_library_path()))
160+
161+ def _get_fake_scopes_library_path(self):
162+ if unity8.running_installed_tests():
163+ mock_path = 'qml/scopefakes/'
164+ else:
165+ mock_path = os.path.join(
166+ '../lib/', sysconfig.get_config_var('MULTIARCH'),
167+ 'unity8/qml/scopefakes/')
168+ lib_path = unity8.get_lib_path()
169+ ld_library_path = os.path.abspath(os.path.join(lib_path, mock_path))
170+
171+ if not os.path.exists(ld_library_path):
172+ raise RuntimeError(
173+ 'Expected library path does not exists: %s.' % (
174+ ld_library_path))
175+ return ld_library_path
176+
177+ def test_get_applications_with_unexisting_category(self):
178+ exception = self.assertRaises(
179+ emulators.UnityEmulatorException,
180+ self.applications_scope.get_applications,
181+ 'unexisting category')
182+
183+ self.assertEqual(
184+ 'No category found with name unexisting category', str(exception))
185+
186+ def test_get_applications_should_return_list_with_names(self):
187+ category = 'installed'
188+ expected_apps_count = self._get_number_of_application_slots(category)
189+ expected_applications = self.available_applications[
190+ :expected_apps_count]
191+
192+ applications = self.applications_scope.get_applications(category)
193+
194+ self.assertThat(applications, HasLength(expected_apps_count))
195+ for expected in expected_applications:
196+ self.assertThat(applications, Contains(expected))
197+
198+ def _get_number_of_application_slots(self, category):
199+ category_element = self.applications_scope._get_category_element(
200+ category)
201+ grid = category_element.select_single('GenericFilterGrid')
202+ return grid.columns * grid.rows
203+
204+ def test_open_preview(self):
205+ preview = self.applications_scope.open_preview('installed', 'Title.1')
206+ self.assertIsInstance(preview, dash_emulators.AppPreview)
207+ self.assertTrue(preview.isCurrent)
tests/mocks/LightDM/CMakeLists.txt+1−1
@@ -33,7 +33,7 @@ add_library(MockLightDM-qml MODULE
3333# installed on the system. So we make sure we link to our full fake version
3434# At run time, we can point to whichever version we happen to be using via
3535# LD_LIBRARY_PATH.
36−add_dependencies(MockLightDM-qml MockLightDM-full)
36+add_dependencies(MockLightDM-qml MockLightDM-full MockUserMetrics)
3737target_link_libraries(MockLightDM-qml
3838 -L${CMAKE_CURRENT_BINARY_DIR}/full
3939 -llightdm-qt5-2
tests/mocks/Unity/CMakeLists.txt+9−2
@@ -1,5 +1,7 @@
11add_subdirectory(Application)
22add_subdirectory(Indicators)
3+add_subdirectory(Launcher)
4+add_subdirectory(Notifications)
35
46pkg_search_module(DEE dee-1.0 REQUIRED)
57pkg_search_module(GOBJECT gobject-2.0 REQUIRED)
@@ -41,5 +43,10 @@ file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
4143 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
4244 )
4345
44−add_subdirectory(Launcher)
45−add_subdirectory(Notifications)
46+install(TARGETS FakeUnityQml
47+ DESTINATION ${SHELL_INSTALL_QML}/scopefakes/Unity
48+ )
49+
50+install(FILES qmldir
51+ DESTINATION ${SHELL_INSTALL_QML}/scopefakes/Unity
52+ )
tests/mocks/Unity/Indicators/IndicatorsModel.qml+2−5
@@ -21,12 +21,9 @@ ListModel {
2121
2222 property var indicatorData : undefined
2323
24− function load() {}
24+ function load() {
25+ clear();
2526
26− // Need to do this dynamically.
27− // Apparently ListModels dont order roles visually when using ListElement
28− // which throws off the filter for non-visible indicators.
29− Component.onCompleted: {
3027 append({ "identifier": "indicator-fake1",
3128 "position": 0,
3229 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget1.qml",
tests/mocks/Unity/Indicators/qml/fake_menu_widget2.qml+1−3
@@ -19,7 +19,5 @@ import QtQuick 2.0
1919Rectangle {
2020 width: 40
2121 height: 40
22− color : "yellow"
23−
24− enabled: false
22+ color : "blue"
2523}
tests/mocks/Unity/Indicators/qml/fake_menu_widget3.qml+1−1
@@ -19,5 +19,5 @@ import QtQuick 2.0
1919Rectangle {
2020 width: 40
2121 height: 40
22− color : "blue"
22+ color : "yellow"
2323}
tests/mocks/Unity/fake_applications_scope.cpp+2−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013, 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -30,6 +30,7 @@ ApplicationsScope::ApplicationsScope(bool visible, QObject* parent)
3030 m_id = "applications.scope";
3131 m_name = "Applications";
3232 m_visible = visible;
33+ m_previewRendererName = "preview-application";
3334 m_categories->setModel(createCategoriesModel());
3435}
3536
tests/mocks/Unity/fake_preview.cpp+5−3
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013, 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -16,13 +16,15 @@
1616
1717#include "fake_preview.h"
1818
19−Preview::Preview(QObject *parent): QObject(parent)
19+Preview::Preview(const QString &rendererName, QObject *parent):
20+ QObject(parent),
21+ m_rendererName(rendererName)
2022{
2123}
2224
2325QString Preview::rendererName() const
2426{
25− return "generic-preview";
27+ return m_rendererName;
2628}
2729
2830QString Preview::title() const
tests/mocks/Unity/fake_preview.h+5−2
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013, 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -38,7 +38,7 @@ class Q_DECL_EXPORT Preview : public QObject
3838 Q_PROPERTY(QString image READ image NOTIFY previewChanged)
3939
4040public:
41− explicit Preview(QObject *parent = 0);
41+ explicit Preview(const QString &rendererName, QObject *parent = 0);
4242
4343 QString rendererName() const;
4444 QString title() const;
@@ -55,6 +55,9 @@ public:
5555
5656Q_SIGNALS:
5757 void previewChanged();
58+
59+private:
60+ QString m_rendererName;
5861};
5962
6063Q_DECLARE_METATYPE(Preview *)
tests/mocks/Unity/fake_scope.cpp+3−2
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013, 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -38,6 +38,7 @@ Scope::Scope(QString const& id, QString const& name, bool visible, QObject* pare
3838 , m_isActive(false)
3939 , m_categories(new Categories(this))
4040 , m_results(new DeeListModel(this))
41+ , m_previewRendererName("preview-generic")
4142{
4243 DeeModel* results_model = create_results_model(20, 300);
4344 m_categories->setResultModel(results_model);
@@ -47,7 +48,7 @@ Scope::Scope(QString const& id, QString const& name, bool visible, QObject* pare
4748 m_timer.setInterval(1000);
4849 m_timer.setSingleShot(true);
4950 connect(&m_timer, &QTimer::timeout, [this]() {
50− Preview *p = new Preview(this);
51+ Preview *p = new Preview(m_previewRendererName, this);
5152 Q_EMIT previewReady(p);
5253 });
5354}
tests/mocks/Unity/fake_scope.h+3−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013, 2014 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -116,6 +116,8 @@ protected:
116116 bool m_searching;
117117 bool m_isActive;
118118
119+ QString m_previewRendererName;
120+
119121 Categories* m_categories;
120122 DeeListModel* m_results;
121123
tests/plugins/DashViews/CMakeLists.txt+12−15
@@ -40,22 +40,17 @@ qt5_use_modules(listviewwithpageheadertestsectionexternalmodelExec Test Core Qml
4040target_link_libraries(listviewwithpageheadertestsectionexternalmodelExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
4141add_custom_target(testlistviewwithpageheadersectionexternalmodel ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestsectionexternalmodelExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheadersectionexternalmodel.xml,xunitxml -o -,txt)
4242
43−macro(add_journal_try_test FILENAME)
44− # Capitalite the first letter for the test/try name targets
45− string(SUBSTRING ${FILENAME} 0 1 FIRST_LETTER)
46− string(TOUPPER ${FIRST_LETTER} FIRST_LETTER)
47− string(REGEX REPLACE "^.(.*)" "${FIRST_LETTER}\\1" CUSTOM_TARGET_NAME "${FILENAME}")
48−
43+macro(add_dashview_try_test FILENAME TESTNAME)
4944 add_executable(${FILENAME}testExec
5045 ${FILENAME}test.cpp
5146 ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/${FILENAME}.cpp
52− ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/abstractjournal.cpp
47+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/abstractdashview.cpp
5348 )
5449 qt5_use_modules(${FILENAME}testExec Test Core Qml)
5550 target_link_libraries(${FILENAME}testExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
56− add_custom_target(test${CUSTOM_TARGET_NAME}
51+ add_custom_target(test${TESTNAME}
5752 ${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}testExec
58− -o ${CMAKE_BINARY_DIR}/test${CUSTOM_TARGET_NAME}.xml,xunitxml
53+ -o ${CMAKE_BINARY_DIR}/test${TESTNAME}.xml,xunitxml
5954 -o -,txt
6055 DEPENDS ${FILENAME}testExec DashViews-qml
6156 )
@@ -63,18 +58,19 @@ macro(add_journal_try_test FILENAME)
6358 add_executable(${FILENAME}tryExec
6459 ${FILENAME}try.cpp
6560 ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/${FILENAME}.cpp
66− ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/abstractjournal.cpp
61+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/abstractdashview.cpp
6762 )
6863 qt5_use_modules(${FILENAME}tryExec Test Core Qml)
6964 target_link_libraries(${FILENAME}tryExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
70− add_custom_target(try${CUSTOM_TARGET_NAME}
65+ add_custom_target(try${TESTNAME}
7166 ${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}tryExec
7267 DEPENDS ${FILENAME}tryExec DashViews-qml
7368 )
7469endmacro()
7570
76−add_journal_try_test(verticaljournal)
77−add_journal_try_test(horizontaljournal)
71+add_dashview_try_test(verticaljournal VerticalJournal)
72+add_dashview_try_test(horizontaljournal HorizontalJournal)
73+add_dashview_try_test(organicgrid OrganicGrid)
7874
7975set(qmltest_DEFAULT_NO_ADD_TEST TRUE)
8076add_qml_test(. listviewwithpageheaderqml IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
@@ -83,5 +79,6 @@ add_dependencies(qmluitests testlistviewwithpageheader)
8379add_dependencies(qmluitests testlistviewwithpageheadersection)
8480add_dependencies(qmluitests testlistviewwithpageheadersectionexternalmodel)
8581add_dependencies(qmluitests testlistviewwithpageheaderqml)
86−add_dependencies(qmluitests testVerticaljournal)
87−add_dependencies(qmluitests testHorizontaljournal)
82+add_dependencies(qmluitests testVerticalJournal)
83+add_dependencies(qmluitests testHorizontalJournal)
84+add_dependencies(qmluitests testOrganicGrid)
tests/plugins/DashViews/horizontaljournaltest.cpp+35−9
@@ -126,9 +126,9 @@ private Q_SLOTS:
126126 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
127127
128128 model = new WidthModel();
129− QStringList heightList;
130− heightList << "100" << "50" << "125" << "10" << "40" << "70" << "200" << "110" << "160" << "20" << "20" << "65" << "80" << "200" << "300" << "130" << "400" << "300" << "500" << "10";
131− model->setStringList(heightList);
129+ QStringList widthList;
130+ widthList << "100" << "50" << "125" << "10" << "40" << "70" << "200" << "110" << "160" << "20" << "20" << "65" << "80" << "200" << "300" << "130" << "400" << "300" << "500" << "10";
131+ model->setStringList(widthList);
132132
133133 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/horizontaljournaltest.qml"));
134134
@@ -336,9 +336,9 @@ private Q_SLOTS:
336336
337337 void testModelReset()
338338 {
339− QStringList heightList;
340− heightList << "100" << "50" << "125" << "25" << "50" << "50";
341− model->setStringList(heightList);
339+ QStringList widthList;
340+ widthList << "100" << "50" << "125" << "25" << "50" << "50";
341+ model->setStringList(widthList);
342342
343343 QTRY_COMPARE(hj->m_firstVisibleIndex, 0);
344344 QTRY_COMPARE(hj->m_visibleItems.count(), 6);
@@ -386,9 +386,9 @@ private Q_SLOTS:
386386 void testModelAppendRemoveLast()
387387 {
388388 WidthModel *model2 = new WidthModel();
389− QStringList heightList;
390− heightList << "100" << "50" << "125" << "25" << "50" << "50";
391− model2->setStringList(heightList);
389+ QStringList widthList;
390+ widthList << "100" << "50" << "125" << "25" << "50" << "50";
391+ model2->setStringList(widthList);
392392 hj->setModel(model2);
393393 delete model;
394394 model = model2;
@@ -454,6 +454,32 @@ private Q_SLOTS:
454454 QCOMPARE(hj->implicitHeight(), 310.);
455455 }
456456
457+ void testNegativeHeight()
458+ {
459+ QQuickItemPrivate::get(hj)->anchors()->resetFill();
460+ hj->setHeight(-8);
461+
462+ QStringList widthList;
463+ widthList << "100" << "50" << "125" << "25" << "50" << "50";
464+ model->setStringList(widthList);
465+
466+ QTRY_COMPARE(hj->m_visibleItems.count(), 0);
467+ QTRY_COMPARE(hj->implicitHeight(), 0.);
468+ }
469+
470+ void testNegativeDelegateCreationRange()
471+ {
472+ hj->setDelegateCreationBegin(0);
473+ hj->setDelegateCreationEnd(-100);
474+
475+ QStringList widthList;
476+ widthList << "100" << "50" << "50" << "30";
477+ model->setStringList(widthList);
478+
479+ QTRY_COMPARE(hj->m_visibleItems.count(), 0);
480+ QTRY_COMPARE(hj->implicitHeight(), 0.);
481+ }
482+
457483private:
458484 QQuickView *view;
459485 HorizontalJournal *hj;
tests/plugins/DashViews/organicgridtest.cppnew file+531
@@ -0,0 +1,531 @@
1+/*
2+ * Copyright (C) 2014 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 <QQuickView>
18+#include <QtTestGui>
19+#include <QDebug>
20+#include <QGuiApplication>
21+#include <QQuickView>
22+#include <QtQml/qqml.h>
23+#include <QStringListModel>
24+#include <QQmlContext>
25+#include <QQmlEngine>
26+#pragma GCC diagnostic push
27+#pragma GCC diagnostic ignored "-pedantic"
28+#include <private/qquickitem_p.h>
29+#pragma GCC diagnostic pop
30+
31+#include "organicgrid.h"
32+
33+class DummyModel : public QAbstractListModel {
34+public:
35+ DummyModel() : m_count(0) {}
36+
37+ int rowCount(const QModelIndex & /*parent*/) const
38+ {
39+ return m_count;
40+ }
41+
42+ QVariant data(const QModelIndex & /*index*/, int /*role*/) const
43+ {
44+ return QVariant();
45+ }
46+
47+ void setCount(int count)
48+ {
49+ beginResetModel();
50+ m_count = count;
51+ endResetModel();
52+ }
53+
54+ void addItem()
55+ {
56+ beginInsertRows(QModelIndex(), m_count, m_count);
57+ m_count++;
58+ endInsertRows();
59+ }
60+
61+ void removeLast()
62+ {
63+ beginRemoveRows(QModelIndex(), m_count - 1, m_count - 1);
64+ m_count--;
65+ endRemoveRows();
66+ }
67+
68+private:
69+ int m_count;
70+};
71+
72+class OrganicGridTest : public QObject
73+{
74+ Q_OBJECT
75+
76+private:
77+ void verifyItem(const QQuickItem *item, int modelIndex, qreal x, qreal y, bool visible)
78+ {
79+ QTRY_COMPARE(item->x(), x);
80+ QTRY_COMPARE(item->y(), y);
81+ QTRY_COMPARE(QQuickItemPrivate::get(item)->culled, !visible);
82+ const int inModuleIndex = modelIndex % 6;
83+ if (inModuleIndex == 0 || inModuleIndex == 1 || inModuleIndex == 3 || inModuleIndex == 5) {
84+ QTRY_COMPARE(item->height(), grid->smallDelegateSize().height());
85+ QTRY_COMPARE(item->width(), grid->smallDelegateSize().width());
86+ } else {
87+ QTRY_COMPARE(item->height(), grid->bigDelegateSize().height());
88+ QTRY_COMPARE(item->width(), grid->bigDelegateSize().width());
89+ }
90+ }
91+
92+ void checkInitialPositions()
93+ {
94+ QTRY_COMPARE(grid->m_visibleItems.count(), 18);
95+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
96+ QTRY_COMPARE(grid->m_numberOfModulesPerRow, 1);
97+ verifyItem(grid->m_visibleItems[ 0], 0, 0, 0, true);
98+ verifyItem(grid->m_visibleItems[ 1], 1, 100, 0, true);
99+ verifyItem(grid->m_visibleItems[ 2], 2, 0, 100, true);
100+ verifyItem(grid->m_visibleItems[ 3], 3, 190, 190, true);
101+ verifyItem(grid->m_visibleItems[ 4], 4, 200, 0, true);
102+ verifyItem(grid->m_visibleItems[ 5], 5, 290, 190, true);
103+ verifyItem(grid->m_visibleItems[ 6], 6, 0, 290, true);
104+ verifyItem(grid->m_visibleItems[ 7], 7, 100, 290, true);
105+ verifyItem(grid->m_visibleItems[ 8], 8, 0, 390, true);
106+ verifyItem(grid->m_visibleItems[ 9], 9, 190, 480, false);
107+ verifyItem(grid->m_visibleItems[10], 10, 200, 290, true);
108+ verifyItem(grid->m_visibleItems[11], 11, 290, 480, false);
109+ verifyItem(grid->m_visibleItems[12], 12, 0, 580, false);
110+ verifyItem(grid->m_visibleItems[13], 13, 100, 580, false);
111+ verifyItem(grid->m_visibleItems[14], 14, 0, 680, false);
112+ verifyItem(grid->m_visibleItems[15], 15, 190, 770, false);
113+ verifyItem(grid->m_visibleItems[16], 16, 200, 580, false);
114+ verifyItem(grid->m_visibleItems[17], 17, 290, 770, false);
115+ checkImplicitHeight(1150);
116+ }
117+
118+ void checkImplicitHeight(qreal implicitHeight)
119+ {
120+ QTRY_COMPARE(grid->m_implicitHeightDirty, false);
121+ QCOMPARE(grid->implicitHeight(), implicitHeight);
122+ }
123+
124+private Q_SLOTS:
125+ void init()
126+ {
127+ view = new QQuickView();
128+ view->setResizeMode(QQuickView::SizeRootObjectToView);
129+ view->engine()->addImportPath(BUILT_PLUGINS_DIR);
130+
131+ model = new DummyModel();
132+ model->setCount(21);
133+
134+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/organicgridtest.qml"));
135+
136+ view->show();
137+ view->resize(470, 400);
138+ QTest::qWaitForWindowExposed(view);
139+
140+ grid = dynamic_cast<OrganicGrid*>(view->rootObject()->findChild<QObject*>("grid"));
141+ grid->setModel(model);
142+
143+ checkInitialPositions();
144+ }
145+
146+ void cleanup()
147+ {
148+ delete view;
149+ delete model;
150+ }
151+
152+ void testInitialPosition()
153+ {
154+ }
155+
156+ void testWidthResize()
157+ {
158+ view->resize(770, 400);
159+ QTRY_COMPARE(grid->width(), 770.);
160+
161+ QTRY_COMPARE(grid->m_visibleItems.count(), 21);
162+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
163+ QTRY_COMPARE(grid->m_numberOfModulesPerRow, 2);
164+ verifyItem(grid->m_visibleItems[ 0], 0, 0, 0, true);
165+ verifyItem(grid->m_visibleItems[ 1], 1, 100, 0, true);
166+ verifyItem(grid->m_visibleItems[ 2], 2, 0, 100, true);
167+ verifyItem(grid->m_visibleItems[ 3], 3, 190, 190, true);
168+ verifyItem(grid->m_visibleItems[ 4], 4, 200, 0, true);
169+ verifyItem(grid->m_visibleItems[ 5], 5, 290, 190, true);
170+
171+ verifyItem(grid->m_visibleItems[ 6], 6, 390, 0, true);
172+ verifyItem(grid->m_visibleItems[ 7], 7, 490, 0, true);
173+ verifyItem(grid->m_visibleItems[ 8], 8, 390, 100, true);
174+ verifyItem(grid->m_visibleItems[ 9], 9, 580, 190, true);
175+ verifyItem(grid->m_visibleItems[10], 10, 590, 0, true);
176+ verifyItem(grid->m_visibleItems[11], 11, 680, 190, true);
177+
178+ verifyItem(grid->m_visibleItems[12], 12, 0, 290, true);
179+ verifyItem(grid->m_visibleItems[13], 13, 100, 290, true);
180+ verifyItem(grid->m_visibleItems[14], 14, 0, 390, true);
181+ verifyItem(grid->m_visibleItems[15], 15, 190, 480, false);
182+ verifyItem(grid->m_visibleItems[16], 16, 200, 290, true);
183+ verifyItem(grid->m_visibleItems[17], 17, 290, 480, false);
184+
185+ verifyItem(grid->m_visibleItems[18], 18, 390, 290, true);
186+ verifyItem(grid->m_visibleItems[19], 19, 490, 290, true);
187+ verifyItem(grid->m_visibleItems[20], 20, 390, 390, true);
188+
189+ checkImplicitHeight(570);
190+
191+ view->resize(769, 400);
192+
193+ // This is exactly the same block as the first again
194+ checkInitialPositions();
195+ }
196+
197+ void testColumnSpacing()
198+ {
199+ grid->setColumnSpacing(11);
200+
201+ QTRY_COMPARE(grid->m_needsRelayout, false);
202+ QTRY_COMPARE(grid->m_visibleItems.count(), 18);
203+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
204+ QTRY_COMPARE(grid->m_numberOfModulesPerRow, 1);
205+ verifyItem(grid->m_visibleItems[ 0], 0, 0, 0, true);
206+ verifyItem(grid->m_visibleItems[ 1], 1, 101, 0, true);
207+ verifyItem(grid->m_visibleItems[ 2], 2, 0, 100, true);
208+ verifyItem(grid->m_visibleItems[ 3], 3, 191, 190, true);
209+ verifyItem(grid->m_visibleItems[ 4], 4, 202, 0, true);
210+ verifyItem(grid->m_visibleItems[ 5], 5, 292, 190, true);
211+ verifyItem(grid->m_visibleItems[ 6], 6, 0, 290, true);
212+ verifyItem(grid->m_visibleItems[ 7], 7, 101, 290, true);
213+ verifyItem(grid->m_visibleItems[ 8], 8, 0, 390, true);
214+ verifyItem(grid->m_visibleItems[ 9], 9, 191, 480, false);
215+ verifyItem(grid->m_visibleItems[10], 10, 202, 290, true);
216+ verifyItem(grid->m_visibleItems[11], 11, 292, 480, false);
217+ verifyItem(grid->m_visibleItems[12], 12, 0, 580, false);
218+ verifyItem(grid->m_visibleItems[13], 13, 101, 580, false);
219+ verifyItem(grid->m_visibleItems[14], 14, 0, 680, false);
220+ verifyItem(grid->m_visibleItems[15], 15, 191, 770, false);
221+ verifyItem(grid->m_visibleItems[16], 16, 202, 580, false);
222+ verifyItem(grid->m_visibleItems[17], 17, 292, 770, false);
223+ checkImplicitHeight(1150);
224+
225+ grid->setColumnSpacing(10);
226+ QTRY_COMPARE(grid->m_needsRelayout, false);
227+
228+ // This is exactly the same block as the first again
229+ checkInitialPositions();
230+ }
231+
232+ void testRowSpacing()
233+ {
234+ grid->setRowSpacing(11);
235+
236+ QTRY_COMPARE(grid->m_needsRelayout, false);
237+ QTRY_COMPARE(grid->m_visibleItems.count(), 18);
238+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
239+ QTRY_COMPARE(grid->m_numberOfModulesPerRow, 1);
240+ verifyItem(grid->m_visibleItems[ 0], 0, 0, 0, true);
241+ verifyItem(grid->m_visibleItems[ 1], 1, 100, 0, true);
242+ verifyItem(grid->m_visibleItems[ 2], 2, 0, 101, true);
243+ verifyItem(grid->m_visibleItems[ 3], 3, 190, 191, true);
244+ verifyItem(grid->m_visibleItems[ 4], 4, 200, 0, true);
245+ verifyItem(grid->m_visibleItems[ 5], 5, 290, 191, true);
246+ verifyItem(grid->m_visibleItems[ 6], 6, 0, 292, true);
247+ verifyItem(grid->m_visibleItems[ 7], 7, 100, 292, true);
248+ verifyItem(grid->m_visibleItems[ 8], 8, 0, 393, true);
249+ verifyItem(grid->m_visibleItems[ 9], 9, 190, 483, false);
250+ verifyItem(grid->m_visibleItems[10], 10, 200, 292, true);
251+ verifyItem(grid->m_visibleItems[11], 11, 290, 483, false);
252+ verifyItem(grid->m_visibleItems[12], 12, 0, 584, false);
253+ verifyItem(grid->m_visibleItems[13], 13, 100, 584, false);
254+ verifyItem(grid->m_visibleItems[14], 14, 0, 685, false);
255+ verifyItem(grid->m_visibleItems[15], 15, 190, 775, false);
256+ verifyItem(grid->m_visibleItems[16], 16, 200, 584, false);
257+ verifyItem(grid->m_visibleItems[17], 17, 290, 775, false);
258+ checkImplicitHeight(1157);
259+
260+ grid->setRowSpacing(10);
261+ QTRY_COMPARE(grid->m_needsRelayout, false);
262+
263+ // This is exactly the same block as the first again
264+ checkInitialPositions();
265+ }
266+
267+ void testDelegateSizeChange()
268+ {
269+ grid->setSmallDelegateSize(QSizeF(30, 30));
270+ grid->setBigDelegateSize(QSizeF(50, 50));
271+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
272+ QTRY_COMPARE(grid->m_visibleItems.count(), 21);
273+ verifyItem(grid->m_visibleItems[ 0], 0, 0, 0, true);
274+ verifyItem(grid->m_visibleItems[ 1], 1, 40, 0, true);
275+ verifyItem(grid->m_visibleItems[ 2], 2, 0, 40, true);
276+ verifyItem(grid->m_visibleItems[ 3], 3, 60, 60, true);
277+ verifyItem(grid->m_visibleItems[ 4], 4, 80, 0, true);
278+ verifyItem(grid->m_visibleItems[ 5], 5, 100, 60, true);
279+
280+ verifyItem(grid->m_visibleItems[ 6], 6, 140, 0, true);
281+ verifyItem(grid->m_visibleItems[ 7], 7, 180, 0, true);
282+ verifyItem(grid->m_visibleItems[ 8], 8, 140, 40, true);
283+ verifyItem(grid->m_visibleItems[ 9], 9, 200, 60, true);
284+ verifyItem(grid->m_visibleItems[10], 10, 220, 0, true);
285+ verifyItem(grid->m_visibleItems[11], 11, 240, 60, true);
286+
287+ verifyItem(grid->m_visibleItems[12], 12, 280, 0, true);
288+ verifyItem(grid->m_visibleItems[13], 13, 320, 0, true);
289+ verifyItem(grid->m_visibleItems[14], 14, 280, 40, true);
290+ verifyItem(grid->m_visibleItems[15], 15, 340, 60, true);
291+ verifyItem(grid->m_visibleItems[16], 16, 360, 0, true);
292+ verifyItem(grid->m_visibleItems[17], 17, 380, 60, true);
293+
294+ verifyItem(grid->m_visibleItems[18], 18, 0, 100, true);
295+ verifyItem(grid->m_visibleItems[19], 19, 40, 100, true);
296+ verifyItem(grid->m_visibleItems[20], 20, 0, 140, true);
297+ checkImplicitHeight(190);
298+
299+ grid->setSmallDelegateSize(QSizeF(90, 90));
300+ grid->setBigDelegateSize(QSizeF(180, 180));
301+
302+ // This is exactly the same block as the first again
303+ checkInitialPositions();
304+ }
305+
306+ void testChangeModel()
307+ {
308+ DummyModel *model2 = new DummyModel();
309+ model2->setCount(6);
310+ grid->setModel(model2);
311+ delete model;
312+ model = model2;
313+
314+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
315+ QTRY_COMPARE(grid->m_visibleItems.count(), 6);
316+ verifyItem(grid->m_visibleItems[ 0], 0, 0, 0, true);
317+ verifyItem(grid->m_visibleItems[ 1], 1, 100, 0, true);
318+ verifyItem(grid->m_visibleItems[ 2], 2, 0, 100, true);
319+ verifyItem(grid->m_visibleItems[ 3], 3, 190, 190, true);
320+ verifyItem(grid->m_visibleItems[ 4], 4, 200, 0, true);
321+ verifyItem(grid->m_visibleItems[ 5], 5, 290, 190, true);
322+ checkImplicitHeight(280);
323+ }
324+
325+ void testModelReset()
326+ {
327+ model->setCount(6);
328+
329+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
330+ QTRY_COMPARE(grid->m_visibleItems.count(), 6);
331+ verifyItem(grid->m_visibleItems[ 0], 0, 0, 0, true);
332+ verifyItem(grid->m_visibleItems[ 1], 1, 100, 0, true);
333+ verifyItem(grid->m_visibleItems[ 2], 2, 0, 100, true);
334+ verifyItem(grid->m_visibleItems[ 3], 3, 190, 190, true);
335+ verifyItem(grid->m_visibleItems[ 4], 4, 200, 0, true);
336+ verifyItem(grid->m_visibleItems[ 5], 5, 290, 190, true);
337+ checkImplicitHeight(280);
338+ }
339+
340+ void testModelRemoveLastNonVisible()
341+ {
342+ model->removeLast();
343+
344+ // This is the same than checkInitialPositions but
345+ // with a different implicitHeight since there's an item less
346+ // in the model
347+ QTRY_COMPARE(grid->m_visibleItems.count(), 18);
348+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
349+ QTRY_COMPARE(grid->m_numberOfModulesPerRow, 1);
350+ verifyItem(grid->m_visibleItems[ 0], 0, 0, 0, true);
351+ verifyItem(grid->m_visibleItems[ 1], 1, 100, 0, true);
352+ verifyItem(grid->m_visibleItems[ 2], 2, 0, 100, true);
353+ verifyItem(grid->m_visibleItems[ 3], 3, 190, 190, true);
354+ verifyItem(grid->m_visibleItems[ 4], 4, 200, 0, true);
355+ verifyItem(grid->m_visibleItems[ 5], 5, 290, 190, true);
356+ verifyItem(grid->m_visibleItems[ 6], 6, 0, 290, true);
357+ verifyItem(grid->m_visibleItems[ 7], 7, 100, 290, true);
358+ verifyItem(grid->m_visibleItems[ 8], 8, 0, 390, true);
359+ verifyItem(grid->m_visibleItems[ 9], 9, 190, 480, false);
360+ verifyItem(grid->m_visibleItems[10], 10, 200, 290, true);
361+ verifyItem(grid->m_visibleItems[11], 11, 290, 480, false);
362+ verifyItem(grid->m_visibleItems[12], 12, 0, 580, false);
363+ verifyItem(grid->m_visibleItems[13], 13, 100, 580, false);
364+ verifyItem(grid->m_visibleItems[14], 14, 0, 680, false);
365+ verifyItem(grid->m_visibleItems[15], 15, 190, 770, false);
366+ verifyItem(grid->m_visibleItems[16], 16, 200, 580, false);
367+ verifyItem(grid->m_visibleItems[17], 17, 290, 770, false);
368+ checkImplicitHeight(960);
369+
370+ model->removeLast();
371+
372+ // Removing this one didn't cause any change since it only
373+ // was the second item of a non visible 6-module
374+ QTRY_COMPARE(grid->m_visibleItems.count(), 18);
375+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
376+ QTRY_COMPARE(grid->m_numberOfModulesPerRow, 1);
377+ verifyItem(grid->m_visibleItems[ 0], 0, 0, 0, true);
378+ verifyItem(grid->m_visibleItems[ 1], 1, 100, 0, true);
379+ verifyItem(grid->m_visibleItems[ 2], 2, 0, 100, true);
380+ verifyItem(grid->m_visibleItems[ 3], 3, 190, 190, true);
381+ verifyItem(grid->m_visibleItems[ 4], 4, 200, 0, true);
382+ verifyItem(grid->m_visibleItems[ 5], 5, 290, 190, true);
383+ verifyItem(grid->m_visibleItems[ 6], 6, 0, 290, true);
384+ verifyItem(grid->m_visibleItems[ 7], 7, 100, 290, true);
385+ verifyItem(grid->m_visibleItems[ 8], 8, 0, 390, true);
386+ verifyItem(grid->m_visibleItems[ 9], 9, 190, 480, false);
387+ verifyItem(grid->m_visibleItems[10], 10, 200, 290, true);
388+ verifyItem(grid->m_visibleItems[11], 11, 290, 480, false);
389+ verifyItem(grid->m_visibleItems[12], 12, 0, 580, false);
390+ verifyItem(grid->m_visibleItems[13], 13, 100, 580, false);
391+ verifyItem(grid->m_visibleItems[14], 14, 0, 680, false);
392+ verifyItem(grid->m_visibleItems[15], 15, 190, 770, false);
393+ verifyItem(grid->m_visibleItems[16], 16, 200, 580, false);
394+ verifyItem(grid->m_visibleItems[17], 17, 290, 770, false);
395+ checkImplicitHeight(960);
396+
397+ model->removeLast();
398+
399+ // Removing this one removes the first of a 6-module so
400+ // it does change height again
401+ QTRY_COMPARE(grid->m_visibleItems.count(), 18);
402+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
403+ QTRY_COMPARE(grid->m_numberOfModulesPerRow, 1);
404+ verifyItem(grid->m_visibleItems[ 0], 0, 0, 0, true);
405+ verifyItem(grid->m_visibleItems[ 1], 1, 100, 0, true);
406+ verifyItem(grid->m_visibleItems[ 2], 2, 0, 100, true);
407+ verifyItem(grid->m_visibleItems[ 3], 3, 190, 190, true);
408+ verifyItem(grid->m_visibleItems[ 4], 4, 200, 0, true);
409+ verifyItem(grid->m_visibleItems[ 5], 5, 290, 190, true);
410+ verifyItem(grid->m_visibleItems[ 6], 6, 0, 290, true);
411+ verifyItem(grid->m_visibleItems[ 7], 7, 100, 290, true);
412+ verifyItem(grid->m_visibleItems[ 8], 8, 0, 390, true);
413+ verifyItem(grid->m_visibleItems[ 9], 9, 190, 480, false);
414+ verifyItem(grid->m_visibleItems[10], 10, 200, 290, true);
415+ verifyItem(grid->m_visibleItems[11], 11, 290, 480, false);
416+ verifyItem(grid->m_visibleItems[12], 12, 0, 580, false);
417+ verifyItem(grid->m_visibleItems[13], 13, 100, 580, false);
418+ verifyItem(grid->m_visibleItems[14], 14, 0, 680, false);
419+ verifyItem(grid->m_visibleItems[15], 15, 190, 770, false);
420+ verifyItem(grid->m_visibleItems[16], 16, 200, 580, false);
421+ verifyItem(grid->m_visibleItems[17], 17, 290, 770, false);
422+ checkImplicitHeight(860);
423+
424+ }
425+
426+ void testModelAppendRemoveLast()
427+ {
428+ DummyModel *model2 = new DummyModel();
429+ model2->setCount(6);
430+ grid->setModel(model2);
431+ delete model;
432+ model = model2;
433+
434+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
435+ QTRY_COMPARE(grid->m_visibleItems.count(), 6);
436+ verifyItem(grid->m_visibleItems[0], 0, 0, 0, true);
437+ verifyItem(grid->m_visibleItems[1], 1, 100, 0, true);
438+ verifyItem(grid->m_visibleItems[2], 2, 0, 100, true);
439+ verifyItem(grid->m_visibleItems[3], 3, 190, 190, true);
440+ verifyItem(grid->m_visibleItems[4], 4, 200, 0, true);
441+ verifyItem(grid->m_visibleItems[5], 5, 290, 190, true);
442+ checkImplicitHeight(280);
443+
444+ model2->addItem();
445+
446+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
447+ QTRY_COMPARE(grid->m_visibleItems.count(), 7);
448+ verifyItem(grid->m_visibleItems[0], 0, 0, 0, true);
449+ verifyItem(grid->m_visibleItems[1], 1, 100, 0, true);
450+ verifyItem(grid->m_visibleItems[2], 2, 0, 100, true);
451+ verifyItem(grid->m_visibleItems[3], 3, 190, 190, true);
452+ verifyItem(grid->m_visibleItems[4], 4, 200, 0, true);
453+ verifyItem(grid->m_visibleItems[5], 5, 290, 190, true);
454+ verifyItem(grid->m_visibleItems[6], 6, 0, 290, true);
455+ checkImplicitHeight(380);
456+
457+ model2->addItem();
458+ model2->addItem();
459+
460+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
461+ QTRY_COMPARE(grid->m_visibleItems.count(), 9);
462+ verifyItem(grid->m_visibleItems[0], 0, 0, 0, true);
463+ verifyItem(grid->m_visibleItems[1], 1, 100, 0, true);
464+ verifyItem(grid->m_visibleItems[2], 2, 0, 100, true);
465+ verifyItem(grid->m_visibleItems[3], 3, 190, 190, true);
466+ verifyItem(grid->m_visibleItems[4], 4, 200, 0, true);
467+ verifyItem(grid->m_visibleItems[5], 5, 290, 190, true);
468+ verifyItem(grid->m_visibleItems[6], 6, 0, 290, true);
469+ verifyItem(grid->m_visibleItems[7], 7, 100, 290, true);
470+ verifyItem(grid->m_visibleItems[8], 8, 0, 390, true);
471+ checkImplicitHeight(570);
472+
473+ model2->removeLast();
474+
475+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
476+ QTRY_COMPARE(grid->m_visibleItems.count(), 8);
477+ verifyItem(grid->m_visibleItems[0], 0, 0, 0, true);
478+ verifyItem(grid->m_visibleItems[1], 1, 100, 0, true);
479+ verifyItem(grid->m_visibleItems[2], 2, 0, 100, true);
480+ verifyItem(grid->m_visibleItems[3], 3, 190, 190, true);
481+ verifyItem(grid->m_visibleItems[4], 4, 200, 0, true);
482+ verifyItem(grid->m_visibleItems[5], 5, 290, 190, true);
483+ verifyItem(grid->m_visibleItems[6], 6, 0, 290, true);
484+ verifyItem(grid->m_visibleItems[7], 7, 100, 290, true);
485+ checkImplicitHeight(380);
486+ }
487+
488+ void testDelegateCreationRanges()
489+ {
490+ grid->setSmallDelegateSize(QSizeF(30, 30));
491+ grid->setBigDelegateSize(QSizeF(50, 50));
492+ model->setCount(400);
493+ checkImplicitHeight(2290);
494+
495+ view->resize(470, 700);
496+ QTRY_COMPARE(grid->height(), 700.);
497+ checkImplicitHeight(2290);
498+ QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
499+ QTRY_COMPARE(grid->m_visibleItems.count(), 198);
500+
501+ grid->setDelegateCreationBegin(300);
502+ grid->setDelegateCreationEnd(400);
503+ checkImplicitHeight(2290);
504+
505+ QTRY_COMPARE(grid->m_firstVisibleIndex, 36);
506+ QTRY_COMPARE(grid->m_visibleItems.count(), 54);
507+ checkImplicitHeight(2290);
508+
509+ grid->resetDelegateCreationBegin();
510+ grid->resetDelegateCreationEnd();
511+
512+ view->resize(470, 470);
513+
514+ grid->setSmallDelegateSize(QSizeF(90, 90));
515+ grid->setBigDelegateSize(QSizeF(180, 180));
516+
517+ model->setCount(21);
518+
519+ // This is exactly the same block as the first again
520+ checkInitialPositions();
521+ }
522+
523+private:
524+ QQuickView *view;
525+ OrganicGrid *grid;
526+ DummyModel *model;
527+};
528+
529+QTEST_MAIN(OrganicGridTest)
530+
531+#include "organicgridtest.moc"
tests/plugins/DashViews/organicgridtest.qmlnew file+43
@@ -0,0 +1,43 @@
1+/*
2+ * Copyright (C) 2014 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+import QtQuick 2.1
18+import DashViews 0.1
19+
20+Item {
21+
22+ OrganicGrid {
23+ id: vj
24+ objectName: "grid"
25+ anchors.fill: parent
26+ columnSpacing: 10
27+ rowSpacing: 10
28+ smallDelegateSize: Qt.size(90, 90)
29+ bigDelegateSize: Qt.size(180, 180)
30+
31+ delegate: Rectangle {
32+ property real randomValue: Math.random()
33+ color: randomValue < 0.3 ? "green" : randomValue < 0.6 ? "blue" : "red";
34+ border.width: 3
35+
36+ Text {
37+ text: index
38+ x: 10
39+ y: 10
40+ }
41+ }
42+ }
43+}
tests/plugins/DashViews/organicgridtry.cppnew file+98
@@ -0,0 +1,98 @@
1+/*
2+ * Copyright (C) 2014 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 <QQuickView>
18+#include <QDebug>
19+#include <QGuiApplication>
20+#include <QQuickView>
21+#include <QtQml/qqml.h>
22+#include <QStringListModel>
23+#include <QQmlContext>
24+#include <QQmlEngine>
25+#include <QGuiApplication>
26+
27+#include "verticaljournal.h"
28+
29+class DummyModel : public QAbstractListModel {
30+ Q_OBJECT
31+public:
32+ DummyModel() : m_count(0) {}
33+
34+ int rowCount(const QModelIndex & /*parent*/) const
35+ {
36+ return m_count;
37+ }
38+
39+ QVariant data(const QModelIndex & /*index*/, int /*role*/) const
40+ {
41+ return QVariant();
42+ }
43+
44+ void setCount(int count)
45+ {
46+ beginResetModel();
47+ m_count = count;
48+ endResetModel();
49+ }
50+
51+public slots:
52+ void addItem()
53+ {
54+ beginInsertRows(QModelIndex(), m_count, m_count);
55+ m_count++;
56+ endInsertRows();
57+ }
58+
59+ void removeLast()
60+ {
61+ beginRemoveRows(QModelIndex(), m_count - 1, m_count - 1);
62+ m_count--;
63+ endRemoveRows();
64+ }
65+
66+private:
67+ int m_count;
68+};
69+
70+int main(int argc, char *argv[])
71+{
72+ QGuiApplication a(argc, argv);
73+
74+ QQuickView *view = new QQuickView();
75+ view->setResizeMode(QQuickView::SizeRootObjectToView);
76+ view->engine()->addImportPath(BUILT_PLUGINS_DIR);
77+
78+ DummyModel model;
79+ model.setCount(3);
80+
81+ QStringListModel listModel;
82+ listModel.setStringList(QStringList() << QString());
83+
84+ view->rootContext()->setContextProperty("listModel", &listModel);
85+ view->rootContext()->setContextProperty("gridModel", &model);
86+
87+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/organicgridtry.qml"));
88+
89+ view->show();
90+ view->resize(530, 400);
91+
92+ QObject::connect(view->rootObject(), SIGNAL(add()), &model, SLOT(addItem()));
93+ QObject::connect(view->rootObject(), SIGNAL(remove()), &model, SLOT(removeLast()));
94+
95+ return a.exec();
96+}
97+
98+#include "organicgridtry.moc"
tests/plugins/DashViews/organicgridtry.qmlnew file+94
@@ -0,0 +1,94 @@
1+/*
2+ * Copyright (C) 2014 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+import QtQuick 2.1
18+import DashViews 0.1
19+
20+Item {
21+ id: root
22+ signal add()
23+ signal remove()
24+
25+ ListViewWithPageHeader {
26+ id: lvwph
27+ model: listModel
28+ height: parent.height
29+ width: parent.width - controls.width
30+
31+ delegate: OrganicGrid {
32+ id: grid
33+ model: gridModel
34+ smallDelegateSize: Qt.size(90, 90)
35+ bigDelegateSize: Qt.size(180, 180)
36+ columnSpacing: 10
37+ rowSpacing: 10
38+ width: parent.width
39+ height: implicitHeight > 100 ? implicitHeight : 100
40+ delegateCreationBegin: lvwph.contentY
41+ delegateCreationEnd: lvwph.contentY + lvwph.height
42+
43+ delegate: Rectangle {
44+ width: 100
45+ color: "red";
46+ border.width: 3
47+
48+ Text {
49+ text: index
50+ x: 10
51+ y: 10
52+ }
53+ }
54+ }
55+ }
56+
57+ Rectangle {
58+ id: controls
59+ height: parent.height
60+ width: 100
61+ anchors.right: parent.right
62+ color: "gray"
63+ opacity: 0.4
64+
65+ Rectangle {
66+ id: addButton
67+ height: 50
68+ width: parent.width
69+ color: "blue"
70+ Text {
71+ text: "Add"
72+ anchors.centerIn: parent
73+ }
74+ MouseArea {
75+ anchors.fill: parent
76+ onClicked: root.add()
77+ }
78+ }
79+ Rectangle {
80+ anchors.top: addButton.bottom
81+ height: 50
82+ width: parent.width
83+ color: "red"
84+ Text {
85+ text: "Remove"
86+ anchors.centerIn: parent
87+ }
88+ MouseArea {
89+ anchors.fill: parent
90+ onClicked: root.remove()
91+ }
92+ }
93+ }
94+}
tests/plugins/DashViews/verticaljournaltest.cpp+32
@@ -459,6 +459,38 @@ private Q_SLOTS:
459459 verifyItem(vj->m_columnVisibleItems[1][2], 7, 160, 120, true);
460460 }
461461
462+ void testNegativeHeight()
463+ {
464+ QQuickItemPrivate::get(vj)->anchors()->resetFill();
465+ vj->setHeight(-8);
466+
467+ QStringList heightList;
468+ heightList << "100" << "50" << "50" << "30";
469+ model->setStringList(heightList);
470+
471+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
472+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 0);
473+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 0);
474+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 0);
475+ QTRY_COMPARE(vj->implicitHeight(), 0.);
476+ }
477+
478+ void testNegativeDelegateCreationRange()
479+ {
480+ vj->setDelegateCreationBegin(0);
481+ vj->setDelegateCreationEnd(-100);
482+
483+ QStringList heightList;
484+ heightList << "100" << "50" << "50" << "30";
485+ model->setStringList(heightList);
486+
487+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
488+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 0);
489+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 0);
490+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 0);
491+ QTRY_COMPARE(vj->implicitHeight(), 0.);
492+ }
493+
462494private:
463495 QQuickView *view;
464496 VerticalJournal *vj;
tests/plugins/LightDM/CMakeLists.txt+1
@@ -11,6 +11,7 @@ include_directories(
1111 ${LIBLIGHTDM_INCLUDE_DIRS}
1212 )
1313
14+add_dependencies(test-lightdm-dbus MockLightDM-full)
1415target_link_libraries(test-lightdm-dbus
1516 -L${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full
1617 -llightdm-qt5-2
tests/qmltests/Greeter/tst_Lockscreen.qml+1−1
@@ -134,7 +134,7 @@ Rectangle {
134134 if (data.pinPadAvailable) {
135135 compare(findChild(lockscreen, "pinPadButton8").text, "8", "Could not find number 8 on PinPad")
136136 } else {
137− compare(findChild(lockscreen, "pinPadButton8"), undefined, "Could find number 8 on PinPad even though it should be only OSK")
137+ compare(findChild(lockscreen, "pinPadButton8"), null, "Could find number 8 on PinPad even though it should be only OSK")
138138 }
139139 }
140140
tests/qmltests/Panel/tst_IndicatorRow.qml+2−1
@@ -32,6 +32,8 @@ Item {
3232
3333 function init_test()
3434 {
35+ indicatorModel.load();
36+
3537 indicatorRow.state = "initial";
3638 indicatorRow.currentItem = null;
3739 indicatorRow.unitProgress = 0.0;
@@ -53,7 +55,6 @@ Item {
5355
5456 Indicators.IndicatorsModel {
5557 id: indicatorModel
56− Component.onCompleted: load()
5758 }
5859
5960 UT.UnityTestCase {
tests/qmltests/Panel/tst_Indicators.qml+59−8
@@ -83,6 +83,8 @@ Item {
8383 when: windowShown
8484
8585 function init() {
86+ indicators.initialise();
87+
8688 indicators.hide();
8789 tryCompare(indicators.hideAnimation, "running", false);
8890 tryCompare(indicators, "state", "initial");
@@ -161,21 +163,70 @@ Item {
161163 compare(indicators.fullyOpened, true);
162164 }
163165
166+ function init_invisible_indicator(identifier) {
167+ tryCompareFunction(function() { return findChild(indicators, identifier+"-widget") !== null }, true);
168+ var item = findChild(indicators, identifier+"-widget");
169+
170+ item.enabled = false;
171+ }
172+
164173 function test_row_visible_menuContent_visible_data() { return [
165− {tag: "visible", index: 0, name: "indicator-fake1", visible: true },
166− {tag: "invisible", index: 1, name: "indicator-fake2", visible: false }]
174+ {tag: "first", visible: [false, true, true, true, true] },
175+ {tag: "adjacent", visible: [true, false, false, true, true] },
176+ {tag: "bounds", visible: [false, true, true, true, false] },
177+ {tag: "disjoint", visible: [true, false, true, false, true] },
178+ {tag: "last", visible: [true, true, true, true, false] }];
167179 }
168180
169181 function test_row_visible_menuContent_visible(data) {
182+
183+ indicators.show();
184+
170185 var indicatorTabs = findChild(indicators, "tabs");
171− var rowRepeater = findChild(indicators, "rowRepeater");
186+ var rowRepeater = findChild(indicators, "rowRepeater")
187+
188+
189+ for (var i = 0; i< data.visible.length; i++) {
190+ if (data.visible[i] === false)
191+ init_invisible_indicator("indicator-fake" + (i + 1));
192+ }
193+
194+ for (i = 0; i < data.visible.length; i++) {
195+ var shouldBeVisible = data.visible[i];
172196
173− var indicatorItem = rowRepeater.itemAt(data.index);
174− tryCompareFunction(function() { return indicatorItem.width > 0}, true);
175− tryCompare(indicatorItem, "visible", data.visible);
197+ // check item visibility
198+ var indicatorItem = rowRepeater.itemAt(i);
199+ tryCompare(indicatorItem, "visible", shouldBeVisible);
200+ // check tab visibility
201+ tryCompareFunction(function() { return findChild(indicatorTabs, "indicator-fake" + (i + 1)) !== null }, shouldBeVisible);
202+ }
203+ }
204+
205+ function test_indicator_visible_correct_tabs_data() { return [
206+ {tag: "current-first", currentIndex: 0, visible: [false, true, true, true, true], expected: 1 },
207+ {tag: "current-last", currentIndex: 4, visible: [true, true, true, true, false], expected: 3 },
208+ {tag: "after", currentIndex: 0, visible: [true, false, true, true, true], expected: 0 },
209+ {tag: "before", currentIndex: 1, visible: [false, true, true, true, true], expected: 1 }];
210+ }
211+
212+ function test_indicator_visible_correct_tabs(data) {
213+
214+ var indicatorTabs = findChild(indicators, "tabs");
215+ var indicatorRow = findChild(indicators, "indicatorRow");
216+
217+ indicators.show();
218+ indicatorRow.setCurrentItem(data.currentIndex);
219+ tryCompare(indicators, "fullyOpened", true);
220+
221+ for (var i = 0; i< data.visible.length; i++) {
222+ if (data.visible[i] === false)
223+ init_invisible_indicator("indicator-fake" + (i + 1));
224+ }
176225
177− var indicatorTab = findChild(indicatorTabs, data.name)
178− tryCompareFunction(function() { return indicatorTab !== undefined }, data.visible);
226+ // check for current selected item
227+ tryCompare(indicatorRow, "currentItemIndex", data.expected);
228+ // check for current selected tab
229+ tryCompareFunction(function() { return findChild(indicatorTabs, "indicator-fake" + (data.expected + 1)) === indicatorTabs.selectedTab }, true);
179230 }
180231 }
181232}
tests/qmltests/Panel/tst_MenuContent.qml+2−2
@@ -103,13 +103,13 @@ Item {
103103
104104 function selected_tab_equals_test_tab() {
105105 var currentTab = menu_content_test.findChild(menuContent, "tabs").selectedTab
106− if (currentTab == undefined) {
106+ if (currentTab === null) {
107107 console.log("selected tab undefined");
108108 return false;
109109 }
110110
111111 var testTab = menu_content_test.findChild(menuContent, testTabObjectName);
112− if (testTab == undefined) {
112+ if (testTab === null) {
113113 console.log("test_tab " + testTabObjectName + " undefined");
114114 return false;
115115 }
tests/qmltests/Panel/tst_Panel.qml+14−12
@@ -56,6 +56,8 @@ Item {
5656 }
5757
5858 function init() {
59+ panel.indicators.initialise();
60+
5961 searchClicked = false;
6062 panel.indicators.hide();
6163 tryCompare(panel.indicators.hideAnimation, "running", false);
@@ -64,16 +66,16 @@ Item {
6466
6567 function get_indicator_item(index) {
6668 var rowRepeater = findChild(panel.indicators, "rowRepeater");
67− verify(rowRepeater != undefined);
69+ verify(rowRepeater !== null);
6870 return rowRepeater.itemAt(index);
6971 }
7072
7173 function get_indicator_item_position(index) {
7274 var indicatorRow = findChild(panel.indicators, "indicatorRow");
73− verify(indicatorRow != undefined);
75+ verify(indicatorRow !== null);
7476
7577 var indicatorItem = get_indicator_item(index);
76− verify(indicatorItem != undefined);
78+ verify(indicatorItem !== null);
7779
7880 return panel.mapFromItem(indicatorItem, indicatorItem.width/2, indicatorItem.height/2);
7981 }
@@ -118,7 +120,7 @@ Item {
118120 // no hint animation when fullscreen
119121 compare(panel.indicators.y, -panel.panelHeight);
120122 var indicatorRow = findChild(panel.indicators, "indicatorRow");
121− verify(indicatorRow != undefined);
123+ verify(indicatorRow !== null);
122124 compare(indicatorRow.y, 0);
123125 compare(panel.indicators.height, panel.indicators.panelHeight);
124126 compare(panel.indicators.partiallyOpened, false,
@@ -143,13 +145,13 @@ Item {
143145 }
144146
145147 var indicatorRow = findChild(panel.indicators, "indicatorRow");
146− verify(indicatorRow != undefined);
148+ verify(indicatorRow !== null);
147149
148150 var rowRepeater = findChild(panel.indicators, "rowRepeater");
149− verify(indicatorRow != undefined);
151+ verify(indicatorRow !== null);
150152
151153 var menuContent = findChild(panel.indicators, "menuContent");
152− verify(indicatorRow != undefined);
154+ verify(indicatorRow !== null);
153155
154156 // Wait for the indicators to get into position.
155157 // (switches between normal and fullscreen modes are animated)
@@ -203,7 +205,7 @@ Item {
203205 panel.searchVisible = true;
204206
205207 var searchIndicator = findChild(panel, "search");
206− verify(searchIndicator != undefined);
208+ verify(searchIndicator !== null);
207209
208210 tap(searchIndicator, 1, 1);
209211
@@ -216,7 +218,7 @@ Item {
216218 panel.searchVisible = false;
217219
218220 var searchIndicator = findChild(panel, "search");
219− verify(searchIndicator != undefined);
221+ verify(searchIndicator !== null);
220222
221223 tap(searchIndicator, 1, 1);
222224
@@ -232,14 +234,14 @@ Item {
232234 panel.searchVisible = false;
233235
234236 var indicatorRow = findChild(panel.indicators, "indicatorRow");
235− verify(indicatorRow != undefined);
237+ verify(indicatorRow !== null);
236238
237239 var rowRepeater = findChild(panel.indicators, "rowRepeater");
238− verify(indicatorRow != undefined);
240+ verify(indicatorRow !== null);
239241
240242 // Get the first indicator
241243 var indicatorItemFirst = get_indicator_item(0);
242− verify(indicatorItemFirst != undefined);
244+ verify(indicatorItemFirst !== undefined);
243245
244246 var indicatorItemCoordFirst = get_indicator_item_position(0);
245247 var indicatorItemCoordNext = get_indicator_item_position(indicatorRow.count - 1);
tests/qmltests/tst_Shell.qml+4−4
@@ -69,17 +69,17 @@ Item {
6969 var dashContentList = findChild(shell, "dashContentList");
7070 waitForRendering(dashContentList);
7171 var homeLoader = findChild(dashContentList, "home.scope loader");
72− ok = homeLoader !== undefined
72+ ok = homeLoader !== null
7373 && homeLoader.item !== undefined;
7474
7575 var dashHome = findChild(shell, "DashHome");
76− ok &= dashHome !== undefined;
76+ ok &= dashHome !== null;
7777
7878 var greeter = findChild(shell, "greeter");
79− ok &= greeter !== undefined;
79+ ok &= greeter !== null;
8080
8181 var launcherPanel = findChild(shell, "launcherPanel");
82− ok &= launcherPanel !== undefined;
82+ ok &= launcherPanel !== null;
8383
8484 attempts++;
8585 if (!ok) {
tests/utils/modules/Unity/Test/UnityTestCase.qml+2−2
@@ -83,7 +83,7 @@ TestCase {
8383 }
8484 childs.splice(0, 1);
8585 }
86− return undefined;
86+ return null;
8787 }
8888
8989 // Find an object with the given name in the children tree of "obj"
@@ -103,7 +103,7 @@ TestCase {
103103 }
104104 childs.splice(0, 1);
105105 }
106− return undefined;
106+ return null;
107107 }
108108
109109 // Type a full string instead of keyClick letter by letter