aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörgen Scheibengruber <jorgen.scheibengruber@nokia.com>2010-06-02 17:27:26 +0300
committerJörgen Scheibengruber <jorgen.scheibengruber@nokia.com>2010-06-02 17:27:26 +0300
commit74cd4f40bd629ab2782f518234ebf3bceecd0f22 (patch)
tree523d11e3c998d7efa7e2c5e0123855413b14fb35
parent86322ab7fa72e32f8830b7cb23dfb5c1de988f58 (diff)
parentdd9a00977c21f19291b5ff2f87a39e1f5a8df77d (diff)
Merge branch 'master' of gitorious.org:maemo-6-ui-framework/libdui0.20.14-1
-rw-r--r--benchmarks/performancebenchmark/emptymainloophelper.cpp18
-rw-r--r--debian/.gitignore4
-rw-r--r--debian/changelog40
-rw-r--r--debian/control2
-rw-r--r--debian/libmeegotouchcore0.install3
-rw-r--r--demos/applicationextension/main.cpp5
-rw-r--r--demos/widgetsgallery/applicationmenupage.cpp65
-rw-r--r--demos/widgetsgallery/applicationmenupage.h5
-rw-r--r--demos/widgetsgallery/bannerspage.cpp151
-rw-r--r--demos/widgetsgallery/bannerspage.h53
-rw-r--r--demos/widgetsgallery/bubblelistmodel.cpp55
-rw-r--r--demos/widgetsgallery/bubblelistmodel.h51
-rw-r--r--demos/widgetsgallery/bubblepage.cpp167
-rw-r--r--demos/widgetsgallery/bubblepage.h51
-rw-r--r--demos/widgetsgallery/checkboxpage.cpp12
-rw-r--r--demos/widgetsgallery/checkboxpage.h2
-rw-r--r--demos/widgetsgallery/comboboxpage.cpp26
-rw-r--r--demos/widgetsgallery/containerpage.cpp3
-rw-r--r--demos/widgetsgallery/contentitemspage.cpp216
-rw-r--r--demos/widgetsgallery/contentitemspage.h45
-rw-r--r--demos/widgetsgallery/dialogsandnotificationspage.cpp414
-rw-r--r--demos/widgetsgallery/dialogsandnotificationspage.h88
-rw-r--r--demos/widgetsgallery/displaymodespage.cpp11
-rw-r--r--demos/widgetsgallery/feedbackpage.cpp3
-rw-r--r--demos/widgetsgallery/feedbackpage.h2
-rw-r--r--demos/widgetsgallery/iconbuttonpage.cpp5
-rw-r--r--demos/widgetsgallery/iconbuttonpage.h2
-rw-r--r--demos/widgetsgallery/imagepage.cpp8
-rw-r--r--demos/widgetsgallery/itemdetailpage.cpp117
-rw-r--r--demos/widgetsgallery/itemdetailpage.h17
-rw-r--r--demos/widgetsgallery/labelpage.cpp37
-rw-r--r--demos/widgetsgallery/labelpage.h3
-rw-r--r--demos/widgetsgallery/languagepage.cpp9
-rw-r--r--demos/widgetsgallery/main.cpp10
-rw-r--r--demos/widgetsgallery/maincategorypage.cpp107
-rw-r--r--demos/widgetsgallery/maincategorypage.h34
-rw-r--r--demos/widgetsgallery/mainpage.cpp (renamed from demos/widgetsgallery/listpage.cpp)408
-rw-r--r--demos/widgetsgallery/mainpage.h (renamed from demos/widgetsgallery/listpage.h)54
-rw-r--r--demos/widgetsgallery/mgridpage.cpp57
-rw-r--r--demos/widgetsgallery/mgridpage.h1
-rw-r--r--demos/widgetsgallery/mlistpage.cpp207
-rw-r--r--demos/widgetsgallery/mlistpage.h12
-rw-r--r--demos/widgetsgallery/multipleselectiondialogspage.cpp126
-rw-r--r--demos/widgetsgallery/multipleselectiondialogspage.h55
-rw-r--r--demos/widgetsgallery/objectmenupage.cpp3
-rw-r--r--demos/widgetsgallery/phonebookcell.cpp143
-rw-r--r--demos/widgetsgallery/phonebookcell.h73
-rw-r--r--demos/widgetsgallery/phonebookmodel.cpp290
-rw-r--r--demos/widgetsgallery/phonebookmodel.h56
-rw-r--r--demos/widgetsgallery/progressbarpage.cpp4
-rw-r--r--demos/widgetsgallery/pushbuttonpage.cpp5
-rw-r--r--demos/widgetsgallery/pushbuttonpage.h2
-rw-r--r--demos/widgetsgallery/querydialogspage.cpp193
-rw-r--r--demos/widgetsgallery/querydialogspage.h56
-rw-r--r--demos/widgetsgallery/singleselectiondialogspage.cpp227
-rw-r--r--demos/widgetsgallery/singleselectiondialogspage.h63
-rw-r--r--demos/widgetsgallery/sliderpage.cpp3
-rw-r--r--demos/widgetsgallery/spinnerpage.cpp9
-rw-r--r--demos/widgetsgallery/spinnerpage.h2
-rw-r--r--demos/widgetsgallery/swaphook.cpp4
-rw-r--r--demos/widgetsgallery/switchpage.cpp3
-rw-r--r--demos/widgetsgallery/switchpage.h2
-rw-r--r--demos/widgetsgallery/templatepage.cpp34
-rw-r--r--demos/widgetsgallery/templatepage.h24
-rw-r--r--demos/widgetsgallery/textentrypage.cpp7
-rw-r--r--demos/widgetsgallery/theme/base/style/widgetsgallery.css24
-rw-r--r--demos/widgetsgallery/timedemo.cpp8
-rw-r--r--demos/widgetsgallery/timedemo.h6
-rw-r--r--demos/widgetsgallery/toolbarpage.cpp15
-rw-r--r--demos/widgetsgallery/translations/widgetsgallery_ar.ts713
-rw-r--r--demos/widgetsgallery/translations/widgetsgallery_de.ts713
-rw-r--r--demos/widgetsgallery/translations/widgetsgallery_en.ts689
-rw-r--r--demos/widgetsgallery/translations/widgetsgallery_fi.ts708
-rw-r--r--demos/widgetsgallery/translations/widgetsgallery_hu.ts709
-rw-r--r--demos/widgetsgallery/translations/widgetsgallery_ur.ts687
-rw-r--r--demos/widgetsgallery/translations/widgetsgallery_zh_CN.ts659
-rw-r--r--demos/widgetsgallery/widgetsgallery.pro34
-rw-r--r--mkspecs/common.pri3
-rw-r--r--mkspecs/features/meegotouch_defines.prf.in3
-rw-r--r--plainqt/style/qtmaemo6style.cpp6
-rw-r--r--plainqt/style/qtmaemo6style_p.h1
-rw-r--r--projects.pro3
-rw-r--r--src/corelib/animation/widget/mwidgetmoveanimation.cpp92
-rw-r--r--src/corelib/animation/widget/mwidgetmoveanimation.h53
-rw-r--r--src/corelib/animation/widget/mwidgetmoveanimation_p.h44
-rw-r--r--src/corelib/animation/widget/widget.pri3
-rw-r--r--src/corelib/core/mapplicationifproxy.cpp16
-rw-r--r--src/corelib/core/mcomponentcache.cpp52
-rw-r--r--src/corelib/core/mcomponentcache.h4
-rw-r--r--src/corelib/core/mcomponentcache_p.h10
-rw-r--r--src/corelib/core/mcomponentdata.cpp3
-rw-r--r--src/corelib/corelib.pro6
-rw-r--r--src/corelib/events/morientationtracker.cpp6
-rw-r--r--src/corelib/events/mpanrecognizer.cpp17
-rw-r--r--src/corelib/i18n/mlocale.cpp679
-rw-r--r--src/corelib/i18n/mlocale.h79
-rw-r--r--src/corelib/i18n/mlocale_p.h11
-rw-r--r--src/corelib/icu-extradata/extradata.pri12
-rw-r--r--src/corelib/icu-extradata/extradata.txt1322
-rw-r--r--src/corelib/icu-extradata/packagelist.txt1
-rw-r--r--src/corelib/scene/mscene.cpp70
-rw-r--r--src/corelib/scene/mscene_p.h1
-rw-r--r--src/corelib/scene/mscenemanager.cpp45
-rw-r--r--src/corelib/style/mwidgetfadeanimationstyle.h2
-rw-r--r--src/corelib/style/mwidgetmoveanimationstyle.h43
-rw-r--r--src/corelib/style/style.pri1
-rw-r--r--src/corelib/widgets/mabstractitemmodel.cpp171
-rw-r--r--src/corelib/widgets/mabstractitemmodel.h141
-rw-r--r--src/corelib/widgets/mabstractitemmodel_p.h56
-rw-r--r--src/corelib/widgets/mapplicationpage.h2
-rw-r--r--src/corelib/widgets/mapplicationwindow.cpp16
-rw-r--r--src/corelib/widgets/mbubbleitem.cpp171
-rw-r--r--src/corelib/widgets/mbubbleitem.h294
-rw-r--r--src/corelib/widgets/mbubbleitem_p.h38
-rw-r--r--src/corelib/widgets/mbubbleitemmodel.cpp20
-rw-r--r--src/corelib/widgets/mbubbleitemmodel.h91
-rw-r--r--src/corelib/widgets/mcontentitem.cpp27
-rw-r--r--src/corelib/widgets/mcontentitem.h34
-rw-r--r--src/corelib/widgets/mcontentitem_p.h1
-rw-r--r--src/corelib/widgets/mcontentitemmodel.h32
-rw-r--r--src/corelib/widgets/mlabel.cpp2
-rw-r--r--src/corelib/widgets/mlist.cpp24
-rw-r--r--src/corelib/widgets/mlist.h11
-rw-r--r--src/corelib/widgets/mlist_p.h2
-rw-r--r--src/corelib/widgets/mlistfilter.cpp167
-rw-r--r--src/corelib/widgets/mlistfilter.h127
-rw-r--r--src/corelib/widgets/mlistfilter_p.h53
-rw-r--r--src/corelib/widgets/mlistitem.cpp51
-rw-r--r--src/corelib/widgets/mlistitem.h72
-rw-r--r--src/corelib/widgets/mlistitem_p.h37
-rw-r--r--src/corelib/widgets/mlistitemmodel.h30
-rw-r--r--src/corelib/widgets/mnavigationbar.h4
-rw-r--r--src/corelib/widgets/mpannableviewport.cpp15
-rw-r--r--src/corelib/widgets/mpannableviewport.h1
-rw-r--r--src/corelib/widgets/mpannableviewportlayout.cpp6
-rw-r--r--src/corelib/widgets/mpannablewidget.cpp23
-rw-r--r--src/corelib/widgets/mphysics2dpanning.cpp139
-rw-r--r--src/corelib/widgets/mphysics2dpanning.h2
-rw-r--r--src/corelib/widgets/mphysics2dpanning_p.h11
-rw-r--r--src/corelib/widgets/mprogressindicator.h2
-rw-r--r--src/corelib/widgets/msortfilterproxymodel.cpp38
-rw-r--r--src/corelib/widgets/msortfilterproxymodel.h53
-rw-r--r--src/corelib/widgets/mtextedit.cpp36
-rw-r--r--src/corelib/widgets/mtextedit.h23
-rw-r--r--src/corelib/widgets/mtoolbar.h14
-rw-r--r--src/corelib/widgets/mwindow.cpp120
-rw-r--r--src/corelib/widgets/mwindow_p.h4
-rw-r--r--src/corelib/widgets/widgets.pri16
-rw-r--r--src/extensions/applicationextension/mapplicationextensionarea.cpp4
-rw-r--r--src/extensions/applicationextension/mapplicationextensionarea.h4
-rw-r--r--src/extensions/applicationextension/mapplicationextensionareaview.cpp5
-rw-r--r--src/extensions/applicationextension/mapplicationextensionmanager.cpp171
-rw-r--r--src/extensions/applicationextension/mapplicationextensionmanager.h76
-rw-r--r--src/extensions/applicationextension/mapplicationextensionmetadata.cpp16
-rw-r--r--src/extensions/applicationextension/mapplicationextensionmetadata.h2
-rw-r--r--src/extensions/applicationextension/mextensionareaview.cpp27
-rw-r--r--src/extensions/applicationextension/mextensionrunner.cpp6
-rw-r--r--src/extensions/extensions.pro5
-rw-r--r--src/extensions/mashup/mashup/mappletinstancemanager.cpp73
-rw-r--r--src/extensions/mashup/mashup/mappletinstancemanager.h13
-rw-r--r--src/extensions/mextensionwatcher.cpp68
-rw-r--r--src/extensions/mextensionwatcher.h98
-rw-r--r--src/icu-extradata/4.4.1/fi.txt21
-rw-r--r--src/icu-extradata/4.4.1/it.txt21
-rw-r--r--src/icu-extradata/4.4.1/lang/de_CH.txt712
-rw-r--r--src/icu-extradata/4.4.1/region/de_CH.txt294
-rw-r--r--src/icu-extradata/icu-extradata.pro85
-rw-r--r--src/include/MAbstractItemModel1
-rw-r--r--src/include/MBubbleItem1
-rw-r--r--src/include/MListFilter2
-rw-r--r--src/include/MListItem1
-rw-r--r--src/include/MSortFilterProxyModel1
-rw-r--r--src/include/mabstractitemmodel.h20
-rw-r--r--src/include/mbubbleitem.h20
-rw-r--r--src/include/mlistfilter.h21
-rw-r--r--src/include/mlistitem.h20
-rw-r--r--src/include/msortfilterproxymodel.h20
-rw-r--r--src/views/animations/mwarpanimation.cpp6
-rw-r--r--src/views/mapplicationmenuview.h10
-rw-r--r--src/views/mbubbleitembackgroundview.cpp0
-rw-r--r--src/views/mbubbleitembackgroundview.h0
-rw-r--r--src/views/mbubbleitemview.cpp299
-rw-r--r--src/views/mbubbleitemview.h74
-rw-r--r--src/views/mbubbleitemview_p.h70
-rw-r--r--src/views/mbuttonview.cpp18
-rw-r--r--src/views/mcontentitemview.cpp21
-rw-r--r--src/views/mcontentitemview_p.h3
-rw-r--r--src/views/mdialogview.cpp4
-rw-r--r--src/views/mescapebuttonpanelview.cpp13
-rw-r--r--src/views/mescapebuttonpanelview_p.h4
-rw-r--r--src/views/mlabelview.cpp15
-rw-r--r--src/views/mlistitemview.cpp129
-rw-r--r--src/views/mlistitemview.h50
-rw-r--r--src/views/mlistitemview_p.h44
-rw-r--r--src/views/mlistview.cpp6
-rw-r--r--src/views/mlistview.h5
-rw-r--r--src/views/mlistview_p.cpp12
-rw-r--r--src/views/mnavigationbarview.cpp2
-rw-r--r--src/views/mscenelayereffectdimview.cpp2
-rw-r--r--src/views/msliderview.cpp158
-rw-r--r--src/views/mstatusbarview.cpp27
-rw-r--r--src/views/mstatusbarview.h9
-rw-r--r--src/views/mtexteditview.cpp44
-rw-r--r--src/views/mtexteditview_p.h1
-rw-r--r--src/views/mtoolbarview.cpp230
-rw-r--r--src/views/mtoolbarview_p.h30
-rw-r--r--src/views/style/mbubbleitembackgroundstyle.h50
-rw-r--r--src/views/style/mlistitemstyle.h36
-rw-r--r--src/views/style/mtexteditstyle.h30
-rw-r--r--src/views/style/style.pri2
-rw-r--r--src/views/views.pri5
-rw-r--r--src/views/widgets/mbubbleitembackground.cpp129
-rw-r--r--src/views/widgets/mbubbleitembackground_p.h94
-rw-r--r--src/views/widgets/widgets.pri2
-rw-r--r--tests/ft_locales/ft_locales-test-input-icu-4.2.1.txt816
-rw-r--r--tests/ft_locales/ft_locales-test-input-icu-4.4.1.txt796
-rw-r--r--tests/ft_locales/ft_locales.cpp38
-rw-r--r--tests/ft_locales/ft_locales.h4
-rw-r--r--tests/stubs/mappletinstancemanager_stub.h13
-rw-r--r--tests/stubs/mapplicationextensionmanager_stub.h66
-rw-r--r--tests/stubs/mextensionwatcher_stub.h75
-rw-r--r--tests/tests.pro7
-rw-r--r--tests/ut_mabstractitemmodel/.gitignore1
-rw-r--r--tests/ut_mabstractitemmodel/ut_mabstractitemmodel.cpp229
-rw-r--r--tests/ut_mabstractitemmodel/ut_mabstractitemmodel.h64
-rw-r--r--tests/ut_mabstractitemmodel/ut_mabstractitemmodel.pro11
-rw-r--r--tests/ut_mappletinstancemanager/ut_mappletinstancemanager.cpp44
-rw-r--r--tests/ut_mappletinstancemanager/ut_mappletinstancemanager.h5
-rw-r--r--tests/ut_mappletinstancemanager/ut_mappletinstancemanager.pro3
-rw-r--r--tests/ut_mapplicationextensionarea/ut_mapplicationextensionarea.pro7
-rw-r--r--tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.cpp123
-rw-r--r--tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.h7
-rw-r--r--tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.pro9
-rw-r--r--tests/ut_mapplicationextensionmetadata/ut_mapplicationextensionmetadata.cpp20
-rw-r--r--tests/ut_mapplicationextensionmetadata/ut_mapplicationextensionmetadata.pro4
-rw-r--r--tests/ut_mapplicationpage/ut_mapplicationpage.cpp2
-rw-r--r--tests/ut_mcalendar/ut_mcalendar.cpp40
-rw-r--r--tests/ut_mextensionwatcher/.gitignore1
-rw-r--r--tests/ut_mextensionwatcher/ut_mextensionwatcher.cpp135
-rw-r--r--tests/ut_mextensionwatcher/ut_mextensionwatcher.h53
-rw-r--r--tests/ut_mextensionwatcher/ut_mextensionwatcher.pro30
-rw-r--r--tests/ut_mpannableviewport/ut_mpannableviewport.cpp18
-rw-r--r--tests/ut_mpannableviewport/ut_mpannableviewport.h2
-rw-r--r--tests/ut_mpannablewidget/ut_mpannablewidget.cpp4
-rw-r--r--tests/ut_mstatusbarview/ut_mstatusbarview.cpp55
-rw-r--r--tests/ut_mstatusbarview/ut_mstatusbarview.h49
-rw-r--r--tests/ut_mstatusbarview/ut_mstatusbarview.pro23
-rw-r--r--tests/ut_mtoolbarview/ut_mtoolbarview.cpp325
-rw-r--r--tests/ut_mtoolbarview/ut_mtoolbarview.h5
-rw-r--r--tests/ut_phonenumberformatting/ut_phonenumberformatting.cpp297
-rw-r--r--tests/ut_phonenumberformatting/ut_phonenumberformatting.h35
-rw-r--r--tests/ut_phonenumberformatting/ut_phonenumberformatting.pro9
-rwxr-xr-xtools/messageid-check15
-rw-r--r--tools/mnotificationtool/mnotificationtool.cpp30
254 files changed, 14615 insertions, 5991 deletions
diff --git a/benchmarks/performancebenchmark/emptymainloophelper.cpp b/benchmarks/performancebenchmark/emptymainloophelper.cpp
index a5d3a3e1..8c5f4db0 100644
--- a/benchmarks/performancebenchmark/emptymainloophelper.cpp
+++ b/benchmarks/performancebenchmark/emptymainloophelper.cpp
@@ -20,12 +20,20 @@
#include "emptymainloophelper.h"
#include <MTheme>
+#include <MComponentData>
#include <QApplication>
#include <QTimer>
+#include <MDebug>
+#include <QString>
+
#include <cstdlib>
+#ifdef Q_OS_LINUX
+#include <sys/time.h>
+#endif
+
EmptyMainLoopHelper::EmptyMainLoopHelper() :
terminationType( QuitOnEmpty )
@@ -55,6 +63,16 @@ void EmptyMainLoopHelper::terminateOnEmptyMainLoop2()
if (terminationType == ExitOnEmpty) {
exit(0);
} else {
+#ifdef Q_OS_LINUX
+ struct timeval t;
+ gettimeofday(&t, 0);
+
+ mDebug("EmptyMainLoopHelper") << QString("%1[%2%3]: quitting")
+ .arg(MComponentData::instance()->appName())
+ .arg((int)t.tv_sec)
+ .arg((int)(t.tv_usec % 1000000), 6, 10, (const QChar)'0');
+#endif
+
qApp->quit();
}
}
diff --git a/debian/.gitignore b/debian/.gitignore
index 365167b5..ee5a0cd8 100644
--- a/debian/.gitignore
+++ b/debian/.gitignore
@@ -1,5 +1,6 @@
libmeegotouch-dev
libmeegotouch-tests
+libmeegotouch-tests-dbg
*.debhelper
*.substvars
libmeegotouch-bin-dbg
@@ -22,6 +23,7 @@ libmeegotouch-l10n-hu
libmeegotouch-l10n-ur
libmeegotouch-l10n-zh-cn
libmeegotouch-benchmarks
+libmeegotouch-benchmarks-dbg
tmp
files
meegotouch-demos
@@ -42,7 +44,9 @@ meegotouch-demos-widgetsgallery-l10n-zh-cn
meegotouch-demos-appletinstallationsource
meegotouch-demos-appletinstallationsource-dbg
meegotouch-dev-tools
+meegotouch-dev-tools-dbg
meegotouch-demos-plainqt-dbg
meegotouch-demos-plainqt
meegotouch-im-context
meegotouch-qt-style
+meegotouch-qt-style-dbg
diff --git a/debian/changelog b/debian/changelog
index c7a7aa99..7351a1bc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,42 @@
+libmeegotouch (0.20.14-1) unstable; urgency=low
+
+ * Fixes: ABI break between 0.20.12 and 0.20.13 in MLabelView
+ * Implemented: SWP#-DUI-2781
+ * Implemented: SWP#-DUI-2782
+ * Fixes: NB#171577 - Fixed adding MActions with orientation-flags no matter what's the current orientation
+ * Fixes: NB#167398 - Tabs unselected when the application menu is opened
+ * Fixes: NB#171957 - No mouse click signal for speechbubbles
+ * Fixes: NB#171256 - Multiple windows of the same application should share the same GL context
+ * Fixes: NB#169260 - Finnish day and month names shown using wrong form
+
+ -- Jorgen Scheibengruber <jorgen.scheibengruber@nokia.com> Wed, 02 Jun 2010 17:23:13 +0300
+
+libmeegotouch (0.20.13-1) unstable; urgency=low
+
+ * Fixes: NB#166495 - No smooth panning for large pages possible
+ * Fixes: NB#170526 - MPhysics2DPanning does not go above 33 fps
+ * Fixes: NB#170533 - QGraphicsSceneMouseEvent::buttonDownPos() received from MPannableWidget is wrongly set
+ * Fixes: NB#169850 - Buttons in Delete confirmation note are uneven
+ * Fixes: NB#168336 - MStatusBar updating itself when not visible
+ * Fixes: NB#155795 - Scrollbar is not visible when DuiList is used inside DuiPannableViewport
+ * Fixes: NB#143963 - some duiapplicationservice if methods should not cause application to launch
+ * Fixes: NB#163496 - Support setting content-item images via theme-ids
+ * Fixes: NB#169087 - No unique object names for MAction's in MToolbar/MNavigationBar
+ * Fixes: NB#170390 - "back" and "close" button overlaps whn Office-tools launched from CM
+ * Fixes: NB#169937 - half of the dialog is displayed in portrait view
+ * Fixes: NB#169305 - Applications UI is not mirrored in Arabic language
+ * Fixes: NB#170636 - Close button not showing
+ * Fixes: NB#170020 - Visible window reported as non-visible, impossible to hide
+
+ -- Jorgen Scheibengruber <jorgen.scheibengruber@nokia.com> Mon, 31 May 2010 16:29:26 +0300
+
+libmeegotouch (0.20.12.1-1) unstable; urgency=low
+
+ * Brown paper bag release; fix arm build
+ * Update signature of MContentItem::setImage() in order to avoid future abi break
+
+ -- Jorgen Scheibengruber <jorgen.scheibengruber@nokia.com> Tue, 25 May 2010 17:14:29 +0300
+
libmeegotouch (0.20.12-1) unstable; urgency=low
* Fixes: NB#169809 - No textChanged signal is emitted when text is placed to MRichTextEdit by MCompleter
@@ -11,7 +50,6 @@ libmeegotouch (0.20.12-1) unstable; urgency=low
* Fixes: NB#169377 - System modal dialog" in Widgetsgallery is not a system-modal dialog
* Fixes: NB#157742 - Fix MContentItem docs
* Fixes: NB#158375 - DuiContentItem api-doc fixes
- * Fixes: NB#164207 - long press in MLabel
* Fixes: NB#167960 - Application is opened in landscape view when device is in portrait mode
-- Jorgen Scheibengruber <jorgen.scheibengruber@nokia.com> Tue, 25 May 2010 13:38:45 +0300
diff --git a/debian/control b/debian/control
index 5a7a2c67..624d3365 100644
--- a/debian/control
+++ b/debian/control
@@ -7,7 +7,7 @@ Standards-Version: 3.7.2
Package: libmeegotouchcore0
Architecture: any
-Depends: ${misc:Depends}, ${launcher:Depends}, ${shlibs:Depends}, libmeegotouch-bin (= ${Source-Version}), libmeegotouch-l10n-engineering-english (= ${Source-Version}), dbus-x11, meegotouchtheme (>= 0.20.8)
+Depends: ${misc:Depends}, ${launcher:Depends}, ${shlibs:Depends}, libmeegotouch-bin (= ${Source-Version}), libmeegotouch-l10n-engineering-english (= ${Source-Version}), dbus-x11, meegotouchtheme (>= 0.20.13)
Suggests: libmeegotouch-l10n-ar, libmeegotouch-l10n-de, libmeegotouch-l10n-en, libmeegotouch-l10n-fi, libmeegotouch-l10n-hu, libmeegotouch-l10n-ur, libmeegotouch-l10n-zh-cn
Description: MeeGo Touch core library
MeeGo Touch core framework library
diff --git a/debian/libmeegotouchcore0.install b/debian/libmeegotouchcore0.install
index c2e04b02..7120d22e 100644
--- a/debian/libmeegotouchcore0.install
+++ b/debian/libmeegotouchcore0.install
@@ -1 +1,2 @@
-usr/lib/libmeegotouchcore.so.0* \ No newline at end of file
+usr/lib/libmeegotouchcore.so.0*
+usr/share/meegotouch/icu/*
diff --git a/demos/applicationextension/main.cpp b/demos/applicationextension/main.cpp
index ec5f79ab..e7934276 100644
--- a/demos/applicationextension/main.cpp
+++ b/demos/applicationextension/main.cpp
@@ -48,13 +48,12 @@ void DemoPage::createContent()
MApplicationExtensionArea *area =
new MApplicationExtensionArea("com.meego.core.DemoApplicationExtensionInterface/1.0");
area->setInProcessFilter(QRegExp("/applicationextensiondemo-demoextension2?\\.desktop$"));
- area->init();
- vbox->addItem(area);
-
connect(area, SIGNAL(extensionInstantiated(MApplicationExtensionInterface*)),
this, SLOT(addExtension(MApplicationExtensionInterface*)));
connect(area, SIGNAL(extensionRemoved(MApplicationExtensionInterface*)),
this, SLOT(removeExtension(MApplicationExtensionInterface*)));
+ area->init();
+ vbox->addItem(area);
}
void DemoPage::addExtension(MApplicationExtensionInterface *extension)
diff --git a/demos/widgetsgallery/applicationmenupage.cpp b/demos/widgetsgallery/applicationmenupage.cpp
index 3999d021..fab1ff21 100644
--- a/demos/widgetsgallery/applicationmenupage.cpp
+++ b/demos/widgetsgallery/applicationmenupage.cpp
@@ -40,9 +40,11 @@
#include <MComboBox>
ApplicationMenuPage::ApplicationMenuPage()
+ : TemplatePage(TemplatePage::ApplicationView)
+ , m_textIndex(2)
+ , policy(0)
+ , comboBox(0)
{
- gid = TemplatePage::ViewsAndDialogs;
- m_textIndex = 2;
}
ApplicationMenuPage::~ApplicationMenuPage()
@@ -57,7 +59,7 @@ QString ApplicationMenuPage::timedemoTitle()
void ApplicationMenuPage::retranslateUi()
{
//% "Application Menu"
- setTitle(qtTrId("xx_viewmenu_page_title"));
+ setTitle(qtTrId("xx_applicationmenu_page_title"));
if (!isContentCreated())
return;
@@ -79,10 +81,17 @@ void ApplicationMenuPage::retranslateUi()
void ApplicationMenuPage::createContent()
{
- TemplatePage::createContent();
+ MApplicationPage::createContent();
QGraphicsWidget *panel = centralWidget();
+ infoLabel = new MLabel(panel);
+ infoLabel->setMinimumWidth(0);
+ infoLabel->setPreferredWidth(0);
+ infoLabel->setWordWrap(true);
+ infoLabel->setAlignment(Qt::AlignTop);
+ infoLabel->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
+
MAction *action = new MAction("Italic", panel);
action->setLocation(MAction::ApplicationMenuLocation);
addAction(action);
@@ -114,36 +123,14 @@ void ApplicationMenuPage::createContent()
connect(action, SIGNAL(triggered()), this, SLOT(toggleWindowIconVisibility()));
insertAction(action, widgetAction);
- action = new MAction("icon-m-list", "", panel);
- action->setLocation(MAction::ApplicationMenuLocation);
- action->setStyleAction(true);
- action->setCheckable(true);
- action->setChecked(true);
- addAction(action);
- connect(action, SIGNAL(triggered()), this, SLOT(showButtonsAsList()));
+ MLayout *layout = new MLayout(panel);
+ layout->setContentsMargins(0, 0, 0, 0);
+ panel->setLayout(layout);
+ policy = new MLinearLayoutPolicy(layout, Qt::Vertical);
+ policy->setContentsMargins(0, 0, 0, 0);
+ policy->setSpacing(0);
- action = new MAction("icon-m-grid", "", panel);
- action->setLocation(MAction::ApplicationMenuLocation);
- action->setStyleAction(true);
- addAction(action);
- connect(action, SIGNAL(triggered()), this, SLOT(showButtonsAsGrid()));
-
- // for more readability
- listPolicy = containerPolicy;
- gridPolicy = new MGridLayoutPolicy(containerLayout);
-
- MButton *button = new MButton("Item 1", container);
- containerPolicy->addItem(button);
- gridPolicy->addItem(button, 0, 0);
- button = new MButton("Item 2", container);
- containerPolicy->addItem(button);
- gridPolicy->addItem(button, 0, 1);
- button = new MButton("Item 3", container);
- containerPolicy->addItem(button);
- gridPolicy->addItem(button, 1, 0);
- button = new MButton("Item 4", container);
- containerPolicy->addItem(button);
- gridPolicy->addItem(button, 1, 1);
+ policy->addItem(infoLabel);
retranslateUi();
}
@@ -186,18 +173,8 @@ void ApplicationMenuPage::toggleWindowIconVisibility()
}
QString oldIconID = window->windowIconID();
if (oldIconID.isEmpty()) {
- window->setWindowIconID("Icon-browser");
+ window->setWindowIconID("icon-m-toolbar-gallery");
} else {
window->setWindowIconID("");
}
}
-
-void ApplicationMenuPage::showButtonsAsList()
-{
- containerLayout->setPolicy(listPolicy);
-}
-
-void ApplicationMenuPage::showButtonsAsGrid()
-{
- containerLayout->setPolicy(gridPolicy);
-}
diff --git a/demos/widgetsgallery/applicationmenupage.h b/demos/widgetsgallery/applicationmenupage.h
index 346d2df3..cac401c1 100644
--- a/demos/widgetsgallery/applicationmenupage.h
+++ b/demos/widgetsgallery/applicationmenupage.h
@@ -40,16 +40,13 @@ public Q_SLOTS:
void makeTextItalic();
void makeTextNormal();
void toggleWindowIconVisibility();
- void showButtonsAsList();
- void showButtonsAsGrid();
protected:
virtual void retranslateUi();
private:
int m_textIndex;
- MGridLayoutPolicy *gridPolicy;
- MLinearLayoutPolicy *listPolicy;
+ MLinearLayoutPolicy *policy;
MComboBox *comboBox;
void showText(int index);
};
diff --git a/demos/widgetsgallery/bannerspage.cpp b/demos/widgetsgallery/bannerspage.cpp
new file mode 100644
index 00000000..1b1708f3
--- /dev/null
+++ b/demos/widgetsgallery/bannerspage.cpp
@@ -0,0 +1,151 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "bannerspage.h"
+
+#include <MAbstractCellCreator>
+#include <MContentItem>
+#include <MInfoBanner>
+#include <MLayout>
+#include <MList>
+#include <MLinearLayoutPolicy>
+
+#include <QStringListModel>
+#include <QTimer>
+
+class BannersPageCellCreator : public MAbstractCellCreator<MContentItem>
+{
+public:
+ BannersPageCellCreator() : MAbstractCellCreator<MContentItem>() {
+ }
+
+ MWidget *createCell(const QModelIndex &index, MWidgetRecycler &recycler) const {
+ Q_UNUSED(index);
+
+ MContentItem *cell = dynamic_cast<MContentItem *>(recycler.take(MContentItem::staticMetaObject.className()));
+ if (cell == NULL) {
+ cell = new MContentItem(MContentItem::SingleTextLabel);
+ cell->setObjectName("wgMainPageCategoryItem");
+ }
+ updateCell(index, cell);
+
+ return cell;
+ }
+
+ void updateCell(const QModelIndex &index, MWidget *cell) const {
+ MContentItem *item = qobject_cast<MContentItem*>(cell);
+ if(!item)
+ return;
+
+ item->setTitle(index.data().toString());
+ }
+};
+
+BannersPage::BannersPage()
+ : TemplatePage(TemplatePage::DialogsAndBanners)
+{
+}
+
+QString BannersPage::timedemoTitle()
+{
+ return "BannersPage";
+}
+
+void BannersPage::createContent()
+{
+ MApplicationPage::createContent();
+
+ QGraphicsWidget *panel = centralWidget();
+
+ MLayout *layout = new MLayout(panel);
+ layout->setContentsMargins(0, 0, 0, 0);
+ panel->setLayout(layout);
+ policy = new MLinearLayoutPolicy(layout, Qt::Vertical);
+ policy->setContentsMargins(0, 0, 0, 0);
+ policy->setSpacing(0);
+
+ populateLayout();
+}
+
+void BannersPage::populateLayout()
+{
+ QStringList bannerTypes;
+ //% "Event Banner"
+ bannerTypes << qtTrId("xx_wg_banners_page_event_banner");
+ //% "Information Banner"
+ bannerTypes << qtTrId("xx_wg_banners_page_information_banner");
+ //% "System Information Banner"
+ bannerTypes << qtTrId("xx_wg_banners_page_system_information_banner");
+
+ list = new MList(centralWidget());
+ list->setObjectName("wgList");
+ list->setCellCreator(new BannersPageCellCreator());
+ list->setItemModel(new QStringListModel(bannerTypes));
+ policy->addItem(list, Qt::AlignCenter);
+
+ connect(list, SIGNAL(itemClicked(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
+}
+
+void BannersPage::itemClicked(const QModelIndex &index)
+{
+ if (index.row() == 0)
+ showEventBanner();
+ else if (index.row() == 1)
+ showInformationBanner();
+ else if (index.row() == 2)
+ showSystemInformationBanner();
+}
+
+void BannersPage::showEventBanner()
+{
+ MInfoBanner *infoBanner = new MInfoBanner(MInfoBanner::Event);
+ infoBanner->setImageID("icon-m-content-email");
+ infoBanner->setBodyText(
+ //% "<b>Ida Taipale</b><br/>Have you seen my dog?"
+ qtTrId("xx_dialogs_and_notifications_event_banner"));
+ infoBanner->setIconID("icon-m-content-mms");
+ connect(infoBanner, SIGNAL(clicked()), this, SLOT(openMessageBox()));
+ infoBanner->appear(MSceneWindow::DestroyWhenDone);
+ QTimer::singleShot(3000, infoBanner, SLOT(disappear()));
+}
+
+void BannersPage::showInformationBanner()
+{
+ MInfoBanner *infoBanner = new MInfoBanner(MInfoBanner::Information);
+ infoBanner->setImageID("icon-m-startup-help");
+ infoBanner->setBodyText(
+ //% "<b>Battery is running low</b>"
+ qtTrId("xx_dialogs_and_notifications_information_banner"));
+ infoBanner->appear(MSceneWindow::DestroyWhenDone);
+ QTimer::singleShot(3000, infoBanner, SLOT(disappear()));
+}
+
+void BannersPage::showSystemInformationBanner()
+{
+ MInfoBanner *infoBanner = new MInfoBanner(MInfoBanner::Information);
+ infoBanner->setImageID("icon-m-telephony-call-answer");
+ infoBanner->setBodyText(
+ //% "<b>Incoming call</b>"
+ qtTrId("xx_dialogs_and_notifications_system_information_banner"));
+ //% "Accept"
+ infoBanner->setButtonText(qtTrId("xx_dialogs_and_notifications_system_information_banner_accept"));
+ connect(infoBanner, SIGNAL(buttonClicked()), this, SLOT(openMessageBox()));
+ infoBanner->appear(MSceneWindow::DestroyWhenDone);
+ QTimer::singleShot(3000, infoBanner, SLOT(disappear()));
+}
diff --git a/demos/widgetsgallery/bannerspage.h b/demos/widgetsgallery/bannerspage.h
new file mode 100644
index 00000000..428b333c
--- /dev/null
+++ b/demos/widgetsgallery/bannerspage.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef BANNERSPAGE_H
+#define BANNERSPAGE_H
+
+#include "templatepage.h"
+
+#include <QModelIndex>
+
+class MList;
+
+class BannersPage : public TemplatePage
+{
+ Q_OBJECT
+
+public:
+ BannersPage();
+
+ QString timedemoTitle();
+
+ void createContent();
+ void populateLayout();
+
+ void showEventBanner();
+ void showInformationBanner();
+ void showSystemInformationBanner();
+
+private Q_SLOTS:
+ void itemClicked(const QModelIndex &index);
+
+private:
+ MLinearLayoutPolicy *policy;
+ MList *list;
+};
+
+#endif // BANNERSPAGE_H
diff --git a/demos/widgetsgallery/bubblelistmodel.cpp b/demos/widgetsgallery/bubblelistmodel.cpp
new file mode 100644
index 00000000..69430197
--- /dev/null
+++ b/demos/widgetsgallery/bubblelistmodel.cpp
@@ -0,0 +1,55 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "bubblelistmodel.h"
+
+#include <QStringList>
+#include <QTime>
+#include <QDir>
+
+BubbleListModel::BubbleListModel( QObject* parent )
+ : QAbstractListModel(parent)
+{
+
+ QString avatar_1(QDir(CONTACTS_DIR).canonicalPath() + QDir::separator() +"avatar-jets.png");
+ QString avatar_2(QDir(CONTACTS_DIR).canonicalPath() + QDir::separator() +"avatar-butterfly.png");
+
+ chatMessages
+ << new ChatMessageEntry( "Hi!", "Manager", avatar_1,"Yesterday, "+QTime::currentTime().toString() )
+ << new ChatMessageEntry( "Hi, what's up.", "", avatar_2,QTime::currentTime().toString() )
+ << new ChatMessageEntry( "Where is the layout for the speech bubble?", "Manager", avatar_1,QTime::currentTime().toString() )
+ << new ChatMessageEntry( "I am working on it. It will be ready on Friday ... seriously, I promise!", "", avatar_2,QTime::currentTime().toString() )
+ << new ChatMessageEntry( "Just make sure it's the best speech bubble ever, OK?", "Manager", avatar_1,QTime::currentTime().toString() )
+ << new ChatMessageEntry( "Sure. This will be better than sliced bread. I'll just finish it really quick and add it to git. If there are problems, call me at <a href=\"#35802298784\">+35802298784</a>.", "", avatar_2,QTime::currentTime().toString() )
+ ;
+}
+
+int BubbleListModel::rowCount(const QModelIndex &parent) const
+{
+ Q_UNUSED(parent);
+ return chatMessages.size();
+}
+
+QVariant BubbleListModel::data(const QModelIndex &index, int role) const
+{
+ if (role == Qt::DisplayRole)
+ return QVariant::fromValue( (void*) chatMessages.at( index.row() ) );
+
+ return QVariant();
+}
diff --git a/demos/widgetsgallery/bubblelistmodel.h b/demos/widgetsgallery/bubblelistmodel.h
new file mode 100644
index 00000000..11a5bb40
--- /dev/null
+++ b/demos/widgetsgallery/bubblelistmodel.h
@@ -0,0 +1,51 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef BUBBLEMODEL_H
+#define BUBBLEMODEL_H
+
+#include <QAbstractItemModel>
+#include <QList>
+
+struct ChatMessageEntry {
+ QString message;
+ QString sendername;
+ QString avatar;
+ QString timestamp;
+
+ ChatMessageEntry( QString _message, QString _sendername, QString _avatar, QString _timestamp )
+ : message(_message), sendername(_sendername), avatar(_avatar), timestamp(_timestamp)
+ {}
+};
+
+class BubbleListModel : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+ BubbleListModel(QObject *parent = 0);
+
+ int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role) const;
+
+private:
+ QList<ChatMessageEntry*> chatMessages;
+};
+
+#endif // MODEL_H
diff --git a/demos/widgetsgallery/bubblepage.cpp b/demos/widgetsgallery/bubblepage.cpp
new file mode 100644
index 00000000..0b7f4cce
--- /dev/null
+++ b/demos/widgetsgallery/bubblepage.cpp
@@ -0,0 +1,167 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include <QDir>
+#include <QGraphicsLinearLayout>
+#include <QGraphicsGridLayout>
+#include <QTime>
+
+#include <MContentItem>
+#include <MImageWidget>
+#include <MAbstractCellCreator>
+#include <MLabel>
+#include <MMessageBox>
+#include <MBubbleItem>
+
+#include "utils.h"
+#include "bubblepage.h"
+#include "bubblelistmodel.h"
+
+class BubbleItemCreator
+{
+public:
+ MBubbleItem *createBubbleItem(const QModelIndex& index) const;
+};
+
+MBubbleItem *BubbleItemCreator::createBubbleItem(const QModelIndex& index) const
+{
+ MBubbleItem* bi = new MBubbleItem;
+ QVariant data = index.data(Qt::DisplayRole);
+ ChatMessageEntry* me = static_cast<ChatMessageEntry*>(data.value<void *>());
+
+ bi->setMessage(me->message);
+ bi->setSenderName(me->sendername);
+ bi->setTimeStamp(me->timestamp);
+ bi->setAvatar(me->avatar);
+
+ if(me->sendername.isEmpty())
+ bi->setMessageType(MBubbleItem::Outgoing);
+
+ return bi;
+}
+
+BubblePage::BubblePage()
+ : TemplatePage(TemplatePage::ListsGridsAndPopups)
+{
+}
+
+BubblePage::~BubblePage()
+{
+}
+
+void BubblePage::createContent()
+{
+ MApplicationPage::createContent();
+
+ QGraphicsWidget * panel = centralWidget();
+ QGraphicsLinearLayout * layout = new QGraphicsLinearLayout(Qt::Vertical);
+ panel->setLayout(layout);
+
+ BubbleItemCreator * cellCreator = new BubbleItemCreator();
+ BubbleListModel * model = new BubbleListModel;
+
+ for (int i = 0; i < model->rowCount(); ++i)
+ {
+ MBubbleItem *item = cellCreator->createBubbleItem(model->index(i,0));
+ connect(item, SIGNAL(linkActivated(QString)), this, SLOT(bubbleLinkActivated(QString)));
+ layout->addItem(item);
+ }
+
+ MBubbleItem* expandedItem = new MBubbleItem();
+ connect(expandedItem, SIGNAL(bubbleClicked()), this, SLOT(speechBubbleClicked()));
+ expandedItem->setMessage("Here are some nice pictures to enjoy while you're working.");
+ expandedItem->setSenderName("Tester");
+ MImageWidget *avatar = new MImageWidget(expandedItem);
+ avatar->setPixmap(QPixmap(QString(MEDIA_DIR) + QDir::separator() + "avatar-cat.png"));
+ expandedItem->setAvatar(avatar);
+ expandedItem->setTimeStamp("5 min ago");
+
+ QPixmap* p0 = new QPixmap(QString(MEDIA_DIR) + QDir::separator() + "photo_450x450_001.jpg");
+ MImageWidget* i0 = new MImageWidget(p0);
+ QPixmap* p1 = new QPixmap(QString(MEDIA_DIR) + QDir::separator() + "photo_450x450_002.jpg");
+ MImageWidget* i1 = new MImageWidget(p1);
+ QPixmap* p2 = new QPixmap(QString(MEDIA_DIR) + QDir::separator() + "photo_450x450_003.jpg");
+ MImageWidget* i2 = new MImageWidget(p2);
+ MWidget* widget = new MWidget;
+ widget->setObjectName("centralWidget");
+ QGraphicsGridLayout* gl = new QGraphicsGridLayout(widget);
+ gl->setSpacing(30);
+ gl->addItem(i0, 0,0);
+ gl->addItem(i1, 0,1);
+ gl->addItem(i2, 0,2);
+
+ expandedItem->setCentralWidget(widget);
+ layout->addItem(expandedItem);
+
+ MBubbleItem* secondExpandedItem = new MBubbleItem();
+ connect(secondExpandedItem, SIGNAL(bubbleClicked()), this, SLOT(speechBubbleClicked()));
+ secondExpandedItem->setMessage("And here are some of my favorites. Works great!");
+ secondExpandedItem->setMessageType(MBubbleItem::Outgoing);
+ secondExpandedItem->setSenderName("");
+ secondExpandedItem->setTimeStamp("5 min ago");
+
+ QPixmap* p4 = new QPixmap(QString(MEDIA_DIR) + QDir::separator() + "photo_450x450_004.jpg");
+ MImageWidget* i4 = new MImageWidget(p4);
+ QPixmap* p5 = new QPixmap(QString(MEDIA_DIR) + QDir::separator() + "photo_450x450_005.jpg");
+ MImageWidget* i5 = new MImageWidget(p5);
+ QPixmap* p6 = new QPixmap(QString(MEDIA_DIR) + QDir::separator() + "photo_450x450_006.jpg");
+ MImageWidget* i6 = new MImageWidget(p6);
+ MWidget* widget2 = new MWidget;
+ widget2->setObjectName("secondCentralWidget");
+ QGraphicsGridLayout* gl2 = new QGraphicsGridLayout(widget2);
+ gl2->setSpacing(30);
+ gl2->addItem(i4, 0,0);
+ gl2->addItem(i5, 0,1);
+ gl2->addItem(i6, 0,2);
+
+ secondExpandedItem->setCentralWidget(widget2);
+
+ secondExpandedItem->setCommentsString("+3");
+ secondExpandedItem->setThumbsUpString("+6");
+ layout->addItem(secondExpandedItem);
+
+ retranslateUi();
+}
+
+void BubblePage::retranslateUi()
+{
+ //% "Speech Bubble"
+ setTitle(qtTrId("xx_bubblepage_title"));
+ if (!isContentCreated())
+ return;
+}
+
+QString BubblePage::timedemoTitle()
+{
+ return "SpeechBubble";
+}
+
+void BubblePage::bubbleLinkActivated(QString url)
+{
+ //% "Link activated"
+ messageBox = new MMessageBox(qtTrId("xx_wg_bubblepage_linkactivated") + " " + url);
+ messageBox->appear(MSceneWindow::DestroyWhenDone);
+}
+
+void BubblePage::speechBubbleClicked()
+{
+ //% "Speech buuble clicked"
+ messageBox = new MMessageBox(qtTrId("xx_wg_bubblepage_bubbleclicked"));
+ messageBox->appear(MSceneWindow::DestroyWhenDone);
+}
diff --git a/demos/widgetsgallery/bubblepage.h b/demos/widgetsgallery/bubblepage.h
new file mode 100644
index 00000000..ee8f3851
--- /dev/null
+++ b/demos/widgetsgallery/bubblepage.h
@@ -0,0 +1,51 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef BUBBLEPAGE_H
+#define BUBBLEPAGE_H
+
+#include "templatepage.h"
+
+#include <QPointer>
+
+class MMessageBox;
+
+class BubblePage: public TemplatePage
+{
+ Q_OBJECT
+
+public:
+ BubblePage();
+ virtual ~BubblePage();
+
+ virtual void createContent();
+ virtual QString timedemoTitle();
+
+protected Q_SLOTS:
+ void bubbleLinkActivated(QString url);
+ void speechBubbleClicked();
+
+protected:
+ void retranslateUi();
+
+private:
+ QPointer<MMessageBox> messageBox;
+};
+
+#endif
diff --git a/demos/widgetsgallery/checkboxpage.cpp b/demos/widgetsgallery/checkboxpage.cpp
index 69e5f4b9..fe809875 100644
--- a/demos/widgetsgallery/checkboxpage.cpp
+++ b/demos/widgetsgallery/checkboxpage.cpp
@@ -31,11 +31,10 @@
#include <QGraphicsLinearLayout>
CheckboxPage::CheckboxPage() :
- TemplatePage(),
+ TemplatePage(TemplatePage::Buttons),
checkbox(0),
checkboxLabel(0)
{
- gid = TemplatePage::Buttons;
}
CheckboxPage::~CheckboxPage()
@@ -57,8 +56,13 @@ void CheckboxPage::createContent()
checkbox->setCheckable(true);
checkboxLabel = new MLabel();
checkboxLabel->setWordWrap(true);
- checkboxLabel->setTextElide(true);
+ checkboxLabel->setTextElide(false);
+ checkboxLabel->setMinimumWidth(0);
+ checkboxLabel->setPreferredWidth(0);
+ checkboxLabel->setAlignment( Qt::AlignCenter );
+ checkboxLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
+
// Layout for checkbox and it's infolabel
QGraphicsLinearLayout *l = new QGraphicsLinearLayout(Qt::Horizontal);
l->addItem(checkbox);
@@ -84,7 +88,7 @@ void CheckboxPage::retranslateUi()
//% "using a Switch instead."
infoLabel->setText("<a></a>" + qtTrId("xx_checkbox_page_info_label"));
- //% "I have read and understood the\ninstructions."
+ //% "I have read and understood the instructions."
checkboxLabel->setText("<a></a>" + qtTrId("xx_checkbox_page_checkbox_label"));
}
diff --git a/demos/widgetsgallery/checkboxpage.h b/demos/widgetsgallery/checkboxpage.h
index d9d066b6..e2eb7b49 100644
--- a/demos/widgetsgallery/checkboxpage.h
+++ b/demos/widgetsgallery/checkboxpage.h
@@ -20,7 +20,7 @@
#ifndef CHECKBOXPAGE_H
#define CHECKBOXPAGE_H
-#include "listpage.h"
+#include "mainpage.h"
#include "templatepage.h"
#include <MApplicationPage>
#include <MLayout>
diff --git a/demos/widgetsgallery/comboboxpage.cpp b/demos/widgetsgallery/comboboxpage.cpp
index 74c447ae..07793659 100644
--- a/demos/widgetsgallery/comboboxpage.cpp
+++ b/demos/widgetsgallery/comboboxpage.cpp
@@ -33,10 +33,10 @@
#include <QTimer>
ComboBoxPage::ComboBoxPage()
- : model1(0),
+ : TemplatePage(TemplatePage::ListsGridsAndPopups),
+ model1(0),
proxyModel(0)
{
- gid = TemplatePage::ListsGridsAndMenus;
}
ComboBoxPage::~ComboBoxPage()
@@ -59,17 +59,17 @@ void ComboBoxPage::createContent()
containerLayout->setPolicy(containerPolicy);
QStringList list;
- for (int i = 0; i < 100; ++i) {
- list << QString::number(10000 + i);
+ for (int i = 0; i < 130; ++i) {
+ list << QString::number(1970 + i);
}
comboBox1 = new MComboBox;
- comboBox1->setIconID("Icon-pictures");
+ comboBox1->setIconID("icon-m-camera-scene-portrait");
comboBox1->addItems(list);
- comboBox1->setCurrentIndex(50);
+ comboBox1->setCurrentIndex(40);
comboBox2 = new MComboBox;
- comboBox2->setIconID("Icon-pictures");
+ comboBox2->setIconID("icon-m-camera-shutter");
model1 = new QStringListModel(this);
model1->setStringList(list);
@@ -81,13 +81,13 @@ void ComboBoxPage::createContent()
comboBox2->setItemModel(proxyModel);
comboBox3 = new MComboBox;
- comboBox3->setIconID("Icon-music");
+ comboBox3->setIconID("icon-m-startup-clock");
comboBox3->setTitle("Time-consuming setting");
- comboBox3->addItem("Setting 1");
- comboBox3->addItem("Setting 2");
- comboBox3->addItem("Setting 3");
- comboBox3->addItem("Setting 4");
- comboBox3->addItem("Setting 5");
+ comboBox3->addItem("Wash your car");
+ comboBox3->addItem("Cook dinner");
+ comboBox3->addItem("Join a funk band");
+ comboBox3->addItem("Run for president");
+ comboBox3->addItem("Hop, skip, and jump");
QTimer* timer = new QTimer(this);
timer->setSingleShot(true);
diff --git a/demos/widgetsgallery/containerpage.cpp b/demos/widgetsgallery/containerpage.cpp
index a96bbb63..0499bde5 100644
--- a/demos/widgetsgallery/containerpage.cpp
+++ b/demos/widgetsgallery/containerpage.cpp
@@ -25,9 +25,8 @@
#include <MLocale>
#include <QGraphicsLinearLayout>
-ContainerPage::ContainerPage()
+ContainerPage::ContainerPage() : TemplatePage(TemplatePage::SimpleWidgets)
{
- gid = TemplatePage::ContainersAndApplets;
}
ContainerPage::~ContainerPage()
diff --git a/demos/widgetsgallery/contentitemspage.cpp b/demos/widgetsgallery/contentitemspage.cpp
new file mode 100644
index 00000000..8a75378f
--- /dev/null
+++ b/demos/widgetsgallery/contentitemspage.cpp
@@ -0,0 +1,216 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "contentitemspage.h"
+#include "utils.h"
+
+#include <MAbstractCellCreator>
+#include <MLayout>
+#include <MLinearLayoutPolicy>
+#include <MList>
+
+#include <MDebug>
+
+class ContentItemsPageCellCreator : public MAbstractCellCreator<MContentItem>
+{
+public:
+ ContentItemsPageCellCreator(MContentItem::ContentItemStyle style)
+ : itemStyle(style),
+ defaultImage(Utils::imagesDir() + "DefaultAvatar.png")
+ {
+ }
+
+ MWidget *createCell(const QModelIndex &index, MWidgetRecycler &recycler) const {
+ Q_UNUSED(index);
+
+ MContentItem *cell = dynamic_cast<MContentItem *>(recycler.take(MContentItem::staticMetaObject.className()));
+ if (cell == NULL) {
+ cell = new MContentItem(itemStyle);
+ cell->setObjectName("wgContentItemsPageItem");
+
+ }
+ updateCell(index, cell);
+
+ return cell;
+ }
+
+ void updateCell(const QModelIndex &index, MWidget *cell) const {
+ MContentItem *item = qobject_cast<MContentItem*>(cell);
+ if(!item)
+ return;
+
+ item->setTitle(index.data().toString());
+
+ switch (itemStyle) {
+ case MContentItem::IconAndTwoTextLabels:
+ //% "Subtitle"
+ item->setSubtitle(qtTrId("xx_content_items_subtitle"));
+ item->setImage(defaultImage);
+ break;
+ case MContentItem::IconAndSingleTextLabel:
+ item->setImage(defaultImage);
+ break;
+ case MContentItem::TwoTextLabels:
+ //% "Subtitle"
+ item->setSubtitle(qtTrId("xx_content_items_subtitle"));
+ break;
+ case MContentItem::SingleIcon:
+ item->setImage(defaultImage);
+ break;
+ case MContentItem::IconAndSingleTextLabelVertical:
+ item->setImage(defaultImage);
+ break;
+ case MContentItem::IconAndTwoTextLabelsVertical:
+ //% "Subtitle"
+ item->setSubtitle(qtTrId("xx_content_items_subtitle"));
+ item->setImage(defaultImage);
+ break;
+ case MContentItem::TwoIconsTwoWidgets:
+ item->setImage(defaultImage);
+ item->setOptionalImage(defaultImage);
+ item->enableProgressBar();
+ dynamic_cast<MProgressIndicator*>(item->additionalItem())->setValue(25 * index.row());
+ //% "Subtitle"
+ item->setSubtitle(qtTrId("xx_content_items_subtitle"));
+ break;
+ default:
+ break;
+ };
+
+ const_cast<ContentItemsPageCellCreator*>(this)->updateCellSize(item);
+ }
+
+ void updateCellSize(const MWidget *cell) {
+ size = cell->effectiveSizeHint(Qt::PreferredSize);
+ mDebug("") << size;
+ }
+
+ QSizeF cellSize() const {
+ return size;
+ }
+
+private:
+ QSizeF size;
+ MContentItem::ContentItemStyle itemStyle;
+ QImage defaultImage;
+};
+
+class ContentItemsPageModel : public QAbstractItemModel {
+public:
+ ContentItemsPageModel(const QString &title)
+ : QAbstractItemModel(),
+ headerTitle(title)
+ {
+ }
+
+ QModelIndex parent(const QModelIndex &child) const {
+ Q_UNUSED(child);
+
+ if (child.internalId() == 0)
+ return index(0, 0);
+
+ return QModelIndex();
+ }
+
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const {
+ if (parent.isValid())
+ return createIndex(row, column, 0);
+ else
+ return createIndex(row, column, 1);
+ }
+
+ int rowCount(const QModelIndex &parent) const {
+ if (parent.isValid())
+ return 2;
+
+ return 1;
+ }
+
+ int columnCount(const QModelIndex &parent) const {
+ Q_UNUSED(parent);
+
+ return 1;
+ }
+
+ QVariant data(const QModelIndex &index, int role) const {
+ if (role == Qt::DisplayRole) {
+ if (!index.parent().isValid())
+ return QVariant::fromValue(headerTitle);
+ else
+ return QVariant::fromValue(QString(headerTitle + " %1").arg(index.row()));
+ }
+
+ return QVariant();
+ }
+
+private:
+ QString headerTitle;
+};
+
+ContentItemsPage::ContentItemsPage()
+ : TemplatePage(TemplatePage::ListsGridsAndPopups)
+{
+}
+
+QString ContentItemsPage::timedemoTitle()
+{
+ return "ContentItems";
+}
+
+void ContentItemsPage::createContent()
+{
+ MApplicationPage::createContent();
+
+ QGraphicsWidget *panel = centralWidget();
+
+ MLayout *layout = new MLayout(panel);
+ layout->setContentsMargins(0, 0, 0, 0);
+ panel->setLayout(layout);
+ policy = new MLinearLayoutPolicy(layout, Qt::Vertical);
+ policy->setContentsMargins(0, 0, 0, 0);
+ policy->setSpacing(0);
+
+ populateLayout();
+}
+
+void ContentItemsPage::populateLayout()
+{
+ contentItemLists.append(createList("Icon and Two Text Labels", MContentItem::IconAndTwoTextLabels));
+ contentItemLists.append(createList("Single Text Label", MContentItem::SingleTextLabel));
+ contentItemLists.append(createList("Icon and Single Text Label", MContentItem::IconAndSingleTextLabel));
+ contentItemLists.append(createList("Two Text Labels", MContentItem::TwoTextLabels));
+ contentItemLists.append(createList("Single Icon", MContentItem::SingleIcon));
+ contentItemLists.append(createList("Icon and Single Text Label Vertical", MContentItem::IconAndSingleTextLabelVertical));
+ contentItemLists.append(createList("Icon and Two Text Labels Vertical", MContentItem::IconAndTwoTextLabelsVertical));
+ contentItemLists.append(createList("Two Icons Two Widgets", MContentItem::TwoIconsTwoWidgets));
+}
+
+MList *ContentItemsPage::createList(const QString &title, MContentItem::ContentItemStyle style)
+{
+ QAbstractItemModel *model = new ContentItemsPageModel(title);
+
+ MList *list = new MList(centralWidget());
+ list->setObjectName("wgList");
+ list->setCellCreator(new ContentItemsPageCellCreator(style));
+ list->setItemModel(model);
+ list->setShowGroups(true);
+ policy->addItem(list, Qt::AlignCenter);
+
+ return list;
+}
diff --git a/demos/widgetsgallery/contentitemspage.h b/demos/widgetsgallery/contentitemspage.h
new file mode 100644
index 00000000..5e23833b
--- /dev/null
+++ b/demos/widgetsgallery/contentitemspage.h
@@ -0,0 +1,45 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef CONTENTITEMSPAGE_H
+#define CONTENTITEMSPAGE_H
+
+#include "templatepage.h"
+#include <MContentItem>
+
+class MList;
+
+class ContentItemsPage : public TemplatePage
+{
+public:
+ ContentItemsPage();
+
+ QString timedemoTitle();
+
+ void createContent();
+ void populateLayout();
+
+ MList *createList(const QString &title, MContentItem::ContentItemStyle style);
+
+private:
+ QList<MList*> contentItemLists;
+ MLinearLayoutPolicy *policy;
+};
+
+#endif // CONTENTITEMSPAGE_H
diff --git a/demos/widgetsgallery/dialogsandnotificationspage.cpp b/demos/widgetsgallery/dialogsandnotificationspage.cpp
deleted file mode 100644
index c19f9812..00000000
--- a/demos/widgetsgallery/dialogsandnotificationspage.cpp
+++ /dev/null
@@ -1,414 +0,0 @@
-/***************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (directui@nokia.com)
-**
-** This file is part of libmeegotouch.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at directui@nokia.com.
-**
-** This library is free software; you can redistribute it and/or
-** modify it under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation
-** and appearing in the file LICENSE.LGPL included in the packaging
-** of this file.
-**
-****************************************************************************/
-
-#include "dialogsandnotificationspage.h"
-
-#include "listpage.h"
-#include <QTimer>
-#include <MDialog>
-#include <MLayout>
-#include <MLocale>
-#include <MButton>
-#include <MMessageBox>
-#include <MInfoBanner>
-#include <MLabel>
-#include <MTextEdit>
-#include <QDebug>
-#include <MContainer>
-#include <MLinearLayoutPolicy>
-#include <MWidget>
-#include <QGraphicsLinearLayout>
-
-DialogsAndNotificationsPage::DialogsAndNotificationsPage()
- : TemplatePage(),
- dialog(0),
- nestedDialog(0),
- nestedMessageBox(0),
- label1(0),
- label2(0),
- label3(0),
- button1(0),
- button2(0),
- button3(0),
- button4(0),
- button5(0),
- button6(0),
- button7(0),
- buttonStackedDialogs(0),
- buttonSystemModalDialog(0)
-{
- gid = TemplatePage::ViewsAndDialogs;
-}
-
-DialogsAndNotificationsPage::~DialogsAndNotificationsPage()
-{
-}
-
-QString DialogsAndNotificationsPage::timedemoTitle()
-{
- return "DialogsAndNotifications";
-}
-
-void DialogsAndNotificationsPage::createContent()
-{
- MApplicationPage::createContent();
-
- MLayout *layout = new MLayout(centralWidget());
- MLinearLayoutPolicy *layoutPolicy = new MLinearLayoutPolicy(layout, Qt::Vertical);
- populateLayout(layoutPolicy);
-
- retranslateUi();
-}
-
-void DialogsAndNotificationsPage::openQuestionDialog()
-{
- if (dialog)
- return;
-
- dialog = new MDialog(
- //% "Question Dialog Title"
- qtTrId("xx_dialogs_and_notifications_question_dialog_title"),
- M::YesButton | M::NoButton);
- dialog->setCentralWidget(
- //% "Lorem ipsum dolor sit amet?"
- new MLabel(qtTrId("xx_dialogs_and_notifications_question_dialog_content")));
-
- dialog->appear(MSceneWindow::DestroyWhenDone);
-}
-
-void DialogsAndNotificationsPage::openEntryDialog()
-{
- if (dialog)
- return;
-
- MWidget *centralWidget = new MWidget;
- QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
- //% "Name"
- MLabel *label = new MLabel(qtTrId("xx_dialogs_and_notifications_entry_dialog_label"), centralWidget);
- MTextEdit *textEdit = new MTextEdit(MTextEditModel::SingleLine,
- QString(),
- centralWidget);
- centralWidget->setLayout(layout);
-
- layout->addItem(label);
- layout->addItem(textEdit);
-
- //% "Please enter your name"
- dialog = new MDialog(qtTrId("xx_dialogs_and_notifications_entry_dialog_title"),
- M::OkButton | M::ResetButton);
- dialog->setCentralWidget(centralWidget);
-
- dialog->appear(MSceneWindow::DestroyWhenDone);
-}
-
-void DialogsAndNotificationsPage::openLongDialog()
-{
- if (dialog)
- return;
-
- MWidget *centralWidget = new MWidget;
- QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
-
- //% "Select printer"
- dialog = new MDialog(qtTrId("xx_dialogs_and_notifications_long_dialog_title"), M::CancelButton);
- dialog->setCentralWidget(centralWidget);
- MButton *button = 0;
-
- centralWidget->setLayout(layout);
-
-#define ADD_PRINTER_BUTTON(NAME) \
- button = new MButton(NAME, centralWidget); \
- connect(button, SIGNAL(clicked()), dialog, SLOT(accept())); \
- layout->addItem(button);
-
- ADD_PRINTER_BUTTON("Lexmark A");
- ADD_PRINTER_BUTTON("Lexmark B");
- ADD_PRINTER_BUTTON("Lexmark C");
- ADD_PRINTER_BUTTON("Lexmark D");
- ADD_PRINTER_BUTTON("Canon Alpha");
- ADD_PRINTER_BUTTON("Canon Beta");
- ADD_PRINTER_BUTTON("Canon Gama");
- ADD_PRINTER_BUTTON("Canon Zeta");
- ADD_PRINTER_BUTTON("Brother 1");
- ADD_PRINTER_BUTTON("Brother 2");
- ADD_PRINTER_BUTTON("Brother 3");
- ADD_PRINTER_BUTTON("Brother 4");
- ADD_PRINTER_BUTTON("Xerox I");
- ADD_PRINTER_BUTTON("Xerox II");
- ADD_PRINTER_BUTTON("Xerox III");
- ADD_PRINTER_BUTTON("Xerox IV");
- ADD_PRINTER_BUTTON("Dell Roger");
- ADD_PRINTER_BUTTON("Dell Charlie");
- ADD_PRINTER_BUTTON("Dell Bravo");
- ADD_PRINTER_BUTTON("Dell Tango");
- ADD_PRINTER_BUTTON("HP X");
- ADD_PRINTER_BUTTON("HP Y");
- ADD_PRINTER_BUTTON("HP Z");
- ADD_PRINTER_BUTTON("HP Plus");
- ADD_PRINTER_BUTTON("Epson Stylus");
- ADD_PRINTER_BUTTON("Epson Pro");
- ADD_PRINTER_BUTTON("Epson Office");
- ADD_PRINTER_BUTTON("Epson Extra");
-
-#undef ADD_PRINTER_BUTTON
-
- dialog->appear(MSceneWindow::DestroyWhenDone);
-}
-
-void DialogsAndNotificationsPage::openStackedDialogs()
-{
- if (dialog)
- return;
-
- //% "Click to spawn a nested dialog"
- MButton *button = new MButton(qtTrId("xx_dialogs_and_notifications_stacked_dialog_button"));
- //% "Stacked dialogs"
- dialog = new MDialog(qtTrId("xx_dialogs_and_notifications_stacked_dialog_title"), M::CancelButton);
- dialog->setCentralWidget(button);
-
- connect(button, SIGNAL(clicked()), SLOT(openNestedDialog()));
-
- dialog->appear(MSceneWindow::DestroyWhenDone);
-}
-
-void DialogsAndNotificationsPage::openNestedDialog()
-{
- if (nestedDialog)
- return;
-
- //% "Click to open a nested message box"
- MButton *button = new MButton(qtTrId("xx_dialogs_and_notifications_stacked_dialog_open_nested_messagebox"));
- //% "This is a nested dialog"
- nestedDialog = new MDialog(qtTrId("xx_dialogs_and_notifications_stacked_dialog_nested_dialog_title"), M::CancelButton);
- nestedDialog->setCentralWidget(button);
- connect(button, SIGNAL(clicked()), SLOT(openNestedMessageBox()));
-
- nestedDialog->appear(MSceneWindow::DestroyWhenDone);
-
-}
-
-void DialogsAndNotificationsPage::openNestedMessageBox()
-{
- if (nestedMessageBox)
- return;
-
- //% "I'm a nested message box"
- nestedMessageBox = new MMessageBox(qtTrId("xx_dialogs_and_notifications_stacked_dialog_messagebox_text"));
- nestedMessageBox->appear(MSceneWindow::DestroyWhenDone);
-}
-
-void DialogsAndNotificationsPage::openSystemModalDialog()
-{
- if (dialog)
- return;
-
- dialog = new MDialog(
- //% "System Modal Dialog"
- qtTrId("xx_dialogs_and_notifications_system_modal_dialog_title"),
- M::OkButton);
-
- dialog->setCentralWidget(
- //% "I'm a window modal dialog.\n"
- //% "There's no way around me!\n"
- //% "Muwhahaha... [evil laugh]"
- new MLabel(qtTrId("xx_dialogs_and_notifications_system_modal_dialog_label")));
-
- dialog->setSystemModal(true);
-
- dialog->appear(MSceneWindow::DestroyWhenDone);
-}
-
-void DialogsAndNotificationsPage::openDialogWithProgressIndicator()
-{
- if (dialog)
- return;
-
- MButton *button = new MButton();
- button->setViewType(MButton::switchType);
- button->setCheckable(true);
- button->setChecked(true);
- connect(button, SIGNAL(toggled(bool)), this, SLOT(setDialogProgressIndicatorVisible(bool)));
-
- //% "Progress Indicator"
- MLabel *label = new MLabel(qtTrId("xx_dialogs_and_notifications_progress_indicator"));
-
- QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Horizontal);
- layout->addStretch();
- layout->addItem(label);
- layout->addItem(button);
- layout->addStretch();
-
- dialog = new MDialog("Lorem ipsum", M::NoStandardButton);
- dialog->centralWidget()->setLayout(layout);
- dialog->setProgressIndicatorVisible(true);
- dialog->appear(MSceneWindow::DestroyWhenDone);
-}
-
-void DialogsAndNotificationsPage::openMessageBox()
-{
- if (dialog)
- return;
-
- //% "Hello World!"
- dialog = new MMessageBox(qtTrId("xx_dialogs_and_notifications_message_box_text"), M::OkButton);
- dialog->appear(MSceneWindow::DestroyWhenDone);
-}
-
-void DialogsAndNotificationsPage::showEventBanner()
-{
- MInfoBanner *infoBanner = new MInfoBanner(MInfoBanner::Event);
- infoBanner->setImageID("icon-m-content-email");
- infoBanner->setBodyText(
- //% "<b>Ida Taipale</b><br/>Have you seen my dog?"
- qtTrId("xx_dialogs_and_notifications_event_banner"));
- infoBanner->setIconID("Icon-new-SMS");
- connect(infoBanner, SIGNAL(clicked()), this, SLOT(openMessageBox()));
- infoBanner->appear(MSceneWindow::DestroyWhenDone);
-}
-
-void DialogsAndNotificationsPage::showInformationBanner()
-{
- MInfoBanner *infoBanner = new MInfoBanner(MInfoBanner::Information);
- infoBanner->setImageID("icon-m-startup-help");
- infoBanner->setBodyText(
- //% "<b>Battery is running low</b>"
- qtTrId("xx_dialogs_and_notifications_information_banner"));
- infoBanner->appear(MSceneWindow::DestroyWhenDone);
-}
-
-void DialogsAndNotificationsPage::showSystemInformationBanner()
-{
- MInfoBanner *infoBanner = new MInfoBanner(MInfoBanner::Information);
- infoBanner->setImageID("icon-m-telephony-call-answer");
- infoBanner->setBodyText(
- //% "<b>Incoming call</b>"
- qtTrId("xx_dialogs_and_notifications_system_information_banner"));
- //% "Accept"
- infoBanner->setButtonText(qtTrId("xx_dialogs_and_notifications_system_information_banner_accept"));
- connect(infoBanner, SIGNAL(buttonClicked()), this, SLOT(openMessageBox()));
- infoBanner->appear(MSceneWindow::DestroyWhenDone);
-}
-
-
-
-void DialogsAndNotificationsPage::populateLayout(MLinearLayoutPolicy *layoutPolicy)
-{
- // Dialogs
-
- dialogsContainer = new MContainer();
- QGraphicsLinearLayout *dialogsLayout = new QGraphicsLinearLayout(Qt::Vertical, dialogsContainer->centralWidget());
-
- layoutPolicy->addItem(dialogsContainer);
-
-
-
- button1 = new MButton(centralWidget());
- connect(button1, SIGNAL(clicked()), this, SLOT(openQuestionDialog()));
- dialogsLayout->addItem(button1);
-
- button2 = new MButton(centralWidget());
- connect(button2, SIGNAL(clicked()), this, SLOT(openEntryDialog()));
- dialogsLayout->addItem(button2);
-
- button3 = new MButton(centralWidget());
- connect(button3, SIGNAL(clicked()), this, SLOT(openLongDialog()));
- dialogsLayout->addItem(button3);
-
- buttonStackedDialogs = new MButton(centralWidget());
- connect(buttonStackedDialogs, SIGNAL(clicked()), this, SLOT(openStackedDialogs()));
- dialogsLayout->addItem(buttonStackedDialogs);
-
- buttonSystemModalDialog = new MButton(centralWidget());
- connect(buttonSystemModalDialog, SIGNAL(clicked()), this, SLOT(openSystemModalDialog()));
- dialogsLayout->addItem(buttonSystemModalDialog);
-
- buttonDialogWithProgressIndicator = new MButton(centralWidget());
- connect(buttonDialogWithProgressIndicator, SIGNAL(clicked()), this, SLOT(openDialogWithProgressIndicator()));
- dialogsLayout->addItem(buttonDialogWithProgressIndicator);
-
- button4 = new MButton(centralWidget());
- connect(button4, SIGNAL(clicked()), this, SLOT(openMessageBox()));
- dialogsLayout->addItem(button4);
-
- // Notifications
-
- notificationsContainer = new MContainer();
- QGraphicsLinearLayout *notificationsLayout = new QGraphicsLinearLayout(Qt::Vertical, notificationsContainer->centralWidget());
-
- layoutPolicy->addItem(notificationsContainer);
-
- button5 = new MButton(centralWidget());
- connect(button5, SIGNAL(clicked()), this, SLOT(showEventBanner()));
- notificationsLayout->addItem(button5);
-
- button6 = new MButton(centralWidget());
- connect(button6, SIGNAL(clicked()), this, SLOT(showInformationBanner()));
- notificationsLayout->addItem(button6);
-
- button7 = new MButton(centralWidget());
- button7->connect(button7, SIGNAL(clicked()), this, SLOT(showSystemInformationBanner()));
- notificationsLayout->addItem(button7);
-
-
- //notificationsLayout->addItem(button8);
-}
-
-void DialogsAndNotificationsPage::retranslateUi()
-{
- //% "Dialogs and Notifications"
- setTitle(qtTrId("xx_dialogs_and_notifications_title"));
- if (!isContentCreated())
- return;
- //% "Dialog examples"
- dialogsContainer->setTitle(qtTrId("xx_dialogs_and_notifications_label_dialogs"));
- //% "Question Dialog"
- button1->setText(qtTrId("xx_dialogs_and_notifications_query_dialog"));
- //% "Entry Dialog"
- button2->setText(qtTrId("xx_dialogs_and_notifications_entry_dialog"));
- //% "A Long Dialog"
- button3->setText(qtTrId("xx_dialogs_and_notifications_long_dialog"));
-
- //% "Stacked Dialogs"
- buttonStackedDialogs->setText(qtTrId("xx_dialogs_and_notifications_stacked_dialogs"));
-
- //% "System Modal Dialog"
- buttonSystemModalDialog->setText(qtTrId("xx_dialogs_and_notifications_system_modal_dialog"));
-
- //% "Dialog With Progress Indicator"
- buttonDialogWithProgressIndicator->setText(qtTrId("xx_dialogs_and_notifications_dialog_with_progress_indicator"));
-
- //% "Notifications and messages"
- notificationsContainer->setTitle(qtTrId("xx_dialogs_and_notifications_label_notifications"));
- //% "Simple Message Box"
- button4->setText(qtTrId("xx_dialogs_and_notifications_messagebox"));
- //% "Event Banner"
- button5->setText(qtTrId("xx_dialogs_and_notifications_label_event_banner"));
- //% "Information Banner"
- button6->setText(qtTrId("xx_dialogs_and_notifications_label_information_banner"));
- //% "System Information Banner"
- button7->setText(qtTrId("xx_dialogs_and_notifications_label_system_information_banner"));
-
-}
-
-void DialogsAndNotificationsPage::setDialogProgressIndicatorVisible(bool visible)
-{
- if (dialog) {
- dialog->setProgressIndicatorVisible(visible);
- }
-}
diff --git a/demos/widgetsgallery/dialogsandnotificationspage.h b/demos/widgetsgallery/dialogsandnotificationspage.h
deleted file mode 100644
index 96e3fe69..00000000
--- a/demos/widgetsgallery/dialogsandnotificationspage.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/***************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (directui@nokia.com)
-**
-** This file is part of libmeegotouch.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at directui@nokia.com.
-**
-** This library is free software; you can redistribute it and/or
-** modify it under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation
-** and appearing in the file LICENSE.LGPL included in the packaging
-** of this file.
-**
-****************************************************************************/
-
-#ifndef DIALOGSANDNOTIFICATIONSPAGE_H
-#define DIALOGSANDNOTIFICATIONSPAGE_H
-
-#include "templatepage.h"
-
-#include <QPointer>
-
-class MGridLayoutPolicy;
-class MDialog;
-class MButton;
-class MLabel;
-class MContainer;
-
-class DialogsAndNotificationsPage : public TemplatePage
-{
- Q_OBJECT
-public:
- DialogsAndNotificationsPage();
- virtual ~DialogsAndNotificationsPage();
- virtual QString timedemoTitle();
-
- virtual void createContent();
-
-protected:
- virtual void retranslateUi();
-
-private slots:
- void openQuestionDialog();
- void openEntryDialog();
- void openLongDialog();
- void openStackedDialogs();
- void openNestedDialog();
- void openNestedMessageBox();
- void openSystemModalDialog();
- void openDialogWithProgressIndicator();
- void openMessageBox();
- void showEventBanner();
- void showInformationBanner();
- void showSystemInformationBanner();
- void setDialogProgressIndicatorVisible(bool);
-
-private:
- void populateLayout(MLinearLayoutPolicy *layoutPolicy);
-
- QPointer<MDialog> dialog;
- QPointer<MDialog> nestedDialog;
- QPointer<MDialog> nestedMessageBox;
-
- MLabel *label1;
- MLabel *label2;
- MLabel *label3;
-
- MContainer *dialogsContainer;
- MContainer *notificationsContainer;
-
- MButton *button1;
- MButton *button2;
- MButton *button3;
- MButton *button4;
- MButton *button5;
- MButton *button6;
- MButton *button7;
-
- MButton *buttonStackedDialogs;
- MButton *buttonSystemModalDialog;
- MButton *buttonDialogWithProgressIndicator;
-};
-
-#endif // DIALOGSANDNOTIFICATIONSPAGE_H
diff --git a/demos/widgetsgallery/displaymodespage.cpp b/demos/widgetsgallery/displaymodespage.cpp
index 5e8339b9..304fc547 100644
--- a/demos/widgetsgallery/displaymodespage.cpp
+++ b/demos/widgetsgallery/displaymodespage.cpp
@@ -33,9 +33,8 @@
#include <QStringList>
#include <QTimer>
-DisplayModesPage::DisplayModesPage()
+DisplayModesPage::DisplayModesPage() : TemplatePage(TemplatePage::ApplicationView)
{
- gid = TemplatePage::ViewsAndDialogs;
}
DisplayModesPage::~DisplayModesPage()
@@ -125,22 +124,22 @@ void DisplayModesPage::addExampleActions()
{
MAction *action;
- action = new MAction("Icon-video", "Video", this);
+ action = new MAction("icon-m-toolbar-new-chat", "Chat", this);
action->setLocation(MAction::ToolBarLocation);
addAction(action);
- action = new MAction("Icon-new-SMS", "SMS", this);
+ action = new MAction("icon-m-toolbar-send-sms", "SMS", this);
action->setLocation(MAction::ToolBarLocation);
addAction(action);
- action = new MAction("Icon-contacts", "Contacts", this);
+ action = new MAction("icon-m-toolbar-send-email", "Mail", this);
action->setLocation(MAction::ToolBarLocation);
addAction(action);
}
void DisplayModesPage::retranslateUi()
{
- //% "Display Modes and Full Screen"
+ //% "Display Modes"
setTitle(qtTrId("xx_displaymodes_page_title"));
if (!isContentCreated())
return;
diff --git a/demos/widgetsgallery/feedbackpage.cpp b/demos/widgetsgallery/feedbackpage.cpp
index 27686676..88d64a8f 100644
--- a/demos/widgetsgallery/feedbackpage.cpp
+++ b/demos/widgetsgallery/feedbackpage.cpp
@@ -31,7 +31,7 @@
#include <MApplication>
FeedbackPage::FeedbackPage() :
- TemplatePage(),
+ TemplatePage(TemplatePage::UserInput),
feedbackButton1(0),
feedbackButton2(0),
feedbackButton3(0),
@@ -39,7 +39,6 @@ FeedbackPage::FeedbackPage() :
feedbackButton5(0),
feedbackButton6(0)
{
- gid = TemplatePage::InputFeedback;
}
FeedbackPage::~FeedbackPage()
diff --git a/demos/widgetsgallery/feedbackpage.h b/demos/widgetsgallery/feedbackpage.h
index 836b5597..cdeb23d4 100644
--- a/demos/widgetsgallery/feedbackpage.h
+++ b/demos/widgetsgallery/feedbackpage.h
@@ -20,7 +20,7 @@
#ifndef FEEDBACKPAGE_H
#define FEEDBACKPAGE_H
-#include "listpage.h"
+#include "mainpage.h"
#include "templatepage.h"
#include <MApplicationPage>
#include <MLayout>
diff --git a/demos/widgetsgallery/iconbuttonpage.cpp b/demos/widgetsgallery/iconbuttonpage.cpp
index 2bda9b60..9cd0e336 100644
--- a/demos/widgetsgallery/iconbuttonpage.cpp
+++ b/demos/widgetsgallery/iconbuttonpage.cpp
@@ -31,11 +31,10 @@
#include <QGraphicsLinearLayout>
IconButtonPage::IconButtonPage() :
- TemplatePage(),
+ TemplatePage(TemplatePage::SimpleWidgets),
iconButton1(0),
iconButton2(0)
{
- gid = TemplatePage::Buttons;
}
IconButtonPage::~IconButtonPage()
@@ -70,7 +69,7 @@ void IconButtonPage::createContent()
iconButton2->setViewType(MButton::iconType);
iconButton2->setIconID("icon-m-toolbar-locked");
iconButton2->setMaximumWidth(175);
-
+
containerPolicy->addItem(iconButton2, Qt::AlignCenter);
containerPolicy->addStretch();
retranslateUi();
diff --git a/demos/widgetsgallery/iconbuttonpage.h b/demos/widgetsgallery/iconbuttonpage.h
index 0f205123..952a68e1 100644
--- a/demos/widgetsgallery/iconbuttonpage.h
+++ b/demos/widgetsgallery/iconbuttonpage.h
@@ -20,7 +20,7 @@
#ifndef ICONBUTTONPAGE_H
#define ICONBUTTONPAGE_H
-#include "listpage.h"
+#include "mainpage.h"
#include "templatepage.h"
#include <MApplicationPage>
#include <MLayout>
diff --git a/demos/widgetsgallery/imagepage.cpp b/demos/widgetsgallery/imagepage.cpp
index 62757053..afd5111e 100644
--- a/demos/widgetsgallery/imagepage.cpp
+++ b/demos/widgetsgallery/imagepage.cpp
@@ -37,7 +37,7 @@
#include "utils.h"
ImagePage::ImagePage() :
- TemplatePage(),
+ TemplatePage(TemplatePage::SimpleWidgets),
propertiesLabel(NULL),
propertiesComboBox(NULL),
visual(NULL),
@@ -45,8 +45,6 @@ ImagePage::ImagePage() :
slider(NULL),
originalScaleFactor(10)
{
- gid = TemplatePage::LayoutsAndVisuals;
-
// Initial values for image property sliders
sliderValues[ImageZoom] = 10;
sliderValues[ImageTransparency] = 0;
@@ -89,7 +87,7 @@ void ImagePage::createContent()
// Image properties comboBox
propertiesComboBox = new MComboBox();
- propertiesComboBox->setIconID("Icon-pictures");
+ propertiesComboBox->setIconID("icon-m-gallery-image-edit");
// Image property slider
slider = new MSlider();
@@ -223,7 +221,7 @@ void ImagePage::setImageCrop(float width, float height)
void ImagePage::pinchGestureEvent(QGestureEvent *event, QPinchGesture *gesture)
{
if (gesture->state() == Qt::GestureStarted) {
- propertiesComboBox->setCurrentIndex(0);
+ propertiesComboBox->setCurrentIndex(0);
originalScaleFactor = slider->value();
//If the current scale factor is 0, the we would not be scaling anything.
diff --git a/demos/widgetsgallery/itemdetailpage.cpp b/demos/widgetsgallery/itemdetailpage.cpp
index 568be012..98052f75 100644
--- a/demos/widgetsgallery/itemdetailpage.cpp
+++ b/demos/widgetsgallery/itemdetailpage.cpp
@@ -27,6 +27,7 @@
#include <QTimer>
#include <QPropertyAnimation>
#include <QParallelAnimationGroup>
+#include <QPinchGesture>
#include <MImageWidget>
#include <MLabel>
@@ -70,7 +71,7 @@ MyVideoOverlayToolbar::MyVideoOverlayToolbar(QGraphicsItem *parent)
landscapePolicy = new MGridLayoutPolicy(layout);
landscapePolicy->setContentsMargins(0, 0, 0, 0);
landscapePolicy->setSpacing(0);
-
+
portraitPolicy = new MGridLayoutPolicy(layout);
portraitPolicy->setContentsMargins(0, 0, 0, 0);
portraitPolicy->setSpacing(0);
@@ -97,15 +98,19 @@ void MyVideoOverlayToolbar::addItem(QGraphicsLayoutItem* button)
#endif
ItemDetailPage::ItemDetailPage() :
+ slider(0),
+ image(0),
#ifdef HAVE_GSTREAMER
video(0),
#endif
- slider(0),
- image(0),
hideAnimation(0),
- showAnimation(0)
+ showAnimation(0),
+ scaleFactor(10.0),
+ lastScaleFactor(1.0)
{
setObjectName("itemDetailPage");
+ setAcceptTouchEvents(true);
+ grabGesture(Qt::PinchGesture);
}
ItemDetailPage::~ItemDetailPage()
@@ -115,7 +120,7 @@ ItemDetailPage::~ItemDetailPage()
#endif
delete slider;
delete image;
-
+
delete hideAnimation;
delete showAnimation;
}
@@ -125,11 +130,20 @@ QString ItemDetailPage::timedemoTitle()
return "ItemDetailPage";
}
+bool ItemDetailPage::event(QEvent *e)
+{
+ if (e->type() == QEvent::TouchBegin) {
+ lastScaleFactor = 1.0;
+ e->setAccepted(true);
+ return true;
+ }
+ return TimedemoPage::event(e);
+}
void ItemDetailPage::createContent()
{
mWarning("ItemDetailPage::createContent()");
-
+
inactivityTimer.setInterval(INACTIVITY_TIMEOUT);
connect(&inactivityTimer, SIGNAL(timeout()),
this, SLOT(hideOverlay()),
@@ -137,18 +151,19 @@ void ItemDetailPage::createContent()
QGraphicsWidget *panel = centralWidget();
layout = new MLayout(panel);
+ layout->setContentsMargins(0, 0, 0, 0);
#ifdef HAVE_GSTREAMER
if( !videoId.isEmpty() ) {
- QFileInfo info(videoId);
+ QFileInfo info(videoId);
setTitle(info.fileName());
setObjectName("video-detail-page");
video = new MyVideoWidget(panel);
connect(video, SIGNAL(videoReady()), this, SLOT(videoReady()));
-//set video to fullscreen mode immediately only on device where the
-//Xv rendering with color-key is supported for sure, to avoid flickering
+//set video to fullscreen mode immediately only on device where the
+//Xv rendering with color-key is supported for sure, to avoid flickering
//on desktop machines that does not support color-keying.
#ifdef __arm__
video->setFullscreen(true);
@@ -162,7 +177,7 @@ void ItemDetailPage::createContent()
button->setObjectName("video-player-button");
button->setIconID("icon-m-toolbar-mediacontrol-pause");
connect(button, SIGNAL(clicked(bool)), this, SLOT(buttonClicked()));
-
+
MButton* bPrev = new MButton(panel);
bPrev->setViewType(MButton::iconType);
bPrev->setObjectName("video-player-button");
@@ -174,7 +189,7 @@ void ItemDetailPage::createContent()
bNext->setObjectName("video-player-button");
bNext->setIconID("icon-m-toolbar-mediacontrol-next");
connect(bNext, SIGNAL(clicked(bool)), this, SLOT(buttonClicked()));
-
+
slider = new MSlider(panel);
slider->setObjectName("video-player-slider");
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(videoSliderValueChanged(int)));
@@ -182,7 +197,7 @@ void ItemDetailPage::createContent()
connect(slider, SIGNAL(sliderReleased()), this, SLOT(sliderReleased()));
slider->setMinLabelVisible(true);
slider->setMaxLabelVisible(true);
-
+
cContainer = new MyVideoOverlayToolbar(panel);
cContainer->addItem(bPrev);
cContainer->addItem(button);
@@ -214,7 +229,7 @@ void ItemDetailPage::createContent()
hideAnimation = new QParallelAnimationGroup();
showAnimation = new QParallelAnimationGroup();
-
+
QPropertyAnimation* animation = new QPropertyAnimation(cContainer, "opacity");
animation->setDuration(ANIMATION_TIME);
animation->setEndValue(0.0);
@@ -244,7 +259,7 @@ void ItemDetailPage::createContent()
animation->setDuration(ANIMATION_TIME);
animation->setEndValue(1.0);
showAnimation->addAnimation(animation);
-
+
relayout();
} else if( !imageId.isEmpty() ) {
#else
@@ -252,54 +267,16 @@ void ItemDetailPage::createContent()
#endif
policy = new MLinearLayoutPolicy(layout, Qt::Horizontal);
policy->setSpacing(0.0);
- layout->setLandscapePolicy(policy);
- layout->setPortraitPolicy(policy);
-
- MButton* button0 = new MButton;
- button0->setText("-");
- connect(button0, SIGNAL(clicked()),this,SLOT(rateNoneButtonClicked()));
-
- MButton* button1 = new MButton;
- button1->setText("*");
- connect(button1, SIGNAL(clicked()),this,SLOT(rateOneButtonClicked()));
-
- MButton* button2 = new MButton;
- button2->setText("**");
- connect(button2, SIGNAL(clicked()),this,SLOT(rateTwoButtonClicked()));
-
- MButton* button3 = new MButton;
- button3->setText("***");
- connect(button3, SIGNAL(clicked()),this,SLOT(rateThreeButtonClicked()));
-
- MButton* button4 = new MButton;
- button4->setText("****");
- connect(button4, SIGNAL(clicked()),this,SLOT(rateFourButtonClicked()));
-
- MButton* button5 = new MButton;
- button5->setText("*****");
- connect(button5, SIGNAL(clicked()),this,SLOT(rateFiveButtonClicked()));
+ layout->setPolicy(policy);
image = new MImageWidget(panel);
image->setImage(QImage(imageId));
policy->addItem(image);
- MLayout* bl = new MLayout;
- bl->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::MinimumExpanding);
- MLinearLayoutPolicy* blp = new MLinearLayoutPolicy(bl,Qt::Vertical);
- blp->addItem(button0);
- blp->addItem(button1);
- blp->addItem(button2);
- blp->addItem(button3);
- blp->addItem(button4);
- blp->addItem(button5);
- bl->setLandscapePolicy(blp);
-
- policy->addItem(bl);
-
setTitle(QFileInfo(imageId).fileName());
// go fullscreen
- setComponentsDisplayMode(MApplicationPage::AllComponents,
+ setComponentsDisplayMode(MApplicationPage::NavigationBar,
MApplicationPageModel::AutoHide);
}
retranslateUi();
@@ -315,6 +292,26 @@ void ItemDetailPage::resizeEvent(QGraphicsSceneResizeEvent *event)
relayout();
}
+void ItemDetailPage::pinchGestureEvent(QGestureEvent *event, QPinchGesture *gesture)
+{
+ if (gesture->state() == Qt::GestureStarted) {
+ lastScaleFactor = 1.0;
+ }
+
+ image->setZoomFactor(scaleFactor / 10.0);
+ image->update();
+ scaleFactor = scaleFactor * (gesture->scaleFactor() - lastScaleFactor + 1);
+
+ lastScaleFactor = gesture->scaleFactor();
+
+ if (scaleFactor < 1)
+ scaleFactor = 1;
+ else if (scaleFactor > 50)
+ scaleFactor = 50;
+
+ event->accept(gesture);
+}
+
void ItemDetailPage::relayout()
{
#ifdef HAVE_GSTREAMER
@@ -326,11 +323,11 @@ void ItemDetailPage::relayout()
(s.height() - bContainer->size().height()));
QPoint tPos = QPoint(((s.width() / 2) - (tContainer->size().width()/2)),
0);
-
+
cContainer->setPos(cPos);
bContainer->setPos(bPos);
tContainer->setPos(tPos);
-
+
video->setGeometry(QRectF(0,0,s.width(), s.height()));
}
#endif
@@ -370,10 +367,10 @@ void ItemDetailPage::videoReady()
QTimer::singleShot(100, this, SLOT(updatePosition()));
int minutes = (video->length() / 1000) / 60;
- int seconds = (video->length() / 1000) % 60;
+ int seconds = (video->length() / 1000) % 60;
slider->setMinLabel("0:00");
slider->setMaxLabel(QString("%1:%2").arg(minutes).arg(seconds, 2, 10, QChar('0')));
-
+
setPannable(false);
setAutoMarginsForComponentsEnabled(false);
setComponentsDisplayMode(MApplicationPage::NavigationBar, MApplicationPageModel::Hide);
@@ -425,9 +422,9 @@ void ItemDetailPage::buttonClicked()
video->play();
button->setIconID("icon-m-toolbar-mediacontrol-pause");
}
- } else
+ } else
video->setFullscreen(!video->isFullscreen());
- }
+ }
#endif
}
diff --git a/demos/widgetsgallery/itemdetailpage.h b/demos/widgetsgallery/itemdetailpage.h
index 9745be29..156db237 100644
--- a/demos/widgetsgallery/itemdetailpage.h
+++ b/demos/widgetsgallery/itemdetailpage.h
@@ -40,19 +40,19 @@ class QParallelAnimationGroup;
//video widget which emits clicked signal
class MyVideoWidget : public MVideoWidget
-{
+{
Q_OBJECT
-
+
public:
MyVideoWidget(QGraphicsItem *parent = 0);
Q_SIGNALS:
void clicked();
-
+
protected:
-
+
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
-
+
private:
};
@@ -118,6 +118,10 @@ signals:
protected:
virtual void retranslateUi();
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
+
+ virtual void pinchGestureEvent(QGestureEvent *event, QPinchGesture *gesture);
+ virtual bool event(QEvent *e);
+
private:
void relayout();
@@ -145,4 +149,7 @@ private:
QString videoId;
QTimer inactivityTimer;
+
+ qreal scaleFactor;
+ qreal lastScaleFactor;
};
diff --git a/demos/widgetsgallery/labelpage.cpp b/demos/widgetsgallery/labelpage.cpp
index d4346656..6c449dc2 100644
--- a/demos/widgetsgallery/labelpage.cpp
+++ b/demos/widgetsgallery/labelpage.cpp
@@ -31,16 +31,14 @@
#include <mlabelhighlighter.h>
LabelPage::LabelPage()
- : TemplatePage(),
+ : TemplatePage(TemplatePage::SimpleWidgets),
simpleLabel(0),
- richLabel(0)
+ richLabel(0),
+ phoneHighlighter(0),
+ urlHighlighter(0),
+ emailHighlighter(0),
+ commonHighlighter(0)
{
- gid = TemplatePage::LayoutsAndVisuals;
-
- phoneHighlighter = NULL;
- emailHighlighter = NULL;
- urlHighlighter = NULL;
- commonHighlighter = NULL;
}
LabelPage::~LabelPage()
@@ -70,15 +68,6 @@ void LabelPage::createContent()
richLabel->setWordWrap(true);
containerPolicy->addItem(richLabel);
- textEdit = new MTextEdit(MTextEditModel::MultiLine);
- containerPolicy->addItem(textEdit);
-
- MButton *b = new MButton("Highlight");
- containerPolicy->addItem(b);
-
- connect(b, SIGNAL(clicked()), this, SLOT(applySearch()));
-
-
QRegExp phoneregexp("[\\+]{0,1}(\\d{8,13}|[\\(][\\+]{0,1}\\d{2,}[\\)]*\\d{5,13}|\\d{2,6}[\\-]{1}\\d{2,13}[\\-]*\\d{3,13})",
Qt::CaseInsensitive);
QRegExp emailregexp("([0-9A-Z]([-\\.\\w]*[0-9A-Z])*@([0-9A-Z][-\\w]*[0-9A-Z]\\.)+[A-Z]{2,9})",
@@ -165,17 +154,3 @@ void LabelPage::urlClicked(const QString &link)
{
mDebug("LabelPage::urlClicked()") << link;
}
-
-
-void LabelPage::applySearch()
-{
- mDebug("LabelPage::applySearch()") << textEdit->text();
-
- richLabel->removeHighlighter(commonHighlighter);
- delete commonHighlighter;
-
- commonHighlighter = new MCommonLabelHighlighter(QRegExp(textEdit->text()));
-
- richLabel->addHighlighter(commonHighlighter);
-
-}
diff --git a/demos/widgetsgallery/labelpage.h b/demos/widgetsgallery/labelpage.h
index 1b68d56d..d3f37260 100644
--- a/demos/widgetsgallery/labelpage.h
+++ b/demos/widgetsgallery/labelpage.h
@@ -47,7 +47,6 @@ protected slots:
void urlClicked(const QString &link);
void urlLongPressed(const QString &link);
- void applySearch();
private:
MLabel *simpleLabel;
MLabel *richLabel;
@@ -56,8 +55,6 @@ private:
MLabelHighlighter *urlHighlighter;
MLabelHighlighter *emailHighlighter;
MLabelHighlighter *commonHighlighter;
-
- MTextEdit *textEdit;
};
#endif // LABELPAGE_H
diff --git a/demos/widgetsgallery/languagepage.cpp b/demos/widgetsgallery/languagepage.cpp
index 9ef431b7..f0112d8a 100644
--- a/demos/widgetsgallery/languagepage.cpp
+++ b/demos/widgetsgallery/languagepage.cpp
@@ -37,7 +37,8 @@
#include <QDateTime>
LanguagePage::LanguagePage()
- : comboBoxLanguage(0),
+ : TemplatePage(TemplatePage::ApplicationView),
+ comboBoxLanguage(0),
modelLanguage(0),
comboBoxLcTime(0),
modelLcTime(0),
@@ -57,7 +58,6 @@ LanguagePage::LanguagePage()
labelExampleTranslation3(0),
labelFontTest(0)
{
- gid = TemplatePage::UserInput;
}
LanguagePage::~LanguagePage()
@@ -76,16 +76,11 @@ void LanguagePage::createContent()
MLayout *layout = new MLayout(panel);
MGridLayoutPolicy *policy = new MGridLayoutPolicy(layout);
comboBoxLanguage = new MComboBox;
- comboBoxLanguage->setIconID("Icon-browser");
policy->addItem(comboBoxLanguage, 1, 1);
comboBoxLcTime = new MComboBox;
- comboBoxLcTime->setIconID("Icon-browser");
comboBoxLcCollate = new MComboBox;
- comboBoxLcCollate->setIconID("Icon-browser");
comboBoxLcNumeric = new MComboBox;
- comboBoxLcNumeric->setIconID("Icon-browser");
comboBoxLcMonetary = new MComboBox;
- comboBoxLcMonetary->setIconID("Icon-browser");
labelHaveGconf = new MLabel;
labelHaveIcu = new MLabel;
labelExampleNumber = new MLabel;
diff --git a/demos/widgetsgallery/main.cpp b/demos/widgetsgallery/main.cpp
index f34137ab..b4572112 100644
--- a/demos/widgetsgallery/main.cpp
+++ b/demos/widgetsgallery/main.cpp
@@ -31,7 +31,7 @@
#include <MGConfItem>
#include <MSceneManager>
-#include "listpage.h"
+#include "mainpage.h"
#include "timedemo.h"
#include "swaphook.h"
#include "widgetsgalleryretranslator.h"
@@ -69,7 +69,7 @@ int main(int argc, char **argv)
MApplicationWindow window;
window.show();
- ListPage listPage;
+ MainPage mainPage;
Timedemo *timedemo = 0;
if (qApp->arguments().indexOf("-timedemo") >= 0) {
QStringList demoPages;
@@ -78,7 +78,7 @@ int main(int argc, char **argv)
demoPages = qApp->arguments()[idx + 1].split(',');
}
- timedemo = new Timedemo(&listPage, demoPages);
+ timedemo = new Timedemo(&mainPage, demoPages);
idx = qApp->arguments().indexOf("-outputcsv");
if (idx >= 0 && idx + 1 < qApp->arguments().count()) {
@@ -93,7 +93,7 @@ int main(int argc, char **argv)
int index = qApp->arguments().indexOf("-initialpage");
if (index >= 0) {
if (index + 1 < qApp->arguments().count()) {
- listPage.setInitialPageToShow(qApp->arguments()[index + 1]);
+ mainPage.setInitialPageToShow(qApp->arguments()[index + 1]);
}
}
@@ -103,7 +103,7 @@ int main(int argc, char **argv)
mainLoopHelper.triggerTermination(EmptyMainLoopHelper::QuitOnEmpty);
}
- window.sceneManager()->appearSceneWindowNow(&listPage);
+ window.sceneManager()->appearSceneWindowNow(&mainPage);
int exitCode = application.exec();
delete timedemo;
diff --git a/demos/widgetsgallery/maincategorypage.cpp b/demos/widgetsgallery/maincategorypage.cpp
new file mode 100644
index 00000000..95b36179
--- /dev/null
+++ b/demos/widgetsgallery/maincategorypage.cpp
@@ -0,0 +1,107 @@
+#include "maincategorypage.h"
+#include "mainpage.h"
+
+#include <MAbstractCellCreator>
+#include <MContentItem>
+#include <MLayout>
+#include <MLinearLayoutPolicy>
+#include <MList>
+
+class WidgetsGalleryCategoryDataModel : public QAbstractListModel {
+public:
+ WidgetsGalleryCategoryDataModel(QAbstractItemModel *parentModel, const QModelIndex &parentIndex)
+ : QAbstractListModel(), widgetsGalleryModel(parentModel), categoryIndex(parentIndex) {
+
+ }
+
+ QModelIndex parent(const QModelIndex &child) const {
+ Q_UNUSED(child);
+
+ return categoryIndex;
+ }
+
+ int rowCount(const QModelIndex &index) const {
+ Q_UNUSED(index);
+
+ return widgetsGalleryModel->rowCount(categoryIndex);
+ }
+
+ QVariant data(const QModelIndex &index, int role) const {
+ return widgetsGalleryModel->data(index, role);
+ }
+private:
+ QAbstractItemModel *widgetsGalleryModel;
+ QModelIndex categoryIndex;
+};
+
+class WidgetGalleryCellCreator : public MAbstractCellCreator<MContentItem>
+{
+public:
+ WidgetGalleryCellCreator() : MAbstractCellCreator<MContentItem>() {
+ }
+
+ MWidget *createCell(const QModelIndex &index, MWidgetRecycler &recycler) const {
+ Q_UNUSED(index);
+
+ MContentItem *cell = dynamic_cast<MContentItem *>(recycler.take(MContentItem::staticMetaObject.className()));
+ if (cell == NULL) {
+ cell = new MContentItem(MContentItem::SingleTextLabel);
+ cell->setObjectName("wgMainCategoryPageGalleryItem");
+ }
+ updateCell(index, cell);
+
+ return cell;
+ }
+
+ void updateCell(const QModelIndex &index, MWidget *cell) const {
+ MContentItem *item = qobject_cast<MContentItem*>(cell);
+ if(!item)
+ return;
+
+ item->setTitle(index.data().toString());
+ }
+};
+
+MainCategoryPage::MainCategoryPage(QAbstractItemModel *demosDataModel, const QModelIndex &parentIndex) :
+ dataModel(new WidgetsGalleryCategoryDataModel(demosDataModel, parentIndex))
+{
+}
+
+QString MainCategoryPage::timedemoTitle()
+{
+ return "MainCategoryPage";
+}
+
+void MainCategoryPage::createContent()
+{
+ TimedemoPage::createContent();
+
+ QGraphicsWidget *panel = centralWidget();
+
+ MLayout *layout = new MLayout(panel);
+ layout->setContentsMargins(0, 0, 0, 0);
+ panel->setLayout(layout);
+ policy = new MLinearLayoutPolicy(layout, Qt::Vertical);
+ policy->setSpacing(0);
+
+ populateLayout();
+}
+
+void MainCategoryPage::populateLayout()
+{
+ list = new MList(centralWidget());
+ list->setObjectName("wgList");
+ list->setCellCreator(new WidgetGalleryCellCreator());
+ list->setItemModel(dataModel);
+
+ policy->addItem(list, Qt::AlignCenter);
+
+ connect(list, SIGNAL(itemClicked(QModelIndex)), this, SLOT(galleryPageItemClicked(QModelIndex)));
+}
+
+void MainCategoryPage::galleryPageItemClicked(const QModelIndex &index)
+{
+ TemplatePage *page = static_cast<TemplatePage *>(index.data(MainPage::Page).value<void *>());
+ page->setParent(this);
+ page->appear();
+}
diff --git a/demos/widgetsgallery/maincategorypage.h b/demos/widgetsgallery/maincategorypage.h
new file mode 100644
index 00000000..b7443918
--- /dev/null
+++ b/demos/widgetsgallery/maincategorypage.h
@@ -0,0 +1,34 @@
+#ifndef MAINCATEGORYPAGE_H
+#define MAINCATEGORYPAGE_H
+
+#include "templatepage.h"
+
+#include <QModelIndex>
+
+class MLinearLayoutPolicy;
+class MList;
+
+class QAbstractItemModel;
+
+class MainCategoryPage : public TimedemoPage
+{
+ Q_OBJECT
+public:
+ MainCategoryPage(QAbstractItemModel* demosDataModel, const QModelIndex &parentIndex);
+
+ QString timedemoTitle();
+
+ void createContent();
+ void populateLayout();
+
+private Q_SLOTS:
+ void galleryPageItemClicked(const QModelIndex &index);
+
+private:
+ QAbstractItemModel *dataModel;
+ MList *list;
+
+ MLinearLayoutPolicy *policy;
+};
+
+#endif // MAINCATEGORYPAGE_H
diff --git a/demos/widgetsgallery/listpage.cpp b/demos/widgetsgallery/mainpage.cpp
index 7588fd8b..000d4e8c 100644
--- a/demos/widgetsgallery/listpage.cpp
+++ b/demos/widgetsgallery/mainpage.cpp
@@ -17,13 +17,13 @@
**
****************************************************************************/
-#include "listpage.h"
+#include "mainpage.h"
+#include "maincategorypage.h"
#include "templatepage.h"
#include "labelpage.h"
#include "pushbuttonpage.h"
#include "iconbuttonpage.h"
#include "switchpage.h"
-#include "dialogsandnotificationspage.h"
#include "imagepage.h"
#include "applicationmenupage.h"
#include "toolbarpage.h"
@@ -40,6 +40,12 @@
#include "displaymodespage.h"
#include "languagepage.h"
#include "feedbackpage.h"
+#include "contentitemspage.h"
+#include "singleselectiondialogspage.h"
+#include "multipleselectiondialogspage.h"
+#include "querydialogspage.h"
+#include "bannerspage.h"
+#include "bubblepage.h"
#include <QGraphicsLayoutItem>
#include <QGraphicsLinearLayout>
@@ -48,9 +54,12 @@
#include <QPointer>
#include <QDebug>
#include <QSettings>
+#include <QStringListModel>
#include <QDir>
#include <MApplication>
+#include <MAbstractCellCreator>
+#include <MContentItem>
#include <MLocale>
#include <MLayout>
#include <MButton>
@@ -67,90 +76,227 @@
#include <MGConfItem>
#endif
-MyContainer::MyContainer(QGraphicsItem *parent)
- : MContainer(parent)
-{
- MLayout *layout = new MLayout(centralWidget());
+class WidgetsGalleryDataModel : public QAbstractItemModel {
+public:
+ typedef QList<TemplatePage*> TemplatePageList;
+ typedef QList<QString> TemplatePageNameList;
+public:
+ WidgetsGalleryDataModel() : QAbstractItemModel() {
+ //% "Application View"
+ addCategory(qtTrId("xx_wg_categories_application_view"), new MainCategoryPage(this, createIndex(0,0)));
+ //% "Application Menu"
+ addGalleryPage(index(0,0), qtTrId("xx_wg_application_view_view_menu"), new ApplicationMenuPage());
+ //% "Display Modes"
+ addGalleryPage(index(0,0), qtTrId("xx_wg_application_view_display_modes"), new DisplayModesPage());
+ //% "Toolbar (including Tab Bar)"
+ addGalleryPage(index(0,0), qtTrId("xx_wg_application_view_toolbar_incl_tab_bar"), new ToolBarPage());
+
+
+ //% "Simple Widgets"
+ addCategory(qtTrId("xx_wg_categories_simple_widgets"), new MainCategoryPage(this, createIndex(1,0)));
+ //% "Labels"
+ addGalleryPage(index(1,0), qtTrId("xx_wg_simple_widgets_labels"), new LabelPage());
+ //% "Image"
+ addGalleryPage(index(1,0), qtTrId("xx_wg_simple_widgets_image"), new ImagePage());
+ //% "Progress Bar"
+ addGalleryPage(index(1,0), qtTrId("xx_wg_simple_widgets_progress_bar"), new ProgressBarPage());
+ //% "Container"
+ addGalleryPage(index(1,0), qtTrId("xx_wg_simple_widgets_container"), new ContainerPage());
+ //% "Spinner"
+ addGalleryPage(index(1,0), qtTrId("xx_wg_simple_widgets_spinner"), new SpinnerPage());
+
+ //% "Buttons"
+ addCategory(qtTrId("xx_wg_categories_buttons"), new MainCategoryPage(this, createIndex(2,0)));
+ //% "Push Button"
+ addGalleryPage(index(2,0), qtTrId("xx_wg_buttons_push_button"), new PushButtonPage());
+ //% "Icon Button"
+ addGalleryPage(index(2,0), qtTrId("xx_wg_buttons_icon_button"), new IconButtonPage());
+ //% "Switch"
+ addGalleryPage(index(2,0), qtTrId("xx_wg_buttons_switch"), new SwitchPage());
+ //% "Checkbox"
+ addGalleryPage(index(2,0), qtTrId("xx_wg_buttons_checkbox"), new CheckboxPage());
+
+ //% "Dialogs and Banners"
+ addCategory(qtTrId("xx_wg_categories_dialogs_and_banners"), new MainCategoryPage(this, createIndex(3,0)));
+ //% "Single Selection Dialog"
+ addGalleryPage(index(3,0), qtTrId("xx_wg_dialogs_and_banners_single_selection_dialog"), new SingleSelectionDialogsPage());
+ //% "Multiple Selection Dialog"
+ addGalleryPage(index(3,0), qtTrId("xx_wg_dialogs_and_banners_multiple_selection_dialog"), new MultipleSelectionDialogsPage());
+ //% "Query Dialog"
+ addGalleryPage(index(3,0), qtTrId("xx_wg_dialogs_and_banners_query_dialog"), new QueryDialogsPage());
+ //% "Banner"
+ addGalleryPage(index(3,0), qtTrId("xx_wg_dialogs_and_banners_banner"), new BannersPage());
+
+ //% "Lists, Grids and Popups"
+ addCategory(qtTrId("xx_wg_categories_lists_grids_and_popups"), new MainCategoryPage(this, createIndex(4,0)));
+ //% "List"
+ addGalleryPage(index(4,0), qtTrId("xx_wg_lists_grids_and_popups_list"), new MListPage());
+ //% "Grid"
+ addGalleryPage(index(4,0), qtTrId("xx_wg_lists_grids_and_popups_grid"), new MGridPage());
+ //% "Object Menu"
+ addGalleryPage(index(4,0), qtTrId("xx_wg_lists_grids_and_popups_object_menu"), new ObjectMenuPage());
+ //% "ComboBox"
+ addGalleryPage(index(4,0), qtTrId("xx_wg_lists_grids_and_popups_combobox"), new ComboBoxPage());
+ //% "ContentItems"
+ addGalleryPage(index(4,0), qtTrId("xx_wg_lists_grids_and_popups_contentitems"), new ContentItemsPage());
+ //% "Speech bubble"
+ addGalleryPage(index(4,0), qtTrId("xx_wg_lists_grids_and_popups_bubble"), new BubblePage());
+
+ //% "User Input"
+ addCategory(qtTrId("xx_wg_categories_user_input"), new MainCategoryPage(this, createIndex(5,0)));
+ //% "Text Entries"
+ addGalleryPage(index(5,0), qtTrId("xx_wg_user_input_text_entries"), new TextEntryPage());
+ //% "Slider"
+ addGalleryPage(index(5,0), qtTrId("xx_wg_user_input_slider"), new SliderPage());
+ //% "Input Feedback"
+ addGalleryPage(index(5,0), qtTrId("xx_wg_user_input_input_feedback"), new FeedbackPage());
- landscapePolicy = new MGridLayoutPolicy(layout);
- landscapePolicy->setContentsMargins(0, 0, 0, 0);
- landscapePolicy->setSpacing(0);
- //To make sure that both columns have the same width, give them the same preferred width.
- landscapePolicy->setColumnPreferredWidth(0, 800);
- landscapePolicy->setColumnPreferredWidth(1, 800);
+ }
- portraitPolicy = new MLinearLayoutPolicy(layout, Qt::Vertical);
- portraitPolicy->setContentsMargins(0, 0, 0, 0);
- portraitPolicy->setSpacing(0);
+ QModelIndex parent(const QModelIndex &child) const {
+ Q_UNUSED(child);
- layout->setLandscapePolicy(landscapePolicy);
- layout->setPortraitPolicy(portraitPolicy);
-}
+ if (child.internalId() >= 0)
+ return index(child.internalId(), 0);
-MyContainer::~MyContainer()
-{
-}
+ return QModelIndex();
+ }
+
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const {
+ if (parent.isValid())
+ return createIndex(row, column, parent.row());
+ else
+ return createIndex(row, column, -1);
+ }
+
+ int columnCount(const QModelIndex &parent) const {
+ Q_UNUSED(parent);
+
+ return 1;
+ }
+
+ int rowCount(const QModelIndex &parent) const {
+ Q_UNUSED(parent);
+
+ if (parent.isValid())
+ return galleryPages[parent.row()].count();
+ else
+ return categoryPageNames.count();
+ }
+
+ QVariant data(const QModelIndex &index, int role) const {
+ Q_UNUSED(index);
+
+ if (index.isValid()) {
+ if (role == Qt::DisplayRole || role == MainPage::PageName) {
+ return getName(index);
+ } else if (role == MainPage::Page) {
+ return QVariant::fromValue((void *)getPage(index));
+ } else if (role == MainPage::PageTimedemoName) {
+ return getTimedemoName(index);
+ }
+ }
+
+ return QVariant();
+ }
-void MyContainer::addItem(QGraphicsLayoutItem *button)
+private:
+ void addCategory(const QString &name, MainCategoryPage *page) {
+ page->setTitle(name);
+
+ categoryPageNames.append(name);
+ categoryPages.append(page);
+ }
+
+ void addGalleryPage(const QModelIndex &parent, const QString &name, TemplatePage *page) {
+ galleryPageNames[parent.row()].append(name);
+ galleryPages[parent.row()].append(page);
+ }
+
+ MApplicationPage *getPage(const QModelIndex &index) const {
+ if (index.parent().isValid())
+ return galleryPages[index.parent().row()].at(index.row());
+ else
+ return categoryPages[index.row()];
+ }
+
+ const QString &getName(const QModelIndex &index) const {
+ if (index.parent().isValid())
+ return galleryPageNames[index.parent().row()].at(index.row());
+ else
+ return categoryPageNames[index.row()];
+ }
+
+ QString getTimedemoName(const QModelIndex &index) const {
+ if (index.parent().isValid())
+ return galleryPages[index.parent().row()].at(index.row())->timedemoTitle();
+
+ return QString();
+ }
+
+private:
+ QList<QString> categoryPageNames;
+ QList<MainCategoryPage*> categoryPages;
+ QMap<int, TemplatePageList> galleryPages;
+ QMap<int, TemplatePageNameList> galleryPageNames;
+};
+
+class WidgetGalleryCategoryCellCreator : public MAbstractCellCreator<MContentItem>
{
- int count = landscapePolicy->count();
+public:
+ WidgetGalleryCategoryCellCreator() : MAbstractCellCreator<MContentItem>() {
+ }
- int row = count / 2;
- int column = count % 2;
+ MWidget *createCell(const QModelIndex &index, MWidgetRecycler &recycler) const {
+ Q_UNUSED(index);
- landscapePolicy->addItem(button, row, column);
- portraitPolicy->addItem(button);
-}
+ MContentItem *cell = dynamic_cast<MContentItem *>(recycler.take(MContentItem::staticMetaObject.className()));
+ if (cell == NULL) {
+ cell = new MContentItem(MContentItem::SingleTextLabel);
+ cell->setObjectName("wgMainPageCategoryItem");
+ }
+ updateCell(index, cell);
-ListPage::ListPage(const QString &title)
- : shownPage(NULL)
+ return cell;
+ }
+
+ void updateCell(const QModelIndex &index, MWidget *cell) const {
+ MContentItem *item = qobject_cast<MContentItem*>(cell);
+ if(!item)
+ return;
+
+ item->setTitle(index.data().toString());
+ }
+};
+
+MainPage::MainPage(const QString &title)
+ : shownPage(NULL), languageSettingsPage(NULL)
{
setTitle(title);
connect(this, SIGNAL(appeared()), this, SLOT(showInitialPage()));
}
-ListPage::~ListPage()
+MainPage::~MainPage()
{
}
-QString ListPage::timedemoTitle()
+QString MainPage::timedemoTitle()
{
return "MainPage";
}
-void ListPage::createContent()
+void MainPage::createContent()
{
MApplicationPage::createContent();
- addPage(new ApplicationMenuPage);
- addPage(new ObjectMenuPage);
- addPage(new DialogsAndNotificationsPage);
- addPage(new DisplayModesPage);
- addPage(new ToolBarPage);
- addPage(new ContainerPage);
- addPage(new LabelPage);
- addPage(new ImagePage);
- addPage(new PushButtonPage);
- addPage(new IconButtonPage);
- addPage(new SwitchPage);
- addPage(new ProgressBarPage);
- addPage(new SpinnerPage);
- addPage(new MListPage);
- addPage(new MGridPage);
- addPage(new CheckboxPage);
- addPage(new ComboBoxPage);
- addPage(new TextEntryPage);
- addPage(new SliderPage);
- addPage(new LanguagePage);
- addPage(new FeedbackPage);
-
QGraphicsWidget *panel = centralWidget();
MLayout *layout = new MLayout(panel);
+ layout->setContentsMargins(0, 0, 0, 0);
panel->setLayout(layout);
policy = new MLinearLayoutPolicy(layout, Qt::Vertical);
- policy->setContentsMargins(6, 6, 6, 6);
+ policy->setContentsMargins(0, 0, 0, 0);
policy->setSpacing(0);
populateLayout();
@@ -170,99 +316,41 @@ void ListPage::createContent()
this->addAction(action);
connect(action, SIGNAL(triggered()), SLOT(toggleFps()));
+ action = new MAction("Language Settings", this);
+ action->setLocation(MAction::ApplicationMenuLocation);
+ this->addAction(action);
+ connect(action, SIGNAL(triggered()), SLOT(showLanguageSettingsPage()));
+
retranslateUi();
}
-void ListPage::retranslateUi()
+void MainPage::retranslateUi()
{
//% "Widgets Gallery"
setTitle(qtTrId("xx_application_title"));
- QList<MButton *> keys = buttons.keys();
- const int keysCount = keys.count();
- for (int i = 0; i < keysCount; ++i) {
- MButton *button = keys[i];
- MApplicationPage *page = buttons.value(button);
- if (!page) continue;
-
- // the retranslateUi() is normally only executed when a
- // page is visible, but because we need the new translations
- // of the titles, we have to do this hack here.
- // we call retranslateUi for the pages.
- QEvent ev(QEvent::LanguageChange);
- qApp->sendEvent(page, &ev);
-
- button->setText(page->title());
- }
-
if (!isContentCreated())
return;
-
- QStringList groupNames = TemplatePage::groupNames();
- const int count = groupNames.count();
- for (int i = 0; i < count; ++i)
- containers[i]->setTitle(groupNames[i]);
-
}
-MGridLayoutPolicy *ListPage::createAndSetupGridPolicy(MWidget *panel)
-{
- MLayout *layout = new MLayout(panel);
- MGridLayoutPolicy *policy = new MGridLayoutPolicy(layout);
- policy->setContentsMargins(6, 6, 6, 6);
- policy->setSpacing(0);
- return policy;
-}
-
-void ListPage::setInitialPageToShow(const QString& initialPageToShow)
+void MainPage::setInitialPageToShow(const QString& initialPageToShow)
{
this->initialPageToShow = initialPageToShow;
}
-void ListPage::populateLayout()
+void MainPage::populateLayout()
{
- QStringList groupNames = TemplatePage::groupNames();
-
- const int pageCount = pages.count();
- const int groupNamesCount = groupNames.count();
- for (int i = 0; i < groupNamesCount; ++i) {
-
- MyContainer *container = new MyContainer;
- containers.append(container);
- policy->addItem(container);
-
- int numButtons = 0;
- for (int j = 0; j < pageCount; ++j) {
- TemplatePage *page = qobject_cast<TemplatePage *>(pages[j]);
- if (!page || page->groupID() != i) continue;
-
- MButton *listItem = new MButton(page->title());
- container->addItem(listItem);
- numButtons++;
+ list = new MList(centralWidget());
+ list->setObjectName("wgList");
+ list->setCellCreator(new WidgetGalleryCategoryCellCreator());
+ list->setItemModel(new WidgetsGalleryDataModel());
+ policy->addItem(list, Qt::AlignCenter);
- listItem->connect(listItem, SIGNAL(clicked()), this, SLOT(handleListItemClick()));
- buttons.insert(listItem, page);
- }
- //If we only have one item, add an empty spacer widget to ensure that we have two columns
- if (numButtons == 1) {
- QGraphicsWidget *widget = new QGraphicsWidget;
- widget->setMinimumSize(80, 0);
- container->addItem(widget);
- }
- }
-
- centralWidget()->setContentsMargins(0, 0, 0, 25);
-}
-
-void ListPage::addPage(TemplatePage *page)
-{
- // Take ownership of page
- page->setParent(this);
- pages.append(page);
+ connect(list, SIGNAL(itemClicked(QModelIndex)), this, SLOT(categoryItemClicked(QModelIndex)));
}
-void ListPage::handleListItemClick()
+void MainPage::handleListItemClick()
{
QObject *sender_object = sender();
if (sender_object) {
@@ -275,12 +363,7 @@ void ListPage::handleListItemClick()
}
}
-int ListPage::pageCount() const
-{
- return pages.count();
-}
-
-void ListPage::showPage(MApplicationPage *page)
+void MainPage::showPage(MApplicationPage *page)
{
if (page) {
page->appear();
@@ -288,31 +371,46 @@ void ListPage::showPage(MApplicationPage *page)
}
}
-void ListPage::showPageByIndex(int index)
+void MainPage::showLanguageSettingsPage()
{
- showPage(findPageByIndex(index));
+ if (!languageSettingsPage) {
+ languageSettingsPage = new LanguagePage();
+ languageSettingsPage->setParent(this);
+ }
+ languageSettingsPage->appear();
}
-TemplatePage *ListPage::findPageByIndex(int index) const
+TemplatePage *MainPage::findPageByTimedemoTitle(const QString& title) const
{
- if (index >= 0 && index < pages.count()) {
- return pages[ index ];
+ QAbstractItemModel *model = list->itemModel();
+ for (int i = 0; i < model->rowCount(); ++i) {
+ QModelIndex parent = model->index(i, 0);
+ for (int j = 0; j < model->rowCount(parent); j++) {
+ QModelIndex item = model->index(j, 0, parent);
+ QString pageTitle = item.data(MainPage::PageTimedemoName).toString();
+ if (pageTitle == title) {
+ return static_cast<TemplatePage *>(item.data(MainPage::Page).value<void *>());
+ }
+ }
}
-
return 0;
}
-TemplatePage *ListPage::findPageByTimedemoTitle(const QString& title) const
+QList<TemplatePage *> MainPage::demoPages()
{
- for (int i = 0; i < pages.size(); ++i) {
- if (pages.at(i)->timedemoTitle() == title) {
- return pages.at(i);
+ QList<TemplatePage *> pages;
+ QAbstractItemModel *model = list->itemModel();
+ for (int i = 0; i < model->rowCount(); ++i) {
+ QModelIndex parent = model->index(i, 0);
+ for (int j = 0; j < model->rowCount(parent); j++) {
+ QModelIndex item = model->index(j, 0, parent);
+ pages.append(static_cast<TemplatePage *>(item.data(MainPage::Page).value<void *>()));
}
}
- return 0;
+ return pages;
}
-void ListPage::showPageByTimedemoTitle(const QString& name)
+void MainPage::showPageByTimedemoTitle(const QString& name)
{
TemplatePage *page = findPageByTimedemoTitle(name);
if (page) {
@@ -397,7 +495,7 @@ QList<ThemeInfo> findAvailableThemes()
extern void M_changeTheme(const QString &theme);
#endif
-void ListPage::showThemeSelectionDialog()
+void MainPage::showThemeSelectionDialog()
{
QList<ThemeInfo> themes = findAvailableThemes();
@@ -435,7 +533,7 @@ void ListPage::showThemeSelectionDialog()
delete dialog;
}
-void ListPage::showOrientationSelectionDialog()
+void MainPage::showOrientationSelectionDialog()
{
QPointer<MDialog> dialog = new MDialog("Select orientation (angle)", M::OkButton | M::CancelButton);
@@ -507,7 +605,7 @@ void ListPage::showOrientationSelectionDialog()
applicationWindow()->setOrientationLocked(false);
} else if (mode == portrait) {
applicationWindow()->setOrientationAngleLocked(false);
- applicationWindow()->setOrientationAngle(M::Angle90);
+ applicationWindow()->setOrientationAngle(M::Angle270);
applicationWindow()->setOrientationLocked(true);
} else if (mode == landscape) {
applicationWindow()->setOrientationAngleLocked(false);
@@ -535,14 +633,20 @@ void ListPage::showOrientationSelectionDialog()
delete dialog;
}
-void ListPage::toggleFps()
+void MainPage::toggleFps()
{
MApplication::instance()->setShowFps(!MApplication::showFps());
}
-void ListPage::showInitialPage()
+void MainPage::showInitialPage()
{
if (!initialPageToShow.isEmpty()) {
showPageByTimedemoTitle(initialPageToShow);
}
}
+
+void MainPage::categoryItemClicked(const QModelIndex &index)
+{
+ MainCategoryPage *page = static_cast<MainCategoryPage *>(index.data(MainPage::Page).value<void *>());
+ showPage(page);
+}
diff --git a/demos/widgetsgallery/listpage.h b/demos/widgetsgallery/mainpage.h
index 35950eb5..58d1a7ab 100644
--- a/demos/widgetsgallery/listpage.h
+++ b/demos/widgetsgallery/mainpage.h
@@ -17,65 +17,59 @@
**
****************************************************************************/
-#ifndef LISTPAGE_H
-#define LISTPAGE_H
+#ifndef MAINPAGE_H
+#define MAINPAGE_H
-#include <MContainer>
#include <QHash>
+#include <QModelIndex>
-#include "timedemopage.h"
+#include "templatepage.h"
-class TemplatePage;
class QGraphicsLayoutItem;
class MGridLayoutPolicy;
class MLinearLayoutPolicy;
class MLabel;
+class MList;
class MButton;
class QSettings;
-class MyContainer : public MContainer
-{
-public:
- MyContainer(QGraphicsItem *parent = 0);
- virtual ~MyContainer();
-
- MGridLayoutPolicy *landscapePolicy;
- MLinearLayoutPolicy *portraitPolicy;
-
- void addItem(QGraphicsLayoutItem *button);
-
-};
+class LanguagePage;
-class ListPage : public TimedemoPage
+class MainPage : public TimedemoPage
{
Q_OBJECT
public:
- ListPage(const QString &title = "");
- virtual ~ListPage();
+ typedef QHash<QString, TemplatePage*> TemplatePageHashMap;
+
+ enum DataRole {
+ Page = Qt::UserRole,
+ PageName,
+ PageTimedemoName
+ };
+
+public:
+ MainPage(const QString &title = "");
+ virtual ~MainPage();
virtual QString timedemoTitle();
virtual void createContent();
- void addPage(TemplatePage *page);
- int pageCount() const;
- TemplatePage *findPageByIndex(int index) const;
+ QList<TemplatePage*> demoPages();
TemplatePage *findPageByTimedemoTitle(const QString& title) const;
void showPageByTimedemoTitle(const QString& name);
- static MGridLayoutPolicy *createAndSetupGridPolicy(MWidget *panel);
-
void setInitialPageToShow(const QString& initialPageToShow);
- QList<TemplatePage *> pages;
-
public slots:
void handleListItemClick();
void showThemeSelectionDialog();
- void showPageByIndex(int index);
void showOrientationSelectionDialog();
void toggleFps();
void showInitialPage();
+ void showLanguageSettingsPage();
+
+ void categoryItemClicked(const QModelIndex &index);
protected:
virtual void retranslateUi();
@@ -85,11 +79,11 @@ private:
void showPage(MApplicationPage *page);
private:
- QList<MLabel *> groupLabels;
- QList<MContainer *> containers;
+ MList *list;
MApplicationPage *shownPage;
MLinearLayoutPolicy *policy;
+ LanguagePage *languageSettingsPage;
QHash<MButton *, TemplatePage *> buttons;
diff --git a/demos/widgetsgallery/mgridpage.cpp b/demos/widgetsgallery/mgridpage.cpp
index bee02d64..9da214b9 100644
--- a/demos/widgetsgallery/mgridpage.cpp
+++ b/demos/widgetsgallery/mgridpage.cpp
@@ -23,6 +23,8 @@
#include <QGraphicsSceneContextMenuEvent>
#include <QPointer>
+#include <MApplication>
+#include <MApplicationWindow>
#include <MContentItem>
#include <MAbstractCellCreator>
#include <MLabel>
@@ -142,12 +144,12 @@ QSizeF ContentItemCreator::cellSize() const
}
MGridPage::MGridPage()
- : pageShown(false),
- m_itemSize(10,10),
- m_columnsPortrait(2),
- m_columnsLandscape(4)
+ : TemplatePage(TemplatePage::ListsGridsAndPopups),
+ pageShown(false),
+ m_itemSize(10,10),
+ m_columnsPortrait(2),
+ m_columnsLandscape(4)
{
- gid = TemplatePage::ListsGridsAndMenus;
setObjectName("gridPage");
}
@@ -160,9 +162,9 @@ void MGridPage::createContent()
MApplicationPage::createContent();
MTheme::addPixmapDirectory(QDir(CONTACTS_DIR).canonicalPath());
- QGraphicsWidget * panel = centralWidget();
+ QGraphicsWidget *panel = centralWidget();
- MLayout* layout = new MLayout(panel);
+ MLayout *layout = new MLayout(panel);
layout->setContentsMargins(0,0,0,0);
panel->setLayout(layout);
@@ -173,24 +175,30 @@ void MGridPage::createContent()
layout->setPortraitPolicy(portraitPolicy);
list = new MList(panel);
- list->setObjectName( "wgList" );
+ list->setObjectName("wgList");
landscapePolicy->addItem(list);
portraitPolicy->addItem(list);
- connect( this, SIGNAL(appeared()), this, SLOT(configureGrid()) );
+ if (MApplication::activeApplicationWindow()->orientation() == M::Landscape) {
+ list->setColumns(m_columnsLandscape);
+ m_itemSize.setWidth(exposedContentRect().width() / m_columnsLandscape);
+ } else {
+ list->setColumns(m_columnsPortrait);
+ m_itemSize.setWidth(exposedContentRect().width() / m_columnsPortrait);
+ }
+ m_itemSize.setHeight(m_itemSize.width());
- ContentItemCreator * cellCreator = new ContentItemCreator(this);
- list->setCellCreator(cellCreator);
+ connect(this, SIGNAL(appeared()), this, SLOT(configureGrid()));
- m_itemSize.setWidth( geometry().width() / m_columnsLandscape );
- m_itemSize.setHeight( m_itemSize.width() );
+ ContentItemCreator *cellCreator = new ContentItemCreator(this);
+ list->setCellCreator(cellCreator);
- GridModel * model = new GridModel(m_itemSize.toSize(), Utils::mediaArtDir());
+ GridModel *model = new GridModel(m_itemSize.toSize(), Utils::mediaArtDir());
list->setItemModel(model);
- connect( this, SIGNAL(rate(MediaType::Rating,QString)), model, SLOT(rateImage(MediaType::Rating,QString)) );
+ connect(this, SIGNAL(rate(MediaType::Rating,QString)), model, SLOT(rateImage(MediaType::Rating,QString)));
//% "Configuration"
- MAction* configurationAction = new MAction(qtTrId("xx_gridpage_configuration"), this);
+ MAction *configurationAction = new MAction(qtTrId("xx_gridpage_configuration"), this);
configurationAction->setLocation(MAction::ApplicationMenuLocation);
connect(configurationAction, SIGNAL(triggered()), this, SLOT(showGridConfigurationDialog()));
addAction(configurationAction);
@@ -267,18 +275,24 @@ void MGridPage::orientationChangeEvent(MOrientationChangeEvent *event)
{
MApplicationPage::orientationChangeEvent(event);
- connect( sceneManager(), SIGNAL(orientationChangeFinished(M::Orientation)), this, SLOT(orientationChanged(M::Orientation)));
+ orientationChanged(event->orientation());
}
void MGridPage::configureGrid()
{
- if( sceneManager()->orientation() == M::Portrait ) {
- m_itemSize.setHeight( list->geometry().width() / m_columnsPortrait );
+ configureGrid(sceneManager()->orientation());
+}
+
+void MGridPage::configureGrid(M::Orientation orientation)
+{
+ if (orientation == M::Portrait) {
+ m_itemSize.setHeight(list->geometry().width() / m_columnsPortrait);
list->setColumns(m_columnsPortrait);
} else {
- m_itemSize.setHeight( list->geometry().width() / m_columnsLandscape );
+ m_itemSize.setHeight(list->geometry().width() / m_columnsLandscape);
list->setColumns(m_columnsLandscape);
}
+ m_itemSize.setWidth(m_itemSize.height());
updateGeometry();
update();
@@ -344,6 +358,5 @@ void MGridPage::modifyRowsSliderHandle(int newValue)
void MGridPage::orientationChanged(M::Orientation orientation)
{
- Q_UNUSED(orientation)
- configureGrid();
+ configureGrid(orientation);
}
diff --git a/demos/widgetsgallery/mgridpage.h b/demos/widgetsgallery/mgridpage.h
index 9bdb09d0..1e5df706 100644
--- a/demos/widgetsgallery/mgridpage.h
+++ b/demos/widgetsgallery/mgridpage.h
@@ -66,6 +66,7 @@ protected:
private slots:
void backButtonClicked();
void configureGrid();
+ void configureGrid(M::Orientation orientation);
private:
MList *list;
diff --git a/demos/widgetsgallery/mlistpage.cpp b/demos/widgetsgallery/mlistpage.cpp
index ddb74f39..fa73a4f1 100644
--- a/demos/widgetsgallery/mlistpage.cpp
+++ b/demos/widgetsgallery/mlistpage.cpp
@@ -36,13 +36,18 @@
#include <MButton>
#include <MTheme>
#include <MAction>
+#include <MSortFilterProxyModel>
#include <MComboBox>
#include <MDebug>
-#include <MContentItem>
#include <MWidgetAction>
+#include "phonebookcell.h"
+
+#include <MListFilter>
+#include <MTextEdit>
+#include <MPannableViewport>
#include "utils.h"
@@ -53,16 +58,16 @@
#endif
MListPage::MListPage()
- : model(NULL),
+ : TemplatePage(TemplatePage::ListsGridsAndPopups),
+ model(NULL),
#ifndef HAVE_N900
proxyModel(NULL),
#endif
imageLoader(NULL),
- list(NULL),
- currentSortingIndex(0),
+ list(NULL),
+ currentSortingIndex(0),
currentListModeIndex(0)
{
- gid = TemplatePage::ListsGridsAndMenus;
}
MListPage::~MListPage()
@@ -76,49 +81,67 @@ QString MListPage::timedemoTitle()
return "List";
}
-class MListContentItemCreator : public MAbstractCellCreator<MContentItem>
+class MListContentItemCreator : public MAbstractCellCreator<PhoneBookCell>
{
public:
- MListContentItemCreator() : amountOfColumns(1) {
-
+ MListContentItemCreator() : amountOfColumns(1), highlightText("") {
}
-
+
+ MWidget *createCell(const QModelIndex &index, MWidgetRecycler &recycler) const
+ {
+ // FIXME: It's a workaround against a bug, that if the layout is created and
+ // set in constructor then the pixmaps are properly loaded.
+ PhoneBookCell *cell = dynamic_cast<PhoneBookCell *>(recycler.take(PhoneBookCell::staticMetaObject.className()));
+ if (cell == NULL) {
+ cell = new PhoneBookCell;
+ cell->initLayout();
+ }
+ updateCell(index, cell);
+ return cell;
+ }
+
void updateCell(const QModelIndex &index, MWidget *cell) const {
- MContentItem *contentItem = qobject_cast<MContentItem *>(cell);
- if (contentItem == NULL) // TODO This is shouldn't happen, list must know what it doing, but with multiple columns it happens sometimes
+ PhoneBookCell *listCell = qobject_cast<PhoneBookCell*>(cell);
+ if (listCell == NULL) // TODO This is shouldn't happen, list must know what it doing, but with multiple columns it happens sometimes
return;
-
+
QVariant data = index.data(Qt::DisplayRole);
-
+
#ifdef HAVE_N900
Contact *contact = data.value<Contact*>();
- contentItem->setTitle(contact->getName());
+ listCell->setTitle(contact->getName());
QStringList numbers = contact->getPhoneNumbers();
if (numbers.size() > 0) {
- contentItem->setSubtitle(numbers[0]);
+ listCell->setSubtitle(numbers[0]);
} else {
QStringList addresses = contact->getEmailAddresses();
if (addresses.size() > 0) {
- contentItem->setSubtitle(addresses[0]);
+ listCell->setSubtitle(addresses[0]);
} else {
- contentItem->setSubtitle(QString());
+ listCell->setSubtitle(QString());
}
}
- contentItem->setPixmap(contact->getAvatar());
+ cellContent->setImage(contact->getAvatar().toImage());
#else
PhoneBookEntry *entry = static_cast<PhoneBookEntry *>(data.value<void *>());
- contentItem->setTitle(entry->fullName);
- contentItem->setSubtitle(entry->phoneNumber);
- contentItem->setImage(entry->thumbnail);
-#endif
- contentItem->boundingRect();
+ if(highlightText == "")
+ listCell->setTitle(entry->fullName);
+ else {
+ QString highlightedTitle = entry->fullName;
+ highlightedTitle.replace(highlightText, "<b>" + highlightText + "</b>");
+ listCell->setTitle(highlightedTitle);
+ }
- updateContentItemMode(index, contentItem);
- }
+ listCell->setSubtitle(entry->phoneNumber);
+ listCell->setImage(entry->thumbnail);
+#endif
- void updateContentItemMode(const QModelIndex &index, MContentItem *contentItem) const {
+ updateContentItemMode(index, listCell);
+ }
+
+ void updateContentItemMode(const QModelIndex &index, MListItem *contentItem) const {
int flatRow = index.row();
int row = flatRow / amountOfColumns;
int column = flatRow % amountOfColumns;
@@ -134,48 +157,48 @@ public:
if (columns == 1) {
if (rows > 1){
if (row == 0)
- contentItem->setItemMode(MContentItem::SingleColumnTop);
+ contentItem->setLayoutPosition(M::VerticalTopPosition);
else if (row < rows - 1)
- contentItem->setItemMode(MContentItem::SingleColumnCenter);
+ contentItem->setLayoutPosition(M::VerticalCenterPosition);
else
- contentItem->setItemMode(MContentItem::SingleColumnBottom);
+ contentItem->setLayoutPosition(M::VerticalBottomPosition);
} else {
- contentItem->setItemMode(MContentItem::Single);
+ contentItem->setLayoutPosition(M::DefaultPosition);
}
} else if (columns > 1) {
if (rows > 1) {
if (row == 0) {
if (column == 0)
- contentItem->setItemMode(MContentItem::TopLeft);
+ contentItem->setLayoutPosition(M::TopLeftPosition);
else if (column > 0 && column < columns - 1 && !last)
- contentItem->setItemMode(MContentItem::Top);
+ contentItem->setLayoutPosition(M::TopCenterPosition);
else
- contentItem->setItemMode(MContentItem::TopRight);
+ contentItem->setLayoutPosition(M::TopRightPosition);
} else if (row < rows - 1) {
if (column == 0)
- contentItem->setItemMode(MContentItem::Left);
+ contentItem->setLayoutPosition(M::CenterLeftPosition);
else if (column > 0 && column < columns - 1 && !last)
- contentItem->setItemMode(MContentItem::Center);
+ contentItem->setLayoutPosition(M::CenterPosition);
else if (flatRow + columns > totalItems)
- contentItem->setItemMode(MContentItem::BottomRight);
+ contentItem->setLayoutPosition(M::BottomRightPosition);
else
- contentItem->setItemMode(MContentItem::Right);
+ contentItem->setLayoutPosition(M::CenterRightPosition);
}
else {
if (column == 0)
- contentItem->setItemMode(MContentItem::BottomLeft);
+ contentItem->setLayoutPosition(M::BottomLeftPosition);
else if (column > 0 && column < columns - 1 && !last)
- contentItem->setItemMode(MContentItem::Bottom);
+ contentItem->setLayoutPosition(M::BottomCenterPosition);
else
- contentItem->setItemMode(MContentItem::BottomRight);
+ contentItem->setLayoutPosition(M::BottomRightPosition);
}
} else {
if (column == 0)
- contentItem->setItemMode(MContentItem::SingleRowLeft);
+ contentItem->setLayoutPosition(M::HorizontalLeftPosition);
else if (column > 0 && column < columns - 1 && !last)
- contentItem->setItemMode(MContentItem::SingleRowCenter);
+ contentItem->setLayoutPosition(M::HorizontalCenterPosition);
else
- contentItem->setItemMode(MContentItem::SingleRowRight);
+ contentItem->setLayoutPosition(M::HorizontalRightPosition);
}
}
}
@@ -185,8 +208,13 @@ public:
amountOfColumns = columns;
}
+ void highlightByText(QString text) {
+ highlightText = text;
+ }
+
private:
int amountOfColumns;
+ QString highlightText;
};
void MListPage::loadPicturesInVisibleItems()
@@ -206,9 +234,13 @@ void MListPage::setPlainListModel()
imageLoader = new ContactImageLoader();
#else
model = new PhoneBookModel();
-
- proxyModel = new PhoneBookSortedModel();
+
+ proxyModel = new MSortFilterProxyModel();
+ proxyModel->setSortRole(PhoneBookModel::PhoneBookSortRole);
+ proxyModel->setFilterRole(PhoneBookModel::PhoneBookFilterRole);
proxyModel->setSourceModel(model);
+
+
list->setItemModel(proxyModel);
imageLoader = new PhoneBookImageLoader;
@@ -297,6 +329,12 @@ void MListPage::createActions()
listIndexModes << "Hidden" << "Visible";
combo = createComboBoxAction("List index mode", listIndexModes);
connect(combo, SIGNAL(currentIndexChanged(int)), this, SLOT(changeListIndexVisibility(int)));
+
+ QStringList liveFilteringModes;
+ liveFilteringModes << "Off" << "On";
+ combo = createComboBoxAction("Live Filtering", liveFilteringModes);
+ combo->setCurrentIndex(1); // live filtering is enabled by default
+ connect(combo, SIGNAL(currentIndexChanged(int)), this, SLOT(changeLiveFilteringMode(int)));
}
void MListPage::scrollToBottom()
@@ -315,18 +353,10 @@ void MListPage::changeSortingOrder(int index)
case None:
break;
case Ascending:
-#ifdef HAVE_N900
- model->sort(0, Qt::AscendingOrder);
-#else
proxyModel->sort(0, Qt::AscendingOrder);
-#endif
break;
case Descending:
-#ifdef HAVE_N900
- model->sort(0, Qt::DescendingOrder);
-#else
- proxyModel->sort(0, Qt::DescendingOrder);
-#endif
+ proxyModel->sort(0, Qt::DescendingOrder);
break;
}
currentSortingIndex = index;
@@ -339,7 +369,6 @@ void MListPage::changeAmountOfItemInList(int index)
Q_ASSERT(index >= 0 && index < 4);
if(currentListModeIndex == Grouped) {
- proxyModel->setShowGroups(false);
list->setShowGroups(false);
}
@@ -360,15 +389,14 @@ void MListPage::changeListMode(int index)
case Plain:
list->setShowGroups(false);
#ifndef HAVE_N900
- proxyModel->setShowGroups(false);
+ model->setGrouped(false);
#endif
-
break;
case Grouped:
list->setShowGroups(true);
#ifndef HAVE_N900
- proxyModel->setShowGroups(true);
+ model->setGrouped(true);
#endif
break;
}
@@ -421,6 +449,25 @@ void MListPage::changeListIndexVisibility(int index)
list->setIndexVisible(indexVisible);
}
+void MListPage::changeLiveFilteringMode(int index)
+{
+ Q_ASSERT(index >= 0 && index <= 1);
+ bool enableLF = (index == 1);
+
+ if(enableLF) {
+ list->filtering()->setEnabled(true);
+ list->filtering()->setFilterRole(PhoneBookModel::PhoneBookFilterRole);
+ list->filtering()->editor()->setVisible(false);
+ connect(list->filtering(), SIGNAL(listPannedUpFromTop()), this, SLOT(filteringVKB()));
+ connect(list->filtering()->editor(), SIGNAL(textChanged()), this, SLOT(liveFilteringTextChanged()));
+ } else {
+ disconnect(list->filtering(), SIGNAL(listPannedUpFromTop()), this, SLOT(filteringVKB()));
+ disconnect(list->filtering()->editor(), SIGNAL(textChanged()), this, SLOT(liveFilteringTextChanged()));
+ list->filtering()->setEnabled(false);
+ showTextEdit(false);
+ }
+}
+
void MListPage::itemClick(const QModelIndex &index)
{
mDebug("MListPage::itemClick") << "Row was clicked: " << index.row();
@@ -436,7 +483,9 @@ void MListPage::removeListItem()
{
if(longTappedIndex.isValid()) {
mDebug("MListPage::removeListItem") << "Row about to be removed: " << longTappedIndex.row();
- model->removeRow(longTappedIndex.row(), longTappedIndex.parent());
+#ifndef HAVE_N900
+ proxyModel->removeRow(longTappedIndex.row(), longTappedIndex.parent());
+#endif
}
}
@@ -445,6 +494,42 @@ void MListPage::editListItem()
mDebug("MListPage::editListItem") << "Not implemented yet.";
}
+void MListPage::liveFilteringTextChanged()
+{
+ // With HWKB live filtering text edit is shown when user enters text
+ if(list->filtering()->enabled() && list->filtering()->editor()->text() != "" && !list->filtering()->editor()->isOnDisplay())
+ showTextEdit(true);
+
+ // Highlighting matching live filtering text can be done by
+ // passing the text to cell creator and updating visible items
+ cellCreator->highlightByText(list->filtering()->editor()->text());
+ static_cast<PhoneBookModel*>(model)->updateData(list->firstVisibleItem(), list->lastVisibleItem());
+}
+
+void MListPage::filteringVKB()
+{
+ // With VKB live filtering text edit is shown when user pans the list up starting from top position
+ if(!list->filtering()->editor()->isOnDisplay()) {
+ showTextEdit(true);
+ list->filtering()->editor()->setFocus();
+ }
+}
+
+void MListPage::showTextEdit(bool show) {
+ QGraphicsWidget* panel = centralWidget();
+ QGraphicsLinearLayout* layout = (QGraphicsLinearLayout*) panel->layout();
+ MTextEdit* textEdit = list->filtering()->editor();
+ if(show && !textEdit->isOnDisplay()) {
+ layout->insertItem(0, textEdit);
+ textEdit->setVisible(true);
+ pannableViewport()->setPosition(QPointF(0,0));
+ } else if(textEdit->isOnDisplay()) {
+ textEdit->setVisible(false);
+ layout->removeAt(0);
+ textEdit->setText("");
+ }
+}
+
void MListPage::createContent()
{
MApplicationPage::createContent();
@@ -476,6 +561,10 @@ void MListPage::createContent()
connect(list, SIGNAL(itemClicked(QModelIndex)), this, SLOT(itemClick(QModelIndex)));
connect(list, SIGNAL(itemLongTapped(QModelIndex)), this, SLOT(itemLongTapped(QModelIndex)));
+
+ changeLiveFilteringMode(1); // live filtering is enabled by default
+
+ retranslateUi();
}
void MListPage::retranslateUi()
diff --git a/demos/widgetsgallery/mlistpage.h b/demos/widgetsgallery/mlistpage.h
index cd196ea1..92052d9e 100644
--- a/demos/widgetsgallery/mlistpage.h
+++ b/demos/widgetsgallery/mlistpage.h
@@ -34,13 +34,14 @@ class ContactModel;
class ContactImageLoader;
#else
class PhoneBookModel;
-class PhoneBookSortedModel;
+class MSortFilterProxyModel;
class PhoneBookImageLoader;
#endif
class MList;
class MComboBox;
class MListContentItemCreator;
+class MAbstractItemModel;
class MListPage: public TemplatePage
{
@@ -79,6 +80,7 @@ public slots:
void changeSelectionMode(int index);
void changeSeparatorsMode(int index);
void changeListIndexVisibility(int index);
+ void changeLiveFilteringMode(int index);
void scrollToBottom();
void scrollToTop();
@@ -89,11 +91,15 @@ public slots:
void removeListItem();
void editListItem();
+ void liveFilteringTextChanged();
+ void filteringVKB();
+
protected:
void retranslateUi();
private:
MComboBox *createComboBoxAction(const QString &title, const QStringList &itemsList);
+ void showTextEdit(bool show);
private:
@@ -101,8 +107,8 @@ private:
ContactModel* model;
ContactImageLoader* imageLoader;
#else
- PhoneBookModel *model;
- PhoneBookSortedModel *proxyModel;
+ MAbstractItemModel *model;
+ MSortFilterProxyModel *proxyModel;
PhoneBookImageLoader *imageLoader;
#endif
diff --git a/demos/widgetsgallery/multipleselectiondialogspage.cpp b/demos/widgetsgallery/multipleselectiondialogspage.cpp
new file mode 100644
index 00000000..324ca2aa
--- /dev/null
+++ b/demos/widgetsgallery/multipleselectiondialogspage.cpp
@@ -0,0 +1,126 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "multipleselectiondialogspage.h"
+
+#include <MAbstractCellCreator>
+#include <MButton>
+#include <MContentItem>
+#include <MDialog>
+#include <MLabel>
+#include <MLayout>
+#include <MList>
+#include <MLinearLayoutPolicy>
+#include <MMessageBox>
+
+#include <QGraphicsLinearLayout>
+#include <QStringListModel>
+#include <QTimer>
+
+class MultipleSelectionDialogsPageCellCreator : public MAbstractCellCreator<MContentItem>
+{
+public:
+ MultipleSelectionDialogsPageCellCreator() : MAbstractCellCreator<MContentItem>() {
+ }
+
+ MWidget *createCell(const QModelIndex &index, MWidgetRecycler &recycler) const {
+ Q_UNUSED(index);
+
+ MContentItem *cell = dynamic_cast<MContentItem *>(recycler.take(MContentItem::staticMetaObject.className()));
+ if (cell == NULL) {
+ cell = new MContentItem(MContentItem::SingleTextLabel);
+ cell->setObjectName("wgMainPageCategoryItem");
+ }
+ updateCell(index, cell);
+
+ return cell;
+ }
+
+ void updateCell(const QModelIndex &index, MWidget *cell) const {
+ MContentItem *item = qobject_cast<MContentItem*>(cell);
+ if(!item)
+ return;
+
+ item->setTitle(index.data().toString());
+ }
+};
+
+MultipleSelectionDialogsPage::MultipleSelectionDialogsPage()
+ : TemplatePage(TemplatePage::DialogsAndBanners)
+{
+}
+
+QString MultipleSelectionDialogsPage::timedemoTitle()
+{
+ return "MultipleSelectionDialogsPage";
+}
+
+void MultipleSelectionDialogsPage::createContent()
+{
+ MApplicationPage::createContent();
+
+ QGraphicsWidget *panel = centralWidget();
+
+ MLayout *layout = new MLayout(panel);
+ layout->setContentsMargins(0, 0, 0, 0);
+ panel->setLayout(layout);
+ policy = new MLinearLayoutPolicy(layout, Qt::Vertical);
+ policy->setContentsMargins(0, 0, 0, 0);
+ policy->setSpacing(0);
+
+ populateLayout();
+}
+
+void MultipleSelectionDialogsPage::populateLayout()
+{
+ QStringList multipleSelectionDialogTypes;
+ //% "Question Dialog"
+ multipleSelectionDialogTypes << qtTrId("xx_wg_multiple_selection_dialogs_page_question_dialog");
+
+ list = new MList(centralWidget());
+ list->setObjectName("wgList");
+ list->setCellCreator(new MultipleSelectionDialogsPageCellCreator());
+ list->setItemModel(new QStringListModel(multipleSelectionDialogTypes));
+ policy->addItem(list, Qt::AlignCenter);
+
+ connect(list, SIGNAL(itemClicked(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
+}
+
+void MultipleSelectionDialogsPage::itemClicked(const QModelIndex &index)
+{
+ if (index.row() == 0)
+ openQuestionDialog();
+}
+
+void MultipleSelectionDialogsPage::openQuestionDialog()
+{
+ if (dialog)
+ return;
+
+ dialog = new MDialog(
+ //% "Question Dialog Title"
+ qtTrId("xx_dialogs_and_notifications_question_dialog_title"),
+ M::YesButton | M::NoButton);
+ dialog->setCentralWidget(
+ //% "Lorem ipsum dolor sit amet?"
+ new MLabel(qtTrId("xx_dialogs_and_notifications_question_dialog_content")));
+
+ dialog->appear(MSceneWindow::DestroyWhenDone);
+}
+
diff --git a/demos/widgetsgallery/multipleselectiondialogspage.h b/demos/widgetsgallery/multipleselectiondialogspage.h
new file mode 100644
index 00000000..46745da6
--- /dev/null
+++ b/demos/widgetsgallery/multipleselectiondialogspage.h
@@ -0,0 +1,55 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MULTIPLESELECTIONDIALOGSPAGE_H
+#define MULTIPLESELECTIONDIALOGSPAGE_H
+
+#include "templatepage.h"
+
+#include <QModelIndex>
+#include <QPointer>
+
+class MDialog;
+class MList;
+
+class MultipleSelectionDialogsPage : public TemplatePage
+{
+ Q_OBJECT
+
+public:
+ MultipleSelectionDialogsPage();
+
+ QString timedemoTitle();
+
+ void createContent();
+ void populateLayout();
+
+ void openQuestionDialog();
+
+private Q_SLOTS:
+ void itemClicked(const QModelIndex &index);
+
+private:
+ MLinearLayoutPolicy *policy;
+ MList *list;
+
+ QPointer<MDialog> dialog;
+};
+
+#endif // MULTIPLESELECTIONDIALOGSPAGE_H
diff --git a/demos/widgetsgallery/objectmenupage.cpp b/demos/widgetsgallery/objectmenupage.cpp
index 9bda2beb..069815c5 100644
--- a/demos/widgetsgallery/objectmenupage.cpp
+++ b/demos/widgetsgallery/objectmenupage.cpp
@@ -33,12 +33,11 @@
#include "utils.h"
ObjectMenuPage::ObjectMenuPage() :
- TemplatePage(),
+ TemplatePage(TemplatePage::ListsGridsAndPopups),
containerFriends(0),
containerAlbums(0)
{
- gid = TemplatePage::ListsGridsAndMenus;
}
ObjectMenuPage::~ObjectMenuPage()
diff --git a/demos/widgetsgallery/phonebookcell.cpp b/demos/widgetsgallery/phonebookcell.cpp
new file mode 100644
index 00000000..395bbda7
--- /dev/null
+++ b/demos/widgetsgallery/phonebookcell.cpp
@@ -0,0 +1,143 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+
+#include "phonebookcell.h"
+
+#include <MLabel>
+#include <MLayout>
+
+#include <MGridLayoutPolicy>
+#include <MLinearLayoutPolicy>
+#include <MImageWidget>
+#include <MProgressIndicator>
+
+PhoneBookCell::PhoneBookCell()
+ : MListItem(),
+ layout(NULL),
+ titleLabel(NULL),
+ subtitleLabel(NULL),
+ imageWidget(NULL)
+{
+}
+
+PhoneBookCell::~PhoneBookCell()
+{
+}
+
+void PhoneBookCell::initLayout()
+{
+ setLayout(createLayout());
+}
+
+MLayout *PhoneBookCell::createLayout()
+{
+ layout = new MLayout(this);
+ landscapePolicy = new MGridLayoutPolicy(layout);
+ landscapePolicy->setContentsMargins(0, 0, 0, 0);
+ landscapePolicy->setSpacing(0);
+
+ // title
+ titleLabel = new MLabel(this);
+ titleLabel->setTextElide(true);
+ titleLabel->setObjectName("CommonTitle");
+
+ // subtitle
+ subtitleLabel = new MLabel(this);
+ subtitleLabel->setTextElide(true);
+ subtitleLabel->setObjectName("CommonSubTitle");
+
+ // icon
+ imageWidget = new MImageWidget(this);
+ imageWidget->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ imageWidget->setObjectName("CommonMainIcon");
+ imageWidget->setVisible(false);
+
+ // spinner
+ spinner = new MProgressIndicator(this, MProgressIndicator::spinnerType);
+ spinner->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ spinner->setUnknownDuration(true);
+ spinner->setObjectName("CommonMainIcon");
+
+ // add to layout
+ landscapePolicy->addItem(spinner, 0, 0, 4, 1);
+ landscapePolicy->addItem(titleLabel, 1, 1, Qt::AlignTop);
+ landscapePolicy->addItem(subtitleLabel, 2, 1);
+ landscapePolicy->addItem(new QGraphicsWidget(), 3, 1);
+
+ portraitPolicy = new MLinearLayoutPolicy(layout, Qt::Horizontal);
+ portraitPolicy->setContentsMargins(0, 0, 0, 0);
+ portraitPolicy->setSpacing(0);
+ portraitPolicy->addItem(spinner);
+ portraitPolicy->addItem(titleLabel);
+
+ layout->setPortraitPolicy(portraitPolicy);
+ layout->setLandscapePolicy(landscapePolicy);
+
+ return layout;
+}
+
+QString PhoneBookCell::title() const
+{
+ return titleLabel->text();
+}
+
+void PhoneBookCell::setTitle(const QString &title)
+{
+ titleLabel->setText(title);
+}
+
+QString PhoneBookCell::subtitle() const
+{
+ return subtitleLabel->text();
+}
+
+void PhoneBookCell::setSubtitle(const QString &subtitle)
+{
+ subtitleLabel->setText(subtitle);
+}
+
+QImage PhoneBookCell::image() const
+{
+ return imageWidget->pixmap()->toImage();
+}
+
+void PhoneBookCell::setImage(const QImage &image)
+{
+ imageWidget->setImage(image);
+ imageWidget->setVisible(true);
+
+ if (layout->policy() == landscapePolicy) {
+ if (landscapePolicy->itemAt(0, 0) == spinner && !image.isNull()) {
+ landscapePolicy->removeItem(spinner);
+ landscapePolicy->addItem(imageWidget, 0, 0, 4, 1);
+ } else if (landscapePolicy->itemAt(0, 0) == imageWidget && image.isNull()) {
+ landscapePolicy->removeItem(imageWidget);
+ landscapePolicy->addItem(spinner, 0, 0, 4, 1);
+ }
+ } else if (layout->policy() == portraitPolicy) {
+ if (portraitPolicy->itemAt(0) == imageWidget && image.isNull()) {
+ portraitPolicy->removeAt(0);
+ portraitPolicy->insertItem(0, spinner, Qt::AlignLeft);
+ } else if (portraitPolicy->itemAt(0) == spinner && !image.isNull()) {
+ portraitPolicy->removeAt(0);
+ portraitPolicy->insertItem(0, imageWidget, Qt::AlignLeft);
+ }
+ }
+}
diff --git a/demos/widgetsgallery/phonebookcell.h b/demos/widgetsgallery/phonebookcell.h
new file mode 100644
index 00000000..6c3419f4
--- /dev/null
+++ b/demos/widgetsgallery/phonebookcell.h
@@ -0,0 +1,73 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef PHONEBOOKCELLCONTENT_H
+#define PHONEBOOKCELLCONTENT_H
+
+#include <QGraphicsWidget>
+#include <QImage>
+
+#include <MLayout>
+#include <MListItem>
+
+class MListItem;
+class MGridLayoutPolicy;
+class MLinearLayoutPolicy;
+class MImageWidget;
+class MLabel;
+class MProgressIndicator;
+
+class PhoneBookCell : public MListItem
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString title READ title WRITE setTitle)
+ Q_PROPERTY(QString subtitle READ subtitle WRITE setSubtitle)
+ Q_PROPERTY(QImage image READ image WRITE setImage)
+
+public:
+ PhoneBookCell();
+ virtual ~PhoneBookCell();
+
+ void initLayout();
+
+ QString title() const;
+ void setTitle(const QString &title);
+
+ QString subtitle() const;
+ void setSubtitle(const QString &title);
+
+ QImage image() const;
+ void setImage(const QImage &image);
+
+private:
+ MLayout *createLayout();
+
+private:
+ MLayout *layout;
+ MGridLayoutPolicy *landscapePolicy;
+ MLinearLayoutPolicy *portraitPolicy;
+
+ MProgressIndicator *spinner;
+ MLabel *titleLabel;
+ MLabel *subtitleLabel;
+ MImageWidget *imageWidget;
+};
+
+#endif // PHONEBOOKCONTENTITEM_H
diff --git a/demos/widgetsgallery/phonebookmodel.cpp b/demos/widgetsgallery/phonebookmodel.cpp
index 17878d85..372cfee3 100644
--- a/demos/widgetsgallery/phonebookmodel.cpp
+++ b/demos/widgetsgallery/phonebookmodel.cpp
@@ -26,13 +26,13 @@
#include <QTimer>
#include <MTheme>
+#include <MSortFilterProxyModel>
PhoneBookModel::PhoneBookModel()
+ : MAbstractItemModel()
{
namesList = loadFakeNames();
imageIdList = loadFakeImageIds();
- defaultThumbnail = QImage(Utils::imagesDir() + "DefaultAvatar.png");
- modelRowCount = 0;
}
PhoneBookModel::~PhoneBookModel()
@@ -40,26 +40,6 @@ PhoneBookModel::~PhoneBookModel()
qDeleteAll(phoneBookEntries);
}
-QVariant PhoneBookModel::data(const QModelIndex &index, int role) const
-{
- // This function will be called many times during fast panning, lets
- // check boundaries and validnes only in debug mode
- Q_ASSERT(index.isValid());
- Q_ASSERT(index.row() < phoneBookEntries.size());
-
- if (role == Qt::DisplayRole) {
- // Let's store a pointer into QVariant, otherwise QT will make a copy but we are lazy
- // and don't want to copy stuff around
- return QVariant::fromValue(static_cast<void *>(phoneBookEntries[index.row()]));
- } else if (role == PhoneBookModel::PhoneBookSortRole) {
- return QVariant::fromValue(phoneBookEntries[index.row()]->lastName);
- } else if (role == PhoneBookModel::PhoneBookFilterRole) {
- return QVariant::fromValue(phoneBookEntries[index.row()]->fullName);
- }
-
- return QVariant();
-}
-
QStringList PhoneBookModel::loadFakeNames()
{
QStringList listNames;
@@ -126,34 +106,66 @@ PhoneBookEntry *PhoneBookModel::generateEntry()
return entry;
}
-int PhoneBookModel::rowCount(const QModelIndex &parent) const
+int PhoneBookModel::groupCount() const
+{
+ return groups.count();
+}
+
+int PhoneBookModel::rowCountInGroup(int group) const
{
- Q_UNUSED(parent);
+ if (group < groupsSize.count() && group >= 0)
+ return groupsSize[group];
+ else if (group == -1)
+ return phoneBookEntries.count();
+
+ return 0;
+}
- return modelRowCount;
+QString PhoneBookModel::groupTitle(int group) const
+{
+ if (group < groups.count())
+ return groups[group];
+
+ return QString();
}
-int PhoneBookModel::columnCount(const QModelIndex &parent) const
+QVariant PhoneBookModel::itemData(int row, int group, int role) const
{
- Q_UNUSED(parent);
+ int flatRow = row;
+
+ if (group >= 0 && row >= 0)
+ flatRow = itemGroupCache[group][row];
- return 1;
+ // This function will be called many times during fast panning, lets
+ // check boundaries and validnes only in debug mode
+ Q_ASSERT(flatRow >= 0);
+ Q_ASSERT(flatRow < phoneBookEntries.size());
+
+ if (role == Qt::DisplayRole)
+ return QVariant::fromValue(static_cast<void *>(phoneBookEntries[flatRow]));
+ else if (role == PhoneBookSortRole)
+ return QVariant::fromValue(phoneBookEntries[flatRow]->lastName);
+ else if (role == PhoneBookFilterRole)
+ return QVariant::fromValue(phoneBookEntries[flatRow]->fullName);
+
+ return QVariant();
}
bool PhoneBookModel::insertRows(int row, int count, const QModelIndex &parent)
{
emit layoutAboutToBeChanged();
- beginInsertRows(parent, row, row + count - 1);
+
+ beginInsertRows(parent, row, row + count - 1, false);
for (int i = phoneBookEntries.size(); i < count; i++) {
PhoneBookEntry *entry = generateEntry();
phoneBookEntries.append(entry);
}
-
- if(!parent.isValid())
- modelRowCount += count;
+
+ regenerateModel();
endInsertRows();
+
emit layoutChanged();
return true;
}
@@ -161,40 +173,60 @@ bool PhoneBookModel::insertRows(int row, int count, const QModelIndex &parent)
bool PhoneBookModel::removeRows(int row, int count, const QModelIndex &parent)
{
emit layoutAboutToBeChanged();
+
if (count <= 0)
return true; //Successfully removed 0 rows.
-
- beginRemoveRows(parent, row, row + count - 1);
- modelRowCount -= count;
+
+ int flatRow = row;
+ int group = parent.row();
+
+ if (isGrouped() && group >= 0)
+ flatRow = itemGroupCache[group][row];
+
+ beginRemoveRows(parent, row, row + count - 1, true);
+
+ qDeleteAll(phoneBookEntries.begin() + flatRow, phoneBookEntries.begin() + flatRow + count - 1);
+ phoneBookEntries.remove(flatRow, count);
+
+ regenerateModel();
+
endRemoveRows();
emit layoutChanged();
return true;
}
+void PhoneBookModel::regenerateModel()
+{
+ groups.clear();
+ groupsSize.clear();
+ itemGroupCache.clear();
+ for (int i = 0; i < phoneBookEntries.count(); i++) {
+ PhoneBookEntry *entry = phoneBookEntries[i];
+ if (!entry)
+ continue;
+
+ QChar group = entry->fullName[0];
+ if (!groups.contains(group)) {
+ groups.append(group);
+ groupsSize.append(1);
+ } else {
+ groupsSize[groups.indexOf(group)] ++ ;
+ }
+ itemGroupCache[groups.indexOf(group)].append(i);
+ }
+}
+
void PhoneBookModel::thumbnailWasLoaded(const QModelIndex &index)
{
emit dataChanged(index, index);
}
-void PhoneBookModel::sort(int column, Qt::SortOrder order)
+void PhoneBookModel::updateData(const QModelIndex &first, const QModelIndex &last)
{
- Q_UNUSED(column);
-
- for (int i = 0; i < phoneBookEntries.size(); i++) {
- for (int j = i + 1; j < phoneBookEntries.size(); j++) {
- PhoneBookEntry *iEntry = phoneBookEntries.at(i);
- PhoneBookEntry *jEntry = phoneBookEntries.at(j);
- if((order == Qt::AscendingOrder && iEntry->fullName > jEntry->fullName) ||
- (order == Qt::DescendingOrder && iEntry->fullName < jEntry->fullName)) {
- phoneBookEntries.replace(i, jEntry);
- phoneBookEntries.replace(j, iEntry);
- }
- }
- }
+ emit dataChanged(first, last);
}
-
PhoneBookImageLoader::PhoneBookImageLoader()
{
@@ -291,154 +323,22 @@ void PhoneBookImageLoader::processJobQueue()
// but this is one way to achieve same result.
void PhoneBookImageLoader::notifyModel(const QModelIndex &index)
{
+#ifndef HAVE_N900
QAbstractItemModel *model = const_cast<QAbstractItemModel *>(index.model());
Q_ASSERT(model);
if (model) {
- PhoneBookSortedModel *proxyModel = dynamic_cast<PhoneBookSortedModel *>(model);
- Q_ASSERT(proxyModel);
- proxyModel->thumbnailWasLoaded(index);
- }
-}
-
-PhoneBookSortedModel::PhoneBookSortedModel() : QSortFilterProxyModel(NULL), showGroups(false)
-{
- // By default QSortFilterProxyModel uses Qt::DisplayRole for sorting and filter however we are
- // returning pointer in QVariant so it won't work, to solve that we need to set custom roles
- // and in the data() of model, we need to return corresponding QString
- setSortRole(PhoneBookModel::PhoneBookSortRole);
- setFilterRole(PhoneBookModel::PhoneBookFilterRole);
-}
-
-PhoneBookSortedModel::~PhoneBookSortedModel()
-{
-
-}
-
-QModelIndex PhoneBookSortedModel::mapFromSource(const QModelIndex &sourceIndex) const
-{
- return QSortFilterProxyModel::mapFromSource(sourceIndex);
-}
-
-QModelIndex PhoneBookSortedModel::mapToSource(const QModelIndex &proxyIndex) const
-{
- return QSortFilterProxyModel::mapToSource(proxyIndex);
-}
-
-void PhoneBookSortedModel::thumbnailWasLoaded(const QModelIndex &index)
-{
- emit dataChanged(index, index);
-}
-
-void PhoneBookSortedModel::setShowGroups(bool showGroups)
-{
- if (this->showGroups != showGroups) {
- this->showGroups = showGroups;
- if (this->showGroups) {
- sort(0, Qt::AscendingOrder);
- createGroupedModel();
+ MSortFilterProxyModel *sortModel = dynamic_cast<MSortFilterProxyModel *>(model);
+ Q_ASSERT(sortModel);
+ PhoneBookModel *phoneBookModel = dynamic_cast<PhoneBookModel *>(sortModel->sourceModel());
+ if (phoneBookModel == NULL) {
+ // Looks like live filtering is enabled
+ // one more cast step needed to get the
+ // the correct source index.
+ MSortFilterProxyModel *filterModel = dynamic_cast<MSortFilterProxyModel *>(sortModel->sourceModel());
+ if (filterModel)
+ phoneBookModel = dynamic_cast<PhoneBookModel *>(filterModel->sourceModel());
}
- else
- createPlainModel();
+ phoneBookModel->thumbnailWasLoaded(sortModel->mapToSource(index));
}
-}
-
-
-void PhoneBookSortedModel::createPlainModel()
-{
- int plainRowCount = totalRowCount();
- treeHeaderIndex.clear();
-
- removeRows(0, rowCount());
- insertRows(0, plainRowCount);
-}
-
-void PhoneBookSortedModel::createGroupedModel()
-{
- treeHeaderIndex.clear();
-
- QVector<PhoneBookEntry *> phoneBookEntries;
- for (int i = 0; i < sourceModel()->rowCount(); i++) {
- PhoneBookEntry *entry = static_cast<PhoneBookEntry *>(sourceModel()->data(sourceModel()->index(i, 0), Qt::DisplayRole).value<void *>());
- phoneBookEntries.append(entry);
- QChar firstLetter = sourceModel()->data(sourceModel()->index(i, 0), PhoneBookModel::PhoneBookSortRole).toString()[0];
-
- treeHeaderIndex[firstLetter].push_back(entry);
- }
-
- removeRows(0, rowCount());
-
- insertRows(0, treeHeaderIndex.keys().count(), QModelIndex());
- for (int i = 0; i < treeHeaderIndex.keys().count(); i++) {
- QChar key = treeHeaderIndex.keys()[i];
- int count = treeHeaderIndex[key].count();
- insertRows(0, count, index(i, 0, QModelIndex()));
- }
-}
-
-int PhoneBookSortedModel::totalRowCount()
-{
- int totalRowCount = 0;
-
- foreach(PhoneBookEntryVector entries, treeHeaderIndex.values()) {
- totalRowCount += entries.count();
- }
-
- return totalRowCount;
-}
-
-void PhoneBookSortedModel::sort(int column, Qt::SortOrder order)
-{
- Q_UNUSED(column);
-
- if(showGroups)
- return;
-
- sourceModel()->sort(column, order);
-
- emit dataChanged(index(0, 0), index(rowCount(), 0));
-}
-
-QModelIndex PhoneBookSortedModel::parent(const QModelIndex &child) const
-{
- return QSortFilterProxyModel::parent(child);
-}
-
-int PhoneBookSortedModel::rowCount(const QModelIndex &parent) const
-{
- if (showGroups) {
- if (!parent.isValid()) {
- return treeHeaderIndex.keys().count();
- } else if (parent.row() < treeHeaderIndex.keys().count()) {
- QChar key = treeHeaderIndex.keys().at(parent.row());
- return treeHeaderIndex[key].count();
- }
- }
- return QSortFilterProxyModel::rowCount(parent);
-}
-
-bool PhoneBookSortedModel::hasChildren(const QModelIndex &parent) const
-{
- if (showGroups && parent.isValid() && !parent.parent().isValid())
- return true;
- else
- return false;
-}
-
-QVariant PhoneBookSortedModel::data(const QModelIndex &index, int role) const
-{
- if (showGroups && index.isValid()) {
- if (role == Qt::DisplayRole) {
- if (!index.parent().isValid()) {
- return QVariant::fromValue(treeHeaderIndex.keys().at(index.row()));
- } else {
- QChar key = treeHeaderIndex.uniqueKeys().at(index.parent().row());
- PhoneBookEntry *entry = treeHeaderIndex[key].at(index.row());
- return QVariant::fromValue(static_cast<void *>(entry));
- }
- }
- }
- if (index.isValid())
- return QSortFilterProxyModel::data(index, role);
-
- return QVariant();
+#endif
}
diff --git a/demos/widgetsgallery/phonebookmodel.h b/demos/widgetsgallery/phonebookmodel.h
index b3e849ea..0a4570bc 100644
--- a/demos/widgetsgallery/phonebookmodel.h
+++ b/demos/widgetsgallery/phonebookmodel.h
@@ -26,6 +26,8 @@
#include <QVector>
#include <QImage>
+#include <MAbstractItemModel>
+
// Structure which contain data for each row
struct PhoneBookEntry {
QString firstName; // store first and last names for searching
@@ -62,10 +64,10 @@ private:
QList<Job> thumbnailLoadingJobs;
};
-class PhoneBookModel: public QAbstractTableModel
+class PhoneBookModel: public MAbstractItemModel
{
Q_OBJECT
-
+
public:
// Defining roles here which will be used for sorting and filtering in PhoneBookSortedModel
enum PhoneBookRoles {
@@ -76,61 +78,35 @@ public:
PhoneBookModel();
virtual ~PhoneBookModel();
- virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
- virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
- virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ int groupCount() const;
+ int rowCountInGroup(int group) const;
+ QString groupTitle(int group) const;
+ QVariant itemData(int row, int group, int role) const;
bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
void thumbnailWasLoaded(const QModelIndex &index);
-
- void sort(int column, Qt::SortOrder order);
+ void updateData(const QModelIndex &first, const QModelIndex &last);
+
private:
QStringList loadFakeNames();
QStringList loadFakeImageIds();
PhoneBookEntry *generateEntry();
QString generatePhoneNumber();
+ void regenerateModel();
private:
QVector<PhoneBookEntry *> phoneBookEntries;
QStringList namesList;
QStringList imageIdList;
QImage defaultThumbnail;
- int modelRowCount;
-};
-
-class PhoneBookSortedModel : public QSortFilterProxyModel
-{
-public:
- typedef QVector<PhoneBookEntry*> PhoneBookEntryVector;
-public:
- PhoneBookSortedModel();
- virtual ~PhoneBookSortedModel();
- void thumbnailWasLoaded(const QModelIndex &index);
- void setShowGroups(bool showGroups);
-
-public:
- void sort(int column, Qt::SortOrder order);
- QModelIndex parent(const QModelIndex &child) const;
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
-
-public:
- QModelIndex mapFromSource(const QModelIndex &sourceIndex) const;
- QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
-
-private:
- void createPlainModel();
- void createGroupedModel();
-
- int totalRowCount();
-
-private:
- bool showGroups;
- QMap<QChar, PhoneBookEntryVector> treeHeaderIndex;
+ QList<QChar> groups;
+ QList<int> groupsSize;
+
+ typedef QList<int> ListOfInt;
+ QMap<int, ListOfInt> itemGroupCache;
};
#endif
diff --git a/demos/widgetsgallery/progressbarpage.cpp b/demos/widgetsgallery/progressbarpage.cpp
index c8daf762..8b8f2b3d 100644
--- a/demos/widgetsgallery/progressbarpage.cpp
+++ b/demos/widgetsgallery/progressbarpage.cpp
@@ -29,14 +29,12 @@
#include <MSceneManager>
ProgressBarPage::ProgressBarPage() :
- TemplatePage(),
-
+ TemplatePage(TemplatePage::SimpleWidgets),
bar1(0),
bar2(0),
label1(0),
label2(0)
{
- gid = TemplatePage::IndicatorsAndNotifications;
}
ProgressBarPage::~ProgressBarPage()
diff --git a/demos/widgetsgallery/pushbuttonpage.cpp b/demos/widgetsgallery/pushbuttonpage.cpp
index 0f8900c7..ad75f83f 100644
--- a/demos/widgetsgallery/pushbuttonpage.cpp
+++ b/demos/widgetsgallery/pushbuttonpage.cpp
@@ -30,12 +30,11 @@
#include <MApplication>
PushButtonPage::PushButtonPage() :
- TemplatePage(),
+ TemplatePage(TemplatePage::Buttons),
pushButton1(0),
pushButton2(0),
pushButton3(0)
{
- gid = TemplatePage::Buttons;
}
PushButtonPage::~PushButtonPage()
@@ -56,7 +55,7 @@ void PushButtonPage::createContent()
containerPolicy->addItem(pushButton1);
pushButton2 = new MButton();
- pushButton2->setIconID("icon-m-messaging-smiley-surprised");
+ pushButton2->setIconID("icon-m-messaging-smiley-tongue");
containerPolicy->addItem(pushButton2);
pushButton3 = new MButton();
diff --git a/demos/widgetsgallery/pushbuttonpage.h b/demos/widgetsgallery/pushbuttonpage.h
index 86366ac1..d7a6bb73 100644
--- a/demos/widgetsgallery/pushbuttonpage.h
+++ b/demos/widgetsgallery/pushbuttonpage.h
@@ -20,7 +20,7 @@
#ifndef PUSHBUTTONPAGE_H
#define PUSHBUTTONPAGE_H
-#include "listpage.h"
+#include "mainpage.h"
#include "templatepage.h"
#include <MApplicationPage>
#include <MLayout>
diff --git a/demos/widgetsgallery/querydialogspage.cpp b/demos/widgetsgallery/querydialogspage.cpp
new file mode 100644
index 00000000..2e4a2328
--- /dev/null
+++ b/demos/widgetsgallery/querydialogspage.cpp
@@ -0,0 +1,193 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "querydialogspage.h"
+
+#include <MAbstractCellCreator>
+#include <MButton>
+#include <MContentItem>
+#include <MDialog>
+#include <MLabel>
+#include <MLayout>
+#include <MList>
+#include <MLinearLayoutPolicy>
+#include <MMessageBox>
+#include <MTextEdit>
+
+#include <QGraphicsLinearLayout>
+#include <QStringListModel>
+#include <QTimer>
+
+class QueryDialogsPageCellCreator : public MAbstractCellCreator<MContentItem>
+{
+public:
+ QueryDialogsPageCellCreator() : MAbstractCellCreator<MContentItem>() {
+ }
+
+ MWidget *createCell(const QModelIndex &index, MWidgetRecycler &recycler) const {
+ Q_UNUSED(index);
+
+ MContentItem *cell = dynamic_cast<MContentItem *>(recycler.take(MContentItem::staticMetaObject.className()));
+ if (cell == NULL) {
+ cell = new MContentItem(MContentItem::SingleTextLabel);
+ cell->setObjectName("wgMainPageCategoryItem");
+ }
+ updateCell(index, cell);
+
+ return cell;
+ }
+
+ void updateCell(const QModelIndex &index, MWidget *cell) const {
+ MContentItem *item = qobject_cast<MContentItem*>(cell);
+ if(!item)
+ return;
+
+ item->setTitle(index.data().toString());
+ }
+};
+
+QueryDialogsPage::QueryDialogsPage()
+ : TemplatePage(TemplatePage::DialogsAndBanners)
+{
+}
+
+QString QueryDialogsPage::timedemoTitle()
+{
+ return "QueryDialogsPage";
+}
+
+void QueryDialogsPage::createContent()
+{
+ MApplicationPage::createContent();
+
+ QGraphicsWidget *panel = centralWidget();
+
+ MLayout *layout = new MLayout(panel);
+ layout->setContentsMargins(0, 0, 0, 0);
+ panel->setLayout(layout);
+ policy = new MLinearLayoutPolicy(layout, Qt::Vertical);
+ policy->setContentsMargins(0, 0, 0, 0);
+ policy->setSpacing(0);
+
+ populateLayout();
+}
+
+void QueryDialogsPage::populateLayout()
+{
+ QStringList queryDialogTypes;
+ //% "Entry Dialog"
+ queryDialogTypes << qtTrId("xx_wg_query_dialogs_page_entry_dialog");
+ //% "Long Dialog"
+ queryDialogTypes << qtTrId("xx_wg_query_dialogs_page_long_dialog");
+
+ list = new MList(centralWidget());
+ list->setObjectName("wgList");
+ list->setCellCreator(new QueryDialogsPageCellCreator());
+ list->setItemModel(new QStringListModel(queryDialogTypes));
+ policy->addItem(list, Qt::AlignCenter);
+
+ connect(list, SIGNAL(itemClicked(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
+}
+
+void QueryDialogsPage::itemClicked(const QModelIndex &index)
+{
+ if (index.row() == 0)
+ openEntryDialog();
+ else if (index.row() == 1)
+ openLongDialog();
+}
+
+void QueryDialogsPage::openEntryDialog()
+{
+ if (dialog)
+ return;
+
+ MWidget *centralWidget = new MWidget;
+ QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+ //% "Name"
+ MLabel *label = new MLabel(qtTrId("xx_dialogs_and_notifications_entry_dialog_label"), centralWidget);
+ MTextEdit *textEdit = new MTextEdit(MTextEditModel::SingleLine,
+ QString(),
+ centralWidget);
+ centralWidget->setLayout(layout);
+
+ layout->addItem(label);
+ layout->addItem(textEdit);
+
+ //% "Please enter your name"
+ dialog = new MDialog(qtTrId("xx_dialogs_and_notifications_entry_dialog_title"),
+ M::OkButton | M::ResetButton);
+ dialog->setCentralWidget(centralWidget);
+
+ dialog->appear(MSceneWindow::DestroyWhenDone);
+}
+
+void QueryDialogsPage::openLongDialog()
+{
+ if (dialog)
+ return;
+
+ MWidget *centralWidget = new MWidget;
+ QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+
+ //% "Select printer"
+ dialog = new MDialog(qtTrId("xx_dialogs_and_notifications_long_dialog_title"), M::CancelButton);
+ dialog->setCentralWidget(centralWidget);
+ MButton *button = 0;
+
+ centralWidget->setLayout(layout);
+
+#define ADD_PRINTER_BUTTON(NAME) \
+ button = new MButton(NAME, centralWidget); \
+ connect(button, SIGNAL(clicked()), dialog, SLOT(accept())); \
+ layout->addItem(button);
+
+ ADD_PRINTER_BUTTON("Lexmark A");
+ ADD_PRINTER_BUTTON("Lexmark B");
+ ADD_PRINTER_BUTTON("Lexmark C");
+ ADD_PRINTER_BUTTON("Lexmark D");
+ ADD_PRINTER_BUTTON("Canon Alpha");
+ ADD_PRINTER_BUTTON("Canon Beta");
+ ADD_PRINTER_BUTTON("Canon Gama");
+ ADD_PRINTER_BUTTON("Canon Zeta");
+ ADD_PRINTER_BUTTON("Brother 1");
+ ADD_PRINTER_BUTTON("Brother 2");
+ ADD_PRINTER_BUTTON("Brother 3");
+ ADD_PRINTER_BUTTON("Brother 4");
+ ADD_PRINTER_BUTTON("Xerox I");
+ ADD_PRINTER_BUTTON("Xerox II");
+ ADD_PRINTER_BUTTON("Xerox III");
+ ADD_PRINTER_BUTTON("Xerox IV");
+ ADD_PRINTER_BUTTON("Dell Roger");
+ ADD_PRINTER_BUTTON("Dell Charlie");
+ ADD_PRINTER_BUTTON("Dell Bravo");
+ ADD_PRINTER_BUTTON("Dell Tango");
+ ADD_PRINTER_BUTTON("HP X");
+ ADD_PRINTER_BUTTON("HP Y");
+ ADD_PRINTER_BUTTON("HP Z");
+ ADD_PRINTER_BUTTON("HP Plus");
+ ADD_PRINTER_BUTTON("Epson Stylus");
+ ADD_PRINTER_BUTTON("Epson Pro");
+ ADD_PRINTER_BUTTON("Epson Office");
+ ADD_PRINTER_BUTTON("Epson Extra");
+
+#undef ADD_PRINTER_BUTTON
+
+ dialog->appear(MSceneWindow::DestroyWhenDone);
+}
diff --git a/demos/widgetsgallery/querydialogspage.h b/demos/widgetsgallery/querydialogspage.h
new file mode 100644
index 00000000..62e2daab
--- /dev/null
+++ b/demos/widgetsgallery/querydialogspage.h
@@ -0,0 +1,56 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef QUERYDIALOGSPAGE_H
+#define QUERYDIALOGSPAGE_H
+
+#include "templatepage.h"
+
+#include <QModelIndex>
+#include <QPointer>
+
+class MDialog;
+class MList;
+
+class QueryDialogsPage : public TemplatePage
+{
+ Q_OBJECT
+
+public:
+ QueryDialogsPage();
+
+ QString timedemoTitle();
+
+ void createContent();
+ void populateLayout();
+
+ void openEntryDialog();
+ void openLongDialog();
+
+private Q_SLOTS:
+ void itemClicked(const QModelIndex &index);
+
+private:
+ MLinearLayoutPolicy *policy;
+ MList *list;
+
+ QPointer<MDialog> dialog;
+};
+
+#endif // QUERYDIALOGSPAGE_H
diff --git a/demos/widgetsgallery/singleselectiondialogspage.cpp b/demos/widgetsgallery/singleselectiondialogspage.cpp
new file mode 100644
index 00000000..8d149ae2
--- /dev/null
+++ b/demos/widgetsgallery/singleselectiondialogspage.cpp
@@ -0,0 +1,227 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "singleselectiondialogspage.h"
+
+#include <MAbstractCellCreator>
+#include <MButton>
+#include <MContentItem>
+#include <MDialog>
+#include <MLabel>
+#include <MLayout>
+#include <MList>
+#include <MLinearLayoutPolicy>
+#include <MMessageBox>
+
+#include <QGraphicsLinearLayout>
+#include <QStringListModel>
+#include <QTimer>
+
+class SingleSelectionDialogsPageCellCreator : public MAbstractCellCreator<MContentItem>
+{
+public:
+ SingleSelectionDialogsPageCellCreator() : MAbstractCellCreator<MContentItem>() {
+ }
+
+ MWidget *createCell(const QModelIndex &index, MWidgetRecycler &recycler) const {
+ Q_UNUSED(index);
+
+ MContentItem *cell = dynamic_cast<MContentItem *>(recycler.take(MContentItem::staticMetaObject.className()));
+ if (cell == NULL) {
+ cell = new MContentItem(MContentItem::SingleTextLabel);
+ cell->setObjectName("wgMainPageCategoryItem");
+ }
+ updateCell(index, cell);
+
+ return cell;
+ }
+
+ void updateCell(const QModelIndex &index, MWidget *cell) const {
+ MContentItem *item = qobject_cast<MContentItem*>(cell);
+ if(!item)
+ return;
+
+ item->setTitle(index.data().toString());
+ }
+};
+
+SingleSelectionDialogsPage::SingleSelectionDialogsPage()
+ : TemplatePage(TemplatePage::DialogsAndBanners)
+{
+}
+
+QString SingleSelectionDialogsPage::timedemoTitle()
+{
+ return "SingleSelectionDialogsPage";
+}
+
+void SingleSelectionDialogsPage::createContent()
+{
+ MApplicationPage::createContent();
+
+ QGraphicsWidget *panel = centralWidget();
+
+ MLayout *layout = new MLayout(panel);
+ layout->setContentsMargins(0, 0, 0, 0);
+ panel->setLayout(layout);
+ policy = new MLinearLayoutPolicy(layout, Qt::Vertical);
+ policy->setContentsMargins(0, 0, 0, 0);
+ policy->setSpacing(0);
+
+ populateLayout();
+}
+
+void SingleSelectionDialogsPage::populateLayout()
+{
+ QStringList singleSelectionDialogTypes;
+ //% "Stacked Dialogs"
+ singleSelectionDialogTypes << qtTrId("xx_wg_single_selection_dialogs_page_stacked_dialogs");
+ //% "System Modal Dialog"
+ singleSelectionDialogTypes << qtTrId("xx_wg_single_selection_dialogs_page_system_modal_dialog");
+ //% "Dialog with Progress Indicator"
+ singleSelectionDialogTypes << qtTrId("xx_wg_single_selection_dialogs_page_dialog_with_progress_indicator");
+ //% "Message Box"
+ singleSelectionDialogTypes << qtTrId("xx_wg_single_selection_dialogs_page_message_box");
+
+ list = new MList(centralWidget());
+ list->setObjectName("wgList");
+ list->setCellCreator(new SingleSelectionDialogsPageCellCreator());
+ list->setItemModel(new QStringListModel(singleSelectionDialogTypes));
+ policy->addItem(list, Qt::AlignCenter);
+
+ connect(list, SIGNAL(itemClicked(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
+}
+
+void SingleSelectionDialogsPage::itemClicked(const QModelIndex &index)
+{
+ if (index.row() == 0)
+ openStackedDialogs();
+ else if (index.row() == 1)
+ openSystemModalDialog();
+ else if (index.row() == 2)
+ openDialogWithProgressIndicator();
+ else if (index.row() == 3)
+ openMessageBox();
+}
+
+void SingleSelectionDialogsPage::openStackedDialogs()
+{
+ if (dialog)
+ return;
+
+ //% "Click to spawn a nested dialog"
+ MButton *button = new MButton(qtTrId("xx_dialogs_and_notifications_stacked_dialog_button"));
+ //% "Stacked dialogs"
+ dialog = new MDialog(qtTrId("xx_dialogs_and_notifications_stacked_dialog_title"), M::CancelButton);
+ dialog->setCentralWidget(button);
+
+ connect(button, SIGNAL(clicked()), SLOT(openNestedDialog()));
+
+ dialog->appear(MSceneWindow::DestroyWhenDone);
+}
+
+void SingleSelectionDialogsPage::openNestedDialog()
+{
+ if (nestedDialog)
+ return;
+
+ //% "Click to open a nested message box"
+ MButton *button = new MButton(qtTrId("xx_dialogs_and_notifications_stacked_dialog_open_nested_messagebox"));
+ //% "This is a nested dialog"
+ nestedDialog = new MDialog(qtTrId("xx_dialogs_and_notifications_stacked_dialog_nested_dialog_title"), M::CancelButton);
+ nestedDialog->setCentralWidget(button);
+ connect(button, SIGNAL(clicked()), SLOT(openNestedMessageBox()));
+
+ nestedDialog->appear(MSceneWindow::DestroyWhenDone);
+}
+
+void SingleSelectionDialogsPage::openNestedMessageBox()
+{
+ if (nestedMessageBox)
+ return;
+
+ //% "I'm a nested message box"
+ nestedMessageBox = new MMessageBox(qtTrId("xx_dialogs_and_notifications_stacked_dialog_messagebox_text"));
+ nestedMessageBox->appear(MSceneWindow::DestroyWhenDone);
+}
+
+void SingleSelectionDialogsPage::openSystemModalDialog()
+{
+ if (dialog)
+ return;
+
+ dialog = new MDialog(
+ //% "System Modal Dialog"
+ qtTrId("xx_dialogs_and_notifications_system_modal_dialog_title"),
+ M::OkButton);
+
+ dialog->setCentralWidget(
+ //% "I'm a window modal dialog.\n"
+ //% "There's no way around me!\n"
+ //% "Muwhahaha... [evil laugh]"
+ new MLabel(qtTrId("xx_dialogs_and_notifications_system_modal_dialog_label")));
+
+ dialog->setSystemModal(true);
+
+ dialog->appear(MSceneWindow::DestroyWhenDone);
+}
+
+void SingleSelectionDialogsPage::openDialogWithProgressIndicator()
+{
+ if (dialog)
+ return;
+
+ MButton *button = new MButton();
+ button->setViewType(MButton::switchType);
+ button->setCheckable(true);
+ button->setChecked(true);
+ connect(button, SIGNAL(toggled(bool)), this, SLOT(setDialogProgressIndicatorVisible(bool)));
+
+ //% "Progress Indicator"
+ MLabel *label = new MLabel(qtTrId("xx_dialogs_and_notifications_progress_indicator"));
+
+ QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Horizontal);
+ layout->addStretch();
+ layout->addItem(label);
+ layout->addItem(button);
+ layout->addStretch();
+
+ dialog = new MDialog("Lorem ipsum", M::NoStandardButton);
+ dialog->centralWidget()->setLayout(layout);
+ dialog->setProgressIndicatorVisible(true);
+ dialog->appear(MSceneWindow::DestroyWhenDone);
+}
+
+void SingleSelectionDialogsPage::openMessageBox()
+{
+ if (dialog)
+ return;
+
+ //% "Hello World!"
+ dialog = new MMessageBox(qtTrId("xx_dialogs_and_notifications_message_box_text"), M::OkButton);
+ dialog->appear(MSceneWindow::DestroyWhenDone);
+}
+
+void SingleSelectionDialogsPage::setDialogProgressIndicatorVisible(bool visible)
+{
+ if (dialog) {
+ dialog->setProgressIndicatorVisible(visible);
+ }
+}
+
diff --git a/demos/widgetsgallery/singleselectiondialogspage.h b/demos/widgetsgallery/singleselectiondialogspage.h
new file mode 100644
index 00000000..5ca1a2e7
--- /dev/null
+++ b/demos/widgetsgallery/singleselectiondialogspage.h
@@ -0,0 +1,63 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef SINGLESELECTIONDIALOGSPAGE_H
+#define SINGLESELECTIONDIALOGSPAGE_H
+
+#include "templatepage.h"
+
+#include <QModelIndex>
+#include <QPointer>
+
+class MDialog;
+class MList;
+
+class SingleSelectionDialogsPage : public TemplatePage
+{
+ Q_OBJECT
+
+public:
+ SingleSelectionDialogsPage();
+
+ QString timedemoTitle();
+
+ void createContent();
+ void populateLayout();
+
+ void openStackedDialogs();
+ void openSystemModalDialog();
+ void openDialogWithProgressIndicator();
+ void openMessageBox();
+
+private Q_SLOTS:
+ void itemClicked(const QModelIndex &index);
+ void openNestedDialog();
+ void openNestedMessageBox();
+ void setDialogProgressIndicatorVisible(bool visible);
+
+private:
+ MLinearLayoutPolicy *policy;
+ MList *list;
+
+ QPointer<MDialog> dialog;
+ QPointer<MDialog> nestedDialog;
+ QPointer<MDialog> nestedMessageBox;
+};
+
+#endif // SINGLESELECTIONDIALOGSPAGE_H
diff --git a/demos/widgetsgallery/sliderpage.cpp b/demos/widgetsgallery/sliderpage.cpp
index f3fc2e50..980a6402 100644
--- a/demos/widgetsgallery/sliderpage.cpp
+++ b/demos/widgetsgallery/sliderpage.cpp
@@ -31,7 +31,7 @@
#include <QTimer>
SliderPage::SliderPage() :
- TemplatePage(),
+ TemplatePage(TemplatePage::UserInput),
ageLabel(0),
ageSlider(0),
ageContainer(0),
@@ -45,7 +45,6 @@ SliderPage::SliderPage() :
brightnessSlider(0),
brightnessContainer(0)
{
- gid = TemplatePage::LayoutsAndVisuals;
}
SliderPage::~SliderPage()
diff --git a/demos/widgetsgallery/spinnerpage.cpp b/demos/widgetsgallery/spinnerpage.cpp
index ab1c0334..19d1685f 100644
--- a/demos/widgetsgallery/spinnerpage.cpp
+++ b/demos/widgetsgallery/spinnerpage.cpp
@@ -40,7 +40,7 @@
static const int ImageSize = 64;
SpinnerPage::SpinnerPage() :
- TemplatePage(),
+ TemplatePage(TemplatePage::SimpleWidgets),
container(NULL),
spinner(NULL),
spinnerLayout1(NULL),
@@ -49,7 +49,6 @@ SpinnerPage::SpinnerPage() :
description(NULL),
view(Unknown)
{
- gid = TemplatePage::IndicatorsAndNotifications;
}
SpinnerPage::~SpinnerPage()
@@ -77,10 +76,10 @@ void SpinnerPage::createContent()
connect(action, SIGNAL(triggered()), this, SLOT(inContainerHeader()));
addAction(action);
- //% "In view menu"
+ //% "In application menu"
action = new MAction(qtTrId("xx_spinner_page_menu"), this);
action->setLocation(MAction::ApplicationMenuLocation);
- connect(action, SIGNAL(triggered()), this, SLOT(inViewmenu()));
+ connect(action, SIGNAL(triggered()), this, SLOT(inApplicationMenu()));
addAction(action);
//% "In dialog"
@@ -195,7 +194,7 @@ void SpinnerPage::timeout()
}
}
-void SpinnerPage::inViewmenu()
+void SpinnerPage::inApplicationMenu()
{
reset();
view = Menu;
diff --git a/demos/widgetsgallery/spinnerpage.h b/demos/widgetsgallery/spinnerpage.h
index d8191616..ac1d3d03 100644
--- a/demos/widgetsgallery/spinnerpage.h
+++ b/demos/widgetsgallery/spinnerpage.h
@@ -49,7 +49,7 @@ public:
public slots:
void inApplicationMainArea();
void inContainerHeader();
- void inViewmenu();
+ void inApplicationMenu();
void inDialog();
void launchDialog();
diff --git a/demos/widgetsgallery/swaphook.cpp b/demos/widgetsgallery/swaphook.cpp
index 786df674..ba5c20e0 100644
--- a/demos/widgetsgallery/swaphook.cpp
+++ b/demos/widgetsgallery/swaphook.cpp
@@ -10,7 +10,9 @@
#include <MWindow>
#include "swaphook.h"
-
+#ifdef EGL
+#include <dlfcn.h>
+#endif
class SwapHookPrivate : public QObject
{
diff --git a/demos/widgetsgallery/switchpage.cpp b/demos/widgetsgallery/switchpage.cpp
index 37c29b2e..3dbf9300 100644
--- a/demos/widgetsgallery/switchpage.cpp
+++ b/demos/widgetsgallery/switchpage.cpp
@@ -31,7 +31,7 @@
#include <QGraphicsLinearLayout>
SwitchPage::SwitchPage() :
- TemplatePage(),
+ TemplatePage(TemplatePage::Buttons),
switch1(0), switch2(0),
switch3(0), switch4(0),
switch5(0),
@@ -39,7 +39,6 @@ SwitchPage::SwitchPage() :
label3(0), label4(0),
label5(0)
{
- gid = TemplatePage::Buttons;
}
SwitchPage::~SwitchPage()
diff --git a/demos/widgetsgallery/switchpage.h b/demos/widgetsgallery/switchpage.h
index bedb1044..1d3f54e1 100644
--- a/demos/widgetsgallery/switchpage.h
+++ b/demos/widgetsgallery/switchpage.h
@@ -20,7 +20,7 @@
#ifndef SWITCHPAGE_H
#define SWITCHPAGE_H
-#include "listpage.h"
+#include "mainpage.h"
#include "templatepage.h"
#include <MApplicationPage>
#include <MLayout>
diff --git a/demos/widgetsgallery/templatepage.cpp b/demos/widgetsgallery/templatepage.cpp
index 506223e3..9a72d68d 100644
--- a/demos/widgetsgallery/templatepage.cpp
+++ b/demos/widgetsgallery/templatepage.cpp
@@ -28,11 +28,10 @@
#include <MLabel>
#include <MLocale>
-TemplatePage::TemplatePage() :
- gid(0),
+TemplatePage::TemplatePage(TemplatePage::Category category) :
layout(0), landscapePolicy(0), portraitPolicy(0),
container(0), separator(0), infoLabel(0),
- containerLayout(0), containerPolicy(0)
+ containerLayout(0), containerPolicy(0), pageCategory(category)
{
}
@@ -40,32 +39,15 @@ TemplatePage::~TemplatePage()
{
}
-QStringList TemplatePage::groupNames()
+TemplatePage::Category TemplatePage::category()
{
- QStringList list;
- //% "Views and Dialogs"
- list << qtTrId("xx_template_page_views_dialogs");
- //% "Contains and Applets"
- list << qtTrId("xx_template_page_contains_applets");
- //% "Layouts and Visuals"
- list << qtTrId("xx_template_page_layouts_visuals");
- //% "Buttons"
- list << qtTrId("xx_template_page_buttons");
- //% "Indicators and Notifications"
- list << qtTrId("xx_template_page_indicators_notifications");
- //% "Lists, Grids and Menus"
- list << qtTrId("xx_template_page_lists_grids_menus");
- //% "User input"
- list << qtTrId("xx_template_page_user_input");
- //% "Input Feedback"
- list << qtTrId("xx_template_page_input_feedback");
- return list;
+ return pageCategory;
}
-
-int TemplatePage::groupID()
+/*
+QStringList TemplatePage::groupNames()
{
- return gid;
-}
+
+}*/
void TemplatePage::createContent()
{
diff --git a/demos/widgetsgallery/templatepage.h b/demos/widgetsgallery/templatepage.h
index dd6d583c..a83b6942 100644
--- a/demos/widgetsgallery/templatepage.h
+++ b/demos/widgetsgallery/templatepage.h
@@ -37,22 +37,19 @@ class TemplatePage : public TimedemoPage
Q_OBJECT
public:
- enum GroupID {
- ViewsAndDialogs = 0,
- ContainersAndApplets,
- LayoutsAndVisuals,
+ enum Category {
+ ApplicationView = 0,
+ SimpleWidgets,
Buttons,
- IndicatorsAndNotifications,
- ListsGridsAndMenus,
- UserInput,
- InputFeedback
+ DialogsAndBanners,
+ ListsGridsAndPopups,
+ UserInput
};
- TemplatePage();
+ TemplatePage(TemplatePage::Category category);
virtual ~TemplatePage();
- int groupID();
- static QStringList groupNames();
+ TemplatePage::Category category();
virtual void createContent();
@@ -60,8 +57,6 @@ protected:
virtual void createLayout();
virtual void retranslateUi();
- int gid;
-
MLayout *layout;
MLinearLayoutPolicy *landscapePolicy;
@@ -74,6 +69,9 @@ protected:
MLayout *containerLayout;
MLinearLayoutPolicy *containerPolicy;
+
+private:
+ TemplatePage::Category pageCategory;
};
#endif
diff --git a/demos/widgetsgallery/textentrypage.cpp b/demos/widgetsgallery/textentrypage.cpp
index 3b38bcdc..8d1a77eb 100644
--- a/demos/widgetsgallery/textentrypage.cpp
+++ b/demos/widgetsgallery/textentrypage.cpp
@@ -257,12 +257,11 @@ bool CustomTextEdit::event(QEvent *event)
}
TextEntryPage::TextEntryPage()
- : TemplatePage(),
+ : TemplatePage(TemplatePage::UserInput),
m_autoCapitalisation(true),
m_errorCorrection(true),
m_completer(new MCompleter)
{
- gid = TemplatePage::UserInput;
}
@@ -661,10 +660,10 @@ void TextEntryPage::changeAutoCapitalisation(bool val)
if (val)
//% "Auto Capitalisation is active"
- Entries.at(4)->setPrompt(qtTrId("xx_auto_true_entry0"));
+ Entries.at(9)->setPrompt(qtTrId("xx_auto_true_entry0"));
else
//% "No Auto Capitalisation"
- Entries.at(4)->setPrompt(qtTrId("xx_auto_false_entry0"));
+ Entries.at(9)->setPrompt(qtTrId("xx_auto_false_entry0"));
}
diff --git a/demos/widgetsgallery/theme/base/style/widgetsgallery.css b/demos/widgetsgallery/theme/base/style/widgetsgallery.css
index 752cae00..9e68c014 100644
--- a/demos/widgetsgallery/theme/base/style/widgetsgallery.css
+++ b/demos/widgetsgallery/theme/base/style/widgetsgallery.css
@@ -1,6 +1,30 @@
@import "../../libmeegotouchcore/style/fonts.css";
@import "../../libmeegotouchcore/style/colors.css";
+MList#wgMainPageCategoryList {
+ margin-left: 0;
+ padding-left: 0;
+ margin-right: 0;
+ padding-right: 0;
+
+ border-left: 0;
+ border-right: 0;
+ border-top: 0;
+ border-bottom: 0;
+}
+
+MConentItem#wgMainPageCategoryListItem {
+ margin-left: 0;
+ padding-left: 0;
+ margin-right: 0;
+ padding-right: 0;
+
+ border-left: 0;
+ border-right: 0;
+ border-top: 0;
+ border-bottom: 0;
+}
+
DuiButtonStyle#theme-selection-button {
minimum-size: 10mm 10mm;
preferred-size: 15mm 15mm;
diff --git a/demos/widgetsgallery/timedemo.cpp b/demos/widgetsgallery/timedemo.cpp
index 3ead52d1..2c9485de 100644
--- a/demos/widgetsgallery/timedemo.cpp
+++ b/demos/widgetsgallery/timedemo.cpp
@@ -18,7 +18,7 @@
****************************************************************************/
#include "timedemo.h"
-#include "listpage.h"
+#include "mainpage.h"
#include "timedemobenchmark.h"
#include "templatepage.h"
@@ -38,8 +38,8 @@ namespace
const int pageDuration = 5000;
}
-Timedemo::Timedemo(ListPage *listPage, const QStringList& demoPageTitles)
- : m_pFrontPage(listPage)
+Timedemo::Timedemo(MainPage *mainPage, const QStringList& demoPageTitles)
+ : m_pFrontPage(mainPage)
, m_currentPageIndex(0)
, m_currentBenchmarkIndex(0)
, demoPageTitles(demoPageTitles)
@@ -87,7 +87,7 @@ void Timedemo::stopTiming()
void Timedemo::showFirstPage()
{
if (demoPageTitles.count() == 0) {
- foreach(TimedemoPage *page, m_pFrontPage->pages) {
+ foreach(TimedemoPage *page, m_pFrontPage->demoPages()) {
demoPages.append(page);
}
} else {
diff --git a/demos/widgetsgallery/timedemo.h b/demos/widgetsgallery/timedemo.h
index 75e879b2..13cc311e 100644
--- a/demos/widgetsgallery/timedemo.h
+++ b/demos/widgetsgallery/timedemo.h
@@ -29,7 +29,7 @@
#include "swaphook.h"
class QString;
-class ListPage;
+class MainPage;
class SwapHook;
class TimedemoPage;
class TimedemoBenchmark;
@@ -67,7 +67,7 @@ class Timedemo : public QObject
{
Q_OBJECT
public:
- Timedemo(ListPage *listPage, const QStringList& demoPageTitles);
+ Timedemo(MainPage *mainPage, const QStringList& demoPageTitles);
void setOutputCsv(const QString &filename);
void setFramelog(const QString &filename);
@@ -86,7 +86,7 @@ private:
void displayBenchmarkResults();
void saveFramelog();
- ListPage *m_pFrontPage;
+ MainPage *m_pFrontPage;
typedef QHash<QString, BenchmarkResult> BenchmarkResultHash;
QVector<BenchmarkResultHash> benchmarkResults;
diff --git a/demos/widgetsgallery/toolbarpage.cpp b/demos/widgetsgallery/toolbarpage.cpp
index eb41ff8e..99fa1ac4 100644
--- a/demos/widgetsgallery/toolbarpage.cpp
+++ b/demos/widgetsgallery/toolbarpage.cpp
@@ -138,6 +138,7 @@ private:
};
ToolBarPage::ToolBarPage() :
+ TemplatePage(TemplatePage::ApplicationView),
callList(0),
callModel(0),
cellCreator(0),
@@ -147,8 +148,6 @@ ToolBarPage::ToolBarPage() :
tabViewAction(0),
isDefaultView(true)
{
- gid = TemplatePage::ViewsAndDialogs;
-
}
ToolBarPage::~ToolBarPage()
@@ -228,12 +227,12 @@ void ToolBarPage::fourButtons()
{
clearToolbarActions();
- MAction* action = new MAction("icon-m-list", "", this);
+ MAction* action = new MAction("icon-m-toolbar-list", "", this);
action->setLocation(MAction::ToolBarLocation);
addAction(action);
connect(action, SIGNAL(triggered()), this, SLOT(showCallDataAsList()));
- action = new MAction("icon-m-grid", "", this);
+ action = new MAction("icon-m-toolbar-grid", "", this);
action->setLocation(MAction::ToolBarLocation);
addAction(action);
connect(action, SIGNAL(triggered()), this, SLOT(showCallDataAsGrid()));
@@ -244,12 +243,12 @@ void ToolBarPage::textEntryWithTwoButtons()
{
clearToolbarActions();
addTextEntry();
- MAction *action = new MAction("Icon-video", "Video", this);
+ MAction *action = new MAction("icon-m-toolbar-camera", "Camera", this);
action->setLocation(MAction::ToolBarLocation);
addAction(action);
- MAction *actionSMS = new MAction("Icon-new-SMS", "SMS", this);
- actionSMS->setLocation(MAction::ToolBarLocation);
- insertAction(action, actionSMS);
+ MAction *actionGallery = new MAction("icon-m-toolbar-gallery", "Gallery", this);
+ actionGallery->setLocation(MAction::ToolBarLocation);
+ insertAction(action, actionGallery);
}
void ToolBarPage::addTextEntry()
diff --git a/demos/widgetsgallery/translations/widgetsgallery_ar.ts b/demos/widgetsgallery/translations/widgetsgallery_ar.ts
index f7e67c1c..4e4f00f3 100644
--- a/demos/widgetsgallery/translations/widgetsgallery_ar.ts
+++ b/demos/widgetsgallery/translations/widgetsgallery_ar.ts
@@ -3,53 +3,208 @@
<TS version="2.0" language="ar">
<context>
<name></name>
+ <message id="xx_wg_categories_application_view">
+ <location filename="../mainpage.cpp" line="86"/>
+ <source>Application View</source>
+ <translation>طلب عرض</translation>
+ </message>
+ <message id="xx_wg_application_view_view_menu">
+ <location filename="../mainpage.cpp" line="88"/>
+ <source>Application Menu</source>
+ <translation>تطبيق قائمة</translation>
+ </message>
+ <message id="xx_wg_application_view_display_modes">
+ <location filename="../mainpage.cpp" line="90"/>
+ <source>Display Modes</source>
+ <translation>طريقة العرض</translation>
+ </message>
+ <message id="xx_wg_application_view_toolbar_incl_tab_bar">
+ <location filename="../mainpage.cpp" line="92"/>
+ <source>Toolbar (including Tab Bar)</source>
+ <translation>شريط الأدوات (بما في ذلك علامة التبويب بار)</translation>
+ </message>
+ <message id="xx_wg_categories_simple_widgets">
+ <location filename="../mainpage.cpp" line="96"/>
+ <source>Simple Widgets</source>
+ <translation>بسيطة القطع</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_labels">
+ <location filename="../mainpage.cpp" line="98"/>
+ <source>Labels</source>
+ <translation>التسميات</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_image">
+ <location filename="../mainpage.cpp" line="100"/>
+ <source>Image</source>
+ <translation>صورة</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_progress_bar">
+ <location filename="../mainpage.cpp" line="102"/>
+ <source>Progress Bar</source>
+ <translation>التقدم بار</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_container">
+ <location filename="../mainpage.cpp" line="104"/>
+ <source>Container</source>
+ <translation>حاوية</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_spinner">
+ <location filename="../mainpage.cpp" line="106"/>
+ <source>Spinner</source>
+ <translation>الغزال</translation>
+ </message>
+ <message id="xx_wg_categories_buttons">
+ <location filename="../mainpage.cpp" line="109"/>
+ <source>Buttons</source>
+ <translation>أزرار</translation>
+ </message>
+ <message id="xx_wg_buttons_push_button">
+ <location filename="../mainpage.cpp" line="111"/>
+ <source>Push Button</source>
+ <translation>زر</translation>
+ </message>
+ <message id="xx_wg_buttons_icon_button">
+ <location filename="../mainpage.cpp" line="113"/>
+ <source>Icon Button</source>
+ <translation>رمز زر</translation>
+ </message>
+ <message id="xx_wg_buttons_switch">
+ <location filename="../mainpage.cpp" line="115"/>
+ <source>Switch</source>
+ <translation>تحول</translation>
+ </message>
+ <message id="xx_wg_buttons_checkbox">
+ <location filename="../mainpage.cpp" line="117"/>
+ <source>Checkbox</source>
+ <translation>مربع</translation>
+ </message>
+ <message id="xx_wg_categories_dialogs_and_banners">
+ <location filename="../mainpage.cpp" line="120"/>
+ <source>Dialogs and Banners</source>
+ <translation>الحوارات والرايات</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_single_selection_dialog">
+ <location filename="../mainpage.cpp" line="122"/>
+ <source>Single Selection Dialog</source>
+ <translation>اختيار واحد حوار</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_multiple_selection_dialog">
+ <location filename="../mainpage.cpp" line="124"/>
+ <source>Multiple Selection Dialog</source>
+ <translation>متعددة الاختيار حوار</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_query_dialog">
+ <location filename="../mainpage.cpp" line="126"/>
+ <source>Query Dialog</source>
+ <translation>استعلام حوار</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_banner">
+ <location filename="../mainpage.cpp" line="128"/>
+ <source>Banner</source>
+ <translation>راية</translation>
+ </message>
+ <message id="xx_wg_categories_lists_grids_and_popups">
+ <location filename="../mainpage.cpp" line="131"/>
+ <source>Lists, Grids and Popups</source>
+ <translation>قوائم وشبكات وبالنوافذ</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_list">
+ <location filename="../mainpage.cpp" line="133"/>
+ <source>List</source>
+ <translation>قائمة</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_grid">
+ <location filename="../mainpage.cpp" line="135"/>
+ <source>Grid</source>
+ <translation>شبكة</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_object_menu">
+ <location filename="../mainpage.cpp" line="137"/>
+ <source>Object Menu</source>
+ <translation>كائن قائمة</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_combobox">
+ <location filename="../mainpage.cpp" line="139"/>
+ <source>ComboBox</source>
+ <translation>منسدل</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_contentitems">
+ <location filename="../mainpage.cpp" line="141"/>
+ <source>ContentItems</source>
+ <translation>بنود المحتوى</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_bubble">
+ <location filename="../mainpage.cpp" line="143"/>
+ <source>Speech bubble</source>
+ <translation>كلمة فقاعة</translation>
+ </message>
+ <message id="xx_wg_categories_user_input">
+ <location filename="../mainpage.cpp" line="146"/>
+ <source>User Input</source>
+ <translation>مستخدم الإدخال</translation>
+ </message>
+ <message id="xx_wg_user_input_text_entries">
+ <location filename="../mainpage.cpp" line="148"/>
+ <source>Text Entries</source>
+ <translation>نص مداخل</translation>
+ </message>
+ <message id="xx_wg_user_input_slider">
+ <location filename="../mainpage.cpp" line="150"/>
+ <source>Slider</source>
+ <translation>المتزلج</translation>
+ </message>
+ <message id="xx_wg_user_input_input_feedback">
+ <location filename="../mainpage.cpp" line="152"/>
+ <source>Input Feedback</source>
+ <translation>إدخال تعليقات</translation>
+ </message>
<message id="xx_application_title">
- <location filename="../listpage.cpp" line="187"/>
+ <location filename="../mainpage.cpp" line="330"/>
<source>Widgets Gallery</source>
<translation>معرض الحاجيات</translation>
</message>
<message id="xx_apporientation_auto">
- <location filename="../listpage.cpp" line="456"/>
+ <location filename="../mainpage.cpp" line="546"/>
<source>Automatic</source>
<translation>التلقائي</translation>
</message>
<message id="xx_apporientation_portrait">
- <location filename="../listpage.cpp" line="464"/>
+ <location filename="../mainpage.cpp" line="554"/>
<source>Portrait</source>
<translation>بورتريه</translation>
</message>
<message id="xx_apporientation_landscape">
- <location filename="../listpage.cpp" line="472"/>
+ <location filename="../mainpage.cpp" line="562"/>
<source>Landscape</source>
<translation>المشهد</translation>
</message>
<message id="xx_apporientation_angle0">
- <location filename="../listpage.cpp" line="480"/>
+ <location filename="../mainpage.cpp" line="570"/>
<source>0 degrees</source>
<translation>0 درجة</translation>
</message>
<message id="xx_apporientation_angle90">
- <location filename="../listpage.cpp" line="488"/>
+ <location filename="../mainpage.cpp" line="578"/>
<source>90 degrees clockwise</source>
<translation>90 درجة في اتجاه عقارب الساعة</translation>
</message>
<message id="xx_apporientation_angle180">
- <location filename="../listpage.cpp" line="496"/>
+ <location filename="../mainpage.cpp" line="586"/>
<source>180 degrees clockwise</source>
<translation>180 درجة في اتجاه عقارب الساعة</translation>
</message>
<message id="xx_apporientation_angle270">
- <location filename="../listpage.cpp" line="504"/>
+ <location filename="../mainpage.cpp" line="594"/>
<source>270 degrees clockwise</source>
<translation>270 درجة في اتجاه عقارب الساعة</translation>
</message>
<message id="xx_label_page_title">
- <location filename="../labelpage.cpp" line="119"/>
+ <location filename="../labelpage.cpp" line="108"/>
<source>Labels</source>
<translation>تسميات</translation>
</message>
<message id="xx_label_page_info_label">
- <location filename="../labelpage.cpp" line="129"/>
+ <location filename="../labelpage.cpp" line="118"/>
<source>Simple Label is used mainly by other components, and it does not support any formatting or interaction.
Rich Label supports multiple lines, HTML formatting and highlighting for links.
@@ -62,72 +217,107 @@ All Labels can be aligned left, right or center and will be automatically trunca
جميع تسميات يمكن أن تكون محاذاة إلى اليسار أو اليمين أو الوسط ، وسيتم اقتطاعها تلقائيا إذا كان النص لا تناسب داخل منطقة معينة.</translation>
</message>
<message id="xx_simple_label">
- <location filename="../labelpage.cpp" line="131"/>
+ <location filename="../labelpage.cpp" line="120"/>
<source>Simple Label</source>
<translation>بسيطة تسمية</translation>
</message>
<message id="xx_rich_label">
- <location filename="../labelpage.cpp" line="134"/>
+ <location filename="../labelpage.cpp" line="123"/>
<source>Rich Label &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, http://www.nokia.com, +358401234567, fors.fagerstrom@email.com</source>
<translation>الغنية تسمية &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, http://www.nokia.com, +358401234567, fors.fagerstrom@email.com</translation>
</message>
+ <message id="xx_wg_multiple_selection_dialogs_page_question_dialog">
+ <location filename="../multipleselectiondialogspage.cpp" line="94"/>
+ <source>Question Dialog</source>
+ <translation>السؤال حوار</translation>
+ </message>
<message id="xx_dialogs_and_notifications_question_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="88"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="118"/>
<source>Question Dialog Title</source>
<translation>السؤال حوار العنوان</translation>
</message>
<message id="xx_dialogs_and_notifications_question_dialog_content">
- <location filename="../dialogsandnotificationspage.cpp" line="92"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="122"/>
<source>Lorem ipsum dolor sit amet?</source>
<translation>أبجد هوز دولور الجلوس امات؟</translation>
</message>
+ <message id="xx_wg_query_dialogs_page_entry_dialog">
+ <location filename="../querydialogspage.cpp" line="95"/>
+ <source>Entry Dialog</source>
+ <translation>بدء حوار</translation>
+ </message>
+ <message id="xx_wg_query_dialogs_page_long_dialog">
+ <location filename="../querydialogspage.cpp" line="97"/>
+ <source>Long Dialog</source>
+ <translation>حوار طويل</translation>
+ </message>
<message id="xx_dialogs_and_notifications_entry_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="101"/>
+ <location filename="../querydialogspage.cpp" line="124"/>
<source>Name</source>
<translation>اسم</translation>
</message>
<message id="xx_dialogs_and_notifications_entry_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="113"/>
+ <location filename="../querydialogspage.cpp" line="134"/>
<source>Please enter your name</source>
<translation>الرجاء إدخال اسمك</translation>
</message>
<message id="xx_dialogs_and_notifications_long_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="128"/>
+ <location filename="../querydialogspage.cpp" line="150"/>
<source>Select printer</source>
<translation>حدد الطابعة</translation>
</message>
+ <message id="xx_wg_single_selection_dialogs_page_stacked_dialogs">
+ <location filename="../singleselectiondialogspage.cpp" line="94"/>
+ <source>Stacked Dialogs</source>
+ <translation>مكدسة الحوارات</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_system_modal_dialog">
+ <location filename="../singleselectiondialogspage.cpp" line="96"/>
+ <source>System Modal Dialog</source>
+ <translation>نظام حوار مشروط</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_dialog_with_progress_indicator">
+ <location filename="../singleselectiondialogspage.cpp" line="98"/>
+ <source>Dialog with Progress Indicator</source>
+ <translation>الحوار مع مؤشر التقدم</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_message_box">
+ <location filename="../singleselectiondialogspage.cpp" line="100"/>
+ <source>Message Box</source>
+ <translation>رسالة الإطار</translation>
+ </message>
<message id="xx_dialogs_and_notifications_stacked_dialog_button">
- <location filename="../dialogsandnotificationspage.cpp" line="179"/>
+ <location filename="../singleselectiondialogspage.cpp" line="129"/>
<source>Click to spawn a nested dialog</source>
<translation>انقر لتفرخ الحوار متداخلة</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="181"/>
+ <location filename="../singleselectiondialogspage.cpp" line="131"/>
<source>Stacked dialogs</source>
<translation>حوارات مرصوف</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_open_nested_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="194"/>
+ <location filename="../singleselectiondialogspage.cpp" line="145"/>
<source>Click to open a nested message box</source>
<translation>انقر لفتح متداخلة مربع رسالة</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_nested_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="196"/>
+ <location filename="../singleselectiondialogspage.cpp" line="147"/>
<source>This is a nested dialog</source>
<translation>هذا هو الحوار متداخلة</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_messagebox_text">
- <location filename="../dialogsandnotificationspage.cpp" line="209"/>
+ <location filename="../singleselectiondialogspage.cpp" line="160"/>
<source>I&apos;m a nested message box</source>
<translation>أنا متداخلة مربع رسالة</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="219"/>
+ <location filename="../singleselectiondialogspage.cpp" line="171"/>
<source>System Modal Dialog</source>
<translation>نافذة حوار مشروط</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="225"/>
+ <location filename="../singleselectiondialogspage.cpp" line="178"/>
<source>I&apos;m a window modal dialog.
There&apos;s no way around me!
Muwhahaha... [evil laugh]</source>
@@ -139,264 +329,249 @@ Muwhahaha... [evil laugh]</oldsource>
هاهاها... [الشر الضحك]</translation>
</message>
<message id="xx_dialogs_and_notifications_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="242"/>
+ <location filename="../singleselectiondialogspage.cpp" line="197"/>
<source>Progress Indicator</source>
<translation>مؤشرات التقدم</translation>
</message>
<message id="xx_dialogs_and_notifications_message_box_text">
- <location filename="../dialogsandnotificationspage.cpp" line="261"/>
+ <location filename="../singleselectiondialogspage.cpp" line="217"/>
<source>Hello World!</source>
<translation>مرحبا العالم!</translation>
</message>
+ <message id="xx_wg_banners_page_event_banner">
+ <location filename="../bannerspage.cpp" line="90"/>
+ <source>Event Banner</source>
+ <translation>حدث بانر</translation>
+ </message>
+ <message id="xx_wg_banners_page_information_banner">
+ <location filename="../bannerspage.cpp" line="92"/>
+ <source>Information Banner</source>
+ <translation>معلومات بانر</translation>
+ </message>
+ <message id="xx_wg_banners_page_system_information_banner">
+ <location filename="../bannerspage.cpp" line="94"/>
+ <source>System Information Banner</source>
+ <translation>نظام المعلومات بانر</translation>
+ </message>
<message id="xx_dialogs_and_notifications_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="271"/>
+ <location filename="../bannerspage.cpp" line="121"/>
<source>&lt;b&gt;Ida Taipale&lt;/b&gt;&lt;br/&gt;Have you seen my dog?</source>
<translation>&lt;b&gt;Ida Taipale&lt;/b&gt;&lt;br/&gt;هل رأيت كلبي؟</translation>
</message>
<message id="xx_dialogs_and_notifications_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="284"/>
+ <location filename="../bannerspage.cpp" line="134"/>
<source>&lt;b&gt;Battery is running low&lt;/b&gt;</source>
<translation>&lt;b&gt;البطارية تتناقص&lt;/b&gt;</translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="296"/>
+ <location filename="../bannerspage.cpp" line="145"/>
<source>&lt;b&gt;Incoming call&lt;/b&gt;</source>
<translation>&lt;b&gt;مكالمة واردة&lt;/b&gt;</translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner_accept">
- <location filename="../dialogsandnotificationspage.cpp" line="298"/>
+ <location filename="../bannerspage.cpp" line="147"/>
<source>Accept</source>
<translation>قبول</translation>
</message>
- <message id="xx_dialogs_and_notifications_title">
- <location filename="../dialogsandnotificationspage.cpp" line="365"/>
- <source>Dialogs and Notifications</source>
- <translation>الحوارات والإشعارات</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="369"/>
- <source>Dialog examples</source>
- <translation>أمثلة الحوار</translation>
- </message>
- <message id="xx_dialogs_and_notifications_query_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="371"/>
- <source>Question Dialog</source>
- <translation>الاستعلام حوار</translation>
- </message>
- <message id="xx_dialogs_and_notifications_entry_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="373"/>
- <source>Entry Dialog</source>
- <translation>بدء حوار</translation>
- </message>
- <message id="xx_dialogs_and_notifications_long_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="375"/>
- <source>A Long Dialog</source>
- <translation>وهناك حوار طويل</translation>
- </message>
- <message id="xx_dialogs_and_notifications_stacked_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="378"/>
- <source>Stacked Dialogs</source>
- <translation>حوارات مرصوف</translation>
- </message>
- <message id="xx_dialogs_and_notifications_system_modal_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="381"/>
- <source>System Modal Dialog</source>
- <translation>نافذة حوار مشروط</translation>
- </message>
- <message id="xx_dialogs_and_notifications_dialog_with_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="384"/>
- <source>Dialog With Progress Indicator</source>
- <translation>الحوار مع تقدم المؤشر</translation>
- </message>
- <message id="xx_dialogs_and_notifications_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="389"/>
- <source>Simple Message Box</source>
- <translation>رسالة بسيطة مربع</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_notifications">
- <location filename="../dialogsandnotificationspage.cpp" line="387"/>
- <source>Notifications and messages</source>
- <translation>الإخطارات والرسائل</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="391"/>
- <source>Event Banner</source>
- <translation>الحدث بانر</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="393"/>
- <source>Information Banner</source>
- <translation>معلومات بانر</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="395"/>
- <source>System Information Banner</source>
- <translation>نظام المعلومات بانر</translation>
- </message>
<message id="xx_Image">
- <location filename="../imagepage.cpp" line="123"/>
+ <location filename="../imagepage.cpp" line="131"/>
<source>Image</source>
<translation>الصور</translation>
</message>
<message id="xx_Image properties">
- <location filename="../imagepage.cpp" line="127"/>
+ <location filename="../imagepage.cpp" line="135"/>
<source>Image properties</source>
<translation>خصائص الصورة</translation>
</message>
<message id="xx_image_operations">
- <location filename="../imagepage.cpp" line="145"/>
+ <location filename="../imagepage.cpp" line="153"/>
<source>Image operations</source>
<translation>عمليات صورة</translation>
</message>
<message id="xx_Zoom">
- <location filename="../imagepage.cpp" line="133"/>
+ <location filename="../imagepage.cpp" line="141"/>
<source>Zoom</source>
<translation>التكبير</translation>
</message>
<message id="xx_Transparency">
- <location filename="../imagepage.cpp" line="135"/>
+ <location filename="../imagepage.cpp" line="143"/>
<source>Transparency</source>
<translation>الشفافية</translation>
</message>
<message id="xx_Crop">
- <location filename="../imagepage.cpp" line="137"/>
+ <location filename="../imagepage.cpp" line="145"/>
<source>Crop</source>
<translation>المحاصيل</translation>
</message>
+ <message id="xx_listpage_list_remove">
+ <location filename="../mlistpage.cpp" line="547"/>
+ <source>Remove</source>
+ <translation>إزالة</translation>
+ </message>
+ <message id="xx_listpage_list_edit">
+ <location filename="../mlistpage.cpp" line="553"/>
+ <source>Edit</source>
+ <translation>عدل</translation>
+ </message>
<message id="xx_listpage_title">
- <location filename="../mlistpage.cpp" line="423"/>
+ <location filename="../mlistpage.cpp" line="573"/>
<source>List</source>
<translation>قائمة</translation>
</message>
<message id="xx_textentry_title">
- <location filename="../textentrypage.cpp" line="490"/>
+ <location filename="../textentrypage.cpp" line="582"/>
<source>Text Entries</source>
<translation>النص مداخل</translation>
</message>
<message id="xx_textentry_free_text">
- <location filename="../textentrypage.cpp" line="506"/>
+ <location filename="../textentrypage.cpp" line="598"/>
<source>Free text:</source>
<translation>حرر النص :</translation>
</message>
<message id="xx_textentry_free_text_masked">
- <location filename="../textentrypage.cpp" line="508"/>
+ <location filename="../textentrypage.cpp" line="600"/>
<source>Free text(masked):</source>
<translation>نص حر (الملثمين) :</translation>
</message>
<message id="xx_textentry_number_text">
- <location filename="../textentrypage.cpp" line="510"/>
+ <location filename="../textentrypage.cpp" line="602"/>
<source>Number text:</source>
<translation>النص المرجعي :</translation>
</message>
<message id="xx_textentry_phone_number">
- <location filename="../textentrypage.cpp" line="512"/>
+ <location filename="../textentrypage.cpp" line="604"/>
<source>Phone number:</source>
<translation>رقم الهاتف :</translation>
</message>
<message id="xx_textentry_email_text">
- <location filename="../textentrypage.cpp" line="514"/>
+ <location filename="../textentrypage.cpp" line="606"/>
<source>Email text:</source>
<translation>نص البريد الالكتروني :</translation>
</message>
<message id="xx_textentry_url_text">
- <location filename="../textentrypage.cpp" line="516"/>
+ <location filename="../textentrypage.cpp" line="608"/>
<source>Url text:</source>
<translation>عنوان النص :</translation>
</message>
<message id="xx_textentry_multiline">
- <location filename="../textentrypage.cpp" line="518"/>
+ <location filename="../textentrypage.cpp" line="610"/>
<source>Multiline:</source>
<translation>متعدد :</translation>
</message>
<message id="xx_tooltip_entry0">
- <location filename="../textentrypage.cpp" line="494"/>
+ <location filename="../textentrypage.cpp" line="586"/>
<source>Enter text here</source>
<translation>أدخل النص هنا</translation>
</message>
<message id="xx_textentry_click_here">
- <location filename="../textentrypage.cpp" line="144"/>
- <location filename="../textentrypage.cpp" line="166"/>
+ <location filename="../textentrypage.cpp" line="147"/>
+ <location filename="../textentrypage.cpp" line="169"/>
<source>Click here</source>
<translation>انقر هنا</translation>
</message>
<message id="xx_textentry_press_any_key">
- <location filename="../textentrypage.cpp" line="157"/>
+ <location filename="../textentrypage.cpp" line="160"/>
<source>Press any key</source>
<translation>اضغط على أي مفتاح</translation>
</message>
<message id="xx_textentry_keypress">
- <location filename="../textentrypage.cpp" line="183"/>
+ <location filename="../textentrypage.cpp" line="186"/>
<source>&lt;i&gt;Key press&lt;/i&gt; key:</source>
<translation>&lt;i&gt;اضغط على مفتاح&lt;/i&gt; مفتاح:</translation>
</message>
<message id="xx_textentry_text">
- <location filename="../textentrypage.cpp" line="186"/>
- <location filename="../textentrypage.cpp" line="200"/>
+ <location filename="../textentrypage.cpp" line="189"/>
+ <location filename="../textentrypage.cpp" line="203"/>
<source>text:</source>
<translation>النص :</translation>
</message>
<message id="xx_textentry_keyrelease">
- <location filename="../textentrypage.cpp" line="197"/>
+ <location filename="../textentrypage.cpp" line="200"/>
<source>&lt;i&gt;Key release&lt;/i&gt; key:</source>
<translation>&lt;i&gt;الافراج عن مفتاح&lt;/i&gt; مفتاح:</translation>
</message>
+ <message id="xx_tooltip_customtoolbar1">
+ <location filename="../textentrypage.cpp" line="519"/>
+ <source>Example custom toolbar 1</source>
+ <translation>مثال شريط أدوات مخصص 1</translation>
+ </message>
+ <message id="xx_tooltip_customtoolbar2">
+ <location filename="../textentrypage.cpp" line="532"/>
+ <source>Example custom toolbar 2</source>
+ <translation>مثال شريط أدوات مخصص 2</translation>
+ </message>
<message id="xx_tooltip_entry1">
- <location filename="../textentrypage.cpp" line="497"/>
+ <location filename="../textentrypage.cpp" line="589"/>
<source>This tooltip is quite long and will be clipped on the display</source>
<translation>هذا توولتيب طويلة جدا ، وسيتم قص على الشاشة</translation>
</message>
+ <message id="xx_textentry_richtext_text">
+ <location filename="../textentrypage.cpp" line="616"/>
+ <source>Rich Text:</source>
+ <translation>الغنية النص :</translation>
+ </message>
<message id="xx_textentry_noecho">
- <location filename="../textentrypage.cpp" line="525"/>
+ <location filename="../textentrypage.cpp" line="619"/>
<source>No Echo mode:</source>
<translation>أي وضع الصدى :</translation>
</message>
<message id="xx_textentry_echoonedit">
- <location filename="../textentrypage.cpp" line="528"/>
+ <location filename="../textentrypage.cpp" line="622"/>
<source>Echo on edit:</source>
<translation>صدى على تحرير :</translation>
</message>
<message id="xx_textentry_direct_input_mode">
- <location filename="../textentrypage.cpp" line="531"/>
+ <location filename="../textentrypage.cpp" line="625"/>
<source>Direct Input Mode:</source>
<translation>مباشرة وضع الإدخال :</translation>
</message>
+ <message id="xx_textentry_custom_toolbar1">
+ <location filename="../textentrypage.cpp" line="628"/>
+ <source>Custom ToolBar 1:</source>
+ <translation>شريط أدوات مخصص 1:</translation>
+ </message>
+ <message id="xx_textentry_custom_toolbar2">
+ <location filename="../textentrypage.cpp" line="630"/>
+ <source>Custom ToolBar 2:</source>
+ <translation>شريط أدوات مخصص 2:</translation>
+ </message>
<message id="xx_auto_true_entry0">
- <location filename="../textentrypage.cpp" line="564"/>
+ <location filename="../textentrypage.cpp" line="663"/>
<source>Auto Capitalisation is active</source>
<translation>السيارات رسملة نشط</translation>
</message>
<message id="xx_auto_false_entry0">
- <location filename="../textentrypage.cpp" line="567"/>
+ <location filename="../textentrypage.cpp" line="666"/>
<source>No Auto Capitalisation</source>
<translation>لا رسملة للسيارات</translation>
</message>
<message id="xx_tooltip_entry6">
- <location filename="../textentrypage.cpp" line="503"/>
+ <location filename="../textentrypage.cpp" line="595"/>
<source>This is a multiline text entry</source>
<translation>هذا هو إدخال نص متعدد الأسطر</translation>
</message>
<message id="xx_textentry_singleselectall">
- <location filename="../textentrypage.cpp" line="520"/>
+ <location filename="../textentrypage.cpp" line="612"/>
<source>Singleline (selectall):</source>
<translation>سطر واحد (حدد جميع)</translation>
</message>
<message id="xx_auto_capitalisation">
- <location filename="../textentrypage.cpp" line="534"/>
+ <location filename="../textentrypage.cpp" line="633"/>
<source>Auto capitalisation</source>
<translation>القيمة السوقية للسيارات</translation>
</message>
<message id="xx_error_correction">
- <location filename="../textentrypage.cpp" line="536"/>
+ <location filename="../textentrypage.cpp" line="635"/>
<source>Error correction</source>
<translation>تصحيح الخطأ</translation>
</message>
- <message id="xx_viewmenu_page_title">
- <location filename="../applicationmenupage.cpp" line="60"/>
+ <message id="xx_applicationmenu_page_title">
+ <location filename="../applicationmenupage.cpp" line="62"/>
<source>Application Menu</source>
- <translation>عرض القائمة</translation>
+ <translation>تطبيق قائمة</translation>
</message>
<message id="xx_applicationmenu_page_info">
- <location filename="../applicationmenupage.cpp" line="75"/>
+ <location filename="../applicationmenupage.cpp" line="77"/>
<source>Application Menu is a menu element available to any view. &lt;ul&gt;&lt;li&gt;It can be opened by tapping on the menu title area.&lt;/li&gt;&lt;li&gt;It contains commands and view settings for the view in question and an optional area for style commands.&lt;/li&gt;&lt;li&gt;Each view of the application can have different menu contents.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Guidelines&lt;/b&gt; for mandatory menu items: &lt;ul&gt;&lt;li&gt;Settings should be on the main View of the application, unless the settings are specific to a sub-View&lt;/li&gt;&lt;li&gt;Help should be available in each View &lt;/li&gt;&lt;li&gt;Exit task should be present in all Views except for the main View of the application.&lt;/li&gt;&lt;/ul&gt;</source>
<translation>تطبيق القائمة هو عنصر القائمة المتاحة لأية وجهة نظر. ويمكن فتحها عن طريق النقر على قائمة عرض عنوان المنطقة.
تطبيق القائمة تحتوي على الأوامر والإعدادات لعرض وجهة النظر في مسألة اختيارية ، ومساحة لعرض أوامر نمط. كل عرض للتطبيق ويمكن أن يكون مختلفا عرض محتويات القائمة.
@@ -406,82 +581,82 @@ Muwhahaha... [evil laugh]</oldsource>
إنهاء المهمة ينبغي أن تكون حاضرة في جميع المشاهدات باستثناء لمشاهدة الرئيسي للتطبيق.</translation>
</message>
<message id="xx_popup_generic_title">
- <location filename="../comboboxpage.cpp" line="112"/>
+ <location filename="../comboboxpage.cpp" line="113"/>
<source>Title</source>
<translation>العنوان</translation>
</message>
<message id="xx_popup_sort_descending_order">
- <location filename="../comboboxpage.cpp" line="114"/>
+ <location filename="../comboboxpage.cpp" line="115"/>
<source>Sort - DescendingOrder</source>
<translation>فرز -- تنازلي</translation>
</message>
<message id="xx_popup_time_consuming">
- <location filename="../comboboxpage.cpp" line="116"/>
+ <location filename="../comboboxpage.cpp" line="117"/>
<source>Time-consuming setting</source>
<translation>إعداد الوقت طويلا</translation>
</message>
<message id="xx_container_page_title">
- <location filename="../containerpage.cpp" line="65"/>
+ <location filename="../containerpage.cpp" line="64"/>
<source>Container</source>
<translation>الحاوية</translation>
</message>
<message id="xx_progressbar_page_title">
- <location filename="../progressbarpage.cpp" line="80"/>
+ <location filename="../progressbarpage.cpp" line="78"/>
<source>Progress Bar</source>
<translation>التقدم بار</translation>
</message>
<message id="xx_progressbar_page_info_label">
- <location filename="../progressbarpage.cpp" line="85"/>
+ <location filename="../progressbarpage.cpp" line="83"/>
<source>A Progress Bar can indicate an ongoing process with either known or unknown durations.</source>
<translation>شريط تقدم يمكن أن تشير إلى عملية مستمرة سواء مع المدد معروف أو غير معروف.</translation>
</message>
<message id="xx_progressindicator_unknown_duration_bar">
- <location filename="../progressbarpage.cpp" line="89"/>
+ <location filename="../progressbarpage.cpp" line="87"/>
<source>Installing CoolApp</source>
<translation>المدة غير معروفة -- بار</translation>
</message>
<message id="xx_progressindicator_known_duration_bar">
- <location filename="../progressbarpage.cpp" line="87"/>
+ <location filename="../progressbarpage.cpp" line="85"/>
<source>Downloading nicepic.jpg</source>
<translation>يعرف المدة -- بار</translation>
</message>
<message id="xx_toolbar_page_example1">
- <location filename="../toolbarpage.cpp" line="168"/>
+ <location filename="../toolbarpage.cpp" line="176"/>
<source>Example 1</source>
<translation>المثال 1</translation>
</message>
<message id="xx_toolbar_page_example2">
- <location filename="../toolbarpage.cpp" line="174"/>
+ <location filename="../toolbarpage.cpp" line="182"/>
<source>Example 2</source>
<translation>المثال 2</translation>
</message>
<message id="xx_toolbar_page_defaultview">
- <location filename="../toolbarpage.cpp" line="180"/>
+ <location filename="../toolbarpage.cpp" line="188"/>
<source>Default View</source>
<translation>عرض افتراضي</translation>
</message>
<message id="xx_toolbar_page_tabview">
- <location filename="../toolbarpage.cpp" line="186"/>
+ <location filename="../toolbarpage.cpp" line="194"/>
<source>Tab View</source>
<translation>عرض التبويب</translation>
</message>
<message id="xx_toolbar_page_title">
- <location filename="../toolbarpage.cpp" line="208"/>
+ <location filename="../toolbarpage.cpp" line="216"/>
<source>ToolBar</source>
<translation>أداة بار</translation>
</message>
<message id="xx_toolbar_page_info">
- <location filename="../toolbarpage.cpp" line="215"/>
+ <location filename="../toolbarpage.cpp" line="223"/>
<source>&lt;b&gt;Toolbar&lt;/b&gt; acts as a container for actions. Depending upon the view attached, it either acts as a tab bar or is a container for buttons and text input field. &lt;ul&gt;&lt;li&gt;Click Menu to explore the example&lt;/li&gt;&lt;/ul&gt;</source>
<translation>شريط الأدوات هو حاوية والتي يمكن أن تحتوي على ما يصل إلى 4 دلالات أزرار (انقر فوق القائمة → مثال 1) ، أو إدخال نص الميدان مع ما يصل الى 2 دلالات أزرار (انقر فوق القائمة → مثال 2). أنه يحتوي على الإجراءات التي تكون ذات صلة وجهة النظر ولكن لا علاقة لها أي بند من البنود الفردية عرضها مباشرة داخل منطقة محتوى.</translation>
</message>
<message id="xx_objectmenu_page_title">
- <location filename="../objectmenupage.cpp" line="155"/>
+ <location filename="../objectmenupage.cpp" line="154"/>
<source>Object menu</source>
<translation>كائن القائمة</translation>
</message>
<message id="xx_objectmenu_page_info_label">
- <location filename="../objectmenupage.cpp" line="167"/>
+ <location filename="../objectmenupage.cpp" line="166"/>
<source>Object Menu is a popup menu of commands opened by long tapping an element. It is used for providing shortcuts to functions related to that particular element.
The primary (single short tap) action of the element should not be duplicated in the Object Menu.</source>
@@ -490,57 +665,63 @@ The primary (single short tap) action of the element should not be duplicated in
وينبغي في المقام الأول (واحد قصير الصنبور) العمل عنصر لا يكون لها مثيل في القائمة كائن.</translation>
</message>
<message id="xx_objectmenu_page_container_friends">
- <location filename="../objectmenupage.cpp" line="170"/>
+ <location filename="../objectmenupage.cpp" line="169"/>
<source>Friends</source>
<translation>أصدقاء</translation>
</message>
<message id="xx_objectmenu_page_container_albums">
- <location filename="../objectmenupage.cpp" line="172"/>
+ <location filename="../objectmenupage.cpp" line="171"/>
<source>Favorite Albums</source>
<translation>المفضلة البومات</translation>
</message>
<message id="xx_displaymodes_navbarcombo">
- <location filename="../navigationbarpage.cpp" line="60"/>
+ <location filename="../displaymodespage.cpp" line="59"/>
<source>Navigation Bar</source>
<translation>الملاحة بار</translation>
</message>
<message id="xx_displaymodes_escapebtncombo">
- <location filename="../navigationbarpage.cpp" line="68"/>
+ <location filename="../displaymodespage.cpp" line="67"/>
<source>Escape Button</source>
<translation>الهروب زر</translation>
</message>
<message id="xx_displaymodes_homebtncombo">
- <location filename="../navigationbarpage.cpp" line="76"/>
+ <location filename="../displaymodespage.cpp" line="75"/>
<source>Home Button</source>
<translation>زر الصفحة الرئيسية</translation>
</message>
<message id="xx_displaymodes_page_title">
- <location filename="../navigationbarpage.cpp" line="125"/>
- <source>Display Modes and Full Screen</source>
- <translation>الملاحة بار</translation>
+ <location filename="../displaymodespage.cpp" line="143"/>
+ <source>Display Modes</source>
+ <oldsource>Display Modes and Full Screen</oldsource>
+ <translation>أنماط العرض وملء الشاشة</translation>
</message>
<message id="xx_displaymodes_display_mode">
- <location filename="../navigationbarpage.cpp" line="129"/>
+ <location filename="../displaymodespage.cpp" line="147"/>
<source>Components&apos; display mode:</source>
<translation>الصفحة تطبيق لوضع العرض :</translation>
</message>
- <message id="xx_displaymodes_escape_mode_label">
- <location filename="../navigationbarpage.cpp" line="131"/>
- <source>Escape Button mode:</source>
- <translation>وضع زر الهروب :</translation>
+ <message id="xx_displaymodes_window_state">
+ <location filename="../displaymodespage.cpp" line="150"/>
+ <source>Window state:</source>
+ <translation>نافذة الدولة :</translation>
+ </message>
+ <message id="xx_displaymodes_full_screen">
+ <location filename="../displaymodespage.cpp" line="153"/>
+ <source>Full Screen</source>
+ <translation>كامل الشاشة</translation>
</message>
<message id="xx_displaymode_show">
- <location filename="../navigationbarpage.cpp" line="162"/>
+ <location filename="../displaymodespage.cpp" line="166"/>
<source>Show</source>
<translation>يظهر</translation>
</message>
<message id="xx_displaymode_autohide">
- <location filename="../navigationbarpage.cpp" line="164"/>
+ <location filename="../displaymodespage.cpp" line="168"/>
<source>Auto Hide</source>
<translation>السيارات إخفاء</translation>
</message>
<message id="xx_displaymode_hide">
- <location filename="../navigationbarpage.cpp" line="166"/>
+ <location filename="../displaymodespage.cpp" line="170"/>
<source>Hide</source>
<translation>إخفاء</translation>
</message>
@@ -695,89 +876,49 @@ The primary (single short tap) action of the element should not be duplicated in
<source>Font test:</source>
<translation>اختبار الخط :</translation>
</message>
- <message id="xx_template_page_views_dialogs">
- <location filename="../templatepage.cpp" line="47"/>
- <source>Views and Dialogs</source>
- <translation>آراء ومربعات</translation>
- </message>
- <message id="xx_template_page_contains_applets">
- <location filename="../templatepage.cpp" line="49"/>
- <source>Contains and Applets</source>
- <translation>الحاويات وبريمجات</translation>
- </message>
- <message id="xx_template_page_layouts_visuals">
- <location filename="../templatepage.cpp" line="51"/>
- <source>Layouts and Visuals</source>
- <translation>تصاميم وصور</translation>
- </message>
- <message id="xx_template_page_buttons">
- <location filename="../templatepage.cpp" line="53"/>
- <source>Buttons</source>
- <translation>أزرار</translation>
- </message>
- <message id="xx_template_page_indicators_notifications">
- <location filename="../templatepage.cpp" line="55"/>
- <source>Indicators and Notifications</source>
- <translation>المؤشرات والإشعارات</translation>
- </message>
- <message id="xx_template_page_lists_grids_menus">
- <location filename="../templatepage.cpp" line="57"/>
- <source>Lists, Grids and Menus</source>
- <translation>القوائم ، والشبكات والقوائم</translation>
- </message>
- <message id="xx_template_page_user_input">
- <location filename="../templatepage.cpp" line="59"/>
- <source>User input</source>
- <translation>مستخدم الإدخال</translation>
- </message>
- <message id="xx_template_page_input_feedback">
- <location filename="../templatepage.cpp" line="61"/>
- <source>Input Feedback</source>
- <translation>مدخلات اقتراحات</translation>
- </message>
<message id="xx_image_page_info">
- <location filename="../imagepage.cpp" line="152"/>
+ <location filename="../imagepage.cpp" line="160"/>
<source>Image allows the placement of images onto the UI. Images are generally non-interactive elements. Various single and multiple touch interactions can be added to an Image component if desired. As an example, pinch gesture can be used in this page to zoom the image.</source>
<translation>الصورة يسمح موضع الصور على واجهة المستخدم. الصور هي عموما غير عناصر تفاعلية. يمكن متنوع واحدة ومتعددة اللمس التفاعلات يمكن ان تضاف الى عنصر صورة إذا رغبت.</translation>
</message>
<message id="xx_sample template">
- <location filename="../templatepage.cpp" line="125"/>
+ <location filename="../templatepage.cpp" line="107"/>
<source>Sample template</source>
<translation>قالب نموذج</translation>
</message>
<message id="xx_template_page_title">
- <location filename="../templatepage.cpp" line="119"/>
+ <location filename="../templatepage.cpp" line="101"/>
<source>Template</source>
<translation>القالب</translation>
</message>
<message id="xx_textentry_completion_text">
- <location filename="../textentrypage.cpp" line="522"/>
+ <location filename="../textentrypage.cpp" line="614"/>
<source>Email suggestion text:</source>
<translation>البريد الإلكتروني نص الاقتراح :</translation>
</message>
<message id="xx_combobox_page_info">
- <location filename="../comboboxpage.cpp" line="120"/>
+ <location filename="../comboboxpage.cpp" line="121"/>
<source>The MComboBox widget is a combined button and popup list. It is very similar to QComboBox, but does not allow editing the text.</source>
<oldsource>The DuiComboBox widget is a combined button and popup list. It is very similar to QComboBox, but does not allow editing the text.</oldsource>
<translation>القطعة MComboBox هو زر مجتمعة وقائمة منبثقة. انها تشبه الى حد بعيد QComboBox ، ولكن لا يسمح بتحرير النص.</translation>
</message>
<message id="xx_combobox_title">
- <location filename="../comboboxpage.cpp" line="108"/>
+ <location filename="../comboboxpage.cpp" line="109"/>
<source>ComboBox</source>
<translation>مربع تحرير وسرد</translation>
</message>
<message id="xx_tooltip_entry8">
- <location filename="../textentrypage.cpp" line="500"/>
+ <location filename="../textentrypage.cpp" line="592"/>
<source>Provides email address suggestions</source>
<translation>يقدم اقتراحات عنوان البريد الإلكتروني</translation>
</message>
<message id="xx_checkbox_page_title">
- <location filename="../checkboxpage.cpp" line="76"/>
+ <location filename="../checkboxpage.cpp" line="80"/>
<source>Checkbox</source>
<translation>مربع</translation>
</message>
<message id="xx_checkbox_page_info_label">
- <location filename="../checkboxpage.cpp" line="85"/>
+ <location filename="../checkboxpage.cpp" line="89"/>
<source>The Checkbox is a variant of Button that allows users to set the state of variable or setting which has two values, On and Off.
Checkbox essentially does the same thing as the Switch button, so please consider using a Switch instead.</source>
@@ -786,19 +927,17 @@ Checkbox essentially does the same thing as the Switch button, so please conside
الاختيار أساسا يفعل الشيء نفسه على زر التبديل ، لذا يرجى النظر في استخدام التبديل بدلا من ذلك.</translation>
</message>
<message id="xx_checkbox_page_checkbox_label">
- <location filename="../checkboxpage.cpp" line="88"/>
- <source>I have read and understood the
-instructions.</source>
- <translation>لقد قرأت وفهمت
-تعليمات.</translation>
+ <location filename="../checkboxpage.cpp" line="92"/>
+ <source>I have read and understood the instructions.</source>
+ <translation>لقد قرأت وفهمت التعليمات.</translation>
</message>
<message id="xx_icon_button_page_title">
- <location filename="../iconbuttonpage.cpp" line="82"/>
+ <location filename="../iconbuttonpage.cpp" line="81"/>
<source>Icon Button</source>
<translation>رمز زر</translation>
</message>
<message id="xx_icon_button_page_info_label">
- <location filename="../iconbuttonpage.cpp" line="90"/>
+ <location filename="../iconbuttonpage.cpp" line="89"/>
<source>Icon Buttons have an icon and can have a text label. Icon button differs from push button by its visual presentation: it does not have button-style edges like a Push Button does.
Icon Buttons are used in e.g. Toolbars.</source>
@@ -807,7 +946,7 @@ instructions.</source>
رمز أزرار تستخدم في مثل أشرطة الأدوات.</translation>
</message>
<message id="xx_icon_button_page_icon_button2">
- <location filename="../iconbuttonpage.cpp" line="92"/>
+ <location filename="../iconbuttonpage.cpp" line="91"/>
<source>Lorem ipsum</source>
<translation>أبجد هوز</translation>
</message>
@@ -843,32 +982,32 @@ sit amet</source>
الجلوس امات</translation>
</message>
<message id="xx_spinner_page_application_main_area">
- <location filename="../spinnerpage.cpp" line="66"/>
+ <location filename="../spinnerpage.cpp" line="68"/>
<source>In application main area</source>
- <translation type="unfinished"></translation>
+ <translation>في التطبيق المجال الرئيسي</translation>
</message>
<message id="xx_spinner_page_container_header">
- <location filename="../spinnerpage.cpp" line="72"/>
+ <location filename="../spinnerpage.cpp" line="74"/>
<source>In container header</source>
<translation>في حاوية الرأس</translation>
</message>
<message id="xx_spinner_page_menu">
- <location filename="../spinnerpage.cpp" line="78"/>
- <source>In view menu</source>
- <translation>في عرض القائمة</translation>
+ <location filename="../spinnerpage.cpp" line="80"/>
+ <source>In application menu</source>
+ <translation>في تطبيق القائمة</translation>
</message>
<message id="xx_spinner_page_dialog">
- <location filename="../spinnerpage.cpp" line="84"/>
+ <location filename="../spinnerpage.cpp" line="86"/>
<source>In dialog</source>
<translation>في عرض القائمة</translation>
</message>
<message id="xx_spinner_page_title">
- <location filename="../spinnerpage.cpp" line="97"/>
+ <location filename="../spinnerpage.cpp" line="99"/>
<source>Spinner</source>
<translation>غزل</translation>
</message>
<message id="xx_spinner_page_info_label">
- <location filename="../spinnerpage.cpp" line="106"/>
+ <location filename="../spinnerpage.cpp" line="108"/>
<source>Spinner is used to indicate that a progress is ongoing and the duration is unknown.
Spinners can also be used in situations when duration is known, but available space on screen does not permit using a Progress bar.
@@ -880,52 +1019,43 @@ See the menu for examples of different use cases.</source>
انظر القائمة للحصول على أمثلة لحالات استخدام مختلفة.</translation>
</message>
- <message id="xx_spinner_page_email_header">
- <location filename="../spinnerpage.cpp" line="116"/>
- <source>From: John Doe
-Date: Today
-Subject: This is funny stuff!</source>
- <translation>From: فلان الفلاني
-Date: اليوم
-Subject: هذه هي الاشياء مضحك!</translation>
- </message>
<message id="xx_spinner_page_application_area_description">
- <location filename="../spinnerpage.cpp" line="129"/>
+ <location filename="../spinnerpage.cpp" line="118"/>
<source>Spinner can be used while content is loading.</source>
- <translation type="unfinished"></translation>
+ <translation>ويمكن استخدام سبينر بينما يتم تحميل المحتوى.</translation>
</message>
<message id="xx_spinner_page_container_title">
- <location filename="../spinnerpage.cpp" line="142"/>
+ <location filename="../spinnerpage.cpp" line="151"/>
<source>Online albums</source>
<translation>الألبومات على الانترنت</translation>
</message>
<message id="xx_spinner_page_container_header_description">
- <location filename="../spinnerpage.cpp" line="151"/>
+ <location filename="../spinnerpage.cpp" line="160"/>
<source>Spinner can be used in container header to indicate that the items inside the container are being updated, but visible items can be interacted with.</source>
<translation>سبينر يمكن أن تستخدم في رأس حاوية للإشارة إلى أن العناصر الموجودة داخل الحاوية يتم تحديثها ، ولكن عناصر مرئية يمكن تفاعلت مع.</translation>
</message>
<message id="xx_spinner_page_application_menu_description">
- <location filename="../spinnerpage.cpp" line="195"/>
+ <location filename="../spinnerpage.cpp" line="204"/>
<source>Spinner in the application menu area indicates that the whole view is pending for update.</source>
<translation>الدوار في القائمة تطبيق المجال يشير إلى أن وجهة النظر كلها معلقة على التحديث.</translation>
</message>
<message id="xx_spinner_page_dialog_header_description">
- <location filename="../spinnerpage.cpp" line="209"/>
+ <location filename="../spinnerpage.cpp" line="218"/>
<source>Spinner can be placed in dialog header to indicate changing content.</source>
<translation>غزل يمكن وضعها في رأس الحوار تشير إلى تغيير المحتوى.</translation>
</message>
<message id="xx_spinner_page_dialog_header">
- <location filename="../spinnerpage.cpp" line="230"/>
+ <location filename="../spinnerpage.cpp" line="239"/>
<source>Select Internet connection</source>
<translation>حدد اتصال بالإنترنت</translation>
</message>
<message id="xx_switch_page_title">
- <location filename="../switchpage.cpp" line="128"/>
+ <location filename="../switchpage.cpp" line="127"/>
<source>Switch</source>
<translation>تبديل</translation>
</message>
<message id="xx_switch_page_info_label">
- <location filename="../switchpage.cpp" line="138"/>
+ <location filename="../switchpage.cpp" line="137"/>
<source>A Switch button differs from both a push button and an icon button visually. It looks like a switch, communicating that pressing this button will not go to another view or will not perform any other actions except to toggle the state of the button.
Switches are used to indicate e.g. settings values</source>
@@ -934,37 +1064,37 @@ Switches are used to indicate e.g. settings values</source>
مفاتيح تستخدم للدلالة على سبيل المثال ضبط القيم</translation>
</message>
<message id="xx_switch_page_switch1">
- <location filename="../switchpage.cpp" line="141"/>
+ <location filename="../switchpage.cpp" line="140"/>
<source>Headlights</source>
<translation>المصابيح الأمامية</translation>
</message>
<message id="xx_switch_page_switch2">
- <location filename="../switchpage.cpp" line="143"/>
+ <location filename="../switchpage.cpp" line="142"/>
<source>Autopilot</source>
<translation>الطيار الآلي</translation>
</message>
<message id="xx_switch_page_switch3">
- <location filename="../switchpage.cpp" line="145"/>
+ <location filename="../switchpage.cpp" line="144"/>
<source>Warp Drive</source>
<translation>محرك الإعوجاج</translation>
</message>
<message id="xx_switch_page_switch4">
- <location filename="../switchpage.cpp" line="147"/>
+ <location filename="../switchpage.cpp" line="146"/>
<source>Reactor Shields</source>
<translation>مفاعل شيلدز</translation>
</message>
<message id="xx_switch_page_switch5">
- <location filename="../switchpage.cpp" line="149"/>
+ <location filename="../switchpage.cpp" line="148"/>
<source>Infinite Improbability Drive</source>
<translation>لانهائي محرك اللا إحتمالية</translation>
</message>
<message id="xx_slider_page_title">
- <location filename="../sliderpage.cpp" line="169"/>
+ <location filename="../sliderpage.cpp" line="168"/>
<source>Sliders</source>
<translation>المتزلجون</translation>
</message>
<message id="xx_slider_page_info_label">
- <location filename="../sliderpage.cpp" line="177"/>
+ <location filename="../sliderpage.cpp" line="176"/>
<source>Slider is used for continuous set of values, among which user can choose one value.
Seekbar is a special type of Slider used for displaying playback status for multimedia content.</source>
@@ -973,33 +1103,33 @@ Seekbar is a special type of Slider used for displaying playback status for mult
شريط البحث هو نوع خاص من المتزلج تستخدم لتشغيل مركز لعرض محتوى الوسائط المتعددة.</translation>
</message>
<message id="xx_slider_personal_data_label">
- <location filename="../sliderpage.cpp" line="180"/>
+ <location filename="../sliderpage.cpp" line="179"/>
<source>Personal data</source>
<translation>البيانات الشخصية</translation>
</message>
<message id="xx_slider_age_label">
- <location filename="../sliderpage.cpp" line="184"/>
+ <location filename="../sliderpage.cpp" line="183"/>
<source>Please select your age:œ!! Please select your age:œ!! Please select your age:œ!! Age:</source>
<oldsource>Please select your age:</oldsource>
<translation>من فضلك اختر العمر :</translation>
</message>
<message id="xx_slider_player_label">
- <location filename="../sliderpage.cpp" line="197"/>
+ <location filename="../sliderpage.cpp" line="196"/>
<source>Player:</source>
<translation>لاعب :</translation>
</message>
<message id="xx_slider_brightness_label">
- <location filename="../sliderpage.cpp" line="217"/>
+ <location filename="../sliderpage.cpp" line="216"/>
<source>Brightness:</source>
<translation>سطوع :</translation>
</message>
<message id="xx_input_feedback_page_title">
- <location filename="../feedbackpage.cpp" line="90"/>
+ <location filename="../feedbackpage.cpp" line="89"/>
<source>Input Feedback</source>
<translation>مدخلات اقتراحات</translation>
</message>
<message id="xx_input_feedback_page_info_label">
- <location filename="../feedbackpage.cpp" line="100"/>
+ <location filename="../feedbackpage.cpp" line="99"/>
<source>This page contains buttons with custom input feedbacks. Any MWidget can have input feedback for press and release events. Input feedback can be a sound effect and/or a haptic effect (piezo, vibra) depending on the product.
Input feedbacks can be easily configured for different purposes using the theming system.</source>
@@ -1008,54 +1138,77 @@ Input feedbacks can be easily configured for different purposes using the themin
الاحصائيات الإدخال يمكن بسهولة تهيئتها لأغراض مختلفة باستخدام نظام الموضوع.</translation>
</message>
<message id="xx_input_feedback_page_button1">
- <location filename="../feedbackpage.cpp" line="102"/>
+ <location filename="../feedbackpage.cpp" line="101"/>
<source>Default</source>
<translation>افتراضي</translation>
</message>
<message id="xx_input_feedback_page_button2">
- <location filename="../feedbackpage.cpp" line="104"/>
+ <location filename="../feedbackpage.cpp" line="103"/>
<source>Different</source>
<translation>مختلفة</translation>
</message>
<message id="xx_input_feedback_page_button3">
- <location filename="../feedbackpage.cpp" line="106"/>
+ <location filename="../feedbackpage.cpp" line="105"/>
<source>Sluggish</source>
<translation>ركود</translation>
</message>
<message id="xx_input_feedback_page_button4">
- <location filename="../feedbackpage.cpp" line="108"/>
+ <location filename="../feedbackpage.cpp" line="107"/>
<source>Babytoy</source>
<translation>لعبة طفل</translation>
</message>
<message id="xx_input_feedback_page_button5">
- <location filename="../feedbackpage.cpp" line="110"/>
+ <location filename="../feedbackpage.cpp" line="109"/>
<source>Space</source>
<translation>الفضاء</translation>
</message>
<message id="xx_input_feedback_page_button6">
- <location filename="../feedbackpage.cpp" line="112"/>
+ <location filename="../feedbackpage.cpp" line="111"/>
<source>Silent</source>
<translation>صامت</translation>
</message>
+ <message id="xx_gridpage_configuration">
+ <location filename="../mgridpage.cpp" line="193"/>
+ <source>Configuration</source>
+ <translation>التكوين</translation>
+ </message>
<message id="xx_gridpage_title">
- <location filename="../mgridpage.cpp" line="96"/>
+ <location filename="../mgridpage.cpp" line="204"/>
<source>Grid page</source>
<translation>شبكة الصفحة</translation>
</message>
- <message id="xx_video_container_page_title">
- <location filename="../videocontainerpage.cpp" line="372"/>
- <source>Video container</source>
- <translation>الفيديو الحاويات</translation>
+ <message id="xx_gridpage_set_columns">
+ <location filename="../mgridpage.cpp" line="290"/>
+ <source>Set columns</source>
+ <translation>تعيين الأعمدة</translation>
</message>
- <message id="xx_video_container_page_info_label">
- <location filename="../videocontainerpage.cpp" line="377"/>
- <source>Tap video thumbnail to play/pause it. Tap and hold thumbnail to open video in it&apos;s native size.</source>
- <translation>اضغط على الصورة المصغرة للعب الفيديو / وقفة عليه. اضغط على الصورة المصغرة ، وعقد لفتح الفيديو في حجمه الأصلي.</translation>
+ <message id="xx_gridpage_landscape">
+ <location filename="../mgridpage.cpp" line="316"/>
+ <source>Landscape</source>
+ <translation>المناظر الطبيعية</translation>
</message>
- <message id="xx_video_container_header_title">
- <location filename="../videocontainerpage.cpp" line="380"/>
- <source>Gallery</source>
- <translation>معرض</translation>
+ <message id="xx_gridpage_portrait">
+ <location filename="../mgridpage.cpp" line="321"/>
+ <source>Portrait</source>
+ <translation>صورة</translation>
+ </message>
+ <message id="xx_bubblepage_title">
+ <location filename="../bubblepage.cpp" line="143"/>
+ <source>Speech Bubble</source>
+ <translation>كلمة فقاعة</translation>
+ </message>
+ <message id="xx_wg_bubblepage_linkactivated">
+ <location filename="../bubblepage.cpp" line="156"/>
+ <source>Link activated</source>
+ <translation>تنشيط وصلة</translation>
+ </message>
+ <message id="xx_content_items_subtitle">
+ <location filename="../contentitemspage.cpp" line="63"/>
+ <location filename="../contentitemspage.cpp" line="71"/>
+ <location filename="../contentitemspage.cpp" line="81"/>
+ <location filename="../contentitemspage.cpp" line="90"/>
+ <source>Subtitle</source>
+ <translation>عنوان فرعي</translation>
</message>
</context>
</TS>
diff --git a/demos/widgetsgallery/translations/widgetsgallery_de.ts b/demos/widgetsgallery/translations/widgetsgallery_de.ts
index 74840eaf..7e1d4488 100644
--- a/demos/widgetsgallery/translations/widgetsgallery_de.ts
+++ b/demos/widgetsgallery/translations/widgetsgallery_de.ts
@@ -3,53 +3,208 @@
<TS version="2.0" language="de">
<context>
<name></name>
+ <message id="xx_wg_categories_application_view">
+ <location filename="../mainpage.cpp" line="86"/>
+ <source>Application View</source>
+ <translation>Applikationsansicht</translation>
+ </message>
+ <message id="xx_wg_application_view_view_menu">
+ <location filename="../mainpage.cpp" line="88"/>
+ <source>Application Menu</source>
+ <translation>Applikationsmenü</translation>
+ </message>
+ <message id="xx_wg_application_view_display_modes">
+ <location filename="../mainpage.cpp" line="90"/>
+ <source>Display Modes</source>
+ <translation>Anzeigemodi</translation>
+ </message>
+ <message id="xx_wg_application_view_toolbar_incl_tab_bar">
+ <location filename="../mainpage.cpp" line="92"/>
+ <source>Toolbar (including Tab Bar)</source>
+ <translation>Werkzeugbalken (mit Tabbalken)</translation>
+ </message>
+ <message id="xx_wg_categories_simple_widgets">
+ <location filename="../mainpage.cpp" line="96"/>
+ <source>Simple Widgets</source>
+ <translation>Einfache Widgets</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_labels">
+ <location filename="../mainpage.cpp" line="98"/>
+ <source>Labels</source>
+ <translation>Label</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_image">
+ <location filename="../mainpage.cpp" line="100"/>
+ <source>Image</source>
+ <translation>Bild</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_progress_bar">
+ <location filename="../mainpage.cpp" line="102"/>
+ <source>Progress Bar</source>
+ <translation>Fortschrittsbalken</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_container">
+ <location filename="../mainpage.cpp" line="104"/>
+ <source>Container</source>
+ <translation>Behälter</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_spinner">
+ <location filename="../mainpage.cpp" line="106"/>
+ <source>Spinner</source>
+ <translation>Wirbelräder</translation>
+ </message>
+ <message id="xx_wg_categories_buttons">
+ <location filename="../mainpage.cpp" line="109"/>
+ <source>Buttons</source>
+ <translation>Knöpfe</translation>
+ </message>
+ <message id="xx_wg_buttons_push_button">
+ <location filename="../mainpage.cpp" line="111"/>
+ <source>Push Button</source>
+ <translation>Druckknopf</translation>
+ </message>
+ <message id="xx_wg_buttons_icon_button">
+ <location filename="../mainpage.cpp" line="113"/>
+ <source>Icon Button</source>
+ <translation>Pictogramm Knopf</translation>
+ </message>
+ <message id="xx_wg_buttons_switch">
+ <location filename="../mainpage.cpp" line="115"/>
+ <source>Switch</source>
+ <translation>Schalthebel</translation>
+ </message>
+ <message id="xx_wg_buttons_checkbox">
+ <location filename="../mainpage.cpp" line="117"/>
+ <source>Checkbox</source>
+ <translation>Kontrollkästchen</translation>
+ </message>
+ <message id="xx_wg_categories_dialogs_and_banners">
+ <location filename="../mainpage.cpp" line="120"/>
+ <source>Dialogs and Banners</source>
+ <translation>Dialoge und Banner</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_single_selection_dialog">
+ <location filename="../mainpage.cpp" line="122"/>
+ <source>Single Selection Dialog</source>
+ <translation>Einfacher Auswahldialog</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_multiple_selection_dialog">
+ <location filename="../mainpage.cpp" line="124"/>
+ <source>Multiple Selection Dialog</source>
+ <translation>Mehrfacher Auswahldialog</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_query_dialog">
+ <location filename="../mainpage.cpp" line="126"/>
+ <source>Query Dialog</source>
+ <translation>Fragedialog</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_banner">
+ <location filename="../mainpage.cpp" line="128"/>
+ <source>Banner</source>
+ <translation>Banner</translation>
+ </message>
+ <message id="xx_wg_categories_lists_grids_and_popups">
+ <location filename="../mainpage.cpp" line="131"/>
+ <source>Lists, Grids and Popups</source>
+ <translation>Listen, Gitter und Popups</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_list">
+ <location filename="../mainpage.cpp" line="133"/>
+ <source>List</source>
+ <translation>Liste</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_grid">
+ <location filename="../mainpage.cpp" line="135"/>
+ <source>Grid</source>
+ <translation>Gitter</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_object_menu">
+ <location filename="../mainpage.cpp" line="137"/>
+ <source>Object Menu</source>
+ <translation>Objektmenü</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_combobox">
+ <location filename="../mainpage.cpp" line="139"/>
+ <source>ComboBox</source>
+ <translation>Combobox</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_contentitems">
+ <location filename="../mainpage.cpp" line="141"/>
+ <source>ContentItems</source>
+ <translation>Inhaltselement</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_bubble">
+ <location filename="../mainpage.cpp" line="143"/>
+ <source>Speech bubble</source>
+ <translation>Sprechblase</translation>
+ </message>
+ <message id="xx_wg_categories_user_input">
+ <location filename="../mainpage.cpp" line="146"/>
+ <source>User Input</source>
+ <translation>Usereingaben</translation>
+ </message>
+ <message id="xx_wg_user_input_text_entries">
+ <location filename="../mainpage.cpp" line="148"/>
+ <source>Text Entries</source>
+ <translation>Texteinträge</translation>
+ </message>
+ <message id="xx_wg_user_input_slider">
+ <location filename="../mainpage.cpp" line="150"/>
+ <source>Slider</source>
+ <translation>Schieberegler</translation>
+ </message>
+ <message id="xx_wg_user_input_input_feedback">
+ <location filename="../mainpage.cpp" line="152"/>
+ <source>Input Feedback</source>
+ <translation>Eingaberückmeldung</translation>
+ </message>
<message id="xx_application_title">
- <location filename="../listpage.cpp" line="187"/>
+ <location filename="../mainpage.cpp" line="330"/>
<source>Widgets Gallery</source>
<translation>Dingsbums Galerie</translation>
</message>
<message id="xx_apporientation_auto">
- <location filename="../listpage.cpp" line="456"/>
+ <location filename="../mainpage.cpp" line="546"/>
<source>Automatic</source>
<translation>Automatisch</translation>
</message>
<message id="xx_apporientation_portrait">
- <location filename="../listpage.cpp" line="464"/>
+ <location filename="../mainpage.cpp" line="554"/>
<source>Portrait</source>
<translation>Hochformat</translation>
</message>
<message id="xx_apporientation_landscape">
- <location filename="../listpage.cpp" line="472"/>
+ <location filename="../mainpage.cpp" line="562"/>
<source>Landscape</source>
<translation>Querformat</translation>
</message>
<message id="xx_apporientation_angle0">
- <location filename="../listpage.cpp" line="480"/>
+ <location filename="../mainpage.cpp" line="570"/>
<source>0 degrees</source>
<translation>0 Grad</translation>
</message>
<message id="xx_apporientation_angle90">
- <location filename="../listpage.cpp" line="488"/>
+ <location filename="../mainpage.cpp" line="578"/>
<source>90 degrees clockwise</source>
<translation>90 Grad im Uhrzeigersinn</translation>
</message>
<message id="xx_apporientation_angle180">
- <location filename="../listpage.cpp" line="496"/>
+ <location filename="../mainpage.cpp" line="586"/>
<source>180 degrees clockwise</source>
<translation>180 Grad im Uhrzeigersinn</translation>
</message>
<message id="xx_apporientation_angle270">
- <location filename="../listpage.cpp" line="504"/>
+ <location filename="../mainpage.cpp" line="594"/>
<source>270 degrees clockwise</source>
<translation>270 Grad im Uhrzeigersinn</translation>
</message>
<message id="xx_label_page_title">
- <location filename="../labelpage.cpp" line="119"/>
+ <location filename="../labelpage.cpp" line="108"/>
<source>Labels</source>
<translation>Labels</translation>
</message>
<message id="xx_label_page_info_label">
- <location filename="../labelpage.cpp" line="129"/>
+ <location filename="../labelpage.cpp" line="118"/>
<source>Simple Label is used mainly by other components, and it does not support any formatting or interaction.
Rich Label supports multiple lines, HTML formatting and highlighting for links.
@@ -58,72 +213,107 @@ All Labels can be aligned left, right or center and will be automatically trunca
<translation>Das einfache Label wird hauptsächlicn von anderen Komponenten benutzt, es unterstützt keinerlei Formattierung und keinerlei Interaktion mit dem Benutzer. Das schicke Label unterstützt mehrere Zeilen, HTML-Formattierung und Hervorhebung von Querverweisen. Alle Labels können rechtsbündig oder linksbündig ausgerichtet werden oder auch zentriert werden. Wenn der Text nicht in die vorgegebene Fläche passt, wird er automatisch abgeschnitten</translation>
</message>
<message id="xx_simple_label">
- <location filename="../labelpage.cpp" line="131"/>
+ <location filename="../labelpage.cpp" line="120"/>
<source>Simple Label</source>
<translation>Einfaches Label</translation>
</message>
<message id="xx_rich_label">
- <location filename="../labelpage.cpp" line="134"/>
+ <location filename="../labelpage.cpp" line="123"/>
<source>Rich Label &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, http://www.nokia.com, +358401234567, fors.fagerstrom@email.com</source>
<translation>Schickes Label &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, http://www.nokia.com, +358401234567, fors.fagerstrom@email.com</translation>
</message>
+ <message id="xx_wg_multiple_selection_dialogs_page_question_dialog">
+ <location filename="../multipleselectiondialogspage.cpp" line="94"/>
+ <source>Question Dialog</source>
+ <translation>Fragedialog</translation>
+ </message>
<message id="xx_dialogs_and_notifications_question_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="88"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="118"/>
<source>Question Dialog Title</source>
<translation>Fragedialogtitel</translation>
</message>
<message id="xx_dialogs_and_notifications_question_dialog_content">
- <location filename="../dialogsandnotificationspage.cpp" line="92"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="122"/>
<source>Lorem ipsum dolor sit amet?</source>
<translation>Lorem ipsum dolor sit amet?</translation>
</message>
+ <message id="xx_wg_query_dialogs_page_entry_dialog">
+ <location filename="../querydialogspage.cpp" line="95"/>
+ <source>Entry Dialog</source>
+ <translation>Eingabedialog</translation>
+ </message>
+ <message id="xx_wg_query_dialogs_page_long_dialog">
+ <location filename="../querydialogspage.cpp" line="97"/>
+ <source>Long Dialog</source>
+ <translation>Langer Dialog</translation>
+ </message>
<message id="xx_dialogs_and_notifications_entry_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="101"/>
+ <location filename="../querydialogspage.cpp" line="124"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message id="xx_dialogs_and_notifications_entry_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="113"/>
+ <location filename="../querydialogspage.cpp" line="134"/>
<source>Please enter your name</source>
<translation>Bitten geben Sie Ihren Namen ein</translation>
</message>
<message id="xx_dialogs_and_notifications_long_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="128"/>
+ <location filename="../querydialogspage.cpp" line="150"/>
<source>Select printer</source>
<translation>Wählen Sie einen Drucker aus</translation>
</message>
+ <message id="xx_wg_single_selection_dialogs_page_stacked_dialogs">
+ <location filename="../singleselectiondialogspage.cpp" line="94"/>
+ <source>Stacked Dialogs</source>
+ <translation>Gestapelte Dialoge</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_system_modal_dialog">
+ <location filename="../singleselectiondialogspage.cpp" line="96"/>
+ <source>System Modal Dialog</source>
+ <translation>Fenster-modaler Dialog</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_dialog_with_progress_indicator">
+ <location filename="../singleselectiondialogspage.cpp" line="98"/>
+ <source>Dialog with Progress Indicator</source>
+ <translation>Dialog mit Fortschrittsanzeige</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_message_box">
+ <location filename="../singleselectiondialogspage.cpp" line="100"/>
+ <source>Message Box</source>
+ <translation>Meldungskasten</translation>
+ </message>
<message id="xx_dialogs_and_notifications_stacked_dialog_button">
- <location filename="../dialogsandnotificationspage.cpp" line="179"/>
+ <location filename="../singleselectiondialogspage.cpp" line="129"/>
<source>Click to spawn a nested dialog</source>
<translation>Klicke um einen verschachtelten Dialog zu öffnen</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="181"/>
+ <location filename="../singleselectiondialogspage.cpp" line="131"/>
<source>Stacked dialogs</source>
<translation>Gestapelte Dialoge</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_open_nested_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="194"/>
+ <location filename="../singleselectiondialogspage.cpp" line="145"/>
<source>Click to open a nested message box</source>
<translation>Klicke um eine verschachtelte Meldungsbox zu öffnen</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_nested_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="196"/>
+ <location filename="../singleselectiondialogspage.cpp" line="147"/>
<source>This is a nested dialog</source>
<translation>Dies ist ein verschachtelter Dialog</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_messagebox_text">
- <location filename="../dialogsandnotificationspage.cpp" line="209"/>
+ <location filename="../singleselectiondialogspage.cpp" line="160"/>
<source>I&apos;m a nested message box</source>
<translation>Ich bin eine verschachtelte Meldungsbox</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="219"/>
+ <location filename="../singleselectiondialogspage.cpp" line="171"/>
<source>System Modal Dialog</source>
<translation>Fenster-modaler Dialog</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="225"/>
+ <location filename="../singleselectiondialogspage.cpp" line="178"/>
<source>I&apos;m a window modal dialog.
There&apos;s no way around me!
Muwhahaha... [evil laugh]</source>
@@ -132,255 +322,234 @@ Es gibt keinen Weg um mich herum!
Hihihi...[böses Kichern]</translation>
</message>
<message id="xx_dialogs_and_notifications_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="242"/>
+ <location filename="../singleselectiondialogspage.cpp" line="197"/>
<source>Progress Indicator</source>
<translation>Fortschrittsanzeige</translation>
</message>
<message id="xx_dialogs_and_notifications_message_box_text">
- <location filename="../dialogsandnotificationspage.cpp" line="261"/>
+ <location filename="../singleselectiondialogspage.cpp" line="217"/>
<source>Hello World!</source>
<translation>Hallo Welt</translation>
</message>
+ <message id="xx_wg_banners_page_event_banner">
+ <location filename="../bannerspage.cpp" line="90"/>
+ <source>Event Banner</source>
+ <translation>Ereignis Banner</translation>
+ </message>
+ <message id="xx_wg_banners_page_information_banner">
+ <location filename="../bannerspage.cpp" line="92"/>
+ <source>Information Banner</source>
+ <translation>Informations Banner</translation>
+ </message>
+ <message id="xx_wg_banners_page_system_information_banner">
+ <location filename="../bannerspage.cpp" line="94"/>
+ <source>System Information Banner</source>
+ <translation>System Informations Banner</translation>
+ </message>
<message id="xx_dialogs_and_notifications_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="271"/>
+ <location filename="../bannerspage.cpp" line="121"/>
<source>&lt;b&gt;Ida Taipale&lt;/b&gt;&lt;br/&gt;Have you seen my dog?</source>
<translation>&lt;b&gt;Ida Taipale&lt;/b&gt;&lt;br/&gt;Hast Du meinen Hund gesehen?</translation>
</message>
<message id="xx_dialogs_and_notifications_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="284"/>
+ <location filename="../bannerspage.cpp" line="134"/>
<source>&lt;b&gt;Battery is running low&lt;/b&gt;</source>
<translation>&lt;b&gt;Die Batterie ist bald leer&lt;/b&gt;</translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="296"/>
+ <location filename="../bannerspage.cpp" line="145"/>
<source>&lt;b&gt;Incoming call&lt;/b&gt;</source>
<translation>&lt;b&gt;Ankommendes Gespräch&lt;/b&gt;</translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner_accept">
- <location filename="../dialogsandnotificationspage.cpp" line="298"/>
+ <location filename="../bannerspage.cpp" line="147"/>
<source>Accept</source>
<translation>Annnehmen</translation>
</message>
- <message id="xx_dialogs_and_notifications_title">
- <location filename="../dialogsandnotificationspage.cpp" line="365"/>
- <source>Dialogs and Notifications</source>
- <translation variants="yes">
- <lengthvariant>Dialoge und Meldungen</lengthvariant>
- <lengthvariant>Dialoge u. Meldungen</lengthvariant>
- <lengthvariant>Dialoge &amp; Meldungen</lengthvariant>
- <lengthvariant>Dialoge/Meldungen</lengthvariant>
- <lengthvariant>Dial./Meld.</lengthvariant>
- </translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="369"/>
- <source>Dialog examples</source>
- <translation>Dialog Beispiele</translation>
- </message>
- <message id="xx_dialogs_and_notifications_query_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="371"/>
- <source>Question Dialog</source>
- <translation>Abfrage Dialog</translation>
- </message>
- <message id="xx_dialogs_and_notifications_entry_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="373"/>
- <source>Entry Dialog</source>
- <translation>Eingabe Dialog</translation>
- </message>
- <message id="xx_dialogs_and_notifications_long_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="375"/>
- <source>A Long Dialog</source>
- <translation>Langer Dialog</translation>
- </message>
- <message id="xx_dialogs_and_notifications_stacked_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="378"/>
- <source>Stacked Dialogs</source>
- <translation>Gestapelte Dialoge</translation>
- </message>
- <message id="xx_dialogs_and_notifications_system_modal_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="381"/>
- <source>System Modal Dialog</source>
- <translation>Fenster-modaler Dialog</translation>
- </message>
- <message id="xx_dialogs_and_notifications_dialog_with_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="384"/>
- <source>Dialog With Progress Indicator</source>
- <translation>Dialog mit Fortschrittsanzeige</translation>
- </message>
- <message id="xx_dialogs_and_notifications_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="389"/>
- <source>Simple Message Box</source>
- <translation>Einfache DuiMessageBox</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_notifications">
- <location filename="../dialogsandnotificationspage.cpp" line="387"/>
- <source>Notifications and messages</source>
- <translation>Benachrichtigungen und Meldungen</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="391"/>
- <source>Event Banner</source>
- <translation>Ereignis Banner</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="393"/>
- <source>Information Banner</source>
- <translation>Informations Banner</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="395"/>
- <source>System Information Banner</source>
- <translation>System Informations Banner</translation>
- </message>
<message id="xx_Image">
- <location filename="../imagepage.cpp" line="123"/>
+ <location filename="../imagepage.cpp" line="131"/>
<source>Image</source>
<translation>Bild</translation>
</message>
<message id="xx_Image properties">
- <location filename="../imagepage.cpp" line="127"/>
+ <location filename="../imagepage.cpp" line="135"/>
<source>Image properties</source>
<translation>Bildeigenschaften</translation>
</message>
<message id="xx_image_operations">
- <location filename="../imagepage.cpp" line="145"/>
+ <location filename="../imagepage.cpp" line="153"/>
<source>Image operations</source>
<translation>Bildbearbeitung</translation>
</message>
<message id="xx_Zoom">
- <location filename="../imagepage.cpp" line="133"/>
+ <location filename="../imagepage.cpp" line="141"/>
<source>Zoom</source>
<translation>Zoom</translation>
</message>
<message id="xx_Transparency">
- <location filename="../imagepage.cpp" line="135"/>
+ <location filename="../imagepage.cpp" line="143"/>
<source>Transparency</source>
<translation>Transparenz</translation>
</message>
<message id="xx_Crop">
- <location filename="../imagepage.cpp" line="137"/>
+ <location filename="../imagepage.cpp" line="145"/>
<source>Crop</source>
<translation>Abschneiden</translation>
</message>
+ <message id="xx_listpage_list_remove">
+ <location filename="../mlistpage.cpp" line="547"/>
+ <source>Remove</source>
+ <translation>Entfernen</translation>
+ </message>
+ <message id="xx_listpage_list_edit">
+ <location filename="../mlistpage.cpp" line="553"/>
+ <source>Edit</source>
+ <translation>Editieren</translation>
+ </message>
<message id="xx_listpage_title">
- <location filename="../mlistpage.cpp" line="423"/>
+ <location filename="../mlistpage.cpp" line="573"/>
<source>List</source>
<translation>Liste</translation>
</message>
<message id="xx_textentry_title">
- <location filename="../textentrypage.cpp" line="490"/>
+ <location filename="../textentrypage.cpp" line="582"/>
<source>Text Entries</source>
<translation>Texteinträge</translation>
</message>
<message id="xx_textentry_free_text">
- <location filename="../textentrypage.cpp" line="506"/>
+ <location filename="../textentrypage.cpp" line="598"/>
<source>Free text:</source>
<translation>Freitext:</translation>
</message>
<message id="xx_textentry_free_text_masked">
- <location filename="../textentrypage.cpp" line="508"/>
+ <location filename="../textentrypage.cpp" line="600"/>
<source>Free text(masked):</source>
<translation>Freitext(maskiert):</translation>
</message>
<message id="xx_textentry_number_text">
- <location filename="../textentrypage.cpp" line="510"/>
+ <location filename="../textentrypage.cpp" line="602"/>
<source>Number text:</source>
<translation>Numerischer Text:</translation>
</message>
<message id="xx_textentry_phone_number">
- <location filename="../textentrypage.cpp" line="512"/>
+ <location filename="../textentrypage.cpp" line="604"/>
<source>Phone number:</source>
<translation>Telefonnummer:</translation>
</message>
<message id="xx_textentry_email_text">
- <location filename="../textentrypage.cpp" line="514"/>
+ <location filename="../textentrypage.cpp" line="606"/>
<source>Email text:</source>
<translation>E-Mail Text:</translation>
</message>
<message id="xx_textentry_url_text">
- <location filename="../textentrypage.cpp" line="516"/>
+ <location filename="../textentrypage.cpp" line="608"/>
<source>Url text:</source>
<translation>URL Text:</translation>
</message>
<message id="xx_textentry_multiline">
- <location filename="../textentrypage.cpp" line="518"/>
+ <location filename="../textentrypage.cpp" line="610"/>
<source>Multiline:</source>
<translation>Mehrzeilig:</translation>
</message>
<message id="xx_tooltip_entry0">
- <location filename="../textentrypage.cpp" line="494"/>
+ <location filename="../textentrypage.cpp" line="586"/>
<source>Enter text here</source>
<translation>Geben Sie hier Text ein</translation>
</message>
<message id="xx_textentry_click_here">
- <location filename="../textentrypage.cpp" line="144"/>
- <location filename="../textentrypage.cpp" line="166"/>
+ <location filename="../textentrypage.cpp" line="147"/>
+ <location filename="../textentrypage.cpp" line="169"/>
<source>Click here</source>
<translation>Hier klicken</translation>
</message>
<message id="xx_textentry_press_any_key">
- <location filename="../textentrypage.cpp" line="157"/>
+ <location filename="../textentrypage.cpp" line="160"/>
<source>Press any key</source>
<translation>Drücke irgendeine Taste</translation>
</message>
<message id="xx_textentry_keypress">
- <location filename="../textentrypage.cpp" line="183"/>
+ <location filename="../textentrypage.cpp" line="186"/>
<source>&lt;i&gt;Key press&lt;/i&gt; key:</source>
<translation>&lt;i&gt;Tasten gedrückt&lt;/i&gt; Taste:</translation>
</message>
<message id="xx_textentry_text">
- <location filename="../textentrypage.cpp" line="186"/>
- <location filename="../textentrypage.cpp" line="200"/>
+ <location filename="../textentrypage.cpp" line="189"/>
+ <location filename="../textentrypage.cpp" line="203"/>
<source>text:</source>
<translation>Text:</translation>
</message>
<message id="xx_textentry_keyrelease">
- <location filename="../textentrypage.cpp" line="197"/>
+ <location filename="../textentrypage.cpp" line="200"/>
<source>&lt;i&gt;Key release&lt;/i&gt; key:</source>
<translation>&lt;i&gt;Taste losgelassen&lt;/i&gt; Taste:</translation>
</message>
+ <message id="xx_tooltip_customtoolbar1">
+ <location filename="../textentrypage.cpp" line="519"/>
+ <source>Example custom toolbar 1</source>
+ <translation>Beispiel 1 für maßgeschneiderten Werkzeugbalken</translation>
+ </message>
+ <message id="xx_tooltip_customtoolbar2">
+ <location filename="../textentrypage.cpp" line="532"/>
+ <source>Example custom toolbar 2</source>
+ <translation>Beispiel 2 für maßgeschneiderten Werkzeugbalken</translation>
+ </message>
<message id="xx_tooltip_entry1">
- <location filename="../textentrypage.cpp" line="497"/>
+ <location filename="../textentrypage.cpp" line="589"/>
<source>This tooltip is quite long and will be clipped on the display</source>
<translation>Dieser Tooltip ist recht lang und wird wohl abgeschnitten werden</translation>
</message>
+ <message id="xx_textentry_richtext_text">
+ <location filename="../textentrypage.cpp" line="616"/>
+ <source>Rich Text:</source>
+ <translation>Reicher Text</translation>
+ </message>
<message id="xx_textentry_noecho">
- <location filename="../textentrypage.cpp" line="525"/>
+ <location filename="../textentrypage.cpp" line="619"/>
<source>No Echo mode:</source>
<translation>Kein-Echo Modus:</translation>
</message>
<message id="xx_textentry_echoonedit">
- <location filename="../textentrypage.cpp" line="528"/>
+ <location filename="../textentrypage.cpp" line="622"/>
<source>Echo on edit:</source>
<translation>Echo beim Editieren:</translation>
</message>
<message id="xx_textentry_direct_input_mode">
- <location filename="../textentrypage.cpp" line="531"/>
+ <location filename="../textentrypage.cpp" line="625"/>
<source>Direct Input Mode:</source>
<translation>Direkteingabe Modus:</translation>
</message>
+ <message id="xx_textentry_custom_toolbar1">
+ <location filename="../textentrypage.cpp" line="628"/>
+ <source>Custom ToolBar 1:</source>
+ <translation>Maßgeschneiderter Toolbar 1:</translation>
+ </message>
+ <message id="xx_textentry_custom_toolbar2">
+ <location filename="../textentrypage.cpp" line="630"/>
+ <source>Custom ToolBar 2:</source>
+ <translation>Maßgeschneiderter Toolbar 2:</translation>
+ </message>
<message id="xx_auto_true_entry0">
- <location filename="../textentrypage.cpp" line="564"/>
+ <location filename="../textentrypage.cpp" line="663"/>
<source>Auto Capitalisation is active</source>
<translation>Automatische Großschreibung ist aktiv</translation>
</message>
<message id="xx_auto_false_entry0">
- <location filename="../textentrypage.cpp" line="567"/>
+ <location filename="../textentrypage.cpp" line="666"/>
<source>No Auto Capitalisation</source>
<translation>Keine automatische Großschreibung</translation>
</message>
<message id="xx_tooltip_entry6">
- <location filename="../textentrypage.cpp" line="503"/>
+ <location filename="../textentrypage.cpp" line="595"/>
<source>This is a multiline text entry</source>
<translation>Dies ist eine mehrzeiliger Texteingabe</translation>
</message>
<message id="xx_textentry_singleselectall">
- <location filename="../textentrypage.cpp" line="520"/>
+ <location filename="../textentrypage.cpp" line="612"/>
<source>Singleline (selectall):</source>
<translation>Einzelne Zeile (alles auswählen)</translation>
</message>
<message id="xx_auto_capitalisation">
- <location filename="../textentrypage.cpp" line="534"/>
+ <location filename="../textentrypage.cpp" line="633"/>
<source>Auto capitalisation</source>
<translation variants="yes">
<lengthvariant>Automatische Großschreibung</lengthvariant>
@@ -389,12 +558,12 @@ Hihihi...[böses Kichern]</translation>
</translation>
</message>
<message id="xx_error_correction">
- <location filename="../textentrypage.cpp" line="536"/>
+ <location filename="../textentrypage.cpp" line="635"/>
<source>Error correction</source>
<translation>Fehlerkorrektur</translation>
</message>
<message id="xx_slider_page_title">
- <location filename="../sliderpage.cpp" line="169"/>
+ <location filename="../sliderpage.cpp" line="168"/>
<source>Sliders</source>
<translation variants="yes">
<lengthvariant>Schieberegler</lengthvariant>
@@ -402,28 +571,28 @@ Hihihi...[böses Kichern]</translation>
</translation>
</message>
<message id="xx_slider_personal_data_label">
- <location filename="../sliderpage.cpp" line="180"/>
+ <location filename="../sliderpage.cpp" line="179"/>
<source>Personal data</source>
<translation>Persönliche Daten</translation>
</message>
<message id="xx_slider_age_label">
- <location filename="../sliderpage.cpp" line="184"/>
+ <location filename="../sliderpage.cpp" line="183"/>
<source>Please select your age:œ!! Please select your age:œ!! Please select your age:œ!! Age:</source>
<oldsource>Please select your age:</oldsource>
<translation>Bitte wählen Sie Ihr Alter:</translation>
</message>
<message id="xx_slider_brightness_label">
- <location filename="../sliderpage.cpp" line="217"/>
+ <location filename="../sliderpage.cpp" line="216"/>
<source>Brightness:</source>
<translation>Helligkeit:</translation>
</message>
<message id="xx_slider_player_label">
- <location filename="../sliderpage.cpp" line="197"/>
+ <location filename="../sliderpage.cpp" line="196"/>
<source>Player:</source>
<translation>Spieler:</translation>
</message>
<message id="xx_slider_page_info_label">
- <location filename="../sliderpage.cpp" line="177"/>
+ <location filename="../sliderpage.cpp" line="176"/>
<source>Slider is used for continuous set of values, among which user can choose one value.
Seekbar is a special type of Slider used for displaying playback status for multimedia content.</source>
@@ -431,93 +600,93 @@ Seekbar is a special type of Slider used for displaying playback status for mult
Ein Suchbalken ist ein spezieller Typ eines Schiebereglers, der benutzt wird um den Abspielstatus von Multimediainhalten anzuzeigen.</translation>
</message>
- <message id="xx_viewmenu_page_title">
- <location filename="../applicationmenupage.cpp" line="60"/>
+ <message id="xx_applicationmenu_page_title">
+ <location filename="../applicationmenupage.cpp" line="62"/>
<source>Application Menu</source>
- <translation>Guck Menü</translation>
+ <translation>Applikationsmenü</translation>
</message>
<message id="xx_applicationmenu_page_info">
- <location filename="../applicationmenupage.cpp" line="75"/>
+ <location filename="../applicationmenupage.cpp" line="77"/>
<source>Application Menu is a menu element available to any view. &lt;ul&gt;&lt;li&gt;It can be opened by tapping on the menu title area.&lt;/li&gt;&lt;li&gt;It contains commands and view settings for the view in question and an optional area for style commands.&lt;/li&gt;&lt;li&gt;Each view of the application can have different menu contents.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Guidelines&lt;/b&gt; for mandatory menu items: &lt;ul&gt;&lt;li&gt;Settings should be on the main View of the application, unless the settings are specific to a sub-View&lt;/li&gt;&lt;li&gt;Help should be available in each View &lt;/li&gt;&lt;li&gt;Exit task should be present in all Views except for the main View of the application.&lt;/li&gt;&lt;/ul&gt;</source>
<translation>“Application Menu” ist ein Menüelement, das für jedes “View” zur Verfügung steht. &lt;ul&gt;&lt;li&gt;Es kann geöffnet werden, in dem man auf den Titelbereich des Menüs klopft.&lt;/li&gt;&lt;li&gt;Es enthält Kommandos und “View”-Einstellungen für das relevante “View” und einen optionalen Bereich für Stil Kommandos.&lt;/li&gt;&lt;li&gt;Jedes “View” der Applikation kann unerschiedliche Menüinhalte haben.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Richtlinien&lt;/b&gt; für zwingend erforderliche Menüeinträge: &lt;ul&gt;&lt;li&gt;Einstellungen sollten auf dem Haupt-“View” der Applikation zu finden sein, es sei denn, die Einstellungen sind spezifisch für ein Unter-“View”&lt;/li&gt;&lt;li&gt;In jedem “View” sollte eine Hilfe verfügbar sein &lt;/li&gt;&lt;li&gt;“Beenden der Aufgabe” sollte in jedem “View” verfügbar sein, ausgenommen im Haupt-“View” der Applikation.&lt;/li&gt;&lt;/ul&gt;</translation>
</message>
<message id="xx_popup_generic_title">
- <location filename="../comboboxpage.cpp" line="112"/>
+ <location filename="../comboboxpage.cpp" line="113"/>
<source>Title</source>
<translation>Titel</translation>
</message>
<message id="xx_popup_sort_descending_order">
- <location filename="../comboboxpage.cpp" line="114"/>
+ <location filename="../comboboxpage.cpp" line="115"/>
<source>Sort - DescendingOrder</source>
<translation>Sortieren — in absteigender Reihenfolge</translation>
</message>
<message id="xx_popup_time_consuming">
- <location filename="../comboboxpage.cpp" line="116"/>
+ <location filename="../comboboxpage.cpp" line="117"/>
<source>Time-consuming setting</source>
<translation>Zeitaufwendige Einstellung</translation>
</message>
<message id="xx_container_page_title">
- <location filename="../containerpage.cpp" line="65"/>
+ <location filename="../containerpage.cpp" line="64"/>
<source>Container</source>
<translation>Behälter</translation>
</message>
<message id="xx_progressbar_page_title">
- <location filename="../progressbarpage.cpp" line="80"/>
+ <location filename="../progressbarpage.cpp" line="78"/>
<source>Progress Bar</source>
<translation>Fortschrittsbalken</translation>
</message>
<message id="xx_progressbar_page_info_label">
- <location filename="../progressbarpage.cpp" line="85"/>
+ <location filename="../progressbarpage.cpp" line="83"/>
<source>A Progress Bar can indicate an ongoing process with either known or unknown durations.</source>
<translation>Ein Fortschrittsbalken kann zur Zeit ablaufende Vorgänge mit bekannter oder unbekannter Dauer anzeigen</translation>
</message>
<message id="xx_progressindicator_unknown_duration_bar">
- <location filename="../progressbarpage.cpp" line="89"/>
+ <location filename="../progressbarpage.cpp" line="87"/>
<source>Installing CoolApp</source>
<translation>Installiere tolles Programm</translation>
</message>
<message id="xx_progressindicator_known_duration_bar">
- <location filename="../progressbarpage.cpp" line="87"/>
+ <location filename="../progressbarpage.cpp" line="85"/>
<source>Downloading nicepic.jpg</source>
<translation>Download vom nettesbild.jpg</translation>
</message>
<message id="xx_toolbar_page_example1">
- <location filename="../toolbarpage.cpp" line="168"/>
+ <location filename="../toolbarpage.cpp" line="176"/>
<source>Example 1</source>
<translation>Beispiel 1</translation>
</message>
<message id="xx_toolbar_page_example2">
- <location filename="../toolbarpage.cpp" line="174"/>
+ <location filename="../toolbarpage.cpp" line="182"/>
<source>Example 2</source>
<translation>Beispiel 2</translation>
</message>
<message id="xx_toolbar_page_defaultview">
- <location filename="../toolbarpage.cpp" line="180"/>
+ <location filename="../toolbarpage.cpp" line="188"/>
<source>Default View</source>
<translation>Standardansicht</translation>
</message>
<message id="xx_toolbar_page_tabview">
- <location filename="../toolbarpage.cpp" line="186"/>
+ <location filename="../toolbarpage.cpp" line="194"/>
<source>Tab View</source>
<translation>Karteireiteransicht</translation>
</message>
<message id="xx_toolbar_page_title">
- <location filename="../toolbarpage.cpp" line="208"/>
+ <location filename="../toolbarpage.cpp" line="216"/>
<source>ToolBar</source>
<translation>Werkzeugleiste</translation>
</message>
<message id="xx_toolbar_page_info">
- <location filename="../toolbarpage.cpp" line="215"/>
+ <location filename="../toolbarpage.cpp" line="223"/>
<source>&lt;b&gt;Toolbar&lt;/b&gt; acts as a container for actions. Depending upon the view attached, it either acts as a tab bar or is a container for buttons and text input field. &lt;ul&gt;&lt;li&gt;Click Menu to explore the example&lt;/li&gt;&lt;/ul&gt;</source>
<translation>Die &lt;b&gt;Werkzeugleiste&lt;/b&gt; dient als ein Behälter für Aktionen. Abhängig von View, das damit verbunden ist, verhält es sich wie eine Karteireiterleiste oder als ein Behälter für Knöpfe und Texteingabefelder. &lt;ul&gt;&lt;li&gt;Klicke auf das Menü um die Beispiele anzusehen.&lt;/li&gt;&lt;/ul&gt;</translation>
</message>
<message id="xx_objectmenu_page_title">
- <location filename="../objectmenupage.cpp" line="155"/>
+ <location filename="../objectmenupage.cpp" line="154"/>
<source>Object menu</source>
<translation>Objektmenü</translation>
</message>
<message id="xx_objectmenu_page_info_label">
- <location filename="../objectmenupage.cpp" line="167"/>
+ <location filename="../objectmenupage.cpp" line="166"/>
<source>Object Menu is a popup menu of commands opened by long tapping an element. It is used for providing shortcuts to functions related to that particular element.
The primary (single short tap) action of the element should not be duplicated in the Object Menu.</source>
@@ -526,52 +695,63 @@ The primary (single short tap) action of the element should not be duplicated in
Die primäre Aktion (kurzes Einzelklopfen) auf dieses Element sollte nicht im Objectmenü dupliziert werden.</translation>
</message>
<message id="xx_objectmenu_page_container_friends">
- <location filename="../objectmenupage.cpp" line="170"/>
+ <location filename="../objectmenupage.cpp" line="169"/>
<source>Friends</source>
<translation>Freunde</translation>
</message>
<message id="xx_objectmenu_page_container_albums">
- <location filename="../objectmenupage.cpp" line="172"/>
+ <location filename="../objectmenupage.cpp" line="171"/>
<source>Favorite Albums</source>
<translation>Lieblings Alben</translation>
</message>
<message id="xx_displaymodes_navbarcombo">
- <location filename="../navigationbarpage.cpp" line="60"/>
+ <location filename="../displaymodespage.cpp" line="59"/>
<source>Navigation Bar</source>
<translation>Navigationsbalken</translation>
</message>
<message id="xx_displaymodes_escapebtncombo">
- <location filename="../navigationbarpage.cpp" line="68"/>
+ <location filename="../displaymodespage.cpp" line="67"/>
<source>Escape Button</source>
<translation>Fluchtknopf</translation>
</message>
<message id="xx_displaymodes_homebtncombo">
- <location filename="../navigationbarpage.cpp" line="76"/>
+ <location filename="../displaymodespage.cpp" line="75"/>
<source>Home Button</source>
<translation>Heimknopf</translation>
</message>
<message id="xx_displaymodes_page_title">
- <location filename="../navigationbarpage.cpp" line="125"/>
- <source>Display Modes and Full Screen</source>
- <translation>Navigationsbalken</translation>
+ <location filename="../displaymodespage.cpp" line="143"/>
+ <source>Display Modes</source>
+ <oldsource>Display Modes and Full Screen</oldsource>
+ <translation>Anzeigemodi und Vollbildanzeige</translation>
</message>
<message id="xx_displaymodes_display_mode">
- <location filename="../navigationbarpage.cpp" line="129"/>
+ <location filename="../displaymodespage.cpp" line="147"/>
<source>Components&apos; display mode:</source>
<translation>Anzeigemodus der Applikationsseite:</translation>
</message>
+ <message id="xx_displaymodes_window_state">
+ <location filename="../displaymodespage.cpp" line="150"/>
+ <source>Window state:</source>
+ <translation>Fensterzustand</translation>
+ </message>
+ <message id="xx_displaymodes_full_screen">
+ <location filename="../displaymodespage.cpp" line="153"/>
+ <source>Full Screen</source>
+ <translation>Vollbildmodus</translation>
+ </message>
<message id="xx_displaymode_show">
- <location filename="../navigationbarpage.cpp" line="162"/>
+ <location filename="../displaymodespage.cpp" line="166"/>
<source>Show</source>
<translation>Zeige</translation>
</message>
<message id="xx_displaymode_autohide">
- <location filename="../navigationbarpage.cpp" line="164"/>
+ <location filename="../displaymodespage.cpp" line="168"/>
<source>Auto Hide</source>
<translation>Auto-Zeigen</translation>
</message>
<message id="xx_displaymode_hide">
- <location filename="../navigationbarpage.cpp" line="166"/>
+ <location filename="../displaymodespage.cpp" line="170"/>
<source>Hide</source>
<translation>Verstecken</translation>
</message>
@@ -743,113 +923,72 @@ Die primäre Aktion (kurzes Einzelklopfen) auf dieses Element sollte nicht im O
<source>Font test:</source>
<translation>Zeichensatzprüfung:</translation>
</message>
- <message id="xx_template_page_views_dialogs">
- <location filename="../templatepage.cpp" line="47"/>
- <source>Views and Dialogs</source>
- <translation>“Views” und Dialoge</translation>
- </message>
- <message id="xx_template_page_contains_applets">
- <location filename="../templatepage.cpp" line="49"/>
- <source>Contains and Applets</source>
- <translation>Behälter und Applets</translation>
- </message>
- <message id="xx_template_page_layouts_visuals">
- <location filename="../templatepage.cpp" line="51"/>
- <source>Layouts and Visuals</source>
- <translation>Layouts und Visualisierungen</translation>
- </message>
- <message id="xx_template_page_buttons">
- <location filename="../templatepage.cpp" line="53"/>
- <source>Buttons</source>
- <translation>Knöpfe</translation>
- </message>
- <message id="xx_template_page_indicators_notifications">
- <location filename="../templatepage.cpp" line="55"/>
- <source>Indicators and Notifications</source>
- <translation>Anzeigen und Notifikationen</translation>
- </message>
- <message id="xx_template_page_lists_grids_menus">
- <location filename="../templatepage.cpp" line="57"/>
- <source>Lists, Grids and Menus</source>
- <translation>Listen, Gitter und Menüs</translation>
- </message>
- <message id="xx_template_page_user_input">
- <location filename="../templatepage.cpp" line="59"/>
- <source>User input</source>
- <translation>Benutzereingaben</translation>
- </message>
- <message id="xx_template_page_input_feedback">
- <location filename="../templatepage.cpp" line="61"/>
- <source>Input Feedback</source>
- <translation>Eingaberückmeldung</translation>
- </message>
<message id="xx_image_page_info">
- <location filename="../imagepage.cpp" line="152"/>
+ <location filename="../imagepage.cpp" line="160"/>
<source>Image allows the placement of images onto the UI. Images are generally non-interactive elements. Various single and multiple touch interactions can be added to an Image component if desired. As an example, pinch gesture can be used in this page to zoom the image.</source>
<translation>“Image” erlaubt das Positionieren von Bildern auf die Benutzeroberfläche. Bilder sind gewöhnlich nicht-interaktive Elemente. Jedoch können auch verschiedene einfache und mehrfache Berührungsaktionen zu einer Bildkomponente hinzugefügt werden, falls gewünscht.</translation>
</message>
<message id="xx_sample template">
- <location filename="../templatepage.cpp" line="125"/>
+ <location filename="../templatepage.cpp" line="107"/>
<source>Sample template</source>
<translation>Beispiel Vorlage</translation>
</message>
<message id="xx_template_page_title">
- <location filename="../templatepage.cpp" line="119"/>
+ <location filename="../templatepage.cpp" line="101"/>
<source>Template</source>
<translation>Vorlage</translation>
</message>
<message id="xx_textentry_completion_text">
- <location filename="../textentrypage.cpp" line="522"/>
+ <location filename="../textentrypage.cpp" line="614"/>
<source>Email suggestion text:</source>
<translation>E-Mail Vorschlags text:</translation>
</message>
<message id="xx_combobox_page_info">
- <location filename="../comboboxpage.cpp" line="120"/>
+ <location filename="../comboboxpage.cpp" line="121"/>
<source>The MComboBox widget is a combined button and popup list. It is very similar to QComboBox, but does not allow editing the text.</source>
<translation>Das MComboBox Widget ist eine Kombination aus einem Knopf und einer Popup List. Es ist sehr ähnlich zur QComboBox aber erlaubt nicht den Text zu editieren.</translation>
</message>
<message id="xx_combobox_title">
- <location filename="../comboboxpage.cpp" line="108"/>
+ <location filename="../comboboxpage.cpp" line="109"/>
<source>ComboBox</source>
<translation>Combobox</translation>
</message>
<message id="xx_tooltip_entry8">
- <location filename="../textentrypage.cpp" line="500"/>
+ <location filename="../textentrypage.cpp" line="592"/>
<source>Provides email address suggestions</source>
<translation>Stellt Vorschläge für E-Mail Adressen zur Verfügung</translation>
</message>
<message id="xx_checkbox_page_title">
- <location filename="../checkboxpage.cpp" line="76"/>
+ <location filename="../checkboxpage.cpp" line="80"/>
<source>Checkbox</source>
<translation>Kontrollkästchen</translation>
</message>
<message id="xx_checkbox_page_info_label">
- <location filename="../checkboxpage.cpp" line="85"/>
+ <location filename="../checkboxpage.cpp" line="89"/>
<source>The Checkbox is a variant of Button that allows users to set the state of variable or setting which has two values, On and Off.
Checkbox essentially does the same thing as the Switch button, so please consider using a Switch instead.</source>
<translation>Das Kontrollkästchen ist eine Variante des Knopfes, das Benutzern erlaubt den Zustand einer Variable oder einer Einstellung zu sehen, die zwei Werte hat, „An“ oder „Aus“.</translation>
</message>
<message id="xx_checkbox_page_checkbox_label">
- <location filename="../checkboxpage.cpp" line="88"/>
- <source>I have read and understood the
-instructions.</source>
+ <location filename="../checkboxpage.cpp" line="92"/>
+ <source>I have read and understood the instructions.</source>
<translation>Ich habe die Anleitung gelesen und verstanden.</translation>
</message>
<message id="xx_icon_button_page_title">
- <location filename="../iconbuttonpage.cpp" line="82"/>
+ <location filename="../iconbuttonpage.cpp" line="81"/>
<source>Icon Button</source>
<translation>Pictogramm Knopf</translation>
</message>
<message id="xx_icon_button_page_info_label">
- <location filename="../iconbuttonpage.cpp" line="90"/>
+ <location filename="../iconbuttonpage.cpp" line="89"/>
<source>Icon Buttons have an icon and can have a text label. Icon button differs from push button by its visual presentation: it does not have button-style edges like a Push Button does.
Icon Buttons are used in e.g. Toolbars.</source>
<translation>Pictogrammknöpfe haben ein Piktogramm und können auch ein Text-Label haben. Ein Pictogrammknopf unterscheidet sich von einen Druckknopf durch seine graphische Darstellung: er hat nicht die knopfartigen Ränder wie ein Druckknopf.</translation>
</message>
<message id="xx_icon_button_page_icon_button2">
- <location filename="../iconbuttonpage.cpp" line="92"/>
+ <location filename="../iconbuttonpage.cpp" line="91"/>
<source>Lorem ipsum</source>
<translation>Lorem ipsum</translation>
</message>
@@ -883,32 +1022,32 @@ sit amet</source>
sit amet</translation>
</message>
<message id="xx_spinner_page_application_main_area">
- <location filename="../spinnerpage.cpp" line="66"/>
- <source>In container main area</source>
+ <location filename="../spinnerpage.cpp" line="68"/>
+ <source>In application main area</source>
<translation>Im Hauptbereich der Applikation</translation>
</message>
<message id="xx_spinner_page_container_header">
- <location filename="../spinnerpage.cpp" line="72"/>
+ <location filename="../spinnerpage.cpp" line="74"/>
<source>In container header</source>
<translation>Im Kopfbereich des Behälters</translation>
</message>
<message id="xx_spinner_page_menu">
- <location filename="../spinnerpage.cpp" line="78"/>
- <source>In view menu</source>
- <translation>Im Ansichtsmenü</translation>
+ <location filename="../spinnerpage.cpp" line="80"/>
+ <source>In application menu</source>
+ <translation>Im Applikationsmenü</translation>
</message>
<message id="xx_spinner_page_dialog">
- <location filename="../spinnerpage.cpp" line="84"/>
+ <location filename="../spinnerpage.cpp" line="86"/>
<source>In dialog</source>
<translation>Im Dialog</translation>
</message>
<message id="xx_spinner_page_title">
- <location filename="../spinnerpage.cpp" line="97"/>
+ <location filename="../spinnerpage.cpp" line="99"/>
<source>Spinner</source>
<translation>Wirbelräder</translation>
</message>
<message id="xx_spinner_page_info_label">
- <location filename="../spinnerpage.cpp" line="106"/>
+ <location filename="../spinnerpage.cpp" line="108"/>
<source>Spinner is used to indicate that a progress is ongoing and the duration is unknown.
Spinners can also be used in situations when duration is known, but available space on screen does not permit using a Progress bar.
@@ -920,89 +1059,80 @@ Wirbelräder können auch benutzt werden, wenn die Dauer bekannt ist aber der ve
Siehe auch das Menü für Beispiele verschiedener Anwendungsfälle.</translation>
</message>
- <message id="xx_spinner_page_email_header">
- <location filename="../spinnerpage.cpp" line="116"/>
- <source>From: John Doe
-Date: Today
-Subject: This is funny stuff!</source>
- <translation>From: Otto Normalverbraucher
-Date: Heute
-Subject: Dies ist lustig!</translation>
- </message>
<message id="xx_spinner_page_application_area_description">
- <location filename="../spinnerpage.cpp" line="129"/>
+ <location filename="../spinnerpage.cpp" line="118"/>
<source>Spinner can be used while content is loading.</source>
- <translation type="unfinished"></translation>
+ <translation>Ein Wirbelrad kann benutzt werden während Inhalte geladen werden.</translation>
</message>
<message id="xx_spinner_page_container_title">
- <location filename="../spinnerpage.cpp" line="142"/>
+ <location filename="../spinnerpage.cpp" line="151"/>
<source>Online albums</source>
<translation>Online Alben</translation>
</message>
<message id="xx_spinner_page_container_header_description">
- <location filename="../spinnerpage.cpp" line="151"/>
+ <location filename="../spinnerpage.cpp" line="160"/>
<source>Spinner can be used in container header to indicate that the items inside the container are being updated, but visible items can be interacted with.</source>
<translation>Wirbelräder können in Behälterkopfzeilen benutzt werden um anzuzeigen, dass die Dinge im Behälter auf den neuesten Stand gebracht werden, trotzdem kann man mit den sichtbaren Dingen weiter interagieren</translation>
</message>
<message id="xx_spinner_page_application_menu_description">
- <location filename="../spinnerpage.cpp" line="195"/>
+ <location filename="../spinnerpage.cpp" line="204"/>
<source>Spinner in the application menu area indicates that the whole view is pending for update.</source>
<translation>Wirbelräder im Bereich des Applikationsmenüs zeigen, das der gesamte “View” auf den neuesten Stand gebracht wird</translation>
</message>
<message id="xx_spinner_page_dialog_header_description">
- <location filename="../spinnerpage.cpp" line="209"/>
+ <location filename="../spinnerpage.cpp" line="218"/>
<source>Spinner can be placed in dialog header to indicate changing content.</source>
<translation>Wirbelräder können in Dialogkopfzeilen sein um sich ändernde Inhalte anzuzeigen</translation>
</message>
<message id="xx_spinner_page_dialog_header">
- <location filename="../spinnerpage.cpp" line="230"/>
+ <location filename="../spinnerpage.cpp" line="239"/>
<source>Select Internet connection</source>
<translation>Wähle die Internetverbindung</translation>
</message>
<message id="xx_switch_page_title">
- <location filename="../switchpage.cpp" line="128"/>
+ <location filename="../switchpage.cpp" line="127"/>
<source>Switch</source>
<translation>Schalthebel</translation>
</message>
<message id="xx_switch_page_info_label">
- <location filename="../switchpage.cpp" line="138"/>
+ <location filename="../switchpage.cpp" line="137"/>
<source>A Switch button differs from both a push button and an icon button visually. It looks like a switch, communicating that pressing this button will not go to another view or will not perform any other actions except to toggle the state of the button.
Switches are used to indicate e.g. settings values</source>
<translation>Ein Schalthebel unterscheidet sich optisch sowohl von einem Drucknopf als auch von einem Piktogrammknopf. Es sieht aus wie ein Hebel und zeigt so, daß das Umlegen dieses Hebels nicht in einen anderen Dialog wechseln wird und keine anderen Aktionen auslösen wird außer den Zustand dieses Hebels zu änderen.</translation>
</message>
<message id="xx_switch_page_switch1">
- <location filename="../switchpage.cpp" line="141"/>
+ <location filename="../switchpage.cpp" line="140"/>
<source>Headlights</source>
<translation>Frontscheinwerfer</translation>
</message>
<message id="xx_switch_page_switch2">
- <location filename="../switchpage.cpp" line="143"/>
+ <location filename="../switchpage.cpp" line="142"/>
<source>Autopilot</source>
<translation>Autopilot</translation>
</message>
<message id="xx_switch_page_switch3">
- <location filename="../switchpage.cpp" line="145"/>
+ <location filename="../switchpage.cpp" line="144"/>
<source>Warp Drive</source>
<translation>Warpantrieb</translation>
</message>
<message id="xx_switch_page_switch4">
- <location filename="../switchpage.cpp" line="147"/>
+ <location filename="../switchpage.cpp" line="146"/>
<source>Reactor Shields</source>
<translation>Reaktorschilde</translation>
</message>
<message id="xx_switch_page_switch5">
- <location filename="../switchpage.cpp" line="149"/>
+ <location filename="../switchpage.cpp" line="148"/>
<source>Infinite Improbability Drive</source>
<translation>Unendliche-Unwahrscheinlichkeit-Antrieb</translation>
</message>
<message id="xx_input_feedback_page_title">
- <location filename="../feedbackpage.cpp" line="90"/>
+ <location filename="../feedbackpage.cpp" line="89"/>
<source>Input Feedback</source>
<translation>Eingaberückmeldung</translation>
</message>
<message id="xx_input_feedback_page_info_label">
- <location filename="../feedbackpage.cpp" line="100"/>
+ <location filename="../feedbackpage.cpp" line="99"/>
<source>This page contains buttons with custom input feedbacks. Any MWidget can have input feedback for press and release events. Input feedback can be a sound effect and/or a haptic effect (piezo, vibra) depending on the product.
Input feedbacks can be easily configured for different purposes using the theming system.</source>
@@ -1011,54 +1141,77 @@ Input feedbacks can be easily configured for different purposes using the themin
Eingaberückmeldungen können mit Hilfe des Theming-Systems einfach für verschiedene Zwecke konfiguriert werden.</translation>
</message>
<message id="xx_input_feedback_page_button1">
- <location filename="../feedbackpage.cpp" line="102"/>
+ <location filename="../feedbackpage.cpp" line="101"/>
<source>Default</source>
<translation>Voreinstellung</translation>
</message>
<message id="xx_input_feedback_page_button2">
- <location filename="../feedbackpage.cpp" line="104"/>
+ <location filename="../feedbackpage.cpp" line="103"/>
<source>Different</source>
<translation>Anders</translation>
</message>
<message id="xx_input_feedback_page_button3">
- <location filename="../feedbackpage.cpp" line="106"/>
+ <location filename="../feedbackpage.cpp" line="105"/>
<source>Sluggish</source>
<translation>Schwerfällig</translation>
</message>
<message id="xx_input_feedback_page_button4">
- <location filename="../feedbackpage.cpp" line="108"/>
+ <location filename="../feedbackpage.cpp" line="107"/>
<source>Babytoy</source>
<translation>Babyspielzeug</translation>
</message>
<message id="xx_input_feedback_page_button5">
- <location filename="../feedbackpage.cpp" line="110"/>
+ <location filename="../feedbackpage.cpp" line="109"/>
<source>Space</source>
<translation>Weltraum</translation>
</message>
<message id="xx_input_feedback_page_button6">
- <location filename="../feedbackpage.cpp" line="112"/>
+ <location filename="../feedbackpage.cpp" line="111"/>
<source>Silent</source>
<translation>Stumm</translation>
</message>
+ <message id="xx_gridpage_configuration">
+ <location filename="../mgridpage.cpp" line="193"/>
+ <source>Configuration</source>
+ <translation>Einstellung</translation>
+ </message>
<message id="xx_gridpage_title">
- <location filename="../mgridpage.cpp" line="96"/>
+ <location filename="../mgridpage.cpp" line="204"/>
<source>Grid page</source>
<translation>Gitter Seite</translation>
</message>
- <message id="xx_video_container_page_title">
- <location filename="../videocontainerpage.cpp" line="372"/>
- <source>Video container</source>
- <translation>Video Behälter</translation>
+ <message id="xx_gridpage_set_columns">
+ <location filename="../mgridpage.cpp" line="290"/>
+ <source>Set columns</source>
+ <translation>Spalten einstellen</translation>
</message>
- <message id="xx_video_container_page_info_label">
- <location filename="../videocontainerpage.cpp" line="377"/>
- <source>Tap video thumbnail to play/pause it. Tap and hold thumbnail to open video in it&apos;s native size.</source>
- <translation>Klopfe auf das Video-Miniaturbild um abzuspielen oder anzuhalten. Klopfe und halte das Miniaturbild um das Video in Originalgröße anzusehen</translation>
+ <message id="xx_gridpage_landscape">
+ <location filename="../mgridpage.cpp" line="316"/>
+ <source>Landscape</source>
+ <translation>Querformat</translation>
+ </message>
+ <message id="xx_gridpage_portrait">
+ <location filename="../mgridpage.cpp" line="321"/>
+ <source>Portrait</source>
+ <translation>Hochformat</translation>
</message>
- <message id="xx_video_container_header_title">
- <location filename="../videocontainerpage.cpp" line="380"/>
- <source>Gallery</source>
- <translation>Galerie</translation>
+ <message id="xx_bubblepage_title">
+ <location filename="../bubblepage.cpp" line="143"/>
+ <source>Speech Bubble</source>
+ <translation>Sprechblase</translation>
+ </message>
+ <message id="xx_wg_bubblepage_linkactivated">
+ <location filename="../bubblepage.cpp" line="156"/>
+ <source>Link activated</source>
+ <translation>Link aktiviert</translation>
+ </message>
+ <message id="xx_content_items_subtitle">
+ <location filename="../contentitemspage.cpp" line="63"/>
+ <location filename="../contentitemspage.cpp" line="71"/>
+ <location filename="../contentitemspage.cpp" line="81"/>
+ <location filename="../contentitemspage.cpp" line="90"/>
+ <source>Subtitle</source>
+ <translation>Untertitel</translation>
</message>
</context>
</TS>
diff --git a/demos/widgetsgallery/translations/widgetsgallery_en.ts b/demos/widgetsgallery/translations/widgetsgallery_en.ts
index 62f8e833..132a0fda 100644
--- a/demos/widgetsgallery/translations/widgetsgallery_en.ts
+++ b/demos/widgetsgallery/translations/widgetsgallery_en.ts
@@ -3,53 +3,208 @@
<TS version="2.0" language="en">
<context>
<name></name>
+ <message id="xx_wg_categories_application_view">
+ <location filename="../mainpage.cpp" line="86"/>
+ <source>Application View</source>
+ <translation>Application View</translation>
+ </message>
+ <message id="xx_wg_application_view_view_menu">
+ <location filename="../mainpage.cpp" line="88"/>
+ <source>Application Menu</source>
+ <translation>Application Menu</translation>
+ </message>
+ <message id="xx_wg_application_view_display_modes">
+ <location filename="../mainpage.cpp" line="90"/>
+ <source>Display Modes</source>
+ <translation>Display Modes</translation>
+ </message>
+ <message id="xx_wg_application_view_toolbar_incl_tab_bar">
+ <location filename="../mainpage.cpp" line="92"/>
+ <source>Toolbar (including Tab Bar)</source>
+ <translation>Toolbar (including Tab Bar)</translation>
+ </message>
+ <message id="xx_wg_categories_simple_widgets">
+ <location filename="../mainpage.cpp" line="96"/>
+ <source>Simple Widgets</source>
+ <translation>Simple Widgets</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_labels">
+ <location filename="../mainpage.cpp" line="98"/>
+ <source>Labels</source>
+ <translation>Labels</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_image">
+ <location filename="../mainpage.cpp" line="100"/>
+ <source>Image</source>
+ <translation>Image</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_progress_bar">
+ <location filename="../mainpage.cpp" line="102"/>
+ <source>Progress Bar</source>
+ <translation>Progress Bar</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_container">
+ <location filename="../mainpage.cpp" line="104"/>
+ <source>Container</source>
+ <translation>Container</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_spinner">
+ <location filename="../mainpage.cpp" line="106"/>
+ <source>Spinner</source>
+ <translation>Spinner</translation>
+ </message>
+ <message id="xx_wg_categories_buttons">
+ <location filename="../mainpage.cpp" line="109"/>
+ <source>Buttons</source>
+ <translation>Buttons</translation>
+ </message>
+ <message id="xx_wg_buttons_push_button">
+ <location filename="../mainpage.cpp" line="111"/>
+ <source>Push Button</source>
+ <translation>Push Button</translation>
+ </message>
+ <message id="xx_wg_buttons_icon_button">
+ <location filename="../mainpage.cpp" line="113"/>
+ <source>Icon Button</source>
+ <translation>Icon Button</translation>
+ </message>
+ <message id="xx_wg_buttons_switch">
+ <location filename="../mainpage.cpp" line="115"/>
+ <source>Switch</source>
+ <translation>Switch</translation>
+ </message>
+ <message id="xx_wg_buttons_checkbox">
+ <location filename="../mainpage.cpp" line="117"/>
+ <source>Checkbox</source>
+ <translation>Checkbox</translation>
+ </message>
+ <message id="xx_wg_categories_dialogs_and_banners">
+ <location filename="../mainpage.cpp" line="120"/>
+ <source>Dialogs and Banners</source>
+ <translation>Dialogs and Banners</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_single_selection_dialog">
+ <location filename="../mainpage.cpp" line="122"/>
+ <source>Single Selection Dialog</source>
+ <translation>Single Selection Dialog</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_multiple_selection_dialog">
+ <location filename="../mainpage.cpp" line="124"/>
+ <source>Multiple Selection Dialog</source>
+ <translation>Multiple Selection Dialog</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_query_dialog">
+ <location filename="../mainpage.cpp" line="126"/>
+ <source>Query Dialog</source>
+ <translation>Query Dialog</translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_banner">
+ <location filename="../mainpage.cpp" line="128"/>
+ <source>Banner</source>
+ <translation>Banner</translation>
+ </message>
+ <message id="xx_wg_categories_lists_grids_and_popups">
+ <location filename="../mainpage.cpp" line="131"/>
+ <source>Lists, Grids and Popups</source>
+ <translation>Lists, Grids and Popups</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_list">
+ <location filename="../mainpage.cpp" line="133"/>
+ <source>List</source>
+ <translation>List</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_grid">
+ <location filename="../mainpage.cpp" line="135"/>
+ <source>Grid</source>
+ <translation>Grid</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_object_menu">
+ <location filename="../mainpage.cpp" line="137"/>
+ <source>Object Menu</source>
+ <translation>Object Menu</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_combobox">
+ <location filename="../mainpage.cpp" line="139"/>
+ <source>ComboBox</source>
+ <translation>Combobox</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_contentitems">
+ <location filename="../mainpage.cpp" line="141"/>
+ <source>ContentItems</source>
+ <translation>Content items</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_bubble">
+ <location filename="../mainpage.cpp" line="143"/>
+ <source>Speech bubble</source>
+ <translation>Speech bubble</translation>
+ </message>
+ <message id="xx_wg_categories_user_input">
+ <location filename="../mainpage.cpp" line="146"/>
+ <source>User Input</source>
+ <translation>User Input</translation>
+ </message>
+ <message id="xx_wg_user_input_text_entries">
+ <location filename="../mainpage.cpp" line="148"/>
+ <source>Text Entries</source>
+ <translation>Text Entries</translation>
+ </message>
+ <message id="xx_wg_user_input_slider">
+ <location filename="../mainpage.cpp" line="150"/>
+ <source>Slider</source>
+ <translation>Slider</translation>
+ </message>
+ <message id="xx_wg_user_input_input_feedback">
+ <location filename="../mainpage.cpp" line="152"/>
+ <source>Input Feedback</source>
+ <translation>Input Feedback</translation>
+ </message>
<message id="xx_application_title">
- <location filename="../listpage.cpp" line="180"/>
+ <location filename="../mainpage.cpp" line="330"/>
<source>Widgets Gallery</source>
<translation>Widgets Gallery</translation>
</message>
<message id="xx_apporientation_auto">
- <location filename="../listpage.cpp" line="449"/>
+ <location filename="../mainpage.cpp" line="546"/>
<source>Automatic</source>
<translation>Automatic</translation>
</message>
<message id="xx_apporientation_portrait">
- <location filename="../listpage.cpp" line="457"/>
+ <location filename="../mainpage.cpp" line="554"/>
<source>Portrait</source>
<translation>Portrait</translation>
</message>
<message id="xx_apporientation_landscape">
- <location filename="../listpage.cpp" line="465"/>
+ <location filename="../mainpage.cpp" line="562"/>
<source>Landscape</source>
<translation>Landscape</translation>
</message>
<message id="xx_apporientation_angle0">
- <location filename="../listpage.cpp" line="473"/>
+ <location filename="../mainpage.cpp" line="570"/>
<source>0 degrees</source>
<translation>0 degrees</translation>
</message>
<message id="xx_apporientation_angle90">
- <location filename="../listpage.cpp" line="481"/>
+ <location filename="../mainpage.cpp" line="578"/>
<source>90 degrees clockwise</source>
<translation>90 degrees clockwise</translation>
</message>
<message id="xx_apporientation_angle180">
- <location filename="../listpage.cpp" line="489"/>
+ <location filename="../mainpage.cpp" line="586"/>
<source>180 degrees clockwise</source>
<translation>180 degrees clockwise</translation>
</message>
<message id="xx_apporientation_angle270">
- <location filename="../listpage.cpp" line="497"/>
+ <location filename="../mainpage.cpp" line="594"/>
<source>270 degrees clockwise</source>
<translation>270 degrees clockwise</translation>
</message>
<message id="xx_label_page_title">
- <location filename="../labelpage.cpp" line="119"/>
+ <location filename="../labelpage.cpp" line="108"/>
<source>Labels</source>
<translation>Labels</translation>
</message>
<message id="xx_label_page_info_label">
- <location filename="../labelpage.cpp" line="129"/>
+ <location filename="../labelpage.cpp" line="118"/>
<source>Simple Label is used mainly by other components, and it does not support any formatting or interaction.
Rich Label supports multiple lines, HTML formatting and highlighting for links.
@@ -62,72 +217,107 @@ Rich Label supports multiple lines, HTML formatting and highlighting for links.
All Labels can be aligned left, right or center and will be automatically truncated if the text does not fit inside the given area.</translation>
</message>
<message id="xx_simple_label">
- <location filename="../labelpage.cpp" line="131"/>
+ <location filename="../labelpage.cpp" line="120"/>
<source>Simple Label</source>
<translation>Simple Label</translation>
</message>
<message id="xx_rich_label">
- <location filename="../labelpage.cpp" line="134"/>
+ <location filename="../labelpage.cpp" line="123"/>
<source>Rich Label &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, http://www.nokia.com, +358401234567, fors.fagerstrom@email.com</source>
<translation>Rich Label &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, http://www.nokia.com, +358401234567, fors.fagerstrom@email.com</translation>
</message>
+ <message id="xx_wg_multiple_selection_dialogs_page_question_dialog">
+ <location filename="../multipleselectiondialogspage.cpp" line="94"/>
+ <source>Question Dialog</source>
+ <translation>Question Dialog</translation>
+ </message>
<message id="xx_dialogs_and_notifications_question_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="86"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="118"/>
<source>Question Dialog Title</source>
<translation>Question Dialog Title</translation>
</message>
<message id="xx_dialogs_and_notifications_question_dialog_content">
- <location filename="../dialogsandnotificationspage.cpp" line="90"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="122"/>
<source>Lorem ipsum dolor sit amet?</source>
<translation>Lorem ipsum dolor sit amet?</translation>
</message>
+ <message id="xx_wg_query_dialogs_page_entry_dialog">
+ <location filename="../querydialogspage.cpp" line="95"/>
+ <source>Entry Dialog</source>
+ <translation>Entry Dialog</translation>
+ </message>
+ <message id="xx_wg_query_dialogs_page_long_dialog">
+ <location filename="../querydialogspage.cpp" line="97"/>
+ <source>Long Dialog</source>
+ <translation>Long Dialog</translation>
+ </message>
<message id="xx_dialogs_and_notifications_entry_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="103"/>
+ <location filename="../querydialogspage.cpp" line="124"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message id="xx_dialogs_and_notifications_entry_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="113"/>
+ <location filename="../querydialogspage.cpp" line="134"/>
<source>Please enter your name</source>
<translation>Please enter your name</translation>
</message>
<message id="xx_dialogs_and_notifications_long_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="129"/>
+ <location filename="../querydialogspage.cpp" line="150"/>
<source>Select printer</source>
<translation>Select printer</translation>
</message>
+ <message id="xx_wg_single_selection_dialogs_page_stacked_dialogs">
+ <location filename="../singleselectiondialogspage.cpp" line="94"/>
+ <source>Stacked Dialogs</source>
+ <translation>Stacked Dialogs</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_system_modal_dialog">
+ <location filename="../singleselectiondialogspage.cpp" line="96"/>
+ <source>System Modal Dialog</source>
+ <translation>System Modal Dialog</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_dialog_with_progress_indicator">
+ <location filename="../singleselectiondialogspage.cpp" line="98"/>
+ <source>Dialog with Progress Indicator</source>
+ <translation>Dialog with Progress Indicator</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_message_box">
+ <location filename="../singleselectiondialogspage.cpp" line="100"/>
+ <source>Message Box</source>
+ <translation>Message Box</translation>
+ </message>
<message id="xx_dialogs_and_notifications_stacked_dialog_button">
- <location filename="../dialogsandnotificationspage.cpp" line="180"/>
+ <location filename="../singleselectiondialogspage.cpp" line="129"/>
<source>Click to spawn a nested dialog</source>
<translation>Click to spawn a nested dialog</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="182"/>
+ <location filename="../singleselectiondialogspage.cpp" line="131"/>
<source>Stacked dialogs</source>
<translation>Stacked dialogs</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_open_nested_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="196"/>
+ <location filename="../singleselectiondialogspage.cpp" line="145"/>
<source>Click to open a nested message box</source>
<translation>Click to open a nested message box</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_nested_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="198"/>
+ <location filename="../singleselectiondialogspage.cpp" line="147"/>
<source>This is a nested dialog</source>
<translation>This is a nested dialog</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_messagebox_text">
- <location filename="../dialogsandnotificationspage.cpp" line="212"/>
+ <location filename="../singleselectiondialogspage.cpp" line="160"/>
<source>I&apos;m a nested message box</source>
<translation>I’m a nested message box</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="223"/>
+ <location filename="../singleselectiondialogspage.cpp" line="171"/>
<source>System Modal Dialog</source>
<translation>System Modal Dialog</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="230"/>
+ <location filename="../singleselectiondialogspage.cpp" line="178"/>
<source>I&apos;m a window modal dialog.
There&apos;s no way around me!
Muwhahaha... [evil laugh]</source>
@@ -139,265 +329,224 @@ There&apos;s no way around me!
Muwhahaha... [evil laugh]</translation>
</message>
<message id="xx_dialogs_and_notifications_message_box_text">
- <location filename="../dialogsandnotificationspage.cpp" line="269"/>
+ <location filename="../singleselectiondialogspage.cpp" line="217"/>
<source>Hello World!</source>
<translation>Hello World!</translation>
</message>
+ <message id="xx_wg_banners_page_event_banner">
+ <location filename="../bannerspage.cpp" line="90"/>
+ <source>Event Banner</source>
+ <translation>Event Banner</translation>
+ </message>
+ <message id="xx_wg_banners_page_information_banner">
+ <location filename="../bannerspage.cpp" line="92"/>
+ <source>Information Banner</source>
+ <translation>Information Banner</translation>
+ </message>
+ <message id="xx_wg_banners_page_system_information_banner">
+ <location filename="../bannerspage.cpp" line="94"/>
+ <source>System Information Banner</source>
+ <translation>System Information Banner</translation>
+ </message>
<message id="xx_dialogs_and_notifications_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="279"/>
+ <location filename="../bannerspage.cpp" line="121"/>
<source>&lt;b&gt;Ida Taipale&lt;/b&gt;&lt;br/&gt;Have you seen my dog?</source>
<translation>&lt;b&gt;Ida Taipale&lt;/b&gt;&lt;br/&gt;Have you seen my dog?</translation>
</message>
<message id="xx_dialogs_and_notifications_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="292"/>
+ <location filename="../bannerspage.cpp" line="134"/>
<source>&lt;b&gt;Battery is running low&lt;/b&gt;</source>
<translation>&lt;b&gt;Battery is running low&lt;/b&gt;</translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="303"/>
+ <location filename="../bannerspage.cpp" line="145"/>
<source>&lt;b&gt;Incoming call&lt;/b&gt;</source>
<translation>&lt;b&gt;Incoming call&lt;/b&gt;</translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner_accept">
- <location filename="../dialogsandnotificationspage.cpp" line="305"/>
+ <location filename="../bannerspage.cpp" line="147"/>
<source>Accept</source>
<translation>Accept</translation>
</message>
- <message id="xx_dialogs_and_notifications_title">
- <location filename="../dialogsandnotificationspage.cpp" line="378"/>
- <source>Dialogs and Notifications</source>
- <translation variants="yes">
- <lengthvariant>Dialogs and Notifications</lengthvariant>
- <lengthvariant>Dialogs a. Notifications</lengthvariant>
- <lengthvariant>Dialogs &amp; Notifications</lengthvariant>
- <lengthvariant>Dialogs/Notifications</lengthvariant>
- <lengthvariant>Dial./Notific.</lengthvariant>
- </translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="382"/>
- <source>Dialog examples</source>
- <translation>Dialog examples</translation>
- </message>
- <message id="xx_dialogs_and_notifications_query_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="384"/>
- <source>Question Dialog</source>
- <translation>Query Dialog</translation>
- </message>
- <message id="xx_dialogs_and_notifications_entry_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="386"/>
- <source>Entry Dialog</source>
- <translation>Entry Dialog</translation>
- </message>
- <message id="xx_dialogs_and_notifications_long_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="388"/>
- <source>A Long Dialog</source>
- <translation>A Long Dialog</translation>
- </message>
- <message id="xx_dialogs_and_notifications_stacked_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="391"/>
- <source>Stacked Dialogs</source>
- <translation>Stacked Dialogs</translation>
- </message>
- <message id="xx_dialogs_and_notifications_system_modal_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="394"/>
- <source>System Modal Dialog</source>
- <translation>System Modal Dialog</translation>
- </message>
- <message id="xx_dialogs_and_notifications_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="402"/>
- <source>Simple Message Box</source>
- <translation>Simple Message Box</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_notifications">
- <location filename="../dialogsandnotificationspage.cpp" line="400"/>
- <source>Notifications and messages</source>
- <translation>Notifications and messages</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="404"/>
- <source>Event Banner</source>
- <translation>Event Banner</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="406"/>
- <source>Information Banner</source>
- <translation>Information Banner</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="408"/>
- <source>System Information Banner</source>
- <translation>System Information Banner</translation>
- </message>
<message id="xx_dialogs_and_notifications_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="249"/>
+ <location filename="../singleselectiondialogspage.cpp" line="197"/>
<source>Progress Indicator</source>
<translation>Progress Indicator</translation>
</message>
- <message id="xx_dialogs_and_notifications_dialog_with_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="397"/>
- <source>Dialog With Progress Indicator</source>
- <translation>Dialog With Progress Indicator</translation>
- </message>
<message id="xx_Image">
- <location filename="../imagepage.cpp" line="133"/>
+ <location filename="../imagepage.cpp" line="131"/>
<source>Image</source>
<translation>Image</translation>
</message>
<message id="xx_Image properties">
- <location filename="../imagepage.cpp" line="137"/>
+ <location filename="../imagepage.cpp" line="135"/>
<source>Image properties</source>
<translation>Image properties</translation>
</message>
<message id="xx_image_operations">
- <location filename="../imagepage.cpp" line="155"/>
+ <location filename="../imagepage.cpp" line="153"/>
<source>Image operations</source>
<translation>Image operations</translation>
</message>
<message id="xx_Zoom">
- <location filename="../imagepage.cpp" line="143"/>
+ <location filename="../imagepage.cpp" line="141"/>
<source>Zoom</source>
<translation>Zoom</translation>
</message>
<message id="xx_Transparency">
- <location filename="../imagepage.cpp" line="145"/>
+ <location filename="../imagepage.cpp" line="143"/>
<source>Transparency</source>
<translation>Transparency</translation>
</message>
<message id="xx_Crop">
- <location filename="../imagepage.cpp" line="147"/>
+ <location filename="../imagepage.cpp" line="145"/>
<source>Crop</source>
<translation>Crop</translation>
</message>
+ <message id="xx_listpage_list_remove">
+ <location filename="../mlistpage.cpp" line="547"/>
+ <source>Remove</source>
+ <translation>Remove</translation>
+ </message>
+ <message id="xx_listpage_list_edit">
+ <location filename="../mlistpage.cpp" line="553"/>
+ <source>Edit</source>
+ <translation>Edit</translation>
+ </message>
<message id="xx_listpage_title">
- <location filename="../mlistpage.cpp" line="423"/>
+ <location filename="../mlistpage.cpp" line="573"/>
<source>List</source>
<translation>List</translation>
</message>
<message id="xx_textentry_title">
- <location filename="../textentrypage.cpp" line="570"/>
+ <location filename="../textentrypage.cpp" line="582"/>
<source>Text Entries</source>
<translation>Text Entries</translation>
</message>
<message id="xx_textentry_free_text">
- <location filename="../textentrypage.cpp" line="586"/>
+ <location filename="../textentrypage.cpp" line="598"/>
<source>Free text:</source>
<translation>Free text:</translation>
</message>
<message id="xx_textentry_free_text_masked">
- <location filename="../textentrypage.cpp" line="588"/>
+ <location filename="../textentrypage.cpp" line="600"/>
<source>Free text(masked):</source>
<translation>Free text(masked):</translation>
</message>
<message id="xx_textentry_number_text">
- <location filename="../textentrypage.cpp" line="590"/>
+ <location filename="../textentrypage.cpp" line="602"/>
<source>Number text:</source>
<translation>Number text:</translation>
</message>
<message id="xx_textentry_phone_number">
- <location filename="../textentrypage.cpp" line="592"/>
+ <location filename="../textentrypage.cpp" line="604"/>
<source>Phone number:</source>
<translation>Phone number:</translation>
</message>
<message id="xx_textentry_email_text">
- <location filename="../textentrypage.cpp" line="594"/>
+ <location filename="../textentrypage.cpp" line="606"/>
<source>Email text:</source>
<translation>Email text:</translation>
</message>
+ <message id="xx_textentry_richtext_text">
+ <location filename="../textentrypage.cpp" line="616"/>
+ <source>Rich Text:</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_textentry_noecho">
- <location filename="../textentrypage.cpp" line="605"/>
+ <location filename="../textentrypage.cpp" line="619"/>
<source>No Echo mode:</source>
<translation>No Echo mode:</translation>
</message>
<message id="xx_textentry_echoonedit">
- <location filename="../textentrypage.cpp" line="608"/>
+ <location filename="../textentrypage.cpp" line="622"/>
<source>Echo on edit:</source>
<translation>Echo on edit:</translation>
</message>
<message id="xx_textentry_direct_input_mode">
- <location filename="../textentrypage.cpp" line="611"/>
+ <location filename="../textentrypage.cpp" line="625"/>
<source>Direct Input Mode:</source>
<translation>Direct Input Mode:</translation>
</message>
<message id="xx_textentry_click_here">
- <location filename="../textentrypage.cpp" line="146"/>
- <location filename="../textentrypage.cpp" line="168"/>
+ <location filename="../textentrypage.cpp" line="147"/>
+ <location filename="../textentrypage.cpp" line="169"/>
<source>Click here</source>
<translation>Click here</translation>
</message>
<message id="xx_textentry_press_any_key">
- <location filename="../textentrypage.cpp" line="159"/>
+ <location filename="../textentrypage.cpp" line="160"/>
<source>Press any key</source>
<translation>Press any key</translation>
</message>
<message id="xx_textentry_keypress">
- <location filename="../textentrypage.cpp" line="185"/>
+ <location filename="../textentrypage.cpp" line="186"/>
<source>&lt;i&gt;Key press&lt;/i&gt; key:</source>
<translation>&lt;i&gt;Key press&lt;/i&gt; key:</translation>
</message>
<message id="xx_textentry_text">
- <location filename="../textentrypage.cpp" line="188"/>
- <location filename="../textentrypage.cpp" line="202"/>
+ <location filename="../textentrypage.cpp" line="189"/>
+ <location filename="../textentrypage.cpp" line="203"/>
<source>text:</source>
<translation>text:</translation>
</message>
<message id="xx_textentry_keyrelease">
- <location filename="../textentrypage.cpp" line="199"/>
+ <location filename="../textentrypage.cpp" line="200"/>
<source>&lt;i&gt;Key release&lt;/i&gt; key:</source>
<translation>&lt;i&gt;Key release&lt;/i&gt; key:</translation>
</message>
<message id="xx_tooltip_customtoolbar1">
- <location filename="../textentrypage.cpp" line="507"/>
+ <location filename="../textentrypage.cpp" line="519"/>
<source>Example custom toolbar 1</source>
- <translation type="unfinished"></translation>
+ <translation>Example custom toolbar 1</translation>
</message>
<message id="xx_tooltip_customtoolbar2">
- <location filename="../textentrypage.cpp" line="520"/>
+ <location filename="../textentrypage.cpp" line="532"/>
<source>Example custom toolbar 2</source>
- <translation type="unfinished"></translation>
+ <translation>Example custom toolbar 2</translation>
</message>
<message id="xx_textentry_url_text">
- <location filename="../textentrypage.cpp" line="596"/>
+ <location filename="../textentrypage.cpp" line="608"/>
<source>Url text:</source>
<translation>Url text:</translation>
</message>
<message id="xx_textentry_multiline">
- <location filename="../textentrypage.cpp" line="598"/>
+ <location filename="../textentrypage.cpp" line="610"/>
<source>Multiline:</source>
<translation>Multiline:</translation>
</message>
<message id="xx_tooltip_entry0">
- <location filename="../textentrypage.cpp" line="574"/>
+ <location filename="../textentrypage.cpp" line="586"/>
<source>Enter text here</source>
<translation>Enter text here</translation>
</message>
<message id="xx_tooltip_entry1">
- <location filename="../textentrypage.cpp" line="577"/>
+ <location filename="../textentrypage.cpp" line="589"/>
<source>This tooltip is quite long and will be clipped on the display</source>
<translation>This tooltip is quite long and will be clipped on the display</translation>
</message>
<message id="xx_textentry_custom_toolbar1">
- <location filename="../textentrypage.cpp" line="614"/>
+ <location filename="../textentrypage.cpp" line="628"/>
<source>Custom ToolBar 1:</source>
- <translation type="unfinished"></translation>
+ <translation>Custom ToolBar 1:</translation>
</message>
<message id="xx_textentry_custom_toolbar2">
- <location filename="../textentrypage.cpp" line="616"/>
+ <location filename="../textentrypage.cpp" line="630"/>
<source>Custom ToolBar 2:</source>
- <translation type="unfinished"></translation>
+ <translation>Custom ToolBar 2:</translation>
</message>
<message id="xx_auto_true_entry0">
- <location filename="../textentrypage.cpp" line="649"/>
+ <location filename="../textentrypage.cpp" line="663"/>
<source>Auto Capitalisation is active</source>
<translation>Auto Capitalisation is active</translation>
</message>
<message id="xx_auto_false_entry0">
- <location filename="../textentrypage.cpp" line="652"/>
+ <location filename="../textentrypage.cpp" line="666"/>
<source>No Auto Capitalisation</source>
<translation>No Auto Capitalisation</translation>
</message>
<message id="xx_tooltip_entry6">
- <location filename="../textentrypage.cpp" line="583"/>
+ <location filename="../textentrypage.cpp" line="595"/>
<source>This is a multiline text entry</source>
<oldsource>This is
multiline
@@ -405,22 +554,22 @@ tooltip</oldsource>
<translation>This is a multiline text entry</translation>
</message>
<message id="xx_textentry_singleselectall">
- <location filename="../textentrypage.cpp" line="600"/>
+ <location filename="../textentrypage.cpp" line="612"/>
<source>Singleline (selectall):</source>
<translation>Singleline (selectall)</translation>
</message>
<message id="xx_auto_capitalisation">
- <location filename="../textentrypage.cpp" line="619"/>
+ <location filename="../textentrypage.cpp" line="633"/>
<source>Auto capitalisation</source>
<translation>Auto capitalisation</translation>
</message>
<message id="xx_error_correction">
- <location filename="../textentrypage.cpp" line="621"/>
+ <location filename="../textentrypage.cpp" line="635"/>
<source>Error correction</source>
<translation>Error correction</translation>
</message>
<message id="xx_slider_page_title">
- <location filename="../sliderpage.cpp" line="169"/>
+ <location filename="../sliderpage.cpp" line="168"/>
<source>Sliders</source>
<translation variants="yes">
<lengthvariant>Sliders</lengthvariant>
@@ -428,28 +577,28 @@ tooltip</oldsource>
</translation>
</message>
<message id="xx_slider_personal_data_label">
- <location filename="../sliderpage.cpp" line="180"/>
+ <location filename="../sliderpage.cpp" line="179"/>
<source>Personal data</source>
<translation>Personal data</translation>
</message>
<message id="xx_slider_age_label">
- <location filename="../sliderpage.cpp" line="184"/>
+ <location filename="../sliderpage.cpp" line="183"/>
<source>Please select your age:œ!! Please select your age:œ!! Please select your age:œ!! Age:</source>
<oldsource>Please select your age:</oldsource>
<translation>Please select your age:</translation>
</message>
<message id="xx_slider_brightness_label">
- <location filename="../sliderpage.cpp" line="217"/>
+ <location filename="../sliderpage.cpp" line="216"/>
<source>Brightness:</source>
<translation>Brightness:</translation>
</message>
<message id="xx_slider_player_label">
- <location filename="../sliderpage.cpp" line="197"/>
+ <location filename="../sliderpage.cpp" line="196"/>
<source>Player:</source>
<translation>Player:</translation>
</message>
<message id="xx_slider_page_info_label">
- <location filename="../sliderpage.cpp" line="177"/>
+ <location filename="../sliderpage.cpp" line="176"/>
<source>Slider is used for continuous set of values, among which user can choose one value.
Seekbar is a special type of Slider used for displaying playback status for multimedia content.</source>
@@ -457,13 +606,13 @@ Seekbar is a special type of Slider used for displaying playback status for mult
Seekbar is a special type of Slider used for displaying playback status for multimedia content.</translation>
</message>
- <message id="xx_viewmenu_page_title">
- <location filename="../applicationmenupage.cpp" line="60"/>
+ <message id="xx_applicationmenu_page_title">
+ <location filename="../applicationmenupage.cpp" line="62"/>
<source>Application Menu</source>
<translation>Application Menu</translation>
</message>
<message id="xx_applicationmenu_page_info">
- <location filename="../applicationmenupage.cpp" line="75"/>
+ <location filename="../applicationmenupage.cpp" line="77"/>
<source>Application Menu is a menu element available to any view. &lt;ul&gt;&lt;li&gt;It can be opened by tapping on the menu title area.&lt;/li&gt;&lt;li&gt;It contains commands and view settings for the view in question and an optional area for style commands.&lt;/li&gt;&lt;li&gt;Each view of the application can have different menu contents.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Guidelines&lt;/b&gt; for mandatory menu items: &lt;ul&gt;&lt;li&gt;Settings should be on the main View of the application, unless the settings are specific to a sub-View&lt;/li&gt;&lt;li&gt;Help should be available in each View &lt;/li&gt;&lt;li&gt;Exit task should be present in all Views except for the main View of the application.&lt;/li&gt;&lt;/ul&gt;</source>
<translation>Application Menu is a menu element available to any view. &lt;ul&gt;&lt;li&gt;It can be opened by tapping on the menu title area.&lt;/li&gt;&lt;li&gt;It contains commands and view settings for the view in question and an optional area for style commands.&lt;/li&gt;&lt;li&gt;Each view of the application can have different menu contents.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Guidelines&lt;/b&gt; for mandatory menu items: &lt;ul&gt;&lt;li&gt;Settings should be on the main View of the application, unless the settings are specific to a sub-View&lt;/li&gt;&lt;li&gt;Help should be available in each View &lt;/li&gt;&lt;li&gt;Exit task should be present in all Views except for the main View of the application.&lt;/li&gt;&lt;/ul&gt;</translation>
</message>
@@ -483,67 +632,67 @@ Seekbar is a special type of Slider used for displaying playback status for mult
<translation>Time consuming setting</translation>
</message>
<message id="xx_container_page_title">
- <location filename="../containerpage.cpp" line="65"/>
+ <location filename="../containerpage.cpp" line="64"/>
<source>Container</source>
<translation>Container</translation>
</message>
<message id="xx_progressbar_page_title">
- <location filename="../progressbarpage.cpp" line="80"/>
+ <location filename="../progressbarpage.cpp" line="78"/>
<source>Progress Bar</source>
<translation>Progress Bar</translation>
</message>
<message id="xx_progressbar_page_info_label">
- <location filename="../progressbarpage.cpp" line="85"/>
+ <location filename="../progressbarpage.cpp" line="83"/>
<source>A Progress Bar can indicate an ongoing process with either known or unknown durations.</source>
<translation>A Progress Bar can indicate an ongoing process with either known or unknown durations.</translation>
</message>
<message id="xx_progressindicator_unknown_duration_bar">
- <location filename="../progressbarpage.cpp" line="89"/>
+ <location filename="../progressbarpage.cpp" line="87"/>
<source>Installing CoolApp</source>
<translation>Installing CoolApp</translation>
</message>
<message id="xx_progressindicator_known_duration_bar">
- <location filename="../progressbarpage.cpp" line="87"/>
+ <location filename="../progressbarpage.cpp" line="85"/>
<source>Downloading nicepic.jpg</source>
<translation>Downloading nicepic.jpg</translation>
</message>
<message id="xx_toolbar_page_example1">
- <location filename="../toolbarpage.cpp" line="168"/>
+ <location filename="../toolbarpage.cpp" line="176"/>
<source>Example 1</source>
<translation>Example 1</translation>
</message>
<message id="xx_toolbar_page_example2">
- <location filename="../toolbarpage.cpp" line="174"/>
+ <location filename="../toolbarpage.cpp" line="182"/>
<source>Example 2</source>
<translation>Example 2</translation>
</message>
<message id="xx_toolbar_page_defaultview">
- <location filename="../toolbarpage.cpp" line="180"/>
+ <location filename="../toolbarpage.cpp" line="188"/>
<source>Default View</source>
<translation>Default View</translation>
</message>
<message id="xx_toolbar_page_tabview">
- <location filename="../toolbarpage.cpp" line="186"/>
+ <location filename="../toolbarpage.cpp" line="194"/>
<source>Tab View</source>
<translation>Tab View</translation>
</message>
<message id="xx_toolbar_page_title">
- <location filename="../toolbarpage.cpp" line="208"/>
+ <location filename="../toolbarpage.cpp" line="216"/>
<source>ToolBar</source>
<translation>Tool Bar</translation>
</message>
<message id="xx_toolbar_page_info">
- <location filename="../toolbarpage.cpp" line="215"/>
+ <location filename="../toolbarpage.cpp" line="223"/>
<source>&lt;b&gt;Toolbar&lt;/b&gt; acts as a container for actions. Depending upon the view attached, it either acts as a tab bar or is a container for buttons and text input field. &lt;ul&gt;&lt;li&gt;Click Menu to explore the example&lt;/li&gt;&lt;/ul&gt;</source>
<translation>&lt;b&gt;Toolbar&lt;/b&gt; acts as a container for actions. Depending upon the view attached, it either acts as a tab bar or is a container for buttons and text input field. &lt;ul&gt;&lt;li&gt;Click Menu to explore the example&lt;/li&gt;&lt;/ul&gt;</translation>
</message>
<message id="xx_objectmenu_page_title">
- <location filename="../objectmenupage.cpp" line="155"/>
+ <location filename="../objectmenupage.cpp" line="154"/>
<source>Object menu</source>
<translation>Object menu</translation>
</message>
<message id="xx_objectmenu_page_info_label">
- <location filename="../objectmenupage.cpp" line="167"/>
+ <location filename="../objectmenupage.cpp" line="166"/>
<source>Object Menu is a popup menu of commands opened by long tapping an element. It is used for providing shortcuts to functions related to that particular element.
The primary (single short tap) action of the element should not be duplicated in the Object Menu.</source>
@@ -552,57 +701,63 @@ The primary (single short tap) action of the element should not be duplicated in
The primary (single short tap) action of the element should not be duplicated in the Object Menu.</translation>
</message>
<message id="xx_objectmenu_page_container_friends">
- <location filename="../objectmenupage.cpp" line="170"/>
+ <location filename="../objectmenupage.cpp" line="169"/>
<source>Friends</source>
<translation>Friends</translation>
</message>
<message id="xx_objectmenu_page_container_albums">
- <location filename="../objectmenupage.cpp" line="172"/>
+ <location filename="../objectmenupage.cpp" line="171"/>
<source>Favorite Albums</source>
<translation>Favorite Albums</translation>
</message>
<message id="xx_displaymodes_navbarcombo">
- <location filename="../navigationbarpage.cpp" line="60"/>
+ <location filename="../displaymodespage.cpp" line="59"/>
<source>Navigation Bar</source>
<translation>Navigation Bar</translation>
</message>
<message id="xx_displaymodes_escapebtncombo">
- <location filename="../navigationbarpage.cpp" line="68"/>
+ <location filename="../displaymodespage.cpp" line="67"/>
<source>Escape Button</source>
<translation>Escape Button</translation>
</message>
<message id="xx_displaymodes_homebtncombo">
- <location filename="../navigationbarpage.cpp" line="76"/>
+ <location filename="../displaymodespage.cpp" line="75"/>
<source>Home Button</source>
<translation>Home Button</translation>
</message>
<message id="xx_displaymodes_page_title">
- <location filename="../navigationbarpage.cpp" line="125"/>
- <source>Display Modes and Full Screen</source>
+ <location filename="../displaymodespage.cpp" line="143"/>
+ <source>Display Modes</source>
+ <oldsource>Display Modes and Full Screen</oldsource>
<translation>Display Modes and Full Screen</translation>
</message>
<message id="xx_displaymodes_display_mode">
- <location filename="../navigationbarpage.cpp" line="129"/>
+ <location filename="../displaymodespage.cpp" line="147"/>
<source>Components&apos; display mode:</source>
<translation>Components&apos; display mode:</translation>
</message>
- <message id="xx_displaymodes_escape_mode_label">
- <location filename="../navigationbarpage.cpp" line="131"/>
- <source>Escape Button mode:</source>
- <translation>Escape Button mode:</translation>
+ <message id="xx_displaymodes_window_state">
+ <location filename="../displaymodespage.cpp" line="150"/>
+ <source>Window state:</source>
+ <translation>Window state:</translation>
+ </message>
+ <message id="xx_displaymodes_full_screen">
+ <location filename="../displaymodespage.cpp" line="153"/>
+ <source>Full Screen</source>
+ <translation>Full Screen</translation>
</message>
<message id="xx_displaymode_show">
- <location filename="../navigationbarpage.cpp" line="162"/>
+ <location filename="../displaymodespage.cpp" line="166"/>
<source>Show</source>
<translation>Show</translation>
</message>
<message id="xx_displaymode_autohide">
- <location filename="../navigationbarpage.cpp" line="164"/>
+ <location filename="../displaymodespage.cpp" line="168"/>
<source>Auto Hide</source>
<translation>Auto Hide</translation>
</message>
<message id="xx_displaymode_hide">
- <location filename="../navigationbarpage.cpp" line="166"/>
+ <location filename="../displaymodespage.cpp" line="170"/>
<source>Hide</source>
<translation>Hide</translation>
</message>
@@ -773,63 +928,23 @@ The primary (single short tap) action of the element should not be duplicated in
<source>Font test:</source>
<translation>Font test:</translation>
</message>
- <message id="xx_template_page_views_dialogs">
- <location filename="../templatepage.cpp" line="47"/>
- <source>Views and Dialogs</source>
- <translation>View and Dialogs</translation>
- </message>
- <message id="xx_template_page_contains_applets">
- <location filename="../templatepage.cpp" line="49"/>
- <source>Contains and Applets</source>
- <translation>Containers and Applets</translation>
- </message>
- <message id="xx_template_page_layouts_visuals">
- <location filename="../templatepage.cpp" line="51"/>
- <source>Layouts and Visuals</source>
- <translation>Layouts and Visuals</translation>
- </message>
- <message id="xx_template_page_buttons">
- <location filename="../templatepage.cpp" line="53"/>
- <source>Buttons</source>
- <translation>Buttons</translation>
- </message>
- <message id="xx_template_page_indicators_notifications">
- <location filename="../templatepage.cpp" line="55"/>
- <source>Indicators and Notifications</source>
- <translation>Indicators and Notifications</translation>
- </message>
- <message id="xx_template_page_lists_grids_menus">
- <location filename="../templatepage.cpp" line="57"/>
- <source>Lists, Grids and Menus</source>
- <translation>Lists, Grids and Menus</translation>
- </message>
- <message id="xx_template_page_user_input">
- <location filename="../templatepage.cpp" line="59"/>
- <source>User input</source>
- <translation>User Input</translation>
- </message>
- <message id="xx_template_page_input_feedback">
- <location filename="../templatepage.cpp" line="61"/>
- <source>Input Feedback</source>
- <translation>Input Feedback</translation>
- </message>
<message id="xx_image_page_info">
- <location filename="../imagepage.cpp" line="162"/>
+ <location filename="../imagepage.cpp" line="160"/>
<source>Image allows the placement of images onto the UI. Images are generally non-interactive elements. Various single and multiple touch interactions can be added to an Image component if desired. As an example, pinch gesture can be used in this page to zoom the image.</source>
<translation>Image allows the placement of images onto the UI. Images are generally non-interactive elements. Various single and multiple touch interactions can be added to an Image component if desired. As an example, pinch gesture can be used in this page to zoom the image.</translation>
</message>
<message id="xx_sample template">
- <location filename="../templatepage.cpp" line="125"/>
+ <location filename="../templatepage.cpp" line="107"/>
<source>Sample template</source>
<translation>Sample template</translation>
</message>
<message id="xx_template_page_title">
- <location filename="../templatepage.cpp" line="119"/>
+ <location filename="../templatepage.cpp" line="101"/>
<source>Template</source>
<translation>Template</translation>
</message>
<message id="xx_textentry_completion_text">
- <location filename="../textentrypage.cpp" line="602"/>
+ <location filename="../textentrypage.cpp" line="614"/>
<source>Email suggestion text:</source>
<translation>Email suggestion text:</translation>
</message>
@@ -844,17 +959,17 @@ The primary (single short tap) action of the element should not be duplicated in
<translation>ComboBox</translation>
</message>
<message id="xx_tooltip_entry8">
- <location filename="../textentrypage.cpp" line="580"/>
+ <location filename="../textentrypage.cpp" line="592"/>
<source>Provides email address suggestions</source>
<translation>Provides email address suggestions</translation>
</message>
<message id="xx_checkbox_page_title">
- <location filename="../checkboxpage.cpp" line="76"/>
+ <location filename="../checkboxpage.cpp" line="80"/>
<source>Checkbox</source>
<translation>Checkbox</translation>
</message>
<message id="xx_checkbox_page_info_label">
- <location filename="../checkboxpage.cpp" line="85"/>
+ <location filename="../checkboxpage.cpp" line="89"/>
<source>The Checkbox is a variant of Button that allows users to set the state of variable or setting which has two values, On and Off.
Checkbox essentially does the same thing as the Switch button, so please consider using a Switch instead.</source>
@@ -863,19 +978,17 @@ Checkbox essentially does the same thing as the Switch button, so please conside
Checkbox essentially does the same thing as the Switch button, so please consider using a Switch instead.</translation>
</message>
<message id="xx_checkbox_page_checkbox_label">
- <location filename="../checkboxpage.cpp" line="88"/>
- <source>I have read and understood the
-instructions.</source>
- <translation>I have read and understood the
-instructions.</translation>
+ <location filename="../checkboxpage.cpp" line="92"/>
+ <source>I have read and understood the instructions.</source>
+ <translation>I have read and understood the instructions.</translation>
</message>
<message id="xx_icon_button_page_title">
- <location filename="../iconbuttonpage.cpp" line="82"/>
+ <location filename="../iconbuttonpage.cpp" line="81"/>
<source>Icon Button</source>
<translation>Icon Button</translation>
</message>
<message id="xx_icon_button_page_info_label">
- <location filename="../iconbuttonpage.cpp" line="90"/>
+ <location filename="../iconbuttonpage.cpp" line="89"/>
<source>Icon Buttons have an icon and can have a text label. Icon button differs from push button by its visual presentation: it does not have button-style edges like a Push Button does.
Icon Buttons are used in e.g. Toolbars.</source>
@@ -884,7 +997,7 @@ instructions.</translation>
Icon Buttons are used in e.g. Toolbars.</translation>
</message>
<message id="xx_icon_button_page_icon_button2">
- <location filename="../iconbuttonpage.cpp" line="92"/>
+ <location filename="../iconbuttonpage.cpp" line="91"/>
<source>Lorem ipsum</source>
<translation>Lorem ipsum</translation>
</message>
@@ -920,33 +1033,34 @@ sit amet</source>
sit amet</translation>
</message>
<message id="xx_spinner_page_application_main_area">
- <location filename="../spinnerpage.cpp" line="69"/>
+ <location filename="../spinnerpage.cpp" line="68"/>
<source>In application main area</source>
<oldsource>In container main area</oldsource>
- <translation type="unfinished">In application main area</translation>
+ <translation>In container main area</translation>
</message>
<message id="xx_spinner_page_container_header">
- <location filename="../spinnerpage.cpp" line="75"/>
+ <location filename="../spinnerpage.cpp" line="74"/>
<source>In container header</source>
<translation>In container header</translation>
</message>
<message id="xx_spinner_page_menu">
- <location filename="../spinnerpage.cpp" line="81"/>
- <source>In view menu</source>
+ <location filename="../spinnerpage.cpp" line="80"/>
+ <source>In application menu</source>
+ <oldsource>In view menu</oldsource>
<translation>In view menu</translation>
</message>
<message id="xx_spinner_page_dialog">
- <location filename="../spinnerpage.cpp" line="87"/>
+ <location filename="../spinnerpage.cpp" line="86"/>
<source>In dialog</source>
<translation>In dialog</translation>
</message>
<message id="xx_spinner_page_title">
- <location filename="../spinnerpage.cpp" line="100"/>
+ <location filename="../spinnerpage.cpp" line="99"/>
<source>Spinner</source>
<translation>Spinner</translation>
</message>
<message id="xx_spinner_page_info_label">
- <location filename="../spinnerpage.cpp" line="109"/>
+ <location filename="../spinnerpage.cpp" line="108"/>
<source>Spinner is used to indicate that a progress is ongoing and the duration is unknown.
Spinners can also be used in situations when duration is known, but available space on screen does not permit using a Progress bar.
@@ -958,51 +1072,43 @@ Spinners can also be used in situations when duration is known, but available sp
See the menu for examples of different use cases.</translation>
</message>
- <message id="xx_spinner_page_email_header">
- <source>From: John Doe
-Date: Today
-Subject: This is funny stuff!</source>
- <translation type="obsolete">From: John Doe
-Date: Today
-Subject: This is funny stuff!</translation>
- </message>
<message id="xx_spinner_page_application_area_description">
- <location filename="../spinnerpage.cpp" line="119"/>
+ <location filename="../spinnerpage.cpp" line="118"/>
<source>Spinner can be used while content is loading.</source>
<translation>Spinner can be used while content is loading.</translation>
</message>
<message id="xx_spinner_page_container_title">
- <location filename="../spinnerpage.cpp" line="152"/>
+ <location filename="../spinnerpage.cpp" line="151"/>
<source>Online albums</source>
<translation>Online albums</translation>
</message>
<message id="xx_spinner_page_container_header_description">
- <location filename="../spinnerpage.cpp" line="161"/>
+ <location filename="../spinnerpage.cpp" line="160"/>
<source>Spinner can be used in container header to indicate that the items inside the container are being updated, but visible items can be interacted with.</source>
<translation>Spinner can be used in container header to indicate that the items inside the container are being updated, but visible items can be interacted with.</translation>
</message>
<message id="xx_spinner_page_application_menu_description">
- <location filename="../spinnerpage.cpp" line="205"/>
+ <location filename="../spinnerpage.cpp" line="204"/>
<source>Spinner in the application menu area indicates that the whole view is pending for update.</source>
<translation>Spinner in the application menu area indicates that the whole view is pending for update.</translation>
</message>
<message id="xx_spinner_page_dialog_header_description">
- <location filename="../spinnerpage.cpp" line="219"/>
+ <location filename="../spinnerpage.cpp" line="218"/>
<source>Spinner can be placed in dialog header to indicate changing content.</source>
<translation>Spinner can be placed in dialog header to indicate changing content.</translation>
</message>
<message id="xx_spinner_page_dialog_header">
- <location filename="../spinnerpage.cpp" line="240"/>
+ <location filename="../spinnerpage.cpp" line="239"/>
<source>Select Internet connection</source>
<translation>Select Internet connection</translation>
</message>
<message id="xx_switch_page_title">
- <location filename="../switchpage.cpp" line="128"/>
+ <location filename="../switchpage.cpp" line="127"/>
<source>Switch</source>
<translation>Switch</translation>
</message>
<message id="xx_switch_page_info_label">
- <location filename="../switchpage.cpp" line="138"/>
+ <location filename="../switchpage.cpp" line="137"/>
<source>A Switch button differs from both a push button and an icon button visually. It looks like a switch, communicating that pressing this button will not go to another view or will not perform any other actions except to toggle the state of the button.
Switches are used to indicate e.g. settings values</source>
@@ -1011,37 +1117,37 @@ Switches are used to indicate e.g. settings values</source>
Switches are used to indicate e.g. settings values</translation>
</message>
<message id="xx_switch_page_switch1">
- <location filename="../switchpage.cpp" line="141"/>
+ <location filename="../switchpage.cpp" line="140"/>
<source>Headlights</source>
<translation>Headlights</translation>
</message>
<message id="xx_switch_page_switch2">
- <location filename="../switchpage.cpp" line="143"/>
+ <location filename="../switchpage.cpp" line="142"/>
<source>Autopilot</source>
<translation>Autopilot</translation>
</message>
<message id="xx_switch_page_switch3">
- <location filename="../switchpage.cpp" line="145"/>
+ <location filename="../switchpage.cpp" line="144"/>
<source>Warp Drive</source>
<translation>Warp Drive</translation>
</message>
<message id="xx_switch_page_switch4">
- <location filename="../switchpage.cpp" line="147"/>
+ <location filename="../switchpage.cpp" line="146"/>
<source>Reactor Shields</source>
<translation>Reactor Shields</translation>
</message>
<message id="xx_switch_page_switch5">
- <location filename="../switchpage.cpp" line="149"/>
+ <location filename="../switchpage.cpp" line="148"/>
<source>Infinite Improbability Drive</source>
<translation>Infinite Improbability Drive</translation>
</message>
<message id="xx_input_feedback_page_title">
- <location filename="../feedbackpage.cpp" line="90"/>
+ <location filename="../feedbackpage.cpp" line="89"/>
<source>Input Feedback</source>
<translation>Input Feedback</translation>
</message>
<message id="xx_input_feedback_page_info_label">
- <location filename="../feedbackpage.cpp" line="100"/>
+ <location filename="../feedbackpage.cpp" line="99"/>
<source>This page contains buttons with custom input feedbacks. Any MWidget can have input feedback for press and release events. Input feedback can be a sound effect and/or a haptic effect (piezo, vibra) depending on the product.
Input feedbacks can be easily configured for different purposes using the theming system.</source>
@@ -1050,74 +1156,77 @@ Input feedbacks can be easily configured for different purposes using the themin
Input feedbacks can be easily configured for different purposes using the theming system.</translation>
</message>
<message id="xx_input_feedback_page_button1">
- <location filename="../feedbackpage.cpp" line="102"/>
+ <location filename="../feedbackpage.cpp" line="101"/>
<source>Default</source>
<translation>Default</translation>
</message>
<message id="xx_input_feedback_page_button2">
- <location filename="../feedbackpage.cpp" line="104"/>
+ <location filename="../feedbackpage.cpp" line="103"/>
<source>Different</source>
<translation>Different</translation>
</message>
<message id="xx_input_feedback_page_button3">
- <location filename="../feedbackpage.cpp" line="106"/>
+ <location filename="../feedbackpage.cpp" line="105"/>
<source>Sluggish</source>
<translation>Sluggish</translation>
</message>
<message id="xx_input_feedback_page_button4">
- <location filename="../feedbackpage.cpp" line="108"/>
+ <location filename="../feedbackpage.cpp" line="107"/>
<source>Babytoy</source>
<translation>Babytoy</translation>
</message>
<message id="xx_input_feedback_page_button5">
- <location filename="../feedbackpage.cpp" line="110"/>
+ <location filename="../feedbackpage.cpp" line="109"/>
<source>Space</source>
<translation>Space</translation>
</message>
<message id="xx_input_feedback_page_button6">
- <location filename="../feedbackpage.cpp" line="112"/>
+ <location filename="../feedbackpage.cpp" line="111"/>
<source>Silent</source>
<translation>Silent</translation>
</message>
<message id="xx_gridpage_configuration">
- <location filename="../mgridpage.cpp" line="190"/>
+ <location filename="../mgridpage.cpp" line="193"/>
<source>Configuration</source>
<translation>Configuration</translation>
</message>
<message id="xx_gridpage_title">
- <location filename="../mgridpage.cpp" line="201"/>
+ <location filename="../mgridpage.cpp" line="204"/>
<source>Grid page</source>
<translation>Grid page</translation>
</message>
<message id="xx_gridpage_set_columns">
- <location filename="../mgridpage.cpp" line="283"/>
+ <location filename="../mgridpage.cpp" line="290"/>
<source>Set columns</source>
<translation>Set columns</translation>
</message>
<message id="xx_gridpage_landscape">
- <location filename="../mgridpage.cpp" line="309"/>
+ <location filename="../mgridpage.cpp" line="316"/>
<source>Landscape</source>
<translation>Landscape</translation>
</message>
<message id="xx_gridpage_portrait">
- <location filename="../mgridpage.cpp" line="314"/>
+ <location filename="../mgridpage.cpp" line="321"/>
<source>Portrait</source>
<translation>Portrait</translation>
</message>
- <message id="xx_video_container_page_title">
- <location filename="../videocontainerpage.cpp" line="373"/>
- <source>Video container</source>
- <translation>Video container</translation>
- </message>
- <message id="xx_video_container_page_info_label">
- <location filename="../videocontainerpage.cpp" line="378"/>
- <source>Tap video thumbnail to play/pause it. Tap and hold thumbnail to open video in it&apos;s native size.</source>
- <translation>Tap video thumbnail to play/pause it. Tap and hold thumbnail to open video in it&apos;s native size.</translation>
- </message>
- <message id="xx_video_container_header_title">
- <location filename="../videocontainerpage.cpp" line="381"/>
- <source>Gallery</source>
- <translation>Gallery</translation>
+ <message id="xx_bubblepage_title">
+ <location filename="../bubblepage.cpp" line="143"/>
+ <source>Speech Bubble</source>
+ <translation>Speech Bubble</translation>
+ </message>
+ <message id="xx_wg_bubblepage_linkactivated">
+ <location filename="../bubblepage.cpp" line="156"/>
+ <source>Link activated</source>
+ <translation>Link activated</translation>
+ </message>
+ <message id="xx_content_items_subtitle">
+ <location filename="../contentitemspage.cpp" line="63"/>
+ <location filename="../contentitemspage.cpp" line="71"/>
+ <location filename="../contentitemspage.cpp" line="81"/>
+ <location filename="../contentitemspage.cpp" line="90"/>
+ <source>Subtitle</source>
+ <translation>Subtitle</translation>
</message>
</context>
</TS>
diff --git a/demos/widgetsgallery/translations/widgetsgallery_fi.ts b/demos/widgetsgallery/translations/widgetsgallery_fi.ts
index f831ddf8..61f4f7ea 100644
--- a/demos/widgetsgallery/translations/widgetsgallery_fi.ts
+++ b/demos/widgetsgallery/translations/widgetsgallery_fi.ts
@@ -3,53 +3,208 @@
<TS version="2.0" language="fi">
<context>
<name></name>
+ <message id="xx_wg_categories_application_view">
+ <location filename="../mainpage.cpp" line="86"/>
+ <source>Application View</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_application_view_view_menu">
+ <location filename="../mainpage.cpp" line="88"/>
+ <source>Application Menu</source>
+ <translation type="unfinished">Valikko</translation>
+ </message>
+ <message id="xx_wg_application_view_display_modes">
+ <location filename="../mainpage.cpp" line="90"/>
+ <source>Display Modes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_application_view_toolbar_incl_tab_bar">
+ <location filename="../mainpage.cpp" line="92"/>
+ <source>Toolbar (including Tab Bar)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_simple_widgets">
+ <location filename="../mainpage.cpp" line="96"/>
+ <source>Simple Widgets</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_simple_widgets_labels">
+ <location filename="../mainpage.cpp" line="98"/>
+ <source>Labels</source>
+ <translation type="unfinished">Otsikoita</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_image">
+ <location filename="../mainpage.cpp" line="100"/>
+ <source>Image</source>
+ <translation type="unfinished">Kuva</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_progress_bar">
+ <location filename="../mainpage.cpp" line="102"/>
+ <source>Progress Bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_simple_widgets_container">
+ <location filename="../mainpage.cpp" line="104"/>
+ <source>Container</source>
+ <translation type="unfinished">Säiliö</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_spinner">
+ <location filename="../mainpage.cpp" line="106"/>
+ <source>Spinner</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_buttons">
+ <location filename="../mainpage.cpp" line="109"/>
+ <source>Buttons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_buttons_push_button">
+ <location filename="../mainpage.cpp" line="111"/>
+ <source>Push Button</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_buttons_icon_button">
+ <location filename="../mainpage.cpp" line="113"/>
+ <source>Icon Button</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_buttons_switch">
+ <location filename="../mainpage.cpp" line="115"/>
+ <source>Switch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_buttons_checkbox">
+ <location filename="../mainpage.cpp" line="117"/>
+ <source>Checkbox</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_dialogs_and_banners">
+ <location filename="../mainpage.cpp" line="120"/>
+ <source>Dialogs and Banners</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_single_selection_dialog">
+ <location filename="../mainpage.cpp" line="122"/>
+ <source>Single Selection Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_multiple_selection_dialog">
+ <location filename="../mainpage.cpp" line="124"/>
+ <source>Multiple Selection Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_query_dialog">
+ <location filename="../mainpage.cpp" line="126"/>
+ <source>Query Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_banner">
+ <location filename="../mainpage.cpp" line="128"/>
+ <source>Banner</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_lists_grids_and_popups">
+ <location filename="../mainpage.cpp" line="131"/>
+ <source>Lists, Grids and Popups</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_list">
+ <location filename="../mainpage.cpp" line="133"/>
+ <source>List</source>
+ <translation type="unfinished">Lista</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_grid">
+ <location filename="../mainpage.cpp" line="135"/>
+ <source>Grid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_object_menu">
+ <location filename="../mainpage.cpp" line="137"/>
+ <source>Object Menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_combobox">
+ <location filename="../mainpage.cpp" line="139"/>
+ <source>ComboBox</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_contentitems">
+ <location filename="../mainpage.cpp" line="141"/>
+ <source>ContentItems</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_bubble">
+ <location filename="../mainpage.cpp" line="143"/>
+ <source>Speech bubble</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_user_input">
+ <location filename="../mainpage.cpp" line="146"/>
+ <source>User Input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_user_input_text_entries">
+ <location filename="../mainpage.cpp" line="148"/>
+ <source>Text Entries</source>
+ <translation type="unfinished">Tekstinsyöttö</translation>
+ </message>
+ <message id="xx_wg_user_input_slider">
+ <location filename="../mainpage.cpp" line="150"/>
+ <source>Slider</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_user_input_input_feedback">
+ <location filename="../mainpage.cpp" line="152"/>
+ <source>Input Feedback</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_application_title">
- <location filename="../listpage.cpp" line="187"/>
+ <location filename="../mainpage.cpp" line="330"/>
<source>Widgets Gallery</source>
<translation>Vekotinnäyttely</translation>
</message>
<message id="xx_apporientation_auto">
- <location filename="../listpage.cpp" line="456"/>
+ <location filename="../mainpage.cpp" line="546"/>
<source>Automatic</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_portrait">
- <location filename="../listpage.cpp" line="464"/>
+ <location filename="../mainpage.cpp" line="554"/>
<source>Portrait</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_landscape">
- <location filename="../listpage.cpp" line="472"/>
+ <location filename="../mainpage.cpp" line="562"/>
<source>Landscape</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_angle0">
- <location filename="../listpage.cpp" line="480"/>
+ <location filename="../mainpage.cpp" line="570"/>
<source>0 degrees</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_angle90">
- <location filename="../listpage.cpp" line="488"/>
+ <location filename="../mainpage.cpp" line="578"/>
<source>90 degrees clockwise</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_angle180">
- <location filename="../listpage.cpp" line="496"/>
+ <location filename="../mainpage.cpp" line="586"/>
<source>180 degrees clockwise</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_angle270">
- <location filename="../listpage.cpp" line="504"/>
+ <location filename="../mainpage.cpp" line="594"/>
<source>270 degrees clockwise</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_label_page_title">
- <location filename="../labelpage.cpp" line="119"/>
+ <location filename="../labelpage.cpp" line="108"/>
<source>Labels</source>
<translation>Otsikoita</translation>
</message>
<message id="xx_label_page_info_label">
- <location filename="../labelpage.cpp" line="129"/>
+ <location filename="../labelpage.cpp" line="118"/>
<source>Simple Label is used mainly by other components, and it does not support any formatting or interaction.
Rich Label supports multiple lines, HTML formatting and highlighting for links.
@@ -58,72 +213,107 @@ All Labels can be aligned left, right or center and will be automatically trunca
<translation type="unfinished"></translation>
</message>
<message id="xx_simple_label">
- <location filename="../labelpage.cpp" line="131"/>
+ <location filename="../labelpage.cpp" line="120"/>
<source>Simple Label</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_rich_label">
- <location filename="../labelpage.cpp" line="134"/>
+ <location filename="../labelpage.cpp" line="123"/>
<source>Rich Label &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, http://www.nokia.com, +358401234567, fors.fagerstrom@email.com</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_wg_multiple_selection_dialogs_page_question_dialog">
+ <location filename="../multipleselectiondialogspage.cpp" line="94"/>
+ <source>Question Dialog</source>
+ <translation type="unfinished">Näytä dialogi</translation>
+ </message>
<message id="xx_dialogs_and_notifications_question_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="88"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="118"/>
<source>Question Dialog Title</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_question_dialog_content">
- <location filename="../dialogsandnotificationspage.cpp" line="92"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="122"/>
<source>Lorem ipsum dolor sit amet?</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_wg_query_dialogs_page_entry_dialog">
+ <location filename="../querydialogspage.cpp" line="95"/>
+ <source>Entry Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_query_dialogs_page_long_dialog">
+ <location filename="../querydialogspage.cpp" line="97"/>
+ <source>Long Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_dialogs_and_notifications_entry_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="101"/>
+ <location filename="../querydialogspage.cpp" line="124"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_entry_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="113"/>
+ <location filename="../querydialogspage.cpp" line="134"/>
<source>Please enter your name</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_long_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="128"/>
+ <location filename="../querydialogspage.cpp" line="150"/>
<source>Select printer</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_wg_single_selection_dialogs_page_stacked_dialogs">
+ <location filename="../singleselectiondialogspage.cpp" line="94"/>
+ <source>Stacked Dialogs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_system_modal_dialog">
+ <location filename="../singleselectiondialogspage.cpp" line="96"/>
+ <source>System Modal Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_dialog_with_progress_indicator">
+ <location filename="../singleselectiondialogspage.cpp" line="98"/>
+ <source>Dialog with Progress Indicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_message_box">
+ <location filename="../singleselectiondialogspage.cpp" line="100"/>
+ <source>Message Box</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_dialogs_and_notifications_stacked_dialog_button">
- <location filename="../dialogsandnotificationspage.cpp" line="179"/>
+ <location filename="../singleselectiondialogspage.cpp" line="129"/>
<source>Click to spawn a nested dialog</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="181"/>
+ <location filename="../singleselectiondialogspage.cpp" line="131"/>
<source>Stacked dialogs</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_open_nested_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="194"/>
+ <location filename="../singleselectiondialogspage.cpp" line="145"/>
<source>Click to open a nested message box</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_nested_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="196"/>
+ <location filename="../singleselectiondialogspage.cpp" line="147"/>
<source>This is a nested dialog</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_messagebox_text">
- <location filename="../dialogsandnotificationspage.cpp" line="209"/>
+ <location filename="../singleselectiondialogspage.cpp" line="160"/>
<source>I&apos;m a nested message box</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="219"/>
+ <location filename="../singleselectiondialogspage.cpp" line="171"/>
<source>System Modal Dialog</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="225"/>
+ <location filename="../singleselectiondialogspage.cpp" line="178"/>
<source>I&apos;m a window modal dialog.
There&apos;s no way around me!
Muwhahaha... [evil laugh]</source>
@@ -133,157 +323,141 @@ Muwhahaha... [evil laugh]</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="242"/>
+ <location filename="../singleselectiondialogspage.cpp" line="197"/>
<source>Progress Indicator</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_message_box_text">
- <location filename="../dialogsandnotificationspage.cpp" line="261"/>
+ <location filename="../singleselectiondialogspage.cpp" line="217"/>
<source>Hello World!</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_wg_banners_page_event_banner">
+ <location filename="../bannerspage.cpp" line="90"/>
+ <source>Event Banner</source>
+ <translation type="unfinished">Eventtibanneri</translation>
+ </message>
+ <message id="xx_wg_banners_page_information_banner">
+ <location filename="../bannerspage.cpp" line="92"/>
+ <source>Information Banner</source>
+ <translation type="unfinished">Informaatiobanneri</translation>
+ </message>
+ <message id="xx_wg_banners_page_system_information_banner">
+ <location filename="../bannerspage.cpp" line="94"/>
+ <source>System Information Banner</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_dialogs_and_notifications_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="271"/>
+ <location filename="../bannerspage.cpp" line="121"/>
<source>&lt;b&gt;Ida Taipale&lt;/b&gt;&lt;br/&gt;Have you seen my dog?</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="284"/>
+ <location filename="../bannerspage.cpp" line="134"/>
<source>&lt;b&gt;Battery is running low&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="296"/>
+ <location filename="../bannerspage.cpp" line="145"/>
<source>&lt;b&gt;Incoming call&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner_accept">
- <location filename="../dialogsandnotificationspage.cpp" line="298"/>
+ <location filename="../bannerspage.cpp" line="147"/>
<source>Accept</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_title">
- <location filename="../dialogsandnotificationspage.cpp" line="365"/>
<source>Dialogs and Notifications</source>
- <translation>Dialogeja ja Notifikaatioita</translation>
+ <translation type="obsolete">Dialogeja ja Notifikaatioita</translation>
</message>
<message id="xx_dialogs_and_notifications_label_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="369"/>
<source>Dialog examples</source>
- <translation type="unfinished">Dialogeja</translation>
+ <translation type="obsolete">Dialogeja</translation>
</message>
<message id="xx_dialogs_and_notifications_query_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="371"/>
<source>Question Dialog</source>
- <translation>Näytä dialogi</translation>
- </message>
- <message id="xx_dialogs_and_notifications_entry_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="373"/>
- <source>Entry Dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_long_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="375"/>
- <source>A Long Dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_stacked_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="378"/>
- <source>Stacked Dialogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_system_modal_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="381"/>
- <source>System Modal Dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_dialog_with_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="384"/>
- <source>Dialog With Progress Indicator</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="389"/>
- <source>Simple Message Box</source>
- <translation type="unfinished"></translation>
+ <translation type="obsolete">Näytä dialogi</translation>
</message>
<message id="xx_dialogs_and_notifications_label_notifications">
- <location filename="../dialogsandnotificationspage.cpp" line="387"/>
<source>Notifications and messages</source>
- <translation type="unfinished">Notifikaatioita</translation>
+ <translation type="obsolete">Notifikaatioita</translation>
</message>
<message id="xx_dialogs_and_notifications_label_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="391"/>
<source>Event Banner</source>
- <translation>Eventtibanneri</translation>
+ <translation type="obsolete">Eventtibanneri</translation>
</message>
<message id="xx_dialogs_and_notifications_label_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="393"/>
<source>Information Banner</source>
- <translation>Informaatiobanneri</translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="395"/>
- <source>System Information Banner</source>
- <translation type="unfinished"></translation>
+ <translation type="obsolete">Informaatiobanneri</translation>
</message>
<message id="xx_Image">
- <location filename="../imagepage.cpp" line="123"/>
+ <location filename="../imagepage.cpp" line="131"/>
<source>Image</source>
<translation>Kuva</translation>
</message>
<message id="xx_Image properties">
- <location filename="../imagepage.cpp" line="127"/>
+ <location filename="../imagepage.cpp" line="135"/>
<source>Image properties</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_Zoom">
- <location filename="../imagepage.cpp" line="133"/>
+ <location filename="../imagepage.cpp" line="141"/>
<source>Zoom</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_Transparency">
- <location filename="../imagepage.cpp" line="135"/>
+ <location filename="../imagepage.cpp" line="143"/>
<source>Transparency</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_Crop">
- <location filename="../imagepage.cpp" line="137"/>
+ <location filename="../imagepage.cpp" line="145"/>
<source>Crop</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_image_operations">
- <location filename="../imagepage.cpp" line="145"/>
+ <location filename="../imagepage.cpp" line="153"/>
<source>Image operations</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_image_page_info">
- <location filename="../imagepage.cpp" line="152"/>
+ <location filename="../imagepage.cpp" line="160"/>
<source>Image allows the placement of images onto the UI. Images are generally non-interactive elements. Various single and multiple touch interactions can be added to an Image component if desired. As an example, pinch gesture can be used in this page to zoom the image.</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_listpage_list_remove">
+ <location filename="../mlistpage.cpp" line="547"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_listpage_list_edit">
+ <location filename="../mlistpage.cpp" line="553"/>
+ <source>Edit</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_listpage_title">
- <location filename="../mlistpage.cpp" line="423"/>
+ <location filename="../mlistpage.cpp" line="573"/>
<source>List</source>
<translation>Lista</translation>
</message>
<message id="xx_textentry_title">
- <location filename="../textentrypage.cpp" line="490"/>
+ <location filename="../textentrypage.cpp" line="582"/>
<source>Text Entries</source>
<translation>Tekstinsyöttö</translation>
</message>
<message id="xx_tooltip_entry0">
- <location filename="../textentrypage.cpp" line="494"/>
+ <location filename="../textentrypage.cpp" line="586"/>
<source>Enter text here</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_tooltip_entry1">
- <location filename="../textentrypage.cpp" line="497"/>
+ <location filename="../textentrypage.cpp" line="589"/>
<source>This tooltip is quite long and will be clipped on the display</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_tooltip_entry6">
- <location filename="../textentrypage.cpp" line="503"/>
+ <location filename="../textentrypage.cpp" line="595"/>
<source>This is a multiline text entry</source>
<oldsource>This is
multiline
@@ -291,119 +465,144 @@ tooltip</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_tooltip_entry8">
- <location filename="../textentrypage.cpp" line="500"/>
+ <location filename="../textentrypage.cpp" line="592"/>
<source>Provides email address suggestions</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_click_here">
- <location filename="../textentrypage.cpp" line="144"/>
- <location filename="../textentrypage.cpp" line="166"/>
+ <location filename="../textentrypage.cpp" line="147"/>
+ <location filename="../textentrypage.cpp" line="169"/>
<source>Click here</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_press_any_key">
- <location filename="../textentrypage.cpp" line="157"/>
+ <location filename="../textentrypage.cpp" line="160"/>
<source>Press any key</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_keypress">
- <location filename="../textentrypage.cpp" line="183"/>
+ <location filename="../textentrypage.cpp" line="186"/>
<source>&lt;i&gt;Key press&lt;/i&gt; key:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_text">
- <location filename="../textentrypage.cpp" line="186"/>
- <location filename="../textentrypage.cpp" line="200"/>
+ <location filename="../textentrypage.cpp" line="189"/>
+ <location filename="../textentrypage.cpp" line="203"/>
<source>text:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_keyrelease">
- <location filename="../textentrypage.cpp" line="197"/>
+ <location filename="../textentrypage.cpp" line="200"/>
<source>&lt;i&gt;Key release&lt;/i&gt; key:</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_tooltip_customtoolbar1">
+ <location filename="../textentrypage.cpp" line="519"/>
+ <source>Example custom toolbar 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_tooltip_customtoolbar2">
+ <location filename="../textentrypage.cpp" line="532"/>
+ <source>Example custom toolbar 2</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_textentry_free_text">
- <location filename="../textentrypage.cpp" line="506"/>
+ <location filename="../textentrypage.cpp" line="598"/>
<source>Free text:</source>
<translation>Vapaa teksti</translation>
</message>
<message id="xx_textentry_free_text_masked">
- <location filename="../textentrypage.cpp" line="508"/>
+ <location filename="../textentrypage.cpp" line="600"/>
<source>Free text(masked):</source>
<translation>Vapaa teksti(maskattu)</translation>
</message>
<message id="xx_textentry_number_text">
- <location filename="../textentrypage.cpp" line="510"/>
+ <location filename="../textentrypage.cpp" line="602"/>
<source>Number text:</source>
<translation>Numeronsyöttö</translation>
</message>
<message id="xx_textentry_phone_number">
- <location filename="../textentrypage.cpp" line="512"/>
+ <location filename="../textentrypage.cpp" line="604"/>
<source>Phone number:</source>
<translation>Puhelinnumero</translation>
</message>
<message id="xx_textentry_email_text">
- <location filename="../textentrypage.cpp" line="514"/>
+ <location filename="../textentrypage.cpp" line="606"/>
<source>Email text:</source>
<translation>Sähköposti</translation>
</message>
<message id="xx_textentry_url_text">
- <location filename="../textentrypage.cpp" line="516"/>
+ <location filename="../textentrypage.cpp" line="608"/>
<source>Url text:</source>
<translation>Internet-osoite</translation>
</message>
<message id="xx_textentry_multiline">
- <location filename="../textentrypage.cpp" line="518"/>
+ <location filename="../textentrypage.cpp" line="610"/>
<source>Multiline:</source>
<translation>Usean rivin teksti</translation>
</message>
<message id="xx_textentry_singleselectall">
- <location filename="../textentrypage.cpp" line="520"/>
+ <location filename="../textentrypage.cpp" line="612"/>
<source>Singleline (selectall):</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_completion_text">
- <location filename="../textentrypage.cpp" line="522"/>
+ <location filename="../textentrypage.cpp" line="614"/>
<source>Email suggestion text:</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_textentry_richtext_text">
+ <location filename="../textentrypage.cpp" line="616"/>
+ <source>Rich Text:</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_textentry_noecho">
- <location filename="../textentrypage.cpp" line="525"/>
+ <location filename="../textentrypage.cpp" line="619"/>
<source>No Echo mode:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_echoonedit">
- <location filename="../textentrypage.cpp" line="528"/>
+ <location filename="../textentrypage.cpp" line="622"/>
<source>Echo on edit:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_direct_input_mode">
- <location filename="../textentrypage.cpp" line="531"/>
+ <location filename="../textentrypage.cpp" line="625"/>
<source>Direct Input Mode:</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_textentry_custom_toolbar1">
+ <location filename="../textentrypage.cpp" line="628"/>
+ <source>Custom ToolBar 1:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_textentry_custom_toolbar2">
+ <location filename="../textentrypage.cpp" line="630"/>
+ <source>Custom ToolBar 2:</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_auto_capitalisation">
- <location filename="../textentrypage.cpp" line="534"/>
+ <location filename="../textentrypage.cpp" line="633"/>
<source>Auto capitalisation</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_error_correction">
- <location filename="../textentrypage.cpp" line="536"/>
+ <location filename="../textentrypage.cpp" line="635"/>
<source>Error correction</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_auto_true_entry0">
- <location filename="../textentrypage.cpp" line="564"/>
+ <location filename="../textentrypage.cpp" line="663"/>
<source>Auto Capitalisation is active</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_auto_false_entry0">
- <location filename="../textentrypage.cpp" line="567"/>
+ <location filename="../textentrypage.cpp" line="666"/>
<source>No Auto Capitalisation</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_slider_page_title">
- <location filename="../sliderpage.cpp" line="169"/>
+ <location filename="../sliderpage.cpp" line="168"/>
<source>Sliders</source>
<translation variants="yes">
<lengthvariant>Sliders</lengthvariant>
@@ -411,28 +610,28 @@ tooltip</oldsource>
</translation>
</message>
<message id="xx_slider_personal_data_label">
- <location filename="../sliderpage.cpp" line="180"/>
+ <location filename="../sliderpage.cpp" line="179"/>
<source>Personal data</source>
<translation>Personal data</translation>
</message>
<message id="xx_slider_age_label">
- <location filename="../sliderpage.cpp" line="184"/>
+ <location filename="../sliderpage.cpp" line="183"/>
<source>Please select your age:œ!! Please select your age:œ!! Please select your age:œ!! Age:</source>
<oldsource>Please select your age:</oldsource>
<translation type="unfinished">Valitse ikäsi:</translation>
</message>
<message id="xx_slider_brightness_label">
- <location filename="../sliderpage.cpp" line="217"/>
+ <location filename="../sliderpage.cpp" line="216"/>
<source>Brightness:</source>
<translation>Brightness:</translation>
</message>
<message id="xx_slider_player_label">
- <location filename="../sliderpage.cpp" line="197"/>
+ <location filename="../sliderpage.cpp" line="196"/>
<source>Player:</source>
<translation>Player:</translation>
</message>
<message id="xx_slider_page_info_label">
- <location filename="../sliderpage.cpp" line="177"/>
+ <location filename="../sliderpage.cpp" line="176"/>
<source>Slider is used for continuous set of values, among which user can choose one value.
Seekbar is a special type of Slider used for displaying playback status for multimedia content.</source>
@@ -441,62 +640,66 @@ Seekbar is a special type of Slider used for displaying playback status for mult
Seekbar is a special type of Slider used for displaying playback status for multimedia content.</translation>
</message>
<message id="xx_viewmenu_page_title">
- <location filename="../applicationmenupage.cpp" line="60"/>
<source>Application Menu</source>
- <translation>Valikko</translation>
+ <translation type="obsolete">Valikko</translation>
+ </message>
+ <message id="xx_applicationmenu_page_title">
+ <location filename="../applicationmenupage.cpp" line="62"/>
+ <source>Application Menu</source>
+ <translation type="unfinished">Valikko</translation>
</message>
<message id="xx_applicationmenu_page_info">
- <location filename="../applicationmenupage.cpp" line="75"/>
+ <location filename="../applicationmenupage.cpp" line="77"/>
<source>Application Menu is a menu element available to any view. &lt;ul&gt;&lt;li&gt;It can be opened by tapping on the menu title area.&lt;/li&gt;&lt;li&gt;It contains commands and view settings for the view in question and an optional area for style commands.&lt;/li&gt;&lt;li&gt;Each view of the application can have different menu contents.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Guidelines&lt;/b&gt; for mandatory menu items: &lt;ul&gt;&lt;li&gt;Settings should be on the main View of the application, unless the settings are specific to a sub-View&lt;/li&gt;&lt;li&gt;Help should be available in each View &lt;/li&gt;&lt;li&gt;Exit task should be present in all Views except for the main View of the application.&lt;/li&gt;&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_combobox_title">
- <location filename="../comboboxpage.cpp" line="108"/>
+ <location filename="../comboboxpage.cpp" line="109"/>
<source>ComboBox</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_popup_generic_title">
- <location filename="../comboboxpage.cpp" line="112"/>
+ <location filename="../comboboxpage.cpp" line="113"/>
<source>Title</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_popup_sort_descending_order">
- <location filename="../comboboxpage.cpp" line="114"/>
+ <location filename="../comboboxpage.cpp" line="115"/>
<source>Sort - DescendingOrder</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_popup_time_consuming">
- <location filename="../comboboxpage.cpp" line="116"/>
+ <location filename="../comboboxpage.cpp" line="117"/>
<source>Time-consuming setting</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_combobox_page_info">
- <location filename="../comboboxpage.cpp" line="120"/>
+ <location filename="../comboboxpage.cpp" line="121"/>
<source>The MComboBox widget is a combined button and popup list. It is very similar to QComboBox, but does not allow editing the text.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_container_page_title">
- <location filename="../containerpage.cpp" line="65"/>
+ <location filename="../containerpage.cpp" line="64"/>
<source>Container</source>
<translation>Säiliö</translation>
</message>
<message id="xx_progressbar_page_title">
- <location filename="../progressbarpage.cpp" line="80"/>
+ <location filename="../progressbarpage.cpp" line="78"/>
<source>Progress Bar</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_progressbar_page_info_label">
- <location filename="../progressbarpage.cpp" line="85"/>
+ <location filename="../progressbarpage.cpp" line="83"/>
<source>A Progress Bar can indicate an ongoing process with either known or unknown durations.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_progressindicator_unknown_duration_bar">
- <location filename="../progressbarpage.cpp" line="89"/>
+ <location filename="../progressbarpage.cpp" line="87"/>
<source>Installing CoolApp</source>
<translation type="unfinished">tuntematon aika - palkki</translation>
</message>
<message id="xx_progressindicator_known_duration_bar">
- <location filename="../progressbarpage.cpp" line="87"/>
+ <location filename="../progressbarpage.cpp" line="85"/>
<source>Downloading nicepic.jpg</source>
<translation type="unfinished">tunnettu aika - palkki</translation>
</message>
@@ -647,200 +850,151 @@ Seekbar is a special type of Slider used for displaying playback status for mult
<source>Font test:</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_navigationbar_navbarcombo">
- <location filename="../navigationbarpage.cpp" line="60"/>
+ <message id="xx_displaymodes_navbarcombo">
+ <location filename="../displaymodespage.cpp" line="59"/>
<source>Navigation Bar</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_navigationbar_escapebtncombo">
- <location filename="../navigationbarpage.cpp" line="68"/>
+ <message id="xx_displaymodes_escapebtncombo">
+ <location filename="../displaymodespage.cpp" line="67"/>
<source>Escape Button</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_navigationbar_homebtncombo">
- <location filename="../navigationbarpage.cpp" line="76"/>
+ <message id="xx_displaymodes_homebtncombo">
+ <location filename="../displaymodespage.cpp" line="75"/>
<source>Home Button</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_navigationbar_page_title">
- <location filename="../navigationbarpage.cpp" line="125"/>
- <source>Display Modes and Full Screen</source>
+ <message id="xx_displaymodes_page_title">
+ <location filename="../displaymodespage.cpp" line="143"/>
+ <source>Display Modes</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_navigationbar_display_mode">
- <location filename="../navigationbarpage.cpp" line="129"/>
+ <message id="xx_displaymodes_display_mode">
+ <location filename="../displaymodespage.cpp" line="147"/>
<source>Components&apos; display mode:</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_navigationbar_escape_mode_label">
- <location filename="../navigationbarpage.cpp" line="131"/>
- <source>Escape Button mode:</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_navigationbar_auto">
- <location filename="../navigationbarpage.cpp" line="136"/>
- <source>Auto</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_navigationbar_manual_back">
- <location filename="../navigationbarpage.cpp" line="140"/>
- <source>Manual Back</source>
+ <message id="xx_displaymodes_window_state">
+ <location filename="../displaymodespage.cpp" line="150"/>
+ <source>Window state:</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_navigationbar_close_window">
- <location filename="../navigationbarpage.cpp" line="144"/>
- <source>Close Window</source>
+ <message id="xx_displaymodes_full_screen">
+ <location filename="../displaymodespage.cpp" line="153"/>
+ <source>Full Screen</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_displaymode_show">
- <location filename="../navigationbarpage.cpp" line="162"/>
+ <location filename="../displaymodespage.cpp" line="166"/>
<source>Show</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_displaymode_autohide">
- <location filename="../navigationbarpage.cpp" line="164"/>
+ <location filename="../displaymodespage.cpp" line="168"/>
<source>Auto Hide</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_displaymode_hide">
- <location filename="../navigationbarpage.cpp" line="166"/>
+ <location filename="../displaymodespage.cpp" line="170"/>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_objectmenu_page_title">
- <location filename="../objectmenupage.cpp" line="155"/>
+ <location filename="../objectmenupage.cpp" line="154"/>
<source>Object menu</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_objectmenu_page_info_label">
- <location filename="../objectmenupage.cpp" line="167"/>
+ <location filename="../objectmenupage.cpp" line="166"/>
<source>Object Menu is a popup menu of commands opened by long tapping an element. It is used for providing shortcuts to functions related to that particular element.
The primary (single short tap) action of the element should not be duplicated in the Object Menu.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_objectmenu_page_container_friends">
- <location filename="../objectmenupage.cpp" line="170"/>
+ <location filename="../objectmenupage.cpp" line="169"/>
<source>Friends</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_objectmenu_page_container_albums">
- <location filename="../objectmenupage.cpp" line="172"/>
+ <location filename="../objectmenupage.cpp" line="171"/>
<source>Favorite Albums</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_template_page_layouts_visuals">
- <location filename="../templatepage.cpp" line="51"/>
- <source>Layouts and Visuals</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_buttons">
- <location filename="../templatepage.cpp" line="53"/>
- <source>Buttons</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_views_dialogs">
- <location filename="../templatepage.cpp" line="47"/>
- <source>Views and Dialogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_contains_applets">
- <location filename="../templatepage.cpp" line="49"/>
- <source>Contains and Applets</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_indicators_notifications">
- <location filename="../templatepage.cpp" line="55"/>
- <source>Indicators and Notifications</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_lists_grids_menus">
- <location filename="../templatepage.cpp" line="57"/>
- <source>Lists, Grids and Menus</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_user_input">
- <location filename="../templatepage.cpp" line="59"/>
- <source>User input</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_input_feedback">
- <location filename="../templatepage.cpp" line="61"/>
- <source>Input Feedback</source>
- <translation type="unfinished"></translation>
- </message>
<message id="xx_template_page_title">
- <location filename="../templatepage.cpp" line="119"/>
+ <location filename="../templatepage.cpp" line="101"/>
<source>Template</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_sample template">
- <location filename="../templatepage.cpp" line="125"/>
+ <location filename="../templatepage.cpp" line="107"/>
<source>Sample template</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_example1">
- <location filename="../toolbarpage.cpp" line="168"/>
+ <location filename="../toolbarpage.cpp" line="176"/>
<source>Example 1</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_example2">
- <location filename="../toolbarpage.cpp" line="174"/>
+ <location filename="../toolbarpage.cpp" line="182"/>
<source>Example 2</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_defaultview">
- <location filename="../toolbarpage.cpp" line="180"/>
+ <location filename="../toolbarpage.cpp" line="188"/>
<source>Default View</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_tabview">
- <location filename="../toolbarpage.cpp" line="186"/>
+ <location filename="../toolbarpage.cpp" line="194"/>
<source>Tab View</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_title">
- <location filename="../toolbarpage.cpp" line="208"/>
+ <location filename="../toolbarpage.cpp" line="216"/>
<source>ToolBar</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_info">
- <location filename="../toolbarpage.cpp" line="215"/>
+ <location filename="../toolbarpage.cpp" line="223"/>
<source>&lt;b&gt;Toolbar&lt;/b&gt; acts as a container for actions. Depending upon the view attached, it either acts as a tab bar or is a container for buttons and text input field. &lt;ul&gt;&lt;li&gt;Click Menu to explore the example&lt;/li&gt;&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_checkbox_page_title">
- <location filename="../checkboxpage.cpp" line="76"/>
+ <location filename="../checkboxpage.cpp" line="80"/>
<source>Checkbox</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_checkbox_page_info_label">
- <location filename="../checkboxpage.cpp" line="85"/>
+ <location filename="../checkboxpage.cpp" line="89"/>
<source>The Checkbox is a variant of Button that allows users to set the state of variable or setting which has two values, On and Off.
Checkbox essentially does the same thing as the Switch button, so please consider using a Switch instead.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_checkbox_page_checkbox_label">
- <location filename="../checkboxpage.cpp" line="88"/>
- <source>I have read and understood the
-instructions.</source>
+ <location filename="../checkboxpage.cpp" line="92"/>
+ <source>I have read and understood the instructions.</source>
+ <oldsource>I have read and understood the
+instructions.</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_icon_button_page_title">
- <location filename="../iconbuttonpage.cpp" line="82"/>
+ <location filename="../iconbuttonpage.cpp" line="81"/>
<source>Icon Button</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_icon_button_page_info_label">
- <location filename="../iconbuttonpage.cpp" line="90"/>
+ <location filename="../iconbuttonpage.cpp" line="89"/>
<source>Icon Buttons have an icon and can have a text label. Icon button differs from push button by its visual presentation: it does not have button-style edges like a Push Button does.
Icon Buttons are used in e.g. Toolbars.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_icon_button_page_icon_button2">
- <location filename="../iconbuttonpage.cpp" line="92"/>
+ <location filename="../iconbuttonpage.cpp" line="91"/>
<source>Lorem ipsum</source>
<translation type="unfinished"></translation>
</message>
@@ -873,32 +1027,34 @@ sit amet</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_application_main_area">
- <location filename="../spinnerpage.cpp" line="66"/>
- <source>In container main area</source>
+ <location filename="../spinnerpage.cpp" line="68"/>
+ <source>In application main area</source>
+ <oldsource>In container main area</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_container_header">
- <location filename="../spinnerpage.cpp" line="72"/>
+ <location filename="../spinnerpage.cpp" line="74"/>
<source>In container header</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_menu">
- <location filename="../spinnerpage.cpp" line="78"/>
- <source>In view menu</source>
+ <location filename="../spinnerpage.cpp" line="80"/>
+ <source>In application menu</source>
+ <oldsource>In view menu</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_dialog">
- <location filename="../spinnerpage.cpp" line="84"/>
+ <location filename="../spinnerpage.cpp" line="86"/>
<source>In dialog</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_title">
- <location filename="../spinnerpage.cpp" line="97"/>
+ <location filename="../spinnerpage.cpp" line="99"/>
<source>Spinner</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_info_label">
- <location filename="../spinnerpage.cpp" line="106"/>
+ <location filename="../spinnerpage.cpp" line="108"/>
<source>Spinner is used to indicate that a progress is ongoing and the duration is unknown.
Spinners can also be used in situations when duration is known, but available space on screen does not permit using a Progress bar.
@@ -906,140 +1062,156 @@ Spinners can also be used in situations when duration is known, but available sp
See the menu for examples of different use cases.</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_spinner_page_email_header">
- <location filename="../spinnerpage.cpp" line="116"/>
- <source>From: John Doe
-Date: Today
-Subject: This is funny stuff!</source>
- <translation type="unfinished"></translation>
- </message>
<message id="xx_spinner_page_application_area_description">
- <location filename="../spinnerpage.cpp" line="129"/>
+ <location filename="../spinnerpage.cpp" line="118"/>
<source>Spinner can be used while content is loading.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_container_title">
- <location filename="../spinnerpage.cpp" line="142"/>
+ <location filename="../spinnerpage.cpp" line="151"/>
<source>Online albums</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_container_header_description">
- <location filename="../spinnerpage.cpp" line="151"/>
+ <location filename="../spinnerpage.cpp" line="160"/>
<source>Spinner can be used in container header to indicate that the items inside the container are being updated, but visible items can be interacted with.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_application_menu_description">
- <location filename="../spinnerpage.cpp" line="195"/>
+ <location filename="../spinnerpage.cpp" line="204"/>
<source>Spinner in the application menu area indicates that the whole view is pending for update.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_dialog_header_description">
- <location filename="../spinnerpage.cpp" line="209"/>
+ <location filename="../spinnerpage.cpp" line="218"/>
<source>Spinner can be placed in dialog header to indicate changing content.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_dialog_header">
- <location filename="../spinnerpage.cpp" line="230"/>
+ <location filename="../spinnerpage.cpp" line="239"/>
<source>Select Internet connection</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_title">
- <location filename="../switchpage.cpp" line="128"/>
+ <location filename="../switchpage.cpp" line="127"/>
<source>Switch</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_info_label">
- <location filename="../switchpage.cpp" line="138"/>
+ <location filename="../switchpage.cpp" line="137"/>
<source>A Switch button differs from both a push button and an icon button visually. It looks like a switch, communicating that pressing this button will not go to another view or will not perform any other actions except to toggle the state of the button.
Switches are used to indicate e.g. settings values</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_switch1">
- <location filename="../switchpage.cpp" line="141"/>
+ <location filename="../switchpage.cpp" line="140"/>
<source>Headlights</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_switch2">
- <location filename="../switchpage.cpp" line="143"/>
+ <location filename="../switchpage.cpp" line="142"/>
<source>Autopilot</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_switch3">
- <location filename="../switchpage.cpp" line="145"/>
+ <location filename="../switchpage.cpp" line="144"/>
<source>Warp Drive</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_switch4">
- <location filename="../switchpage.cpp" line="147"/>
+ <location filename="../switchpage.cpp" line="146"/>
<source>Reactor Shields</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_switch5">
- <location filename="../switchpage.cpp" line="149"/>
+ <location filename="../switchpage.cpp" line="148"/>
<source>Infinite Improbability Drive</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_title">
- <location filename="../feedbackpage.cpp" line="90"/>
+ <location filename="../feedbackpage.cpp" line="89"/>
<source>Input Feedback</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_info_label">
- <location filename="../feedbackpage.cpp" line="100"/>
+ <location filename="../feedbackpage.cpp" line="99"/>
<source>This page contains buttons with custom input feedbacks. Any MWidget can have input feedback for press and release events. Input feedback can be a sound effect and/or a haptic effect (piezo, vibra) depending on the product.
Input feedbacks can be easily configured for different purposes using the theming system.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button1">
- <location filename="../feedbackpage.cpp" line="102"/>
+ <location filename="../feedbackpage.cpp" line="101"/>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button2">
- <location filename="../feedbackpage.cpp" line="104"/>
+ <location filename="../feedbackpage.cpp" line="103"/>
<source>Different</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button3">
- <location filename="../feedbackpage.cpp" line="106"/>
+ <location filename="../feedbackpage.cpp" line="105"/>
<source>Sluggish</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button4">
- <location filename="../feedbackpage.cpp" line="108"/>
+ <location filename="../feedbackpage.cpp" line="107"/>
<source>Babytoy</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button5">
- <location filename="../feedbackpage.cpp" line="110"/>
+ <location filename="../feedbackpage.cpp" line="109"/>
<source>Space</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button6">
- <location filename="../feedbackpage.cpp" line="112"/>
+ <location filename="../feedbackpage.cpp" line="111"/>
<source>Silent</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_gridpage_configuration">
+ <location filename="../mgridpage.cpp" line="193"/>
+ <source>Configuration</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_gridpage_title">
- <location filename="../mgridpage.cpp" line="96"/>
+ <location filename="../mgridpage.cpp" line="204"/>
<source>Grid page</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_video_container_page_title">
- <location filename="../videocontainerpage.cpp" line="372"/>
- <source>Video container</source>
+ <message id="xx_gridpage_set_columns">
+ <location filename="../mgridpage.cpp" line="290"/>
+ <source>Set columns</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_gridpage_landscape">
+ <location filename="../mgridpage.cpp" line="316"/>
+ <source>Landscape</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_gridpage_portrait">
+ <location filename="../mgridpage.cpp" line="321"/>
+ <source>Portrait</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_bubblepage_title">
+ <location filename="../bubblepage.cpp" line="143"/>
+ <source>Speech Bubble</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_video_container_page_info_label">
- <location filename="../videocontainerpage.cpp" line="377"/>
- <source>Tap video thumbnail to play/pause it. Tap and hold thumbnail to open video in it&apos;s native size.</source>
+ <message id="xx_wg_bubblepage_linkactivated">
+ <location filename="../bubblepage.cpp" line="156"/>
+ <source>Link activated</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_video_container_header_title">
- <location filename="../videocontainerpage.cpp" line="380"/>
- <source>Gallery</source>
+ <message id="xx_content_items_subtitle">
+ <location filename="../contentitemspage.cpp" line="63"/>
+ <location filename="../contentitemspage.cpp" line="71"/>
+ <location filename="../contentitemspage.cpp" line="81"/>
+ <location filename="../contentitemspage.cpp" line="90"/>
+ <source>Subtitle</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/demos/widgetsgallery/translations/widgetsgallery_hu.ts b/demos/widgetsgallery/translations/widgetsgallery_hu.ts
index 2fe3dec9..135dbb82 100644
--- a/demos/widgetsgallery/translations/widgetsgallery_hu.ts
+++ b/demos/widgetsgallery/translations/widgetsgallery_hu.ts
@@ -3,43 +3,198 @@
<TS version="2.0" language="en">
<context>
<name></name>
+ <message id="xx_wg_categories_application_view">
+ <location filename="../mainpage.cpp" line="86"/>
+ <source>Application View</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_application_view_view_menu">
+ <location filename="../mainpage.cpp" line="88"/>
+ <source>Application Menu</source>
+ <translation type="unfinished">Alkalmazás Menü</translation>
+ </message>
+ <message id="xx_wg_application_view_display_modes">
+ <location filename="../mainpage.cpp" line="90"/>
+ <source>Display Modes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_application_view_toolbar_incl_tab_bar">
+ <location filename="../mainpage.cpp" line="92"/>
+ <source>Toolbar (including Tab Bar)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_simple_widgets">
+ <location filename="../mainpage.cpp" line="96"/>
+ <source>Simple Widgets</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_simple_widgets_labels">
+ <location filename="../mainpage.cpp" line="98"/>
+ <source>Labels</source>
+ <translation type="unfinished">Címkék</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_image">
+ <location filename="../mainpage.cpp" line="100"/>
+ <source>Image</source>
+ <translation type="unfinished">Kép</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_progress_bar">
+ <location filename="../mainpage.cpp" line="102"/>
+ <source>Progress Bar</source>
+ <translation type="unfinished">Haladó Csík</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_container">
+ <location filename="../mainpage.cpp" line="104"/>
+ <source>Container</source>
+ <translation type="unfinished">Tároló</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_spinner">
+ <location filename="../mainpage.cpp" line="106"/>
+ <source>Spinner</source>
+ <translation type="unfinished">Tekerő</translation>
+ </message>
+ <message id="xx_wg_categories_buttons">
+ <location filename="../mainpage.cpp" line="109"/>
+ <source>Buttons</source>
+ <translation type="unfinished">Gombok</translation>
+ </message>
+ <message id="xx_wg_buttons_push_button">
+ <location filename="../mainpage.cpp" line="111"/>
+ <source>Push Button</source>
+ <translation type="unfinished">Nyomógomb</translation>
+ </message>
+ <message id="xx_wg_buttons_icon_button">
+ <location filename="../mainpage.cpp" line="113"/>
+ <source>Icon Button</source>
+ <translation type="unfinished">Ikon Gomb</translation>
+ </message>
+ <message id="xx_wg_buttons_switch">
+ <location filename="../mainpage.cpp" line="115"/>
+ <source>Switch</source>
+ <translation type="unfinished">Kapcsoló</translation>
+ </message>
+ <message id="xx_wg_buttons_checkbox">
+ <location filename="../mainpage.cpp" line="117"/>
+ <source>Checkbox</source>
+ <translation type="unfinished">Jelölőnégyzet</translation>
+ </message>
+ <message id="xx_wg_categories_dialogs_and_banners">
+ <location filename="../mainpage.cpp" line="120"/>
+ <source>Dialogs and Banners</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_single_selection_dialog">
+ <location filename="../mainpage.cpp" line="122"/>
+ <source>Single Selection Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_multiple_selection_dialog">
+ <location filename="../mainpage.cpp" line="124"/>
+ <source>Multiple Selection Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_query_dialog">
+ <location filename="../mainpage.cpp" line="126"/>
+ <source>Query Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_banner">
+ <location filename="../mainpage.cpp" line="128"/>
+ <source>Banner</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_lists_grids_and_popups">
+ <location filename="../mainpage.cpp" line="131"/>
+ <source>Lists, Grids and Popups</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_list">
+ <location filename="../mainpage.cpp" line="133"/>
+ <source>List</source>
+ <translation type="unfinished">Lista</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_grid">
+ <location filename="../mainpage.cpp" line="135"/>
+ <source>Grid</source>
+ <translation type="unfinished">Rács</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_object_menu">
+ <location filename="../mainpage.cpp" line="137"/>
+ <source>Object Menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_combobox">
+ <location filename="../mainpage.cpp" line="139"/>
+ <source>ComboBox</source>
+ <translation type="unfinished">Kombó</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_contentitems">
+ <location filename="../mainpage.cpp" line="141"/>
+ <source>ContentItems</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_bubble">
+ <location filename="../mainpage.cpp" line="143"/>
+ <source>Speech bubble</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_user_input">
+ <location filename="../mainpage.cpp" line="146"/>
+ <source>User Input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_user_input_text_entries">
+ <location filename="../mainpage.cpp" line="148"/>
+ <source>Text Entries</source>
+ <translation type="unfinished">Feljegyzések</translation>
+ </message>
+ <message id="xx_wg_user_input_slider">
+ <location filename="../mainpage.cpp" line="150"/>
+ <source>Slider</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_user_input_input_feedback">
+ <location filename="../mainpage.cpp" line="152"/>
+ <source>Input Feedback</source>
+ <translation type="unfinished">Visszajelzés</translation>
+ </message>
<message id="xx_application_title">
- <location filename="../listpage.cpp" line="187"/>
+ <location filename="../mainpage.cpp" line="330"/>
<source>Widgets Gallery</source>
<translation>Grafikus Elemek Tárlata</translation>
</message>
<message id="xx_apporientation_auto">
- <location filename="../listpage.cpp" line="456"/>
+ <location filename="../mainpage.cpp" line="546"/>
<source>Automatic</source>
<translation>Automatikus</translation>
</message>
<message id="xx_apporientation_portrait">
- <location filename="../listpage.cpp" line="464"/>
+ <location filename="../mainpage.cpp" line="554"/>
<source>Portrait</source>
<translation>Álló</translation>
</message>
<message id="xx_apporientation_landscape">
- <location filename="../listpage.cpp" line="472"/>
+ <location filename="../mainpage.cpp" line="562"/>
<source>Landscape</source>
<translation>Fekvő</translation>
</message>
<message id="xx_apporientation_angle0">
- <location filename="../listpage.cpp" line="480"/>
+ <location filename="../mainpage.cpp" line="570"/>
<source>0 degrees</source>
<translation>0 fok</translation>
</message>
<message id="xx_apporientation_angle90">
- <location filename="../listpage.cpp" line="488"/>
+ <location filename="../mainpage.cpp" line="578"/>
<source>90 degrees clockwise</source>
<translation>90 fok óramutató irányban</translation>
</message>
<message id="xx_apporientation_angle180">
- <location filename="../listpage.cpp" line="496"/>
+ <location filename="../mainpage.cpp" line="586"/>
<source>180 degrees clockwise</source>
<translation>180 fok óramutató irányban</translation>
</message>
<message id="xx_apporientation_angle270">
- <location filename="../listpage.cpp" line="504"/>
+ <location filename="../mainpage.cpp" line="594"/>
<source>270 degrees clockwise</source>
<translation>270 fok óramutató irányban</translation>
</message>
@@ -172,12 +327,12 @@
<translation type="obsolete">Rendezetlen</translation>
</message>
<message id="xx_label_page_title">
- <location filename="../labelpage.cpp" line="119"/>
+ <location filename="../labelpage.cpp" line="108"/>
<source>Labels</source>
<translation>Címkék</translation>
</message>
<message id="xx_label_page_info_label">
- <location filename="../labelpage.cpp" line="129"/>
+ <location filename="../labelpage.cpp" line="118"/>
<source>Simple Label is used mainly by other components, and it does not support any formatting or interaction.
Rich Label supports multiple lines, HTML formatting and highlighting for links.
@@ -190,72 +345,107 @@ A Formázott Címkék több sort is tartalmazhatnak, valamint linkek esetén tá
A Címkék balra, jobbra vagy középre lehetnek rendezve és az általuk megjelenített szöveg csak részben lesz látható ha a címke nem fér be egy adott területre.</translation>
</message>
<message id="xx_simple_label">
- <location filename="../labelpage.cpp" line="131"/>
+ <location filename="../labelpage.cpp" line="120"/>
<source>Simple Label</source>
<translation>Egyszerű Címke</translation>
</message>
<message id="xx_rich_label">
- <location filename="../labelpage.cpp" line="134"/>
+ <location filename="../labelpage.cpp" line="123"/>
<source>Rich Label &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, http://www.nokia.com, +358401234567, fors.fagerstrom@email.com</source>
<translation>Rich Label &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, http://www.nokia.com, +358401234567, fors.fagerstrom@email.com</translation>
</message>
+ <message id="xx_wg_multiple_selection_dialogs_page_question_dialog">
+ <location filename="../multipleselectiondialogspage.cpp" line="94"/>
+ <source>Question Dialog</source>
+ <translation type="unfinished">Kérdő Dialógus</translation>
+ </message>
<message id="xx_dialogs_and_notifications_question_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="88"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="118"/>
<source>Question Dialog Title</source>
<translation>Kérdező dialógus címe</translation>
</message>
<message id="xx_dialogs_and_notifications_question_dialog_content">
- <location filename="../dialogsandnotificationspage.cpp" line="92"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="122"/>
<source>Lorem ipsum dolor sit amet?</source>
<translation>Lorem ipsum dolor sit amet?</translation>
</message>
+ <message id="xx_wg_query_dialogs_page_entry_dialog">
+ <location filename="../querydialogspage.cpp" line="95"/>
+ <source>Entry Dialog</source>
+ <translation type="unfinished">Bemenet Dialógus</translation>
+ </message>
+ <message id="xx_wg_query_dialogs_page_long_dialog">
+ <location filename="../querydialogspage.cpp" line="97"/>
+ <source>Long Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_dialogs_and_notifications_entry_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="101"/>
+ <location filename="../querydialogspage.cpp" line="124"/>
<source>Name</source>
<translation>Név</translation>
</message>
<message id="xx_dialogs_and_notifications_entry_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="113"/>
+ <location filename="../querydialogspage.cpp" line="134"/>
<source>Please enter your name</source>
<translation>Írd be a neved</translation>
</message>
<message id="xx_dialogs_and_notifications_long_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="128"/>
+ <location filename="../querydialogspage.cpp" line="150"/>
<source>Select printer</source>
<translation>Válassz nyomtatót</translation>
</message>
+ <message id="xx_wg_single_selection_dialogs_page_stacked_dialogs">
+ <location filename="../singleselectiondialogspage.cpp" line="94"/>
+ <source>Stacked Dialogs</source>
+ <translation type="unfinished">Egymásra helyezett dialógusok</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_system_modal_dialog">
+ <location filename="../singleselectiondialogspage.cpp" line="96"/>
+ <source>System Modal Dialog</source>
+ <translation type="unfinished">Ablak Modális Dialógus</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_dialog_with_progress_indicator">
+ <location filename="../singleselectiondialogspage.cpp" line="98"/>
+ <source>Dialog with Progress Indicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_message_box">
+ <location filename="../singleselectiondialogspage.cpp" line="100"/>
+ <source>Message Box</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_dialogs_and_notifications_stacked_dialog_button">
- <location filename="../dialogsandnotificationspage.cpp" line="179"/>
+ <location filename="../singleselectiondialogspage.cpp" line="129"/>
<source>Click to spawn a nested dialog</source>
<translation>Klikkelj az egymásba helyezett dialógusok létrehozásáshoz</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="181"/>
+ <location filename="../singleselectiondialogspage.cpp" line="131"/>
<source>Stacked dialogs</source>
<translation>Egymásra helyezett dialógusok</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_open_nested_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="194"/>
+ <location filename="../singleselectiondialogspage.cpp" line="145"/>
<source>Click to open a nested message box</source>
<translation>Klikkelj az egymásba helyezett üzenetek megjelenítéséhez</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_nested_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="196"/>
+ <location filename="../singleselectiondialogspage.cpp" line="147"/>
<source>This is a nested dialog</source>
<translation>Egymásba helyezett dialógusok</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_messagebox_text">
- <location filename="../dialogsandnotificationspage.cpp" line="209"/>
+ <location filename="../singleselectiondialogspage.cpp" line="160"/>
<source>I&apos;m a nested message box</source>
<translation>Egymásba helyezett üzenetek</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="219"/>
+ <location filename="../singleselectiondialogspage.cpp" line="171"/>
<source>System Modal Dialog</source>
<translation>Ablak Modális Dialógus</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="225"/>
+ <location filename="../singleselectiondialogspage.cpp" line="178"/>
<source>I&apos;m a window modal dialog.
There&apos;s no way around me!
Muwhahaha... [evil laugh]</source>
@@ -267,34 +457,48 @@ Nem tudsz megkerülni!
Muwhahaha... [röhögés]</translation>
</message>
<message id="xx_dialogs_and_notifications_message_box_text">
- <location filename="../dialogsandnotificationspage.cpp" line="261"/>
+ <location filename="../singleselectiondialogspage.cpp" line="217"/>
<source>Hello World!</source>
<translation>Sziasztok!</translation>
</message>
+ <message id="xx_wg_banners_page_event_banner">
+ <location filename="../bannerspage.cpp" line="90"/>
+ <source>Event Banner</source>
+ <translation type="unfinished">Eseményszallag</translation>
+ </message>
+ <message id="xx_wg_banners_page_information_banner">
+ <location filename="../bannerspage.cpp" line="92"/>
+ <source>Information Banner</source>
+ <translation type="unfinished">Informácószallag</translation>
+ </message>
+ <message id="xx_wg_banners_page_system_information_banner">
+ <location filename="../bannerspage.cpp" line="94"/>
+ <source>System Information Banner</source>
+ <translation type="unfinished">Rendszer Információ Szallag</translation>
+ </message>
<message id="xx_dialogs_and_notifications_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="271"/>
+ <location filename="../bannerspage.cpp" line="121"/>
<source>&lt;b&gt;Ida Taipale&lt;/b&gt;&lt;br/&gt;Have you seen my dog?</source>
<translation>&lt;b&gt;Ida Taipale&lt;/b&gt;&lt;br/&gt;Már láttad a kutyát?</translation>
</message>
<message id="xx_dialogs_and_notifications_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="284"/>
+ <location filename="../bannerspage.cpp" line="134"/>
<source>&lt;b&gt;Battery is running low&lt;/b&gt;</source>
<translation>&lt;b&gt;Akkumulátor kimerülőben&lt;/b&gt;</translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="296"/>
+ <location filename="../bannerspage.cpp" line="145"/>
<source>&lt;b&gt;Incoming call&lt;/b&gt;</source>
<translation>&lt;b&gt;Beérkező hívás&lt;/b&gt;</translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner_accept">
- <location filename="../dialogsandnotificationspage.cpp" line="298"/>
+ <location filename="../bannerspage.cpp" line="147"/>
<source>Accept</source>
<translation>Elfogad</translation>
</message>
<message id="xx_dialogs_and_notifications_title">
- <location filename="../dialogsandnotificationspage.cpp" line="365"/>
<source>Dialogs and Notifications</source>
- <translation variants="yes">
+ <translation type="obsolete" variants="yes">
<lengthvariant>Dialógusok és Értesítők</lengthvariant>
<lengthvariant>Dialógusok és Értesítők</lengthvariant>
<lengthvariant>Dialógusok és Értesítők</lengthvariant>
@@ -303,81 +507,69 @@ Muwhahaha... [röhögés]</translation>
</translation>
</message>
<message id="xx_dialogs_and_notifications_label_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="369"/>
<source>Dialog examples</source>
- <translation>Dialógusok</translation>
+ <translation type="obsolete">Dialógusok</translation>
</message>
<message id="xx_dialogs_and_notifications_query_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="371"/>
<source>Question Dialog</source>
- <translation>Kérdő Dialógus</translation>
+ <translation type="obsolete">Kérdő Dialógus</translation>
</message>
<message id="xx_dialogs_and_notifications_entry_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="373"/>
<source>Entry Dialog</source>
- <translation>Bemenet Dialógus</translation>
+ <translation type="obsolete">Bemenet Dialógus</translation>
</message>
<message id="xx_dialogs_and_notifications_long_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="375"/>
<source>A Long Dialog</source>
- <translation>Egy Hosszú Dialógus</translation>
+ <translation type="obsolete">Egy Hosszú Dialógus</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="378"/>
<source>Stacked Dialogs</source>
- <translation>Egymásra helyezett dialógusok</translation>
+ <translation type="obsolete">Egymásra helyezett dialógusok</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="381"/>
<source>System Modal Dialog</source>
- <translation>Ablak Modális Dialógus</translation>
+ <translation type="obsolete">Ablak Modális Dialógus</translation>
</message>
<message id="xx_dialogs_and_notifications_label_messagebox">
<source> DuiMessageBox examples</source>
<translation type="obsolete">DuiMessageBox examples</translation>
</message>
<message id="xx_dialogs_and_notifications_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="389"/>
<source>Simple Message Box</source>
- <translation>Egyszerű üzenetdoboz</translation>
+ <translation type="obsolete">Egyszerű üzenetdoboz</translation>
</message>
<message id="xx_dialogs_and_notifications_label_notifications">
- <location filename="../dialogsandnotificationspage.cpp" line="387"/>
<source>Notifications and messages</source>
- <translation>Értesítések és üzenetek</translation>
+ <translation type="obsolete">Értesítések és üzenetek</translation>
</message>
<message id="xx_dialogs_and_notifications_label_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="391"/>
<source>Event Banner</source>
- <translation>Eseményszallag</translation>
+ <translation type="obsolete">Eseményszallag</translation>
</message>
<message id="xx_dialogs_and_notifications_label_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="393"/>
<source>Information Banner</source>
- <translation>Informácószallag</translation>
+ <translation type="obsolete">Informácószallag</translation>
</message>
<message id="xx_dialogs_and_notifications_label_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="395"/>
<source>System Information Banner</source>
- <translation>Rendszer Információ Szallag</translation>
+ <translation type="obsolete">Rendszer Információ Szallag</translation>
</message>
<message id="xx_dialogs_and_notifications_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="242"/>
+ <location filename="../singleselectiondialogspage.cpp" line="197"/>
<source>Progress Indicator</source>
<translation>Haladás Jelző</translation>
</message>
<message id="xx_dialogs_and_notifications_dialog_with_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="384"/>
<source>Dialog With Progress Indicator</source>
- <translation>Haladás Jelzős Dialógus</translation>
+ <translation type="obsolete">Haladás Jelzős Dialógus</translation>
</message>
<message id="xx_Image">
- <location filename="../imagepage.cpp" line="123"/>
+ <location filename="../imagepage.cpp" line="131"/>
<source>Image</source>
<translation>Kép</translation>
</message>
<message id="xx_Image properties">
- <location filename="../imagepage.cpp" line="127"/>
+ <location filename="../imagepage.cpp" line="135"/>
<source>Image properties</source>
<translation>Kép tulajdonságai</translation>
</message>
@@ -394,27 +586,37 @@ Muwhahaha... [röhögés]</translation>
<translation type="obsolete">Megállít</translation>
</message>
<message id="xx_image_operations">
- <location filename="../imagepage.cpp" line="145"/>
+ <location filename="../imagepage.cpp" line="153"/>
<source>Image operations</source>
<translation>Képi műveletek</translation>
</message>
<message id="xx_Zoom">
- <location filename="../imagepage.cpp" line="133"/>
+ <location filename="../imagepage.cpp" line="141"/>
<source>Zoom</source>
<translation>Nagyítás</translation>
</message>
<message id="xx_Transparency">
- <location filename="../imagepage.cpp" line="135"/>
+ <location filename="../imagepage.cpp" line="143"/>
<source>Transparency</source>
<translation>Áttetszőség</translation>
</message>
<message id="xx_Crop">
- <location filename="../imagepage.cpp" line="137"/>
+ <location filename="../imagepage.cpp" line="145"/>
<source>Crop</source>
<translation>Levág</translation>
</message>
+ <message id="xx_listpage_list_remove">
+ <location filename="../mlistpage.cpp" line="547"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_listpage_list_edit">
+ <location filename="../mlistpage.cpp" line="553"/>
+ <source>Edit</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_listpage_title">
- <location filename="../mlistpage.cpp" line="423"/>
+ <location filename="../mlistpage.cpp" line="573"/>
<source>List</source>
<translation>Lista</translation>
</message>
@@ -427,109 +629,135 @@ Muwhahaha... [röhögés]</translation>
<translation type="obsolete">Egyebek</translation>
</message>
<message id="xx_textentry_title">
- <location filename="../textentrypage.cpp" line="490"/>
+ <location filename="../textentrypage.cpp" line="582"/>
<source>Text Entries</source>
<translation>Feljegyzések</translation>
</message>
<message id="xx_textentry_free_text">
- <location filename="../textentrypage.cpp" line="506"/>
+ <location filename="../textentrypage.cpp" line="598"/>
<source>Free text:</source>
<translation>Tetszőleges szöveg:</translation>
</message>
<message id="xx_textentry_free_text_masked">
- <location filename="../textentrypage.cpp" line="508"/>
+ <location filename="../textentrypage.cpp" line="600"/>
<source>Free text(masked):</source>
<translation>Tetszőleges szöveg(letakarva):</translation>
</message>
<message id="xx_textentry_number_text">
- <location filename="../textentrypage.cpp" line="510"/>
+ <location filename="../textentrypage.cpp" line="602"/>
<source>Number text:</source>
<translation>Szám:</translation>
</message>
<message id="xx_textentry_phone_number">
- <location filename="../textentrypage.cpp" line="512"/>
+ <location filename="../textentrypage.cpp" line="604"/>
<source>Phone number:</source>
<translation>Telefonszám:</translation>
</message>
<message id="xx_textentry_email_text">
- <location filename="../textentrypage.cpp" line="514"/>
+ <location filename="../textentrypage.cpp" line="606"/>
<source>Email text:</source>
<translation>Email cím:</translation>
</message>
<message id="xx_textentry_url_text">
- <location filename="../textentrypage.cpp" line="516"/>
+ <location filename="../textentrypage.cpp" line="608"/>
<source>Url text:</source>
<translation>Url cím:</translation>
</message>
<message id="xx_textentry_multiline">
- <location filename="../textentrypage.cpp" line="518"/>
+ <location filename="../textentrypage.cpp" line="610"/>
<source>Multiline:</source>
<translation>Többsoros:</translation>
</message>
<message id="xx_tooltip_entry0">
- <location filename="../textentrypage.cpp" line="494"/>
+ <location filename="../textentrypage.cpp" line="586"/>
<source>Enter text here</source>
<translation>Szöveg</translation>
</message>
<message id="xx_textentry_click_here">
- <location filename="../textentrypage.cpp" line="144"/>
- <location filename="../textentrypage.cpp" line="166"/>
+ <location filename="../textentrypage.cpp" line="147"/>
+ <location filename="../textentrypage.cpp" line="169"/>
<source>Click here</source>
<translation>Klikk ide</translation>
</message>
<message id="xx_textentry_press_any_key">
- <location filename="../textentrypage.cpp" line="157"/>
+ <location filename="../textentrypage.cpp" line="160"/>
<source>Press any key</source>
<translation>Nyomj le egy billentyűt</translation>
</message>
<message id="xx_textentry_keypress">
- <location filename="../textentrypage.cpp" line="183"/>
- <source>&lt;i&gt;Billentyű leütés&lt;/i&gt; billentyű:</source>
- <translation></translation>
+ <location filename="../textentrypage.cpp" line="186"/>
+ <source>&lt;i&gt;Key press&lt;/i&gt; key:</source>
+ <oldsource>&lt;i&gt;Billentyű leütés&lt;/i&gt; billentyű:</oldsource>
+ <translation type="unfinished"></translation>
</message>
<message id="xx_textentry_text">
- <location filename="../textentrypage.cpp" line="186"/>
- <location filename="../textentrypage.cpp" line="200"/>
+ <location filename="../textentrypage.cpp" line="189"/>
+ <location filename="../textentrypage.cpp" line="203"/>
<source>text:</source>
<translation>szöveg:</translation>
</message>
<message id="xx_textentry_keyrelease">
- <location filename="../textentrypage.cpp" line="197"/>
+ <location filename="../textentrypage.cpp" line="200"/>
<source>&lt;i&gt;Key release&lt;/i&gt; key:</source>
<translation>&lt;i&gt;Billentyű felengedés&lt;/i&gt; billentyű:</translation>
</message>
+ <message id="xx_tooltip_customtoolbar1">
+ <location filename="../textentrypage.cpp" line="519"/>
+ <source>Example custom toolbar 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_tooltip_customtoolbar2">
+ <location filename="../textentrypage.cpp" line="532"/>
+ <source>Example custom toolbar 2</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_tooltip_entry1">
- <location filename="../textentrypage.cpp" line="497"/>
+ <location filename="../textentrypage.cpp" line="589"/>
<source>This tooltip is quite long and will be clipped on the display</source>
<translation>Ez az eszközleíró túl hosszú ezért a megjelenítés során bizonyos részei levágódnak.</translation>
</message>
+ <message id="xx_textentry_richtext_text">
+ <location filename="../textentrypage.cpp" line="616"/>
+ <source>Rich Text:</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_textentry_noecho">
- <location filename="../textentrypage.cpp" line="525"/>
+ <location filename="../textentrypage.cpp" line="619"/>
<source>No Echo mode:</source>
<translation>Nincs visszajelzés szerkesztéskor:</translation>
</message>
<message id="xx_textentry_echoonedit">
- <location filename="../textentrypage.cpp" line="528"/>
+ <location filename="../textentrypage.cpp" line="622"/>
<source>Echo on edit:</source>
<translation>Visszajelzés szerkesztéskor:</translation>
</message>
<message id="xx_textentry_direct_input_mode">
- <location filename="../textentrypage.cpp" line="531"/>
+ <location filename="../textentrypage.cpp" line="625"/>
<source>Direct Input Mode:</source>
<translation>Közvetlen bemenet:</translation>
</message>
+ <message id="xx_textentry_custom_toolbar1">
+ <location filename="../textentrypage.cpp" line="628"/>
+ <source>Custom ToolBar 1:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_textentry_custom_toolbar2">
+ <location filename="../textentrypage.cpp" line="630"/>
+ <source>Custom ToolBar 2:</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_auto_true_entry0">
- <location filename="../textentrypage.cpp" line="564"/>
+ <location filename="../textentrypage.cpp" line="663"/>
<source>Auto Capitalisation is active</source>
<translation>Automatikus nagybetűhasználat bekapcsolva</translation>
</message>
<message id="xx_auto_false_entry0">
- <location filename="../textentrypage.cpp" line="567"/>
+ <location filename="../textentrypage.cpp" line="666"/>
<source>No Auto Capitalisation</source>
<translation>Automatikus nagybetűhasználat kikapcsolva</translation>
</message>
<message id="xx_tooltip_entry6">
- <location filename="../textentrypage.cpp" line="503"/>
+ <location filename="../textentrypage.cpp" line="595"/>
<source>This is a multiline text entry</source>
<oldsource>This is
multiline
@@ -539,22 +767,22 @@ többsoros
eszközleíró</translation>
</message>
<message id="xx_textentry_singleselectall">
- <location filename="../textentrypage.cpp" line="520"/>
+ <location filename="../textentrypage.cpp" line="612"/>
<source>Singleline (selectall):</source>
<translation>Egysoros (mindent kiválaszt)</translation>
</message>
<message id="xx_auto_capitalisation">
- <location filename="../textentrypage.cpp" line="534"/>
+ <location filename="../textentrypage.cpp" line="633"/>
<source>Auto capitalisation</source>
<translation>Automatikus nagybetűhasználat</translation>
</message>
<message id="xx_error_correction">
- <location filename="../textentrypage.cpp" line="536"/>
+ <location filename="../textentrypage.cpp" line="635"/>
<source>Error correction</source>
<translation>Hiba kijavítása</translation>
</message>
<message id="xx_slider_page_title">
- <location filename="../sliderpage.cpp" line="169"/>
+ <location filename="../sliderpage.cpp" line="168"/>
<source>Sliders</source>
<translation variants="yes">
<lengthvariant>Csúszkák</lengthvariant>
@@ -562,28 +790,28 @@ eszközleíró</translation>
</translation>
</message>
<message id="xx_slider_personal_data_label">
- <location filename="../sliderpage.cpp" line="180"/>
+ <location filename="../sliderpage.cpp" line="179"/>
<source>Personal data</source>
<translation>Személyes adatok</translation>
</message>
<message id="xx_slider_age_label">
- <location filename="../sliderpage.cpp" line="184"/>
+ <location filename="../sliderpage.cpp" line="183"/>
<source>Please select your age:œ!! Please select your age:œ!! Please select your age:œ!! Age:</source>
<oldsource>Please select your age:</oldsource>
<translation>Korod:</translation>
</message>
<message id="xx_slider_brightness_label">
- <location filename="../sliderpage.cpp" line="217"/>
+ <location filename="../sliderpage.cpp" line="216"/>
<source>Brightness:</source>
<translation>Fényesség:</translation>
</message>
<message id="xx_slider_player_label">
- <location filename="../sliderpage.cpp" line="197"/>
+ <location filename="../sliderpage.cpp" line="196"/>
<source>Player:</source>
<translation>Lejátszó:</translation>
</message>
<message id="xx_slider_page_info_label">
- <location filename="../sliderpage.cpp" line="177"/>
+ <location filename="../sliderpage.cpp" line="176"/>
<source>Slider is used for continuous set of values, among which user can choose one value.
Seekbar is a special type of Slider used for displaying playback status for multimedia content.</source>
@@ -592,12 +820,16 @@ Seekbar is a special type of Slider used for displaying playback status for mult
A kereső egy olyan csúszka amelyet multimédiás tartalom lejátszásának figyelésére használnak.</translation>
</message>
<message id="xx_viewmenu_page_title">
- <location filename="../applicationmenupage.cpp" line="60"/>
<source>Application Menu</source>
- <translation>Alkalmazás Menü</translation>
+ <translation type="obsolete">Alkalmazás Menü</translation>
+ </message>
+ <message id="xx_applicationmenu_page_title">
+ <location filename="../applicationmenupage.cpp" line="62"/>
+ <source>Application Menu</source>
+ <translation type="unfinished">Alkalmazás Menü</translation>
</message>
<message id="xx_applicationmenu_page_info">
- <location filename="../applicationmenupage.cpp" line="75"/>
+ <location filename="../applicationmenupage.cpp" line="77"/>
<source>Application Menu is a menu element available to any view. &lt;ul&gt;&lt;li&gt;It can be opened by tapping on the menu title area.&lt;/li&gt;&lt;li&gt;It contains commands and view settings for the view in question and an optional area for style commands.&lt;/li&gt;&lt;li&gt;Each view of the application can have different menu contents.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Guidelines&lt;/b&gt; for mandatory menu items: &lt;ul&gt;&lt;li&gt;Settings should be on the main View of the application, unless the settings are specific to a sub-View&lt;/li&gt;&lt;li&gt;Help should be available in each View &lt;/li&gt;&lt;li&gt;Exit task should be present in all Views except for the main View of the application.&lt;/li&gt;&lt;/ul&gt;</source>
<translation>Az Alkalmazás menü minden nézetből megjeleníthető. &lt;ul&gt;&lt;li&gt;Az oldal cím területének érintéséval tehető láthatóvá.&lt;/li&gt;&lt;li&gt;Az adott nézethez kötődő beállításokat és parancsokat valamint a nézet stílusához kötődő beállításokat tartalmazza.&lt;/li&gt;&lt;li&gt;Az alkalmazás minden nézetéhez sajátos Alkalmazás Menü kapcsolódhat.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Irányelvek&lt;/b&gt; az Alkalmaźas Menü tartalmához:&lt;ul&gt;&lt;li&gt;A Beállítások menü elem az alkalmazás fő nézetéhez kapcsolódó Alkalmazás menüben foglalhon helyet, hacsak nem tartalmaz egy adott nézethez kotődő beállítást&lt;/li&gt;&lt;li&gt;A Súgó minden Alkalmazás Menüből legyen elérhető&lt;/li&gt;&lt;li&gt;A Kilépés minden Alkalmazás Menüből legyen elérhető kivéve a főnézet Alkalmazás menüjét.&lt;/li&gt;&lt;/ul&gt;</translation>
</message>
@@ -710,17 +942,17 @@ A kereső egy olyan csúszka amelyet multimédiás tartalom lejátszásának fig
<translation type="obsolete">Japán</translation>
</message>
<message id="xx_popup_generic_title">
- <location filename="../comboboxpage.cpp" line="112"/>
+ <location filename="../comboboxpage.cpp" line="113"/>
<source>Title</source>
<translation>Cím</translation>
</message>
<message id="xx_popup_sort_descending_order">
- <location filename="../comboboxpage.cpp" line="114"/>
+ <location filename="../comboboxpage.cpp" line="115"/>
<source>Sort - DescendingOrder</source>
<translation>Csökkenő sorrendbe rendezés</translation>
</message>
<message id="xx_popup_time_consuming">
- <location filename="../comboboxpage.cpp" line="116"/>
+ <location filename="../comboboxpage.cpp" line="117"/>
<source>Time-consuming setting</source>
<translation>Időigényes beállítás</translation>
</message>
@@ -729,7 +961,7 @@ A kereső egy olyan csúszka amelyet multimédiás tartalom lejátszásának fig
<translation type="obsolete">Testreszabott</translation>
</message>
<message id="xx_container_page_title">
- <location filename="../containerpage.cpp" line="65"/>
+ <location filename="../containerpage.cpp" line="64"/>
<source>Container</source>
<translation>Tároló</translation>
</message>
@@ -742,22 +974,22 @@ A kereső egy olyan csúszka amelyet multimédiás tartalom lejátszásának fig
</translation>
</message>
<message id="xx_progressbar_page_title">
- <location filename="../progressbarpage.cpp" line="80"/>
+ <location filename="../progressbarpage.cpp" line="78"/>
<source>Progress Bar</source>
<translation>Haladó Csík</translation>
</message>
<message id="xx_progressbar_page_info_label">
- <location filename="../progressbarpage.cpp" line="85"/>
+ <location filename="../progressbarpage.cpp" line="83"/>
<source>A Progress Bar can indicate an ongoing process with either known or unknown durations.</source>
<translation>Haladó csíkkal ismert vagy ismeretlen időtartamú folyamatokat lehet követni.</translation>
</message>
<message id="xx_progressindicator_unknown_duration_bar">
- <location filename="../progressbarpage.cpp" line="89"/>
+ <location filename="../progressbarpage.cpp" line="87"/>
<source>Installing CoolApp</source>
<translation>CoolApp telepítse</translation>
</message>
<message id="xx_progressindicator_known_duration_bar">
- <location filename="../progressbarpage.cpp" line="87"/>
+ <location filename="../progressbarpage.cpp" line="85"/>
<source>Downloading nicepic.jpg</source>
<translation>szepkep.jpg letöltése</translation>
</message>
@@ -786,42 +1018,42 @@ A kereső egy olyan csúszka amelyet multimédiás tartalom lejátszásának fig
<translation type="obsolete">Rács</translation>
</message>
<message id="xx_toolbar_page_example1">
- <location filename="../toolbarpage.cpp" line="168"/>
+ <location filename="../toolbarpage.cpp" line="176"/>
<source>Example 1</source>
<translation>1. Példa</translation>
</message>
<message id="xx_toolbar_page_example2">
- <location filename="../toolbarpage.cpp" line="174"/>
+ <location filename="../toolbarpage.cpp" line="182"/>
<source>Example 2</source>
<translation>2. Példa</translation>
</message>
<message id="xx_toolbar_page_defaultview">
- <location filename="../toolbarpage.cpp" line="180"/>
+ <location filename="../toolbarpage.cpp" line="188"/>
<source>Default View</source>
<translation>Alapértelmezett nézet</translation>
</message>
<message id="xx_toolbar_page_tabview">
- <location filename="../toolbarpage.cpp" line="186"/>
+ <location filename="../toolbarpage.cpp" line="194"/>
<source>Tab View</source>
<translation>Füles nézet</translation>
</message>
<message id="xx_toolbar_page_title">
- <location filename="../toolbarpage.cpp" line="208"/>
+ <location filename="../toolbarpage.cpp" line="216"/>
<source>ToolBar</source>
<translation>Eszköztár</translation>
</message>
<message id="xx_toolbar_page_info">
- <location filename="../toolbarpage.cpp" line="215"/>
+ <location filename="../toolbarpage.cpp" line="223"/>
<source>&lt;b&gt;Toolbar&lt;/b&gt; acts as a container for actions. Depending upon the view attached, it either acts as a tab bar or is a container for buttons and text input field. &lt;ul&gt;&lt;li&gt;Click Menu to explore the example&lt;/li&gt;&lt;/ul&gt;</source>
<translation>&lt;b&gt;Eszköztár&lt;/b&gt; egy tároló amelyik a nézethez szempontjaból fontos parancsokat tartalmaz amelyek kötődnek közvetlenül a nézetben megjelenített grafikus elemekhez. &lt;ul&gt;&lt;li&gt;4 Ikon Gombot tartalmazhat (kattints a Menüre, majd az első példáratlmazhat egy szöveges bemeneti mezőt is 2 Ikon Gombbal (kattints a Menüre, majd az második példára)&lt;/li&gt; &lt;l&lt;/li&gt;&lt;/ul&gt;</translation>
</message>
<message id="xx_objectmenu_page_title">
- <location filename="../objectmenupage.cpp" line="155"/>
+ <location filename="../objectmenupage.cpp" line="154"/>
<source>Object menu</source>
<translation>Objektum menü</translation>
</message>
<message id="xx_objectmenu_page_info_label">
- <location filename="../objectmenupage.cpp" line="167"/>
+ <location filename="../objectmenupage.cpp" line="166"/>
<source>Object Menu is a popup menu of commands opened by long tapping an element. It is used for providing shortcuts to functions related to that particular element.
The primary (single short tap) action of the element should not be duplicated in the Object Menu.</source>
@@ -830,24 +1062,22 @@ The primary (single short tap) action of the element should not be duplicated in
Az elsődleges (egyszeri rövid érintés) kiváltó eseményt nem lehet megismételni az Objektum Menüben.</translation>
</message>
<message id="xx_objectmenu_page_container_friends">
- <location filename="../objectmenupage.cpp" line="170"/>
+ <location filename="../objectmenupage.cpp" line="169"/>
<source>Friends</source>
<translation>Barátok</translation>
</message>
<message id="xx_objectmenu_page_container_albums">
- <location filename="../objectmenupage.cpp" line="172"/>
+ <location filename="../objectmenupage.cpp" line="171"/>
<source>Favorite Albums</source>
<translation>Kedvenc Albumok</translation>
</message>
<message id="xx_navigationbar_page_title">
- <location filename="../navigationbarpage.cpp" line="125"/>
<source>Display Modes and Full Screen</source>
- <translation>Tájoló Csík</translation>
+ <translation type="obsolete">Tájoló Csík</translation>
</message>
<message id="xx_navigationbar_display_mode">
- <location filename="../navigationbarpage.cpp" line="129"/>
<source>Components&apos; display mode:</source>
- <translation>Elemek megjeleítési módja:</translation>
+ <translation type="obsolete">Elemek megjeleítési módja:</translation>
</message>
<message id="xx_navigationbar_toggle_navigationbar">
<source>Toggle nav. bar visibility</source>
@@ -861,39 +1091,32 @@ Az elsődleges (egyszeri rövid érintés) kiváltó eseményt nem lehet megism
<translation type="obsolete">Változtatsd meg az Esc gomb láthatóságát</translation>
</message>
<message id="xx_navigationbar_navbarcombo">
- <location filename="../navigationbarpage.cpp" line="60"/>
<source>Navigation Bar</source>
- <translation>Tájoló Csík</translation>
+ <translation type="obsolete">Tájoló Csík</translation>
</message>
<message id="xx_navigationbar_escapebtncombo">
- <location filename="../navigationbarpage.cpp" line="68"/>
<source>Escape Button</source>
- <translation>Escape Gomb</translation>
+ <translation type="obsolete">Escape Gomb</translation>
</message>
<message id="xx_navigationbar_homebtncombo">
- <location filename="../navigationbarpage.cpp" line="76"/>
<source>Home Button</source>
- <translation>Főoldal Gomb</translation>
+ <translation type="obsolete">Főoldal Gomb</translation>
</message>
<message id="xx_navigationbar_escape_mode_label">
- <location filename="../navigationbarpage.cpp" line="131"/>
<source>Escape Button mode:</source>
- <translation>Escape Gomb állapota:</translation>
+ <translation type="obsolete">Escape Gomb állapota:</translation>
</message>
<message id="xx_navigationbar_auto">
- <location filename="../navigationbarpage.cpp" line="136"/>
<source>Auto</source>
- <translation>Automatikus</translation>
+ <translation type="obsolete">Automatikus</translation>
</message>
<message id="xx_navigationbar_manual_back">
- <location filename="../navigationbarpage.cpp" line="140"/>
<source>Manual Back</source>
- <translation>Kézi visszaléptetés</translation>
+ <translation type="obsolete">Kézi visszaléptetés</translation>
</message>
<message id="xx_navigationbar_close_window">
- <location filename="../navigationbarpage.cpp" line="144"/>
<source>Close Window</source>
- <translation>Ablak bezárása</translation>
+ <translation type="obsolete">Ablak bezárása</translation>
</message>
<message id="xx_navigationbar_escapebutton_mode_label">
<source>Escape Button mode:</source>
@@ -911,18 +1134,53 @@ Az elsődleges (egyszeri rövid érintés) kiváltó eseményt nem lehet megism
<source>Hidden</source>
<translation type="obsolete">Láthatatlan</translation>
</message>
+ <message id="xx_displaymodes_navbarcombo">
+ <location filename="../displaymodespage.cpp" line="59"/>
+ <source>Navigation Bar</source>
+ <translation type="unfinished">Tájoló Csík</translation>
+ </message>
+ <message id="xx_displaymodes_escapebtncombo">
+ <location filename="../displaymodespage.cpp" line="67"/>
+ <source>Escape Button</source>
+ <translation type="unfinished">Escape Gomb</translation>
+ </message>
+ <message id="xx_displaymodes_homebtncombo">
+ <location filename="../displaymodespage.cpp" line="75"/>
+ <source>Home Button</source>
+ <translation type="unfinished">Főoldal Gomb</translation>
+ </message>
+ <message id="xx_displaymodes_page_title">
+ <location filename="../displaymodespage.cpp" line="143"/>
+ <source>Display Modes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_displaymodes_display_mode">
+ <location filename="../displaymodespage.cpp" line="147"/>
+ <source>Components&apos; display mode:</source>
+ <translation type="unfinished">Elemek megjeleítési módja:</translation>
+ </message>
+ <message id="xx_displaymodes_window_state">
+ <location filename="../displaymodespage.cpp" line="150"/>
+ <source>Window state:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_displaymodes_full_screen">
+ <location filename="../displaymodespage.cpp" line="153"/>
+ <source>Full Screen</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_displaymode_show">
- <location filename="../navigationbarpage.cpp" line="162"/>
+ <location filename="../displaymodespage.cpp" line="166"/>
<source>Show</source>
<translation>Megjelenít</translation>
</message>
<message id="xx_displaymode_autohide">
- <location filename="../navigationbarpage.cpp" line="164"/>
+ <location filename="../displaymodespage.cpp" line="168"/>
<source>Auto Hide</source>
<translation>Automatikusan eltűntet</translation>
</message>
<message id="xx_displaymode_hide">
- <location filename="../navigationbarpage.cpp" line="166"/>
+ <location filename="../displaymodespage.cpp" line="170"/>
<source>Hide</source>
<translation>Eltűntet</translation>
</message>
@@ -1090,34 +1348,28 @@ Az elsődleges (egyszeri rövid érintés) kiváltó eseményt nem lehet megism
<translation type="obsolete">Nézetek, Tárolók és Dialógusok</translation>
</message>
<message id="xx_template_page_views_dialogs">
- <location filename="../templatepage.cpp" line="47"/>
<source>Views and Dialogs</source>
- <translation>Nézetek és Dialógusok</translation>
+ <translation type="obsolete">Nézetek és Dialógusok</translation>
</message>
<message id="xx_template_page_contains_applets">
- <location filename="../templatepage.cpp" line="49"/>
<source>Contains and Applets</source>
- <translation>Tárolók és Appletek</translation>
+ <translation type="obsolete">Tárolók és Appletek</translation>
</message>
<message id="xx_template_page_layouts_visuals">
- <location filename="../templatepage.cpp" line="51"/>
<source>Layouts and Visuals</source>
- <translation>Szerkezetek és Látható elemek</translation>
+ <translation type="obsolete">Szerkezetek és Látható elemek</translation>
</message>
<message id="xx_template_page_buttons">
- <location filename="../templatepage.cpp" line="53"/>
<source>Buttons</source>
- <translation>Gombok</translation>
+ <translation type="obsolete">Gombok</translation>
</message>
<message id="xx_template_page_indicators_notifications">
- <location filename="../templatepage.cpp" line="55"/>
<source>Indicators and Notifications</source>
- <translation>Jelzők és Értesítők</translation>
+ <translation type="obsolete">Jelzők és Értesítők</translation>
</message>
<message id="xx_template_page_lists_grids_menus">
- <location filename="../templatepage.cpp" line="57"/>
<source>Lists, Grids and Menus</source>
- <translation>Listák, Rácsok és Menük</translation>
+ <translation type="obsolete">Listák, Rácsok és Menük</translation>
</message>
<message id="xx_template_page_indicators">
<source>Indicators</source>
@@ -1128,9 +1380,8 @@ Az elsődleges (egyszeri rövid érintés) kiváltó eseményt nem lehet megism
<translation type="obsolete">Listák és Rácsok</translation>
</message>
<message id="xx_template_page_user_input">
- <location filename="../templatepage.cpp" line="59"/>
<source>User input</source>
- <translation>Felhasználói bemenet</translation>
+ <translation type="obsolete">Felhasználói bemenet</translation>
</message>
<message id="xx_example1 template">
<source>Example 1</source>
@@ -1141,7 +1392,7 @@ Az elsődleges (egyszeri rövid érintés) kiváltó eseményt nem lehet megism
<translation type="obsolete">2. Példa</translation>
</message>
<message id="xx_image_page_info">
- <location filename="../imagepage.cpp" line="152"/>
+ <location filename="../imagepage.cpp" line="160"/>
<source>Image allows the placement of images onto the UI. Images are generally non-interactive elements. Various single and multiple touch interactions can be added to an Image component if desired. As an example, pinch gesture can be used in this page to zoom the image.</source>
<translation>A felhasználó a kép segítségével külömböző képeket jeleníthet meg. A képek általában passzív elemek, bár szükség esetén reagálhatnak egyszerű érintésszerű felhasználói bemenetetre.</translation>
</message>
@@ -1154,43 +1405,43 @@ Az elsődleges (egyszeri rövid érintés) kiváltó eseményt nem lehet megism
<translation type="obsolete">A felhasználó egy felugró lista meghatározott számú előregyártott / rendszer által meghatározott lehetősége közül választhat egyet. Ezután a lista megjeleníti a kiválasztott lehetőséget. A felugró listából csakis egy lehetőséget lehet kiválasztani.</translation>
</message>
<message id="xx_sample template">
- <location filename="../templatepage.cpp" line="125"/>
+ <location filename="../templatepage.cpp" line="107"/>
<source>Sample template</source>
<translation>Példa Sablon</translation>
</message>
<message id="xx_template_page_title">
- <location filename="../templatepage.cpp" line="119"/>
+ <location filename="../templatepage.cpp" line="101"/>
<source>Template</source>
<translation>Sablon</translation>
</message>
<message id="xx_textentry_completion_text">
- <location filename="../textentrypage.cpp" line="522"/>
+ <location filename="../textentrypage.cpp" line="614"/>
<source>Email suggestion text:</source>
<translation>Sugallt email cím:</translation>
</message>
<message id="xx_combobox_page_info">
- <location filename="../comboboxpage.cpp" line="120"/>
+ <location filename="../comboboxpage.cpp" line="121"/>
<source>The MComboBox widget is a combined button and popup list. It is very similar to QComboBox, but does not allow editing the text.</source>
<oldsource>The DuiComboBox widget is a combined button and popup list. It is very similar to QComboBox, but does not allow editing the text.</oldsource>
<translation>A DuiComboBox elem egy gombból és egy felugró listából Nagyon hasonlít a QComboBox-ra, de nem lehet benne szöveget változtatni.</translation>
</message>
<message id="xx_combobox_title">
- <location filename="../comboboxpage.cpp" line="108"/>
+ <location filename="../comboboxpage.cpp" line="109"/>
<source>ComboBox</source>
<translation>Kombó</translation>
</message>
<message id="xx_tooltip_entry8">
- <location filename="../textentrypage.cpp" line="500"/>
+ <location filename="../textentrypage.cpp" line="592"/>
<source>Provides email address suggestions</source>
<translation>Sugall egy email címet</translation>
</message>
<message id="xx_checkbox_page_title">
- <location filename="../checkboxpage.cpp" line="76"/>
+ <location filename="../checkboxpage.cpp" line="80"/>
<source>Checkbox</source>
<translation>Jelölőnégyzet</translation>
</message>
<message id="xx_checkbox_page_info_label">
- <location filename="../checkboxpage.cpp" line="85"/>
+ <location filename="../checkboxpage.cpp" line="89"/>
<source>The Checkbox is a variant of Button that allows users to set the state of variable or setting which has two values, On and Off.
Checkbox essentially does the same thing as the Switch button, so please consider using a Switch instead.</source>
@@ -1199,19 +1450,20 @@ Checkbox essentially does the same thing as the Switch button, so please conside
A Jelölőnégyzet ugyanúgy működik mint a Kapcsoló, ezért inkább azt használd helyette.</translation>
</message>
<message id="xx_checkbox_page_checkbox_label">
- <location filename="../checkboxpage.cpp" line="88"/>
- <source>I have read and understood the
-instructions.</source>
- <translation>Elolvastam és megértettem
+ <location filename="../checkboxpage.cpp" line="92"/>
+ <source>I have read and understood the instructions.</source>
+ <oldsource>I have read and understood the
+instructions.</oldsource>
+ <translation type="unfinished">Elolvastam és megértettem
utasításokat.</translation>
</message>
<message id="xx_icon_button_page_title">
- <location filename="../iconbuttonpage.cpp" line="82"/>
+ <location filename="../iconbuttonpage.cpp" line="81"/>
<source>Icon Button</source>
<translation>Ikon Gomb</translation>
</message>
<message id="xx_icon_button_page_info_label">
- <location filename="../iconbuttonpage.cpp" line="90"/>
+ <location filename="../iconbuttonpage.cpp" line="89"/>
<source>Icon Buttons have an icon and can have a text label. Icon button differs from push button by its visual presentation: it does not have button-style edges like a Push Button does.
Icon Buttons are used in e.g. Toolbars.</source>
@@ -1220,7 +1472,7 @@ utasításokat.</translation>
Ikon Gombokat használnak például az Eszköztárakban.</translation>
</message>
<message id="xx_icon_button_page_icon_button2">
- <location filename="../iconbuttonpage.cpp" line="92"/>
+ <location filename="../iconbuttonpage.cpp" line="91"/>
<source>Lorem ipsum</source>
<translation>Lorem ipsum</translation>
</message>
@@ -1257,12 +1509,13 @@ sit amet</source>
sit amet</translation>
</message>
<message id="xx_spinner_page_application_main_area">
- <location filename="../spinnerpage.cpp" line="66"/>
- <source>In container main area</source>
- <translation>Az alkalmazás testében </translation>
+ <location filename="../spinnerpage.cpp" line="68"/>
+ <source>In application main area</source>
+ <oldsource>In container main area</oldsource>
+ <translation type="unfinished">Az alkalmazás testében </translation>
</message>
<message id="xx_spinner_page_container_header">
- <location filename="../spinnerpage.cpp" line="72"/>
+ <location filename="../spinnerpage.cpp" line="74"/>
<source>In container header</source>
<translation>A tároló fejlécében</translation>
</message>
@@ -1271,22 +1524,23 @@ sit amet</translation>
<translation type="obsolete">Tárolóban</translation>
</message>
<message id="xx_spinner_page_menu">
- <location filename="../spinnerpage.cpp" line="78"/>
- <source>In view menu</source>
- <translation>Nézet menüben</translation>
+ <location filename="../spinnerpage.cpp" line="80"/>
+ <source>In application menu</source>
+ <oldsource>In view menu</oldsource>
+ <translation type="unfinished">Nézet menüben</translation>
</message>
<message id="xx_spinner_page_dialog">
- <location filename="../spinnerpage.cpp" line="84"/>
+ <location filename="../spinnerpage.cpp" line="86"/>
<source>In dialog</source>
<translation>Dialógusban</translation>
</message>
<message id="xx_spinner_page_title">
- <location filename="../spinnerpage.cpp" line="97"/>
+ <location filename="../spinnerpage.cpp" line="99"/>
<source>Spinner</source>
<translation>Tekerő</translation>
</message>
<message id="xx_spinner_page_info_label">
- <location filename="../spinnerpage.cpp" line="106"/>
+ <location filename="../spinnerpage.cpp" line="108"/>
<source>Spinner is used to indicate that a progress is ongoing and the duration is unknown.
Spinners can also be used in situations when duration is known, but available space on screen does not permit using a Progress bar.
@@ -1299,41 +1553,40 @@ Tekerőket abban az esetben is lehet használni, ha a végbemenő folyamat időt
Nézd meg a menüben a külömböző felhasználási lehetőségeket.</translation>
</message>
<message id="xx_spinner_page_email_header">
- <location filename="../spinnerpage.cpp" line="116"/>
<source>From: John Doe
Date: Today
Subject: This is funny stuff!</source>
- <translation>Kis Jánostól
+ <translation type="obsolete">Kis Jánostól
Dátum: Ma
Téma: Egy cseles dolog!</translation>
</message>
<message id="xx_spinner_page_application_area_description">
- <location filename="../spinnerpage.cpp" line="129"/>
+ <location filename="../spinnerpage.cpp" line="118"/>
<source>Spinner can be used while content is loading.</source>
<translation>A tekerő a tartalom betöltődését is jelezheti.</translation>
</message>
<message id="xx_spinner_page_container_title">
- <location filename="../spinnerpage.cpp" line="142"/>
+ <location filename="../spinnerpage.cpp" line="151"/>
<source>Online albums</source>
<translation>Online albumok</translation>
</message>
<message id="xx_spinner_page_container_header_description">
- <location filename="../spinnerpage.cpp" line="151"/>
+ <location filename="../spinnerpage.cpp" line="160"/>
<source>Spinner can be used in container header to indicate that the items inside the container are being updated, but visible items can be interacted with.</source>
<translation>A tároló fejlécébe helyezett tekerő a tároló tartalmának frissitését jelzi, miközben a grafikus elemek nincsenek letitlva</translation>
</message>
<message id="xx_spinner_page_application_menu_description">
- <location filename="../spinnerpage.cpp" line="195"/>
+ <location filename="../spinnerpage.cpp" line="204"/>
<source>Spinner in the application menu area indicates that the whole view is pending for update.</source>
<translation>Az alkalmazás menübe helyezett tekerő a teljes nézet frissitésére való várakozást jelzi</translation>
</message>
<message id="xx_spinner_page_dialog_header_description">
- <location filename="../spinnerpage.cpp" line="209"/>
+ <location filename="../spinnerpage.cpp" line="218"/>
<source>Spinner can be placed in dialog header to indicate changing content.</source>
<translation>Tekerőt a dialógus fejlécébe is lehet helyezni a tartalom változásának jelzésére</translation>
</message>
<message id="xx_spinner_page_dialog_header">
- <location filename="../spinnerpage.cpp" line="230"/>
+ <location filename="../spinnerpage.cpp" line="239"/>
<source>Select Internet connection</source>
<translation>Válassz internet kapcsolatot</translation>
</message>
@@ -1342,12 +1595,12 @@ Téma: Egy cseles dolog!</translation>
<translation type="obsolete">Kapcsolódási pontok letapogatása</translation>
</message>
<message id="xx_switch_page_title">
- <location filename="../switchpage.cpp" line="128"/>
+ <location filename="../switchpage.cpp" line="127"/>
<source>Switch</source>
<translation>Kapcsoló</translation>
</message>
<message id="xx_switch_page_info_label">
- <location filename="../switchpage.cpp" line="138"/>
+ <location filename="../switchpage.cpp" line="137"/>
<source>A Switch button differs from both a push button and an icon button visually. It looks like a switch, communicating that pressing this button will not go to another view or will not perform any other actions except to toggle the state of the button.
Switches are used to indicate e.g. settings values</source>
@@ -1357,42 +1610,41 @@ azt sugallva, hogy állapotuk megváltoztatásával nem fog egyéb történni, m
A Kapcsolókat bizonyos beállítások megjelenítésére használják.</translation>
</message>
<message id="xx_switch_page_switch1">
- <location filename="../switchpage.cpp" line="141"/>
+ <location filename="../switchpage.cpp" line="140"/>
<source>Headlights</source>
<translation>Fényszórók</translation>
</message>
<message id="xx_switch_page_switch2">
- <location filename="../switchpage.cpp" line="143"/>
+ <location filename="../switchpage.cpp" line="142"/>
<source>Autopilot</source>
<translation>Automatikus pilóta</translation>
</message>
<message id="xx_switch_page_switch3">
- <location filename="../switchpage.cpp" line="145"/>
+ <location filename="../switchpage.cpp" line="144"/>
<source>Warp Drive</source>
<translation>Vontatás</translation>
</message>
<message id="xx_switch_page_switch4">
- <location filename="../switchpage.cpp" line="147"/>
+ <location filename="../switchpage.cpp" line="146"/>
<source>Reactor Shields</source>
<translation>Reaktor védelem</translation>
</message>
<message id="xx_switch_page_switch5">
- <location filename="../switchpage.cpp" line="149"/>
+ <location filename="../switchpage.cpp" line="148"/>
<source>Infinite Improbability Drive</source>
<translation>Teljesen bizonytalan haladás</translation>
</message>
<message id="xx_template_page_input_feedback">
- <location filename="../templatepage.cpp" line="61"/>
<source>Input Feedback</source>
- <translation>Visszajelzés</translation>
+ <translation type="obsolete">Visszajelzés</translation>
</message>
<message id="xx_input_feedback_page_title">
- <location filename="../feedbackpage.cpp" line="90"/>
+ <location filename="../feedbackpage.cpp" line="89"/>
<source>Input Feedback</source>
<translation>Visszajelzés</translation>
</message>
<message id="xx_input_feedback_page_info_label">
- <location filename="../feedbackpage.cpp" line="100"/>
+ <location filename="../feedbackpage.cpp" line="99"/>
<source>This page contains buttons with custom input feedbacks. Any MWidget can have input feedback for press and release events. Input feedback can be a sound effect and/or a haptic effect (piezo, vibra) depending on the product.
Input feedbacks can be easily configured for different purposes using the theming system.</source>
@@ -1404,54 +1656,89 @@ Input feedbacks can be easily configured for different purposes using the themin
A visszajelzéseket a témarendszer segítségével lehet beállítani.</translation>
</message>
<message id="xx_input_feedback_page_button1">
- <location filename="../feedbackpage.cpp" line="102"/>
+ <location filename="../feedbackpage.cpp" line="101"/>
<source>Default</source>
<translation>Alapértelmezett</translation>
</message>
<message id="xx_input_feedback_page_button2">
- <location filename="../feedbackpage.cpp" line="104"/>
+ <location filename="../feedbackpage.cpp" line="103"/>
<source>Different</source>
<translation>Külömböző</translation>
</message>
<message id="xx_input_feedback_page_button3">
- <location filename="../feedbackpage.cpp" line="106"/>
+ <location filename="../feedbackpage.cpp" line="105"/>
<source>Sluggish</source>
<translation>Lomha</translation>
</message>
<message id="xx_input_feedback_page_button4">
- <location filename="../feedbackpage.cpp" line="108"/>
+ <location filename="../feedbackpage.cpp" line="107"/>
<source>Babytoy</source>
<translation>Játék</translation>
</message>
<message id="xx_input_feedback_page_button5">
- <location filename="../feedbackpage.cpp" line="110"/>
+ <location filename="../feedbackpage.cpp" line="109"/>
<source>Space</source>
<translation>Szünet</translation>
</message>
<message id="xx_input_feedback_page_button6">
- <location filename="../feedbackpage.cpp" line="112"/>
+ <location filename="../feedbackpage.cpp" line="111"/>
<source>Silent</source>
<translation>Csendes</translation>
</message>
+ <message id="xx_gridpage_configuration">
+ <location filename="../mgridpage.cpp" line="193"/>
+ <source>Configuration</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_gridpage_title">
- <location filename="../mgridpage.cpp" line="96"/>
+ <location filename="../mgridpage.cpp" line="204"/>
<source>Grid page</source>
<translation>Rács</translation>
</message>
+ <message id="xx_gridpage_set_columns">
+ <location filename="../mgridpage.cpp" line="290"/>
+ <source>Set columns</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_gridpage_landscape">
+ <location filename="../mgridpage.cpp" line="316"/>
+ <source>Landscape</source>
+ <translation type="unfinished">Fekvő</translation>
+ </message>
+ <message id="xx_gridpage_portrait">
+ <location filename="../mgridpage.cpp" line="321"/>
+ <source>Portrait</source>
+ <translation type="unfinished">Álló</translation>
+ </message>
<message id="xx_video_container_page_title">
- <location filename="../videocontainerpage.cpp" line="372"/>
<source>Video container</source>
- <translation>Videó</translation>
+ <translation type="obsolete">Videó</translation>
</message>
<message id="xx_video_container_page_info_label">
- <location filename="../videocontainerpage.cpp" line="377"/>
<source>Tap video thumbnail to play/pause it. Tap and hold thumbnail to open video in it&apos;s native size.</source>
- <translation>Lejátszáshoz / megállításhoz érintsd meg az indexképet. Hosszabb érintéssel eredeti méretben játsza le a videót.</translation>
+ <translation type="obsolete">Lejátszáshoz / megállításhoz érintsd meg az indexképet. Hosszabb érintéssel eredeti méretben játsza le a videót.</translation>
</message>
<message id="xx_video_container_header_title">
- <location filename="../videocontainerpage.cpp" line="380"/>
<source>Gallery</source>
- <translation>Galéria</translation>
+ <translation type="obsolete">Galéria</translation>
+ </message>
+ <message id="xx_bubblepage_title">
+ <location filename="../bubblepage.cpp" line="143"/>
+ <source>Speech Bubble</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_bubblepage_linkactivated">
+ <location filename="../bubblepage.cpp" line="156"/>
+ <source>Link activated</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_content_items_subtitle">
+ <location filename="../contentitemspage.cpp" line="63"/>
+ <location filename="../contentitemspage.cpp" line="71"/>
+ <location filename="../contentitemspage.cpp" line="81"/>
+ <location filename="../contentitemspage.cpp" line="90"/>
+ <source>Subtitle</source>
+ <translation type="unfinished"></translation>
</message>
</context>
</TS>
diff --git a/demos/widgetsgallery/translations/widgetsgallery_ur.ts b/demos/widgetsgallery/translations/widgetsgallery_ur.ts
index 9343b2d7..064bf555 100644
--- a/demos/widgetsgallery/translations/widgetsgallery_ur.ts
+++ b/demos/widgetsgallery/translations/widgetsgallery_ur.ts
@@ -3,111 +3,146 @@
<TS version="2.0" language="ur_IN">
<context>
<name></name>
- <message id="xx_viewmenu_page_title">
- <location filename="../applicationmenupage.cpp" line="60"/>
+ <message id="xx_applicationmenu_page_title">
+ <location filename="../applicationmenupage.cpp" line="62"/>
<source>Application Menu</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_applicationmenu_page_info">
- <location filename="../applicationmenupage.cpp" line="75"/>
+ <location filename="../applicationmenupage.cpp" line="77"/>
<source>Application Menu is a menu element available to any view. &lt;ul&gt;&lt;li&gt;It can be opened by tapping on the menu title area.&lt;/li&gt;&lt;li&gt;It contains commands and view settings for the view in question and an optional area for style commands.&lt;/li&gt;&lt;li&gt;Each view of the application can have different menu contents.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Guidelines&lt;/b&gt; for mandatory menu items: &lt;ul&gt;&lt;li&gt;Settings should be on the main View of the application, unless the settings are specific to a sub-View&lt;/li&gt;&lt;li&gt;Help should be available in each View &lt;/li&gt;&lt;li&gt;Exit task should be present in all Views except for the main View of the application.&lt;/li&gt;&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_container_page_title">
- <location filename="../containerpage.cpp" line="65"/>
+ <location filename="../containerpage.cpp" line="64"/>
<source>Container</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_slider_page_title">
- <location filename="../sliderpage.cpp" line="169"/>
+ <location filename="../sliderpage.cpp" line="168"/>
<source>Sliders</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_slider_personal_data_label">
- <location filename="../sliderpage.cpp" line="180"/>
+ <location filename="../sliderpage.cpp" line="179"/>
<source>Personal data</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_slider_age_label">
- <location filename="../sliderpage.cpp" line="184"/>
+ <location filename="../sliderpage.cpp" line="183"/>
<source>Please select your age:œ!! Please select your age:œ!! Please select your age:œ!! Age:</source>
<oldsource>Please select your age:</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_slider_brightness_label">
- <location filename="../sliderpage.cpp" line="217"/>
+ <location filename="../sliderpage.cpp" line="216"/>
<source>Brightness:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_slider_player_label">
- <location filename="../sliderpage.cpp" line="197"/>
+ <location filename="../sliderpage.cpp" line="196"/>
<source>Player:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_slider_page_info_label">
- <location filename="../sliderpage.cpp" line="177"/>
+ <location filename="../sliderpage.cpp" line="176"/>
<source>Slider is used for continuous set of values, among which user can choose one value.
Seekbar is a special type of Slider used for displaying playback status for multimedia content.</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_wg_multiple_selection_dialogs_page_question_dialog">
+ <location filename="../multipleselectiondialogspage.cpp" line="94"/>
+ <source>Question Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_dialogs_and_notifications_question_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="88"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="118"/>
<source>Question Dialog Title</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_question_dialog_content">
- <location filename="../dialogsandnotificationspage.cpp" line="92"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="122"/>
<source>Lorem ipsum dolor sit amet?</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_wg_query_dialogs_page_entry_dialog">
+ <location filename="../querydialogspage.cpp" line="95"/>
+ <source>Entry Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_query_dialogs_page_long_dialog">
+ <location filename="../querydialogspage.cpp" line="97"/>
+ <source>Long Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_dialogs_and_notifications_entry_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="101"/>
+ <location filename="../querydialogspage.cpp" line="124"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_entry_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="113"/>
+ <location filename="../querydialogspage.cpp" line="134"/>
<source>Please enter your name</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_long_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="128"/>
+ <location filename="../querydialogspage.cpp" line="150"/>
<source>Select printer</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_wg_single_selection_dialogs_page_stacked_dialogs">
+ <location filename="../singleselectiondialogspage.cpp" line="94"/>
+ <source>Stacked Dialogs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_system_modal_dialog">
+ <location filename="../singleselectiondialogspage.cpp" line="96"/>
+ <source>System Modal Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_dialog_with_progress_indicator">
+ <location filename="../singleselectiondialogspage.cpp" line="98"/>
+ <source>Dialog with Progress Indicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_message_box">
+ <location filename="../singleselectiondialogspage.cpp" line="100"/>
+ <source>Message Box</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_dialogs_and_notifications_stacked_dialog_button">
- <location filename="../dialogsandnotificationspage.cpp" line="179"/>
+ <location filename="../singleselectiondialogspage.cpp" line="129"/>
<source>Click to spawn a nested dialog</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="181"/>
+ <location filename="../singleselectiondialogspage.cpp" line="131"/>
<source>Stacked dialogs</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_open_nested_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="194"/>
+ <location filename="../singleselectiondialogspage.cpp" line="145"/>
<source>Click to open a nested message box</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_nested_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="196"/>
+ <location filename="../singleselectiondialogspage.cpp" line="147"/>
<source>This is a nested dialog</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_messagebox_text">
- <location filename="../dialogsandnotificationspage.cpp" line="209"/>
+ <location filename="../singleselectiondialogspage.cpp" line="160"/>
<source>I&apos;m a nested message box</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="219"/>
+ <location filename="../singleselectiondialogspage.cpp" line="171"/>
<source>System Modal Dialog</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="225"/>
+ <location filename="../singleselectiondialogspage.cpp" line="178"/>
<source>I&apos;m a window modal dialog.
There&apos;s no way around me!
Muwhahaha... [evil laugh]</source>
@@ -117,147 +152,107 @@ Muwhahaha... [evil laugh]</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="242"/>
+ <location filename="../singleselectiondialogspage.cpp" line="197"/>
<source>Progress Indicator</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_message_box_text">
- <location filename="../dialogsandnotificationspage.cpp" line="261"/>
+ <location filename="../singleselectiondialogspage.cpp" line="217"/>
<source>Hello World!</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_wg_banners_page_event_banner">
+ <location filename="../bannerspage.cpp" line="90"/>
+ <source>Event Banner</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_banners_page_information_banner">
+ <location filename="../bannerspage.cpp" line="92"/>
+ <source>Information Banner</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_banners_page_system_information_banner">
+ <location filename="../bannerspage.cpp" line="94"/>
+ <source>System Information Banner</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_dialogs_and_notifications_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="271"/>
+ <location filename="../bannerspage.cpp" line="121"/>
<source>&lt;b&gt;Ida Taipale&lt;/b&gt;&lt;br/&gt;Have you seen my dog?</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="284"/>
+ <location filename="../bannerspage.cpp" line="134"/>
<source>&lt;b&gt;Battery is running low&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="296"/>
+ <location filename="../bannerspage.cpp" line="145"/>
<source>&lt;b&gt;Incoming call&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner_accept">
- <location filename="../dialogsandnotificationspage.cpp" line="298"/>
+ <location filename="../bannerspage.cpp" line="147"/>
<source>Accept</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_dialogs_and_notifications_title">
- <location filename="../dialogsandnotificationspage.cpp" line="365"/>
- <source>Dialogs and Notifications</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="369"/>
- <source>Dialog examples</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_query_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="371"/>
- <source>Question Dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_entry_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="373"/>
- <source>Entry Dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_long_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="375"/>
- <source>A Long Dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_stacked_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="378"/>
- <source>Stacked Dialogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_system_modal_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="381"/>
- <source>System Modal Dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_dialog_with_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="384"/>
- <source>Dialog With Progress Indicator</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="389"/>
- <source>Simple Message Box</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_notifications">
- <location filename="../dialogsandnotificationspage.cpp" line="387"/>
- <source>Notifications and messages</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="391"/>
- <source>Event Banner</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_dialogs_and_notifications_label_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="393"/>
- <source>Information Banner</source>
+ <message id="xx_listpage_list_remove">
+ <location filename="../mlistpage.cpp" line="547"/>
+ <source>Remove</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_dialogs_and_notifications_label_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="395"/>
- <source>System Information Banner</source>
+ <message id="xx_listpage_list_edit">
+ <location filename="../mlistpage.cpp" line="553"/>
+ <source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_listpage_title">
- <location filename="../mlistpage.cpp" line="423"/>
+ <location filename="../mlistpage.cpp" line="573"/>
<source>List</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_Image">
- <location filename="../imagepage.cpp" line="123"/>
+ <location filename="../imagepage.cpp" line="131"/>
<source>Image</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_Image properties">
- <location filename="../imagepage.cpp" line="127"/>
+ <location filename="../imagepage.cpp" line="135"/>
<source>Image properties</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_Zoom">
- <location filename="../imagepage.cpp" line="133"/>
+ <location filename="../imagepage.cpp" line="141"/>
<source>Zoom</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_Transparency">
- <location filename="../imagepage.cpp" line="135"/>
+ <location filename="../imagepage.cpp" line="143"/>
<source>Transparency</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_Crop">
- <location filename="../imagepage.cpp" line="137"/>
+ <location filename="../imagepage.cpp" line="145"/>
<source>Crop</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_image_operations">
- <location filename="../imagepage.cpp" line="145"/>
+ <location filename="../imagepage.cpp" line="153"/>
<source>Image operations</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_image_page_info">
- <location filename="../imagepage.cpp" line="152"/>
+ <location filename="../imagepage.cpp" line="160"/>
<source>Image allows the placement of images onto the UI. Images are generally non-interactive elements. Various single and multiple touch interactions can be added to an Image component if desired. As an example, pinch gesture can be used in this page to zoom the image.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_label_page_title">
- <location filename="../labelpage.cpp" line="119"/>
+ <location filename="../labelpage.cpp" line="108"/>
<source>Labels</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_label_page_info_label">
- <location filename="../labelpage.cpp" line="129"/>
+ <location filename="../labelpage.cpp" line="118"/>
<source>Simple Label is used mainly by other components, and it does not support any formatting or interaction.
Rich Label supports multiple lines, HTML formatting and highlighting for links.
@@ -266,12 +261,12 @@ All Labels can be aligned left, right or center and will be automatically trunca
<translation type="unfinished"></translation>
</message>
<message id="xx_simple_label">
- <location filename="../labelpage.cpp" line="131"/>
+ <location filename="../labelpage.cpp" line="120"/>
<source>Simple Label</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_rich_label">
- <location filename="../labelpage.cpp" line="134"/>
+ <location filename="../labelpage.cpp" line="123"/>
<source>Rich Label &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, http://www.nokia.com, +358401234567, fors.fagerstrom@email.com</source>
<translation type="unfinished"></translation>
</message>
@@ -422,221 +417,347 @@ All Labels can be aligned left, right or center and will be automatically trunca
<source>Font test:</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_wg_categories_application_view">
+ <location filename="../mainpage.cpp" line="86"/>
+ <source>Application View</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_application_view_view_menu">
+ <location filename="../mainpage.cpp" line="88"/>
+ <source>Application Menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_application_view_display_modes">
+ <location filename="../mainpage.cpp" line="90"/>
+ <source>Display Modes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_application_view_toolbar_incl_tab_bar">
+ <location filename="../mainpage.cpp" line="92"/>
+ <source>Toolbar (including Tab Bar)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_simple_widgets">
+ <location filename="../mainpage.cpp" line="96"/>
+ <source>Simple Widgets</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_simple_widgets_labels">
+ <location filename="../mainpage.cpp" line="98"/>
+ <source>Labels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_simple_widgets_image">
+ <location filename="../mainpage.cpp" line="100"/>
+ <source>Image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_simple_widgets_progress_bar">
+ <location filename="../mainpage.cpp" line="102"/>
+ <source>Progress Bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_simple_widgets_container">
+ <location filename="../mainpage.cpp" line="104"/>
+ <source>Container</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_simple_widgets_spinner">
+ <location filename="../mainpage.cpp" line="106"/>
+ <source>Spinner</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_buttons">
+ <location filename="../mainpage.cpp" line="109"/>
+ <source>Buttons</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_buttons_push_button">
+ <location filename="../mainpage.cpp" line="111"/>
+ <source>Push Button</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_buttons_icon_button">
+ <location filename="../mainpage.cpp" line="113"/>
+ <source>Icon Button</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_buttons_switch">
+ <location filename="../mainpage.cpp" line="115"/>
+ <source>Switch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_buttons_checkbox">
+ <location filename="../mainpage.cpp" line="117"/>
+ <source>Checkbox</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_dialogs_and_banners">
+ <location filename="../mainpage.cpp" line="120"/>
+ <source>Dialogs and Banners</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_single_selection_dialog">
+ <location filename="../mainpage.cpp" line="122"/>
+ <source>Single Selection Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_multiple_selection_dialog">
+ <location filename="../mainpage.cpp" line="124"/>
+ <source>Multiple Selection Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_query_dialog">
+ <location filename="../mainpage.cpp" line="126"/>
+ <source>Query Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_banner">
+ <location filename="../mainpage.cpp" line="128"/>
+ <source>Banner</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_lists_grids_and_popups">
+ <location filename="../mainpage.cpp" line="131"/>
+ <source>Lists, Grids and Popups</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_list">
+ <location filename="../mainpage.cpp" line="133"/>
+ <source>List</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_grid">
+ <location filename="../mainpage.cpp" line="135"/>
+ <source>Grid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_object_menu">
+ <location filename="../mainpage.cpp" line="137"/>
+ <source>Object Menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_combobox">
+ <location filename="../mainpage.cpp" line="139"/>
+ <source>ComboBox</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_contentitems">
+ <location filename="../mainpage.cpp" line="141"/>
+ <source>ContentItems</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_bubble">
+ <location filename="../mainpage.cpp" line="143"/>
+ <source>Speech bubble</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_user_input">
+ <location filename="../mainpage.cpp" line="146"/>
+ <source>User Input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_user_input_text_entries">
+ <location filename="../mainpage.cpp" line="148"/>
+ <source>Text Entries</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_user_input_slider">
+ <location filename="../mainpage.cpp" line="150"/>
+ <source>Slider</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_user_input_input_feedback">
+ <location filename="../mainpage.cpp" line="152"/>
+ <source>Input Feedback</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_application_title">
- <location filename="../listpage.cpp" line="187"/>
+ <location filename="../mainpage.cpp" line="330"/>
<source>Widgets Gallery</source>
<translation>WG Urdu اُردوُ</translation>
</message>
<message id="xx_apporientation_auto">
- <location filename="../listpage.cpp" line="456"/>
+ <location filename="../mainpage.cpp" line="546"/>
<source>Automatic</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_portrait">
- <location filename="../listpage.cpp" line="464"/>
+ <location filename="../mainpage.cpp" line="554"/>
<source>Portrait</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_landscape">
- <location filename="../listpage.cpp" line="472"/>
+ <location filename="../mainpage.cpp" line="562"/>
<source>Landscape</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_angle0">
- <location filename="../listpage.cpp" line="480"/>
+ <location filename="../mainpage.cpp" line="570"/>
<source>0 degrees</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_angle90">
- <location filename="../listpage.cpp" line="488"/>
+ <location filename="../mainpage.cpp" line="578"/>
<source>90 degrees clockwise</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_angle180">
- <location filename="../listpage.cpp" line="496"/>
+ <location filename="../mainpage.cpp" line="586"/>
<source>180 degrees clockwise</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_apporientation_angle270">
- <location filename="../listpage.cpp" line="504"/>
+ <location filename="../mainpage.cpp" line="594"/>
<source>270 degrees clockwise</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_displaymodes_navbarcombo">
- <location filename="../navigationbarpage.cpp" line="60"/>
+ <location filename="../displaymodespage.cpp" line="59"/>
<source>Navigation Bar</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_displaymodes_escapebtncombo">
- <location filename="../navigationbarpage.cpp" line="68"/>
+ <location filename="../displaymodespage.cpp" line="67"/>
<source>Escape Button</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_displaymodes_homebtncombo">
- <location filename="../navigationbarpage.cpp" line="76"/>
+ <location filename="../displaymodespage.cpp" line="75"/>
<source>Home Button</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_displaymodes_page_title">
- <location filename="../navigationbarpage.cpp" line="125"/>
- <source>Display Modes and Full Screen</source>
+ <location filename="../displaymodespage.cpp" line="143"/>
+ <source>Display Modes</source>
+ <oldsource>Display Modes and Full Screen</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_displaymodes_display_mode">
- <location filename="../navigationbarpage.cpp" line="129"/>
+ <location filename="../displaymodespage.cpp" line="147"/>
<source>Components&apos; display mode:</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_displaymodes_window_state">
+ <location filename="../displaymodespage.cpp" line="150"/>
+ <source>Window state:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_displaymodes_full_screen">
+ <location filename="../displaymodespage.cpp" line="153"/>
+ <source>Full Screen</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_displaymode_show">
- <location filename="../navigationbarpage.cpp" line="162"/>
+ <location filename="../displaymodespage.cpp" line="166"/>
<source>Show</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_displaymode_autohide">
- <location filename="../navigationbarpage.cpp" line="164"/>
+ <location filename="../displaymodespage.cpp" line="168"/>
<source>Auto Hide</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_displaymode_hide">
- <location filename="../navigationbarpage.cpp" line="166"/>
+ <location filename="../displaymodespage.cpp" line="170"/>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_objectmenu_page_title">
- <location filename="../objectmenupage.cpp" line="155"/>
+ <location filename="../objectmenupage.cpp" line="154"/>
<source>Object menu</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_objectmenu_page_info_label">
- <location filename="../objectmenupage.cpp" line="167"/>
+ <location filename="../objectmenupage.cpp" line="166"/>
<source>Object Menu is a popup menu of commands opened by long tapping an element. It is used for providing shortcuts to functions related to that particular element.
The primary (single short tap) action of the element should not be duplicated in the Object Menu.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_objectmenu_page_container_friends">
- <location filename="../objectmenupage.cpp" line="170"/>
+ <location filename="../objectmenupage.cpp" line="169"/>
<source>Friends</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_objectmenu_page_container_albums">
- <location filename="../objectmenupage.cpp" line="172"/>
+ <location filename="../objectmenupage.cpp" line="171"/>
<source>Favorite Albums</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_combobox_page_info">
- <location filename="../comboboxpage.cpp" line="120"/>
+ <location filename="../comboboxpage.cpp" line="121"/>
<source>The MComboBox widget is a combined button and popup list. It is very similar to QComboBox, but does not allow editing the text.</source>
<oldsource>The DuiComboBox widget is a combined button and popup list. It is very similar to QComboBox, but does not allow editing the text.</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_popup_generic_title">
- <location filename="../comboboxpage.cpp" line="112"/>
+ <location filename="../comboboxpage.cpp" line="113"/>
<source>Title</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_combobox_title">
- <location filename="../comboboxpage.cpp" line="108"/>
+ <location filename="../comboboxpage.cpp" line="109"/>
<source>ComboBox</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_popup_sort_descending_order">
- <location filename="../comboboxpage.cpp" line="114"/>
+ <location filename="../comboboxpage.cpp" line="115"/>
<source>Sort - DescendingOrder</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_popup_time_consuming">
- <location filename="../comboboxpage.cpp" line="116"/>
+ <location filename="../comboboxpage.cpp" line="117"/>
<source>Time-consuming setting</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_progressbar_page_title">
- <location filename="../progressbarpage.cpp" line="80"/>
+ <location filename="../progressbarpage.cpp" line="78"/>
<source>Progress Bar</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_progressbar_page_info_label">
- <location filename="../progressbarpage.cpp" line="85"/>
+ <location filename="../progressbarpage.cpp" line="83"/>
<source>A Progress Bar can indicate an ongoing process with either known or unknown durations.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_progressindicator_unknown_duration_bar">
- <location filename="../progressbarpage.cpp" line="89"/>
+ <location filename="../progressbarpage.cpp" line="87"/>
<source>Installing CoolApp</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_progressindicator_known_duration_bar">
- <location filename="../progressbarpage.cpp" line="87"/>
+ <location filename="../progressbarpage.cpp" line="85"/>
<source>Downloading nicepic.jpg</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_template_page_layouts_visuals">
- <location filename="../templatepage.cpp" line="51"/>
- <source>Layouts and Visuals</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_buttons">
- <location filename="../templatepage.cpp" line="53"/>
- <source>Buttons</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_views_dialogs">
- <location filename="../templatepage.cpp" line="47"/>
- <source>Views and Dialogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_contains_applets">
- <location filename="../templatepage.cpp" line="49"/>
- <source>Contains and Applets</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_indicators_notifications">
- <location filename="../templatepage.cpp" line="55"/>
- <source>Indicators and Notifications</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_lists_grids_menus">
- <location filename="../templatepage.cpp" line="57"/>
- <source>Lists, Grids and Menus</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_user_input">
- <location filename="../templatepage.cpp" line="59"/>
- <source>User input</source>
- <translation type="unfinished"></translation>
- </message>
- <message id="xx_template_page_input_feedback">
- <location filename="../templatepage.cpp" line="61"/>
- <source>Input Feedback</source>
- <translation type="unfinished"></translation>
- </message>
<message id="xx_template_page_title">
- <location filename="../templatepage.cpp" line="119"/>
+ <location filename="../templatepage.cpp" line="101"/>
<source>Template</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_sample template">
- <location filename="../templatepage.cpp" line="125"/>
+ <location filename="../templatepage.cpp" line="107"/>
<source>Sample template</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_title">
- <location filename="../textentrypage.cpp" line="490"/>
+ <location filename="../textentrypage.cpp" line="582"/>
<source>Text Entries</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_tooltip_entry0">
- <location filename="../textentrypage.cpp" line="494"/>
+ <location filename="../textentrypage.cpp" line="586"/>
<source>Enter text here</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_tooltip_entry1">
- <location filename="../textentrypage.cpp" line="497"/>
+ <location filename="../textentrypage.cpp" line="589"/>
<source>This tooltip is quite long and will be clipped on the display</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_tooltip_entry6">
- <location filename="../textentrypage.cpp" line="503"/>
+ <location filename="../textentrypage.cpp" line="595"/>
<source>This is a multiline text entry</source>
<oldsource>This is
multiline
@@ -644,179 +765,205 @@ tooltip</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_tooltip_entry8">
- <location filename="../textentrypage.cpp" line="500"/>
+ <location filename="../textentrypage.cpp" line="592"/>
<source>Provides email address suggestions</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_click_here">
- <location filename="../textentrypage.cpp" line="144"/>
- <location filename="../textentrypage.cpp" line="166"/>
+ <location filename="../textentrypage.cpp" line="147"/>
+ <location filename="../textentrypage.cpp" line="169"/>
<source>Click here</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_press_any_key">
- <location filename="../textentrypage.cpp" line="157"/>
+ <location filename="../textentrypage.cpp" line="160"/>
<source>Press any key</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_keypress">
- <location filename="../textentrypage.cpp" line="183"/>
+ <location filename="../textentrypage.cpp" line="186"/>
<source>&lt;i&gt;Key press&lt;/i&gt; key:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_text">
- <location filename="../textentrypage.cpp" line="186"/>
- <location filename="../textentrypage.cpp" line="200"/>
+ <location filename="../textentrypage.cpp" line="189"/>
+ <location filename="../textentrypage.cpp" line="203"/>
<source>text:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_keyrelease">
- <location filename="../textentrypage.cpp" line="197"/>
+ <location filename="../textentrypage.cpp" line="200"/>
<source>&lt;i&gt;Key release&lt;/i&gt; key:</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_tooltip_customtoolbar1">
+ <location filename="../textentrypage.cpp" line="519"/>
+ <source>Example custom toolbar 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_tooltip_customtoolbar2">
+ <location filename="../textentrypage.cpp" line="532"/>
+ <source>Example custom toolbar 2</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_textentry_free_text">
- <location filename="../textentrypage.cpp" line="506"/>
+ <location filename="../textentrypage.cpp" line="598"/>
<source>Free text:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_free_text_masked">
- <location filename="../textentrypage.cpp" line="508"/>
+ <location filename="../textentrypage.cpp" line="600"/>
<source>Free text(masked):</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_number_text">
- <location filename="../textentrypage.cpp" line="510"/>
+ <location filename="../textentrypage.cpp" line="602"/>
<source>Number text:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_phone_number">
- <location filename="../textentrypage.cpp" line="512"/>
+ <location filename="../textentrypage.cpp" line="604"/>
<source>Phone number:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_email_text">
- <location filename="../textentrypage.cpp" line="514"/>
+ <location filename="../textentrypage.cpp" line="606"/>
<source>Email text:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_url_text">
- <location filename="../textentrypage.cpp" line="516"/>
+ <location filename="../textentrypage.cpp" line="608"/>
<source>Url text:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_multiline">
- <location filename="../textentrypage.cpp" line="518"/>
+ <location filename="../textentrypage.cpp" line="610"/>
<source>Multiline:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_singleselectall">
- <location filename="../textentrypage.cpp" line="520"/>
+ <location filename="../textentrypage.cpp" line="612"/>
<source>Singleline (selectall):</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_completion_text">
- <location filename="../textentrypage.cpp" line="522"/>
+ <location filename="../textentrypage.cpp" line="614"/>
<source>Email suggestion text:</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_textentry_richtext_text">
+ <location filename="../textentrypage.cpp" line="616"/>
+ <source>Rich Text:</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_textentry_noecho">
- <location filename="../textentrypage.cpp" line="525"/>
+ <location filename="../textentrypage.cpp" line="619"/>
<source>No Echo mode:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_echoonedit">
- <location filename="../textentrypage.cpp" line="528"/>
+ <location filename="../textentrypage.cpp" line="622"/>
<source>Echo on edit:</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_textentry_direct_input_mode">
- <location filename="../textentrypage.cpp" line="531"/>
+ <location filename="../textentrypage.cpp" line="625"/>
<source>Direct Input Mode:</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_textentry_custom_toolbar1">
+ <location filename="../textentrypage.cpp" line="628"/>
+ <source>Custom ToolBar 1:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_textentry_custom_toolbar2">
+ <location filename="../textentrypage.cpp" line="630"/>
+ <source>Custom ToolBar 2:</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_auto_capitalisation">
- <location filename="../textentrypage.cpp" line="534"/>
+ <location filename="../textentrypage.cpp" line="633"/>
<source>Auto capitalisation</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_error_correction">
- <location filename="../textentrypage.cpp" line="536"/>
+ <location filename="../textentrypage.cpp" line="635"/>
<source>Error correction</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_auto_true_entry0">
- <location filename="../textentrypage.cpp" line="564"/>
+ <location filename="../textentrypage.cpp" line="663"/>
<source>Auto Capitalisation is active</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_auto_false_entry0">
- <location filename="../textentrypage.cpp" line="567"/>
+ <location filename="../textentrypage.cpp" line="666"/>
<source>No Auto Capitalisation</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_example1">
- <location filename="../toolbarpage.cpp" line="168"/>
+ <location filename="../toolbarpage.cpp" line="176"/>
<source>Example 1</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_example2">
- <location filename="../toolbarpage.cpp" line="174"/>
+ <location filename="../toolbarpage.cpp" line="182"/>
<source>Example 2</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_defaultview">
- <location filename="../toolbarpage.cpp" line="180"/>
+ <location filename="../toolbarpage.cpp" line="188"/>
<source>Default View</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_tabview">
- <location filename="../toolbarpage.cpp" line="186"/>
+ <location filename="../toolbarpage.cpp" line="194"/>
<source>Tab View</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_title">
- <location filename="../toolbarpage.cpp" line="208"/>
+ <location filename="../toolbarpage.cpp" line="216"/>
<source>ToolBar</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_info">
- <location filename="../toolbarpage.cpp" line="215"/>
+ <location filename="../toolbarpage.cpp" line="223"/>
<source>&lt;b&gt;Toolbar&lt;/b&gt; acts as a container for actions. Depending upon the view attached, it either acts as a tab bar or is a container for buttons and text input field. &lt;ul&gt;&lt;li&gt;Click Menu to explore the example&lt;/li&gt;&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_checkbox_page_title">
- <location filename="../checkboxpage.cpp" line="76"/>
+ <location filename="../checkboxpage.cpp" line="80"/>
<source>Checkbox</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_checkbox_page_info_label">
- <location filename="../checkboxpage.cpp" line="85"/>
+ <location filename="../checkboxpage.cpp" line="89"/>
<source>The Checkbox is a variant of Button that allows users to set the state of variable or setting which has two values, On and Off.
Checkbox essentially does the same thing as the Switch button, so please consider using a Switch instead.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_checkbox_page_checkbox_label">
- <location filename="../checkboxpage.cpp" line="88"/>
- <source>I have read and understood the
-instructions.</source>
+ <location filename="../checkboxpage.cpp" line="92"/>
+ <source>I have read and understood the instructions.</source>
+ <oldsource>I have read and understood the
+instructions.</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_icon_button_page_title">
- <location filename="../iconbuttonpage.cpp" line="82"/>
+ <location filename="../iconbuttonpage.cpp" line="81"/>
<source>Icon Button</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_icon_button_page_info_label">
- <location filename="../iconbuttonpage.cpp" line="90"/>
+ <location filename="../iconbuttonpage.cpp" line="89"/>
<source>Icon Buttons have an icon and can have a text label. Icon button differs from push button by its visual presentation: it does not have button-style edges like a Push Button does.
Icon Buttons are used in e.g. Toolbars.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_icon_button_page_icon_button2">
- <location filename="../iconbuttonpage.cpp" line="92"/>
+ <location filename="../iconbuttonpage.cpp" line="91"/>
<source>Lorem ipsum</source>
<translation type="unfinished"></translation>
</message>
@@ -849,32 +996,34 @@ sit amet</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_application_main_area">
- <location filename="../spinnerpage.cpp" line="66"/>
- <source>In container main area</source>
+ <location filename="../spinnerpage.cpp" line="68"/>
+ <source>In application main area</source>
+ <oldsource>In container main area</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_container_header">
- <location filename="../spinnerpage.cpp" line="72"/>
+ <location filename="../spinnerpage.cpp" line="74"/>
<source>In container header</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_menu">
- <location filename="../spinnerpage.cpp" line="78"/>
- <source>In view menu</source>
+ <location filename="../spinnerpage.cpp" line="80"/>
+ <source>In application menu</source>
+ <oldsource>In view menu</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_dialog">
- <location filename="../spinnerpage.cpp" line="84"/>
+ <location filename="../spinnerpage.cpp" line="86"/>
<source>In dialog</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_title">
- <location filename="../spinnerpage.cpp" line="97"/>
+ <location filename="../spinnerpage.cpp" line="99"/>
<source>Spinner</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_info_label">
- <location filename="../spinnerpage.cpp" line="106"/>
+ <location filename="../spinnerpage.cpp" line="108"/>
<source>Spinner is used to indicate that a progress is ongoing and the duration is unknown.
Spinners can also be used in situations when duration is known, but available space on screen does not permit using a Progress bar.
@@ -882,87 +1031,80 @@ Spinners can also be used in situations when duration is known, but available sp
See the menu for examples of different use cases.</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_spinner_page_email_header">
- <location filename="../spinnerpage.cpp" line="116"/>
- <source>From: John Doe
-Date: Today
-Subject: This is funny stuff!</source>
- <translation type="unfinished"></translation>
- </message>
<message id="xx_spinner_page_application_area_description">
- <location filename="../spinnerpage.cpp" line="129"/>
+ <location filename="../spinnerpage.cpp" line="118"/>
<source>Spinner can be used while content is loading.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_container_title">
- <location filename="../spinnerpage.cpp" line="142"/>
+ <location filename="../spinnerpage.cpp" line="151"/>
<source>Online albums</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_container_header_description">
- <location filename="../spinnerpage.cpp" line="151"/>
+ <location filename="../spinnerpage.cpp" line="160"/>
<source>Spinner can be used in container header to indicate that the items inside the container are being updated, but visible items can be interacted with.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_application_menu_description">
- <location filename="../spinnerpage.cpp" line="195"/>
+ <location filename="../spinnerpage.cpp" line="204"/>
<source>Spinner in the application menu area indicates that the whole view is pending for update.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_dialog_header_description">
- <location filename="../spinnerpage.cpp" line="209"/>
+ <location filename="../spinnerpage.cpp" line="218"/>
<source>Spinner can be placed in dialog header to indicate changing content.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_dialog_header">
- <location filename="../spinnerpage.cpp" line="230"/>
+ <location filename="../spinnerpage.cpp" line="239"/>
<source>Select Internet connection</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_title">
- <location filename="../switchpage.cpp" line="128"/>
+ <location filename="../switchpage.cpp" line="127"/>
<source>Switch</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_info_label">
- <location filename="../switchpage.cpp" line="138"/>
+ <location filename="../switchpage.cpp" line="137"/>
<source>A Switch button differs from both a push button and an icon button visually. It looks like a switch, communicating that pressing this button will not go to another view or will not perform any other actions except to toggle the state of the button.
Switches are used to indicate e.g. settings values</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_switch1">
- <location filename="../switchpage.cpp" line="141"/>
+ <location filename="../switchpage.cpp" line="140"/>
<source>Headlights</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_switch2">
- <location filename="../switchpage.cpp" line="143"/>
+ <location filename="../switchpage.cpp" line="142"/>
<source>Autopilot</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_switch3">
- <location filename="../switchpage.cpp" line="145"/>
+ <location filename="../switchpage.cpp" line="144"/>
<source>Warp Drive</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_switch4">
- <location filename="../switchpage.cpp" line="147"/>
+ <location filename="../switchpage.cpp" line="146"/>
<source>Reactor Shields</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_switch_page_switch5">
- <location filename="../switchpage.cpp" line="149"/>
+ <location filename="../switchpage.cpp" line="148"/>
<source>Infinite Improbability Drive</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_title">
- <location filename="../feedbackpage.cpp" line="90"/>
+ <location filename="../feedbackpage.cpp" line="89"/>
<source>Input Feedback</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_info_label">
- <location filename="../feedbackpage.cpp" line="100"/>
+ <location filename="../feedbackpage.cpp" line="99"/>
<source>This page contains buttons with custom input feedbacks. Any MWidget can have input feedback for press and release events. Input feedback can be a sound effect and/or a haptic effect (piezo, vibra) depending on the product.
Input feedbacks can be easily configured for different purposes using the theming system.</source>
@@ -972,53 +1114,76 @@ Input feedbacks can be easily configured for different purposes using the themin
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button1">
- <location filename="../feedbackpage.cpp" line="102"/>
+ <location filename="../feedbackpage.cpp" line="101"/>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button2">
- <location filename="../feedbackpage.cpp" line="104"/>
+ <location filename="../feedbackpage.cpp" line="103"/>
<source>Different</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button3">
- <location filename="../feedbackpage.cpp" line="106"/>
+ <location filename="../feedbackpage.cpp" line="105"/>
<source>Sluggish</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button4">
- <location filename="../feedbackpage.cpp" line="108"/>
+ <location filename="../feedbackpage.cpp" line="107"/>
<source>Babytoy</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button5">
- <location filename="../feedbackpage.cpp" line="110"/>
+ <location filename="../feedbackpage.cpp" line="109"/>
<source>Space</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button6">
- <location filename="../feedbackpage.cpp" line="112"/>
+ <location filename="../feedbackpage.cpp" line="111"/>
<source>Silent</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_gridpage_configuration">
+ <location filename="../mgridpage.cpp" line="193"/>
+ <source>Configuration</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_gridpage_title">
- <location filename="../mgridpage.cpp" line="96"/>
+ <location filename="../mgridpage.cpp" line="204"/>
<source>Grid page</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_video_container_page_title">
- <location filename="../videocontainerpage.cpp" line="372"/>
- <source>Video container</source>
+ <message id="xx_gridpage_set_columns">
+ <location filename="../mgridpage.cpp" line="290"/>
+ <source>Set columns</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_gridpage_landscape">
+ <location filename="../mgridpage.cpp" line="316"/>
+ <source>Landscape</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_gridpage_portrait">
+ <location filename="../mgridpage.cpp" line="321"/>
+ <source>Portrait</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_bubblepage_title">
+ <location filename="../bubblepage.cpp" line="143"/>
+ <source>Speech Bubble</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_video_container_page_info_label">
- <location filename="../videocontainerpage.cpp" line="377"/>
- <source>Tap video thumbnail to play/pause it. Tap and hold thumbnail to open video in it&apos;s native size.</source>
+ <message id="xx_wg_bubblepage_linkactivated">
+ <location filename="../bubblepage.cpp" line="156"/>
+ <source>Link activated</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_video_container_header_title">
- <location filename="../videocontainerpage.cpp" line="380"/>
- <source>Gallery</source>
+ <message id="xx_content_items_subtitle">
+ <location filename="../contentitemspage.cpp" line="63"/>
+ <location filename="../contentitemspage.cpp" line="71"/>
+ <location filename="../contentitemspage.cpp" line="81"/>
+ <location filename="../contentitemspage.cpp" line="90"/>
+ <source>Subtitle</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/demos/widgetsgallery/translations/widgetsgallery_zh_CN.ts b/demos/widgetsgallery/translations/widgetsgallery_zh_CN.ts
index 72480d6b..3ec0706e 100644
--- a/demos/widgetsgallery/translations/widgetsgallery_zh_CN.ts
+++ b/demos/widgetsgallery/translations/widgetsgallery_zh_CN.ts
@@ -3,53 +3,208 @@
<TS version="2.0" language="zh_CN">
<context>
<name></name>
+ <message id="xx_wg_categories_application_view">
+ <location filename="../mainpage.cpp" line="86"/>
+ <source>Application View</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_application_view_view_menu">
+ <location filename="../mainpage.cpp" line="88"/>
+ <source>Application Menu</source>
+ <translation type="unfinished">应用菜单</translation>
+ </message>
+ <message id="xx_wg_application_view_display_modes">
+ <location filename="../mainpage.cpp" line="90"/>
+ <source>Display Modes</source>
+ <translation type="unfinished">导航条</translation>
+ </message>
+ <message id="xx_wg_application_view_toolbar_incl_tab_bar">
+ <location filename="../mainpage.cpp" line="92"/>
+ <source>Toolbar (including Tab Bar)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_simple_widgets">
+ <location filename="../mainpage.cpp" line="96"/>
+ <source>Simple Widgets</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_simple_widgets_labels">
+ <location filename="../mainpage.cpp" line="98"/>
+ <source>Labels</source>
+ <translation type="unfinished">标签</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_image">
+ <location filename="../mainpage.cpp" line="100"/>
+ <source>Image</source>
+ <translation type="unfinished">图像</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_progress_bar">
+ <location filename="../mainpage.cpp" line="102"/>
+ <source>Progress Bar</source>
+ <translation type="unfinished">进度条</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_container">
+ <location filename="../mainpage.cpp" line="104"/>
+ <source>Container</source>
+ <translation type="unfinished">包容器</translation>
+ </message>
+ <message id="xx_wg_simple_widgets_spinner">
+ <location filename="../mainpage.cpp" line="106"/>
+ <source>Spinner</source>
+ <translation type="unfinished">旋转进度指示</translation>
+ </message>
+ <message id="xx_wg_categories_buttons">
+ <location filename="../mainpage.cpp" line="109"/>
+ <source>Buttons</source>
+ <translation type="unfinished">按钮</translation>
+ </message>
+ <message id="xx_wg_buttons_push_button">
+ <location filename="../mainpage.cpp" line="111"/>
+ <source>Push Button</source>
+ <translation type="unfinished">按钮</translation>
+ </message>
+ <message id="xx_wg_buttons_icon_button">
+ <location filename="../mainpage.cpp" line="113"/>
+ <source>Icon Button</source>
+ <translation type="unfinished">图标按钮</translation>
+ </message>
+ <message id="xx_wg_buttons_switch">
+ <location filename="../mainpage.cpp" line="115"/>
+ <source>Switch</source>
+ <translation type="unfinished">开关</translation>
+ </message>
+ <message id="xx_wg_buttons_checkbox">
+ <location filename="../mainpage.cpp" line="117"/>
+ <source>Checkbox</source>
+ <translation type="unfinished">核选框</translation>
+ </message>
+ <message id="xx_wg_categories_dialogs_and_banners">
+ <location filename="../mainpage.cpp" line="120"/>
+ <source>Dialogs and Banners</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_single_selection_dialog">
+ <location filename="../mainpage.cpp" line="122"/>
+ <source>Single Selection Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_multiple_selection_dialog">
+ <location filename="../mainpage.cpp" line="124"/>
+ <source>Multiple Selection Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_query_dialog">
+ <location filename="../mainpage.cpp" line="126"/>
+ <source>Query Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_dialogs_and_banners_banner">
+ <location filename="../mainpage.cpp" line="128"/>
+ <source>Banner</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_lists_grids_and_popups">
+ <location filename="../mainpage.cpp" line="131"/>
+ <source>Lists, Grids and Popups</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_list">
+ <location filename="../mainpage.cpp" line="133"/>
+ <source>List</source>
+ <translation type="unfinished">列表</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_grid">
+ <location filename="../mainpage.cpp" line="135"/>
+ <source>Grid</source>
+ <translation type="unfinished">网格</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_object_menu">
+ <location filename="../mainpage.cpp" line="137"/>
+ <source>Object Menu</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_combobox">
+ <location filename="../mainpage.cpp" line="139"/>
+ <source>ComboBox</source>
+ <translation type="unfinished">组合对话框</translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_contentitems">
+ <location filename="../mainpage.cpp" line="141"/>
+ <source>ContentItems</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_lists_grids_and_popups_bubble">
+ <location filename="../mainpage.cpp" line="143"/>
+ <source>Speech bubble</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_categories_user_input">
+ <location filename="../mainpage.cpp" line="146"/>
+ <source>User Input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_user_input_text_entries">
+ <location filename="../mainpage.cpp" line="148"/>
+ <source>Text Entries</source>
+ <translation type="unfinished">输入文字</translation>
+ </message>
+ <message id="xx_wg_user_input_slider">
+ <location filename="../mainpage.cpp" line="150"/>
+ <source>Slider</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_user_input_input_feedback">
+ <location filename="../mainpage.cpp" line="152"/>
+ <source>Input Feedback</source>
+ <translation type="unfinished">输入反馈</translation>
+ </message>
<message id="xx_application_title">
- <location filename="../listpage.cpp" line="187"/>
+ <location filename="../mainpage.cpp" line="330"/>
<source>Widgets Gallery</source>
<translation>画廊</translation>
</message>
<message id="xx_apporientation_auto">
- <location filename="../listpage.cpp" line="456"/>
+ <location filename="../mainpage.cpp" line="546"/>
<source>Automatic</source>
<translation>自动</translation>
</message>
<message id="xx_apporientation_portrait">
- <location filename="../listpage.cpp" line="464"/>
+ <location filename="../mainpage.cpp" line="554"/>
<source>Portrait</source>
<translation>竖屏</translation>
</message>
<message id="xx_apporientation_landscape">
- <location filename="../listpage.cpp" line="472"/>
+ <location filename="../mainpage.cpp" line="562"/>
<source>Landscape</source>
<translation>横屏</translation>
</message>
<message id="xx_apporientation_angle0">
- <location filename="../listpage.cpp" line="480"/>
+ <location filename="../mainpage.cpp" line="570"/>
<source>0 degrees</source>
<translation> 0 度</translation>
</message>
<message id="xx_apporientation_angle90">
- <location filename="../listpage.cpp" line="488"/>
+ <location filename="../mainpage.cpp" line="578"/>
<source>90 degrees clockwise</source>
<translation>顺时针旋转90度</translation>
</message>
<message id="xx_apporientation_angle180">
- <location filename="../listpage.cpp" line="496"/>
+ <location filename="../mainpage.cpp" line="586"/>
<source>180 degrees clockwise</source>
<translation>顺时针旋转180度</translation>
</message>
<message id="xx_apporientation_angle270">
- <location filename="../listpage.cpp" line="504"/>
+ <location filename="../mainpage.cpp" line="594"/>
<source>270 degrees clockwise</source>
<translation>顺时针旋转270度</translation>
</message>
<message id="xx_label_page_title">
- <location filename="../labelpage.cpp" line="119"/>
+ <location filename="../labelpage.cpp" line="108"/>
<source>Labels</source>
<translation>标签</translation>
</message>
<message id="xx_label_page_info_label">
- <location filename="../labelpage.cpp" line="129"/>
+ <location filename="../labelpage.cpp" line="118"/>
<source>Simple Label is used mainly by other components, and it does not support any formatting or interaction.
Rich Label supports multiple lines, HTML formatting and highlighting for links.
@@ -60,72 +215,107 @@ All Labels can be aligned left, right or center and will be automatically trunca
所有标签都可以左对齐,右对齐和居中,如果文字超过给定的区域将会被自动截断。</translation>
</message>
<message id="xx_simple_label">
- <location filename="../labelpage.cpp" line="131"/>
+ <location filename="../labelpage.cpp" line="120"/>
<source>Simple Label</source>
<translation>简单标签</translation>
</message>
<message id="xx_rich_label">
- <location filename="../labelpage.cpp" line="134"/>
+ <location filename="../labelpage.cpp" line="123"/>
<source>Rich Label &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, http://www.nokia.com, +358401234567, fors.fagerstrom@email.com</source>
<translation>富文本标签&lt;b&gt;粗体&lt;/b&gt;,&lt;i&gt;斜体&lt;/i&gt;, &lt;a&gt;http://www.nokia.com&lt;/a&gt;,+358401234567, fors.fagerstrom@email.com</translation>
</message>
+ <message id="xx_wg_multiple_selection_dialogs_page_question_dialog">
+ <location filename="../multipleselectiondialogspage.cpp" line="94"/>
+ <source>Question Dialog</source>
+ <translation type="unfinished">询问对话框</translation>
+ </message>
<message id="xx_dialogs_and_notifications_question_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="88"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="118"/>
<source>Question Dialog Title</source>
<translation>询问对话框标题</translation>
</message>
<message id="xx_dialogs_and_notifications_question_dialog_content">
- <location filename="../dialogsandnotificationspage.cpp" line="92"/>
+ <location filename="../multipleselectiondialogspage.cpp" line="122"/>
<source>Lorem ipsum dolor sit amet?</source>
<translation type="unfinished"></translation>
</message>
+ <message id="xx_wg_query_dialogs_page_entry_dialog">
+ <location filename="../querydialogspage.cpp" line="95"/>
+ <source>Entry Dialog</source>
+ <translation type="unfinished">登录对话框</translation>
+ </message>
+ <message id="xx_wg_query_dialogs_page_long_dialog">
+ <location filename="../querydialogspage.cpp" line="97"/>
+ <source>Long Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_dialogs_and_notifications_entry_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="101"/>
+ <location filename="../querydialogspage.cpp" line="124"/>
<source>Name</source>
<translation>姓名</translation>
</message>
<message id="xx_dialogs_and_notifications_entry_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="113"/>
+ <location filename="../querydialogspage.cpp" line="134"/>
<source>Please enter your name</source>
<translation>请输入你的姓名</translation>
</message>
<message id="xx_dialogs_and_notifications_long_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="128"/>
+ <location filename="../querydialogspage.cpp" line="150"/>
<source>Select printer</source>
<translation>请选择打印机</translation>
</message>
+ <message id="xx_wg_single_selection_dialogs_page_stacked_dialogs">
+ <location filename="../singleselectiondialogspage.cpp" line="94"/>
+ <source>Stacked Dialogs</source>
+ <translation type="unfinished">对话记录框</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_system_modal_dialog">
+ <location filename="../singleselectiondialogspage.cpp" line="96"/>
+ <source>System Modal Dialog</source>
+ <translation type="unfinished">模式对话框</translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_dialog_with_progress_indicator">
+ <location filename="../singleselectiondialogspage.cpp" line="98"/>
+ <source>Dialog with Progress Indicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_wg_single_selection_dialogs_page_message_box">
+ <location filename="../singleselectiondialogspage.cpp" line="100"/>
+ <source>Message Box</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_dialogs_and_notifications_stacked_dialog_button">
- <location filename="../dialogsandnotificationspage.cpp" line="179"/>
+ <location filename="../singleselectiondialogspage.cpp" line="129"/>
<source>Click to spawn a nested dialog</source>
<translation>请点按打开下级对话</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="181"/>
+ <location filename="../singleselectiondialogspage.cpp" line="131"/>
<source>Stacked dialogs</source>
<translation>对话记录框</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_open_nested_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="194"/>
+ <location filename="../singleselectiondialogspage.cpp" line="145"/>
<source>Click to open a nested message box</source>
<translation>请点按打开下级消息框</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_nested_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="196"/>
+ <location filename="../singleselectiondialogspage.cpp" line="147"/>
<source>This is a nested dialog</source>
<translation>这是多层对话框</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialog_messagebox_text">
- <location filename="../dialogsandnotificationspage.cpp" line="209"/>
+ <location filename="../singleselectiondialogspage.cpp" line="160"/>
<source>I&apos;m a nested message box</source>
<translation>我是多层对话框</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_title">
- <location filename="../dialogsandnotificationspage.cpp" line="219"/>
+ <location filename="../singleselectiondialogspage.cpp" line="171"/>
<source>System Modal Dialog</source>
<translation>模式对话框</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog_label">
- <location filename="../dialogsandnotificationspage.cpp" line="225"/>
+ <location filename="../singleselectiondialogspage.cpp" line="178"/>
<source>I&apos;m a window modal dialog.
There&apos;s no way around me!
Muwhahaha... [evil laugh]</source>
@@ -134,39 +324,53 @@ Muwhahaha... [evil laugh]</source>
哈哈哈...</translation>
</message>
<message id="xx_dialogs_and_notifications_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="242"/>
+ <location filename="../singleselectiondialogspage.cpp" line="197"/>
<source>Progress Indicator</source>
<translation>进程指示</translation>
</message>
<message id="xx_dialogs_and_notifications_message_box_text">
- <location filename="../dialogsandnotificationspage.cpp" line="261"/>
+ <location filename="../singleselectiondialogspage.cpp" line="217"/>
<source>Hello World!</source>
<translation>你好世界!</translation>
</message>
+ <message id="xx_wg_banners_page_event_banner">
+ <location filename="../bannerspage.cpp" line="90"/>
+ <source>Event Banner</source>
+ <translation type="unfinished">事件通知</translation>
+ </message>
+ <message id="xx_wg_banners_page_information_banner">
+ <location filename="../bannerspage.cpp" line="92"/>
+ <source>Information Banner</source>
+ <translation type="unfinished">消息通知</translation>
+ </message>
+ <message id="xx_wg_banners_page_system_information_banner">
+ <location filename="../bannerspage.cpp" line="94"/>
+ <source>System Information Banner</source>
+ <translation type="unfinished">系统消息通知</translation>
+ </message>
<message id="xx_dialogs_and_notifications_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="271"/>
+ <location filename="../bannerspage.cpp" line="121"/>
<source>&lt;b&gt;Ida Taipale&lt;/b&gt;&lt;br/&gt;Have you seen my dog?</source>
<translation>&lt;b&gt;lda Taipale&lt;/b&gt;&lt;br/&gt;你看见我的狗了吗?</translation>
</message>
<message id="xx_dialogs_and_notifications_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="284"/>
+ <location filename="../bannerspage.cpp" line="134"/>
<source>&lt;b&gt;Battery is running low&lt;/b&gt;</source>
<translation>&lt;b&gt;电池容量低&lt;/b&gt;</translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="296"/>
+ <location filename="../bannerspage.cpp" line="145"/>
<source>&lt;b&gt;Incoming call&lt;/b&gt;</source>
<translation>&lt;b&gt;来电&lt;/b&gt;</translation>
</message>
<message id="xx_dialogs_and_notifications_system_information_banner_accept">
- <location filename="../dialogsandnotificationspage.cpp" line="298"/>
+ <location filename="../bannerspage.cpp" line="147"/>
<source>Accept</source>
<translation>接听</translation>
</message>
<message id="xx_dialogs_and_notifications_title">
- <location filename="../dialogsandnotificationspage.cpp" line="365"/>
<source>Dialogs and Notifications</source>
- <translation variants="yes">
+ <translation type="obsolete" variants="yes">
<lengthvariant>对话框和通知</lengthvariant>
<lengthvariant>对话框和通知</lengthvariant>
<lengthvariant>对话框 &amp; 通知</lengthvariant>
@@ -175,76 +379,64 @@ Muwhahaha... [evil laugh]</source>
</translation>
</message>
<message id="xx_dialogs_and_notifications_label_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="369"/>
<source>Dialog examples</source>
- <translation>对话框</translation>
+ <translation type="obsolete">对话框</translation>
</message>
<message id="xx_dialogs_and_notifications_query_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="371"/>
<source>Question Dialog</source>
- <translation>询问对话框</translation>
+ <translation type="obsolete">询问对话框</translation>
</message>
<message id="xx_dialogs_and_notifications_entry_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="373"/>
<source>Entry Dialog</source>
- <translation>登录对话框</translation>
+ <translation type="obsolete">登录对话框</translation>
</message>
<message id="xx_dialogs_and_notifications_long_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="375"/>
<source>A Long Dialog</source>
- <translation>长对话框</translation>
+ <translation type="obsolete">长对话框</translation>
</message>
<message id="xx_dialogs_and_notifications_stacked_dialogs">
- <location filename="../dialogsandnotificationspage.cpp" line="378"/>
<source>Stacked Dialogs</source>
- <translation>对话记录框</translation>
+ <translation type="obsolete">对话记录框</translation>
</message>
<message id="xx_dialogs_and_notifications_system_modal_dialog">
- <location filename="../dialogsandnotificationspage.cpp" line="381"/>
<source>System Modal Dialog</source>
- <translation>模式对话框</translation>
+ <translation type="obsolete">模式对话框</translation>
</message>
<message id="xx_dialogs_and_notifications_dialog_with_progress_indicator">
- <location filename="../dialogsandnotificationspage.cpp" line="384"/>
<source>Dialog With Progress Indicator</source>
- <translation>进程条对话框 </translation>
+ <translation type="obsolete">进程条对话框 </translation>
</message>
<message id="xx_dialogs_and_notifications_label_messagebox">
<source> DuiMessageBox examples</source>
<translation type="obsolete">消息对话框例子</translation>
</message>
<message id="xx_dialogs_and_notifications_messagebox">
- <location filename="../dialogsandnotificationspage.cpp" line="389"/>
<source>Simple Message Box</source>
- <translation>简单消息对话框</translation>
+ <translation type="obsolete">简单消息对话框</translation>
</message>
<message id="xx_dialogs_and_notifications_label_notifications">
- <location filename="../dialogsandnotificationspage.cpp" line="387"/>
<source>Notifications and messages</source>
- <translation>通知</translation>
+ <translation type="obsolete">通知</translation>
</message>
<message id="xx_dialogs_and_notifications_label_event_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="391"/>
<source>Event Banner</source>
- <translation>事件通知</translation>
+ <translation type="obsolete">事件通知</translation>
</message>
<message id="xx_dialogs_and_notifications_label_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="393"/>
<source>Information Banner</source>
- <translation>消息通知</translation>
+ <translation type="obsolete">消息通知</translation>
</message>
<message id="xx_dialogs_and_notifications_label_system_information_banner">
- <location filename="../dialogsandnotificationspage.cpp" line="395"/>
<source>System Information Banner</source>
- <translation>系统消息通知</translation>
+ <translation type="obsolete">系统消息通知</translation>
</message>
<message id="xx_Image">
- <location filename="../imagepage.cpp" line="123"/>
+ <location filename="../imagepage.cpp" line="131"/>
<source>Image</source>
<translation>图像</translation>
</message>
<message id="xx_Image properties">
- <location filename="../imagepage.cpp" line="127"/>
+ <location filename="../imagepage.cpp" line="135"/>
<source>Image properties</source>
<translation>图像属性</translation>
</message>
@@ -253,7 +445,7 @@ Muwhahaha... [evil laugh]</source>
<translation type="obsolete">动画</translation>
</message>
<message id="xx_image_page_info">
- <location filename="../imagepage.cpp" line="152"/>
+ <location filename="../imagepage.cpp" line="160"/>
<source>Image allows the placement of images onto the UI. Images are generally non-interactive elements. Various single and multiple touch interactions can be added to an Image component if desired. As an example, pinch gesture can be used in this page to zoom the image.</source>
<translation>用于在界面上放置图像,通常图像不是可交互控件,根据需求可加入单点和多点触控。</translation>
</message>
@@ -266,164 +458,199 @@ Muwhahaha... [evil laugh]</source>
<translation type="obsolete">停止</translation>
</message>
<message id="xx_image_operations">
- <location filename="../imagepage.cpp" line="145"/>
+ <location filename="../imagepage.cpp" line="153"/>
<source>Image operations</source>
<translation>图像操作</translation>
</message>
<message id="xx_Zoom">
- <location filename="../imagepage.cpp" line="133"/>
+ <location filename="../imagepage.cpp" line="141"/>
<source>Zoom</source>
<translation>缩放</translation>
</message>
<message id="xx_Transparency">
- <location filename="../imagepage.cpp" line="135"/>
+ <location filename="../imagepage.cpp" line="143"/>
<source>Transparency</source>
<translation>透明度</translation>
</message>
<message id="xx_Crop">
- <location filename="../imagepage.cpp" line="137"/>
+ <location filename="../imagepage.cpp" line="145"/>
<source>Crop</source>
<translation>裁剪</translation>
</message>
+ <message id="xx_listpage_list_remove">
+ <location filename="../mlistpage.cpp" line="547"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_listpage_list_edit">
+ <location filename="../mlistpage.cpp" line="553"/>
+ <source>Edit</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_listpage_title">
- <location filename="../mlistpage.cpp" line="423"/>
+ <location filename="../mlistpage.cpp" line="573"/>
<source>List</source>
<translation>列表</translation>
</message>
<message id="xx_textentry_title">
- <location filename="../textentrypage.cpp" line="490"/>
+ <location filename="../textentrypage.cpp" line="582"/>
<source>Text Entries</source>
<translation>输入文字</translation>
</message>
<message id="xx_tooltip_entry8">
- <location filename="../textentrypage.cpp" line="500"/>
+ <location filename="../textentrypage.cpp" line="592"/>
<source>Provides email address suggestions</source>
<translation>提供邮件地址提示</translation>
</message>
<message id="xx_textentry_free_text">
- <location filename="../textentrypage.cpp" line="506"/>
+ <location filename="../textentrypage.cpp" line="598"/>
<source>Free text:</source>
<translation>任意文字:</translation>
</message>
<message id="xx_textentry_free_text_masked">
- <location filename="../textentrypage.cpp" line="508"/>
+ <location filename="../textentrypage.cpp" line="600"/>
<source>Free text(masked):</source>
<translation>密码:</translation>
</message>
<message id="xx_textentry_number_text">
- <location filename="../textentrypage.cpp" line="510"/>
+ <location filename="../textentrypage.cpp" line="602"/>
<source>Number text:</source>
<translation>数字:</translation>
</message>
<message id="xx_textentry_phone_number">
- <location filename="../textentrypage.cpp" line="512"/>
+ <location filename="../textentrypage.cpp" line="604"/>
<source>Phone number:</source>
<translation>电话:</translation>
</message>
<message id="xx_textentry_email_text">
- <location filename="../textentrypage.cpp" line="514"/>
+ <location filename="../textentrypage.cpp" line="606"/>
<source>Email text:</source>
<translation>电子邮件:</translation>
</message>
+ <message id="xx_textentry_richtext_text">
+ <location filename="../textentrypage.cpp" line="616"/>
+ <source>Rich Text:</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_textentry_noecho">
- <location filename="../textentrypage.cpp" line="525"/>
+ <location filename="../textentrypage.cpp" line="619"/>
<source>No Echo mode:</source>
<translation>无回响模式</translation>
</message>
<message id="xx_textentry_echoonedit">
- <location filename="../textentrypage.cpp" line="528"/>
+ <location filename="../textentrypage.cpp" line="622"/>
<source>Echo on edit:</source>
<translation>编辑回响</translation>
</message>
<message id="xx_textentry_direct_input_mode">
- <location filename="../textentrypage.cpp" line="531"/>
+ <location filename="../textentrypage.cpp" line="625"/>
<source>Direct Input Mode:</source>
<translation>直接输入模式:</translation>
</message>
<message id="xx_textentry_click_here">
- <location filename="../textentrypage.cpp" line="144"/>
- <location filename="../textentrypage.cpp" line="166"/>
+ <location filename="../textentrypage.cpp" line="147"/>
+ <location filename="../textentrypage.cpp" line="169"/>
<source>Click here</source>
<translation>点击这儿</translation>
</message>
<message id="xx_textentry_press_any_key">
- <location filename="../textentrypage.cpp" line="157"/>
+ <location filename="../textentrypage.cpp" line="160"/>
<source>Press any key</source>
<translation>按任意键</translation>
</message>
<message id="xx_textentry_keypress">
- <location filename="../textentrypage.cpp" line="183"/>
+ <location filename="../textentrypage.cpp" line="186"/>
<source>&lt;i&gt;Key press&lt;/i&gt; key:</source>
<translation>&lt;i&gt;Key press&lt;/i&gt; key:</translation>
</message>
<message id="xx_textentry_text">
- <location filename="../textentrypage.cpp" line="186"/>
- <location filename="../textentrypage.cpp" line="200"/>
+ <location filename="../textentrypage.cpp" line="189"/>
+ <location filename="../textentrypage.cpp" line="203"/>
<source>text:</source>
<translation>text:</translation>
</message>
<message id="xx_textentry_keyrelease">
- <location filename="../textentrypage.cpp" line="197"/>
+ <location filename="../textentrypage.cpp" line="200"/>
<source>&lt;i&gt;Key release&lt;/i&gt; key:</source>
<translation>&lt;i&gt;Key release&lt;/i&gt; key:</translation>
</message>
+ <message id="xx_tooltip_customtoolbar1">
+ <location filename="../textentrypage.cpp" line="519"/>
+ <source>Example custom toolbar 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_tooltip_customtoolbar2">
+ <location filename="../textentrypage.cpp" line="532"/>
+ <source>Example custom toolbar 2</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_textentry_url_text">
- <location filename="../textentrypage.cpp" line="516"/>
+ <location filename="../textentrypage.cpp" line="608"/>
<source>Url text:</source>
<translation>网址:</translation>
</message>
<message id="xx_textentry_multiline">
- <location filename="../textentrypage.cpp" line="518"/>
+ <location filename="../textentrypage.cpp" line="610"/>
<source>Multiline:</source>
<translation>多行输入:</translation>
</message>
<message id="xx_tooltip_entry0">
- <location filename="../textentrypage.cpp" line="494"/>
+ <location filename="../textentrypage.cpp" line="586"/>
<source>Enter text here</source>
<translation>在这里输入文字</translation>
</message>
<message id="xx_tooltip_entry1">
- <location filename="../textentrypage.cpp" line="497"/>
+ <location filename="../textentrypage.cpp" line="589"/>
<source>This tooltip is quite long and will be clipped on the display</source>
<translation>这个提示太长显示是会被截短</translation>
</message>
<message id="xx_textentry_completion_text">
- <location filename="../textentrypage.cpp" line="522"/>
+ <location filename="../textentrypage.cpp" line="614"/>
<source>Email suggestion text:</source>
<translation>邮件提示文字:</translation>
</message>
+ <message id="xx_textentry_custom_toolbar1">
+ <location filename="../textentrypage.cpp" line="628"/>
+ <source>Custom ToolBar 1:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_textentry_custom_toolbar2">
+ <location filename="../textentrypage.cpp" line="630"/>
+ <source>Custom ToolBar 2:</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_auto_true_entry0">
- <location filename="../textentrypage.cpp" line="564"/>
+ <location filename="../textentrypage.cpp" line="663"/>
<source>Auto Capitalisation is active</source>
<translation>自动大写转换已激活</translation>
</message>
<message id="xx_auto_false_entry0">
- <location filename="../textentrypage.cpp" line="567"/>
+ <location filename="../textentrypage.cpp" line="666"/>
<source>No Auto Capitalisation</source>
<translation>自动大写转换关闭</translation>
</message>
<message id="xx_tooltip_entry6">
- <location filename="../textentrypage.cpp" line="503"/>
+ <location filename="../textentrypage.cpp" line="595"/>
<source>This is a multiline text entry</source>
<translation>这是多行提示</translation>
</message>
<message id="xx_textentry_singleselectall">
- <location filename="../textentrypage.cpp" line="520"/>
+ <location filename="../textentrypage.cpp" line="612"/>
<source>Singleline (selectall):</source>
<translation>单行 (全选)</translation>
</message>
<message id="xx_auto_capitalisation">
- <location filename="../textentrypage.cpp" line="534"/>
+ <location filename="../textentrypage.cpp" line="633"/>
<source>Auto capitalisation</source>
<translation>自动大写转换</translation>
</message>
<message id="xx_error_correction">
- <location filename="../textentrypage.cpp" line="536"/>
+ <location filename="../textentrypage.cpp" line="635"/>
<source>Error correction</source>
<translation>错误校正</translation>
</message>
<message id="xx_slider_page_title">
- <location filename="../sliderpage.cpp" line="169"/>
+ <location filename="../sliderpage.cpp" line="168"/>
<source>Sliders</source>
<translation variants="yes">
<lengthvariant>滑动条</lengthvariant>
@@ -431,28 +658,28 @@ Muwhahaha... [evil laugh]</source>
</translation>
</message>
<message id="xx_slider_personal_data_label">
- <location filename="../sliderpage.cpp" line="180"/>
+ <location filename="../sliderpage.cpp" line="179"/>
<source>Personal data</source>
<translation>个人信息</translation>
</message>
<message id="xx_slider_age_label">
- <location filename="../sliderpage.cpp" line="184"/>
+ <location filename="../sliderpage.cpp" line="183"/>
<source>Please select your age:œ!! Please select your age:œ!! Please select your age:œ!! Age:</source>
<oldsource>Please select your age:</oldsource>
<translation>您的年龄:</translation>
</message>
<message id="xx_slider_brightness_label">
- <location filename="../sliderpage.cpp" line="217"/>
+ <location filename="../sliderpage.cpp" line="216"/>
<source>Brightness:</source>
<translation>亮度:</translation>
</message>
<message id="xx_slider_player_label">
- <location filename="../sliderpage.cpp" line="197"/>
+ <location filename="../sliderpage.cpp" line="196"/>
<source>Player:</source>
<translation>播放器:</translation>
</message>
<message id="xx_slider_page_info_label">
- <location filename="../sliderpage.cpp" line="177"/>
+ <location filename="../sliderpage.cpp" line="176"/>
<source>Slider is used for continuous set of values, among which user can choose one value.
Seekbar is a special type of Slider used for displaying playback status for multimedia content.</source>
@@ -460,12 +687,16 @@ Seekbar is a special type of Slider used for displaying playback status for mult
播放条是一种特殊的滑动条用于在多媒体内容中控制播放,后退等信息。</translation>
</message>
<message id="xx_viewmenu_page_title">
- <location filename="../applicationmenupage.cpp" line="60"/>
<source>Application Menu</source>
- <translation>应用菜单</translation>
+ <translation type="obsolete">应用菜单</translation>
+ </message>
+ <message id="xx_applicationmenu_page_title">
+ <location filename="../applicationmenupage.cpp" line="62"/>
+ <source>Application Menu</source>
+ <translation type="unfinished">应用菜单</translation>
</message>
<message id="xx_applicationmenu_page_info">
- <location filename="../applicationmenupage.cpp" line="75"/>
+ <location filename="../applicationmenupage.cpp" line="77"/>
<source>Application Menu is a menu element available to any view. &lt;ul&gt;&lt;li&gt;It can be opened by tapping on the menu title area.&lt;/li&gt;&lt;li&gt;It contains commands and view settings for the view in question and an optional area for style commands.&lt;/li&gt;&lt;li&gt;Each view of the application can have different menu contents.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Guidelines&lt;/b&gt; for mandatory menu items: &lt;ul&gt;&lt;li&gt;Settings should be on the main View of the application, unless the settings are specific to a sub-View&lt;/li&gt;&lt;li&gt;Help should be available in each View &lt;/li&gt;&lt;li&gt;Exit task should be present in all Views except for the main View of the application.&lt;/li&gt;&lt;/ul&gt;</source>
<translation>菜单可用于任何视图。&lt;ul&gt;&lt;li&gt;可通过单击标题区域打开&lt;/li&gt;&lt;li&gt;菜单包括命令,设图设置 和可选的定制命令。&lt;/li&gt;&lt;li&gt;应用的不同视图会有不同的菜单内容。&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;指导&lt;/b&gt;菜单组件的强制性要求&lt;ul&gt;&lt;li&gt;设置应该出现在主视图菜单,除非该设置单独应用于子视图。&lt;/li&gt;&lt;li&gt;每个视图菜单上都应该有帮助&lt;/li&gt;&lt;li&gt;退出选项应该提供于除主视图菜单之外的所有视图菜单上&lt;/li&gt;&lt;/ul&gt;</translation>
</message>
@@ -522,52 +753,52 @@ Seekbar is a special type of Slider used for displaying playback status for mult
<translation type="obsolete">日本</translation>
</message>
<message id="xx_combobox_page_info">
- <location filename="../comboboxpage.cpp" line="120"/>
+ <location filename="../comboboxpage.cpp" line="121"/>
<source>The MComboBox widget is a combined button and popup list. It is very similar to QComboBox, but does not allow editing the text.</source>
<translation>选择对话框是按钮和弹出列表的组合。它非常类似于QComboBox, 但不允许编辑文本。</translation>
</message>
<message id="xx_popup_generic_title">
- <location filename="../comboboxpage.cpp" line="112"/>
+ <location filename="../comboboxpage.cpp" line="113"/>
<source>Title</source>
<translation>标题</translation>
</message>
<message id="xx_combobox_title">
- <location filename="../comboboxpage.cpp" line="108"/>
+ <location filename="../comboboxpage.cpp" line="109"/>
<source>ComboBox</source>
<translation>组合对话框</translation>
</message>
<message id="xx_popup_sort_descending_order">
- <location filename="../comboboxpage.cpp" line="114"/>
+ <location filename="../comboboxpage.cpp" line="115"/>
<source>Sort - DescendingOrder</source>
<translation>排序 — 降序</translation>
</message>
<message id="xx_popup_time_consuming">
- <location filename="../comboboxpage.cpp" line="116"/>
+ <location filename="../comboboxpage.cpp" line="117"/>
<source>Time-consuming setting</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_container_page_title">
- <location filename="../containerpage.cpp" line="65"/>
+ <location filename="../containerpage.cpp" line="64"/>
<source>Container</source>
<translation>包容器</translation>
</message>
<message id="xx_progressbar_page_title">
- <location filename="../progressbarpage.cpp" line="80"/>
+ <location filename="../progressbarpage.cpp" line="78"/>
<source>Progress Bar</source>
<translation>进度条</translation>
</message>
<message id="xx_progressbar_page_info_label">
- <location filename="../progressbarpage.cpp" line="85"/>
+ <location filename="../progressbarpage.cpp" line="83"/>
<source>A Progress Bar can indicate an ongoing process with either known or unknown durations.</source>
<translation>进度条可以指示已知的或未知的正在进行的进度。</translation>
</message>
<message id="xx_progressindicator_unknown_duration_bar">
- <location filename="../progressbarpage.cpp" line="89"/>
+ <location filename="../progressbarpage.cpp" line="87"/>
<source>Installing CoolApp</source>
<translation>正在安装 CoolApp</translation>
</message>
<message id="xx_progressindicator_known_duration_bar">
- <location filename="../progressbarpage.cpp" line="87"/>
+ <location filename="../progressbarpage.cpp" line="85"/>
<source>Downloading nicepic.jpg</source>
<translation>正在下载 nicepic.jpg</translation>
</message>
@@ -576,94 +807,105 @@ Seekbar is a special type of Slider used for displaying playback status for mult
<translation type="obsolete">网格</translation>
</message>
<message id="xx_toolbar_page_example1">
- <location filename="../toolbarpage.cpp" line="168"/>
+ <location filename="../toolbarpage.cpp" line="176"/>
<source>Example 1</source>
<translation>例子1</translation>
</message>
<message id="xx_toolbar_page_example2">
- <location filename="../toolbarpage.cpp" line="174"/>
+ <location filename="../toolbarpage.cpp" line="182"/>
<source>Example 2</source>
<translation>例子2</translation>
</message>
<message id="xx_toolbar_page_defaultview">
- <location filename="../toolbarpage.cpp" line="180"/>
+ <location filename="../toolbarpage.cpp" line="188"/>
<source>Default View</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_tabview">
- <location filename="../toolbarpage.cpp" line="186"/>
+ <location filename="../toolbarpage.cpp" line="194"/>
<source>Tab View</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_toolbar_page_title">
- <location filename="../toolbarpage.cpp" line="208"/>
+ <location filename="../toolbarpage.cpp" line="216"/>
<source>ToolBar</source>
<translation>工具条</translation>
</message>
<message id="xx_toolbar_page_info">
- <location filename="../toolbarpage.cpp" line="215"/>
+ <location filename="../toolbarpage.cpp" line="223"/>
<source>&lt;b&gt;Toolbar&lt;/b&gt; acts as a container for actions. Depending upon the view attached, it either acts as a tab bar or is a container for buttons and text input field. &lt;ul&gt;&lt;li&gt;Click Menu to explore the example&lt;/li&gt;&lt;/ul&gt;</source>
<translation type="unfinished">工具条包括很多</translation>
</message>
<message id="xx_objectmenu_page_title">
- <location filename="../objectmenupage.cpp" line="155"/>
+ <location filename="../objectmenupage.cpp" line="154"/>
<source>Object menu</source>
<translation>弹出菜单</translation>
</message>
<message id="xx_objectmenu_page_info_label">
- <location filename="../objectmenupage.cpp" line="167"/>
+ <location filename="../objectmenupage.cpp" line="166"/>
<source>Object Menu is a popup menu of commands opened by long tapping an element. It is used for providing shortcuts to functions related to that particular element.
The primary (single short tap) action of the element should not be duplicated in the Object Menu.</source>
<translation>长按某个界面元件,会显示弹出菜单,给出该元件相关的操作捷径。</translation>
</message>
<message id="xx_objectmenu_page_container_friends">
- <location filename="../objectmenupage.cpp" line="170"/>
+ <location filename="../objectmenupage.cpp" line="169"/>
<source>Friends</source>
<translation>朋友</translation>
</message>
<message id="xx_objectmenu_page_container_albums">
- <location filename="../objectmenupage.cpp" line="172"/>
+ <location filename="../objectmenupage.cpp" line="171"/>
<source>Favorite Albums</source>
<translation>喜爱的相册</translation>
</message>
<message id="xx_displaymodes_navbarcombo">
- <location filename="../navigationbarpage.cpp" line="60"/>
+ <location filename="../displaymodespage.cpp" line="59"/>
<source>Navigation Bar</source>
<translation>导航条</translation>
</message>
<message id="xx_displaymodes_escapebtncombo">
- <location filename="../navigationbarpage.cpp" line="68"/>
+ <location filename="../displaymodespage.cpp" line="67"/>
<source>Escape Button</source>
<translation>退出按钮</translation>
</message>
<message id="xx_displaymodes_homebtncombo">
- <location filename="../navigationbarpage.cpp" line="76"/>
+ <location filename="../displaymodespage.cpp" line="75"/>
<source>Home Button</source>
<translation>返回主界面按钮</translation>
</message>
<message id="xx_displaymodes_page_title">
- <location filename="../navigationbarpage.cpp" line="125"/>
- <source>Display Modes and Full Screen</source>
- <translation>导航条</translation>
+ <location filename="../displaymodespage.cpp" line="143"/>
+ <source>Display Modes</source>
+ <oldsource>Display Modes and Full Screen</oldsource>
+ <translation type="unfinished">导航条</translation>
</message>
<message id="xx_displaymodes_display_mode">
- <location filename="../navigationbarpage.cpp" line="129"/>
+ <location filename="../displaymodespage.cpp" line="147"/>
<source>Components&apos; display mode:</source>
<translation>器件显示模式:</translation>
</message>
+ <message id="xx_displaymodes_window_state">
+ <location filename="../displaymodespage.cpp" line="150"/>
+ <source>Window state:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_displaymodes_full_screen">
+ <location filename="../displaymodespage.cpp" line="153"/>
+ <source>Full Screen</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_displaymode_show">
- <location filename="../navigationbarpage.cpp" line="162"/>
+ <location filename="../displaymodespage.cpp" line="166"/>
<source>Show</source>
<translation>显示</translation>
</message>
<message id="xx_displaymode_autohide">
- <location filename="../navigationbarpage.cpp" line="164"/>
+ <location filename="../displaymodespage.cpp" line="168"/>
<source>Auto Hide</source>
<translation>自动隐藏</translation>
</message>
<message id="xx_displaymode_hide">
- <location filename="../navigationbarpage.cpp" line="166"/>
+ <location filename="../displaymodespage.cpp" line="170"/>
<source>Hide</source>
<translation>隐藏</translation>
</message>
@@ -842,62 +1084,54 @@ The primary (single short tap) action of the element should not be duplicated in
<translation type="obsolete">默认</translation>
</message>
<message id="xx_template_page_layouts_visuals">
- <location filename="../templatepage.cpp" line="51"/>
<source>Layouts and Visuals</source>
- <translation>布局和效果</translation>
+ <translation type="obsolete">布局和效果</translation>
</message>
<message id="xx_template_page_buttons">
- <location filename="../templatepage.cpp" line="53"/>
<source>Buttons</source>
- <translation>按钮</translation>
+ <translation type="obsolete">按钮</translation>
</message>
<message id="xx_template_page_views_dialogs">
- <location filename="../templatepage.cpp" line="47"/>
<source>Views and Dialogs</source>
- <translation>视图和对话框</translation>
+ <translation type="obsolete">视图和对话框</translation>
</message>
<message id="xx_template_page_contains_applets">
- <location filename="../templatepage.cpp" line="49"/>
<source>Contains and Applets</source>
- <translation>包容器和小程序</translation>
+ <translation type="obsolete">包容器和小程序</translation>
</message>
<message id="xx_template_page_indicators_notifications">
- <location filename="../templatepage.cpp" line="55"/>
<source>Indicators and Notifications</source>
- <translation>指示和提示</translation>
+ <translation type="obsolete">指示和提示</translation>
</message>
<message id="xx_template_page_lists_grids_menus">
- <location filename="../templatepage.cpp" line="57"/>
<source>Lists, Grids and Menus</source>
- <translation>列表,网格和菜单</translation>
+ <translation type="obsolete">列表,网格和菜单</translation>
</message>
<message id="xx_template_page_user_input">
- <location filename="../templatepage.cpp" line="59"/>
<source>User input</source>
- <translation>用户输入</translation>
+ <translation type="obsolete">用户输入</translation>
</message>
<message id="xx_template_page_input_feedback">
- <location filename="../templatepage.cpp" line="61"/>
<source>Input Feedback</source>
- <translation>输入反馈</translation>
+ <translation type="obsolete">输入反馈</translation>
</message>
<message id="xx_template_page_title">
- <location filename="../templatepage.cpp" line="119"/>
+ <location filename="../templatepage.cpp" line="101"/>
<source>Template</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_sample template">
- <location filename="../templatepage.cpp" line="125"/>
+ <location filename="../templatepage.cpp" line="107"/>
<source>Sample template</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_checkbox_page_title">
- <location filename="../checkboxpage.cpp" line="76"/>
+ <location filename="../checkboxpage.cpp" line="80"/>
<source>Checkbox</source>
<translation>核选框</translation>
</message>
<message id="xx_checkbox_page_info_label">
- <location filename="../checkboxpage.cpp" line="85"/>
+ <location filename="../checkboxpage.cpp" line="89"/>
<source>The Checkbox is a variant of Button that allows users to set the state of variable or setting which has two values, On and Off.
Checkbox essentially does the same thing as the Switch button, so please consider using a Switch instead.</source>
@@ -905,18 +1139,19 @@ Checkbox essentially does the same thing as the Switch button, so please conside
复选框实质上和开关按钮具有相同的功能,所以可考虑用开关按钮。</translation>
</message>
<message id="xx_checkbox_page_checkbox_label">
- <location filename="../checkboxpage.cpp" line="88"/>
- <source>I have read and understood the
-instructions.</source>
- <translation>我已经读过并理解了指示。</translation>
+ <location filename="../checkboxpage.cpp" line="92"/>
+ <source>I have read and understood the instructions.</source>
+ <oldsource>I have read and understood the
+instructions.</oldsource>
+ <translation type="unfinished">我已经读过并理解了指示。</translation>
</message>
<message id="xx_icon_button_page_title">
- <location filename="../iconbuttonpage.cpp" line="82"/>
+ <location filename="../iconbuttonpage.cpp" line="81"/>
<source>Icon Button</source>
<translation>图标按钮</translation>
</message>
<message id="xx_icon_button_page_info_label">
- <location filename="../iconbuttonpage.cpp" line="90"/>
+ <location filename="../iconbuttonpage.cpp" line="89"/>
<source>Icon Buttons have an icon and can have a text label. Icon button differs from push button by its visual presentation: it does not have button-style edges like a Push Button does.
Icon Buttons are used in e.g. Toolbars.</source>
@@ -924,7 +1159,7 @@ instructions.</source>
图标按钮可以在工具条使用。</translation>
</message>
<message id="xx_icon_button_page_icon_button2">
- <location filename="../iconbuttonpage.cpp" line="92"/>
+ <location filename="../iconbuttonpage.cpp" line="91"/>
<source>Lorem ipsum</source>
<translation type="unfinished"></translation>
</message>
@@ -957,32 +1192,34 @@ sit amet</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_application_main_area">
- <location filename="../spinnerpage.cpp" line="66"/>
- <source>In container main area</source>
+ <location filename="../spinnerpage.cpp" line="68"/>
+ <source>In application main area</source>
+ <oldsource>In container main area</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_container_header">
- <location filename="../spinnerpage.cpp" line="72"/>
+ <location filename="../spinnerpage.cpp" line="74"/>
<source>In container header</source>
<translation>在包容器标题区</translation>
</message>
<message id="xx_spinner_page_menu">
- <location filename="../spinnerpage.cpp" line="78"/>
- <source>In view menu</source>
- <translation>在菜单中</translation>
+ <location filename="../spinnerpage.cpp" line="80"/>
+ <source>In application menu</source>
+ <oldsource>In view menu</oldsource>
+ <translation type="unfinished">在菜单中</translation>
</message>
<message id="xx_spinner_page_dialog">
- <location filename="../spinnerpage.cpp" line="84"/>
+ <location filename="../spinnerpage.cpp" line="86"/>
<source>In dialog</source>
<translation>在对话框</translation>
</message>
<message id="xx_spinner_page_title">
- <location filename="../spinnerpage.cpp" line="97"/>
+ <location filename="../spinnerpage.cpp" line="99"/>
<source>Spinner</source>
<translation>旋转进度指示</translation>
</message>
<message id="xx_spinner_page_info_label">
- <location filename="../spinnerpage.cpp" line="106"/>
+ <location filename="../spinnerpage.cpp" line="108"/>
<source>Spinner is used to indicate that a progress is ongoing and the duration is unknown.
Spinners can also be used in situations when duration is known, but available space on screen does not permit using a Progress bar.
@@ -996,51 +1233,50 @@ See the menu for examples of different use cases.</source>
</translation>
</message>
<message id="xx_spinner_page_email_header">
- <location filename="../spinnerpage.cpp" line="116"/>
<source>From: John Doe
Date: Today
Subject: This is funny stuff!</source>
- <translation>发自:John Doe
+ <translation type="obsolete">发自:John Doe
日期:今天
主题:这是个有趣的资料!</translation>
</message>
<message id="xx_spinner_page_application_area_description">
- <location filename="../spinnerpage.cpp" line="129"/>
+ <location filename="../spinnerpage.cpp" line="118"/>
<source>Spinner can be used while content is loading.</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_spinner_page_container_title">
- <location filename="../spinnerpage.cpp" line="142"/>
+ <location filename="../spinnerpage.cpp" line="151"/>
<source>Online albums</source>
<translation>在线相册</translation>
</message>
<message id="xx_spinner_page_container_header_description">
- <location filename="../spinnerpage.cpp" line="151"/>
+ <location filename="../spinnerpage.cpp" line="160"/>
<source>Spinner can be used in container header to indicate that the items inside the container are being updated, but visible items can be interacted with.</source>
<translation>旋转进度指示在容器的标题上显示,表示该容器内容正在被更新,已经显示的内容可以启动。</translation>
</message>
<message id="xx_spinner_page_application_menu_description">
- <location filename="../spinnerpage.cpp" line="195"/>
+ <location filename="../spinnerpage.cpp" line="204"/>
<source>Spinner in the application menu area indicates that the whole view is pending for update.</source>
<translation>旋转进度指示在应用菜单中使用,表示整个界面在等待更新。</translation>
</message>
<message id="xx_spinner_page_dialog_header_description">
- <location filename="../spinnerpage.cpp" line="209"/>
+ <location filename="../spinnerpage.cpp" line="218"/>
<source>Spinner can be placed in dialog header to indicate changing content.</source>
<translation>旋转进度指示在对话标题使用,表示内容正在更新。</translation>
</message>
<message id="xx_spinner_page_dialog_header">
- <location filename="../spinnerpage.cpp" line="230"/>
+ <location filename="../spinnerpage.cpp" line="239"/>
<source>Select Internet connection</source>
<translation>选择互联网连接</translation>
</message>
<message id="xx_switch_page_title">
- <location filename="../switchpage.cpp" line="128"/>
+ <location filename="../switchpage.cpp" line="127"/>
<source>Switch</source>
<translation>开关</translation>
</message>
<message id="xx_switch_page_info_label">
- <location filename="../switchpage.cpp" line="138"/>
+ <location filename="../switchpage.cpp" line="137"/>
<source>A Switch button differs from both a push button and an icon button visually. It looks like a switch, communicating that pressing this button will not go to another view or will not perform any other actions except to toggle the state of the button.
Switches are used to indicate e.g. settings values</source>
@@ -1048,37 +1284,37 @@ Switches are used to indicate e.g. settings values</source>
开关可被用于指示设置的值。</translation>
</message>
<message id="xx_switch_page_switch1">
- <location filename="../switchpage.cpp" line="141"/>
+ <location filename="../switchpage.cpp" line="140"/>
<source>Headlights</source>
<translation>高亮</translation>
</message>
<message id="xx_switch_page_switch2">
- <location filename="../switchpage.cpp" line="143"/>
+ <location filename="../switchpage.cpp" line="142"/>
<source>Autopilot</source>
<translation>自动指示</translation>
</message>
<message id="xx_switch_page_switch3">
- <location filename="../switchpage.cpp" line="145"/>
+ <location filename="../switchpage.cpp" line="144"/>
<source>Warp Drive</source>
<translation>偏度</translation>
</message>
<message id="xx_switch_page_switch4">
- <location filename="../switchpage.cpp" line="147"/>
+ <location filename="../switchpage.cpp" line="146"/>
<source>Reactor Shields</source>
<translation>响应屏蔽</translation>
</message>
<message id="xx_switch_page_switch5">
- <location filename="../switchpage.cpp" line="149"/>
+ <location filename="../switchpage.cpp" line="148"/>
<source>Infinite Improbability Drive</source>
<translation>无限非可能性驱动</translation>
</message>
<message id="xx_input_feedback_page_title">
- <location filename="../feedbackpage.cpp" line="90"/>
+ <location filename="../feedbackpage.cpp" line="89"/>
<source>Input Feedback</source>
<translation>输入反馈</translation>
</message>
<message id="xx_input_feedback_page_info_label">
- <location filename="../feedbackpage.cpp" line="100"/>
+ <location filename="../feedbackpage.cpp" line="99"/>
<source>This page contains buttons with custom input feedbacks. Any MWidget can have input feedback for press and release events. Input feedback can be a sound effect and/or a haptic effect (piezo, vibra) depending on the product.
Input feedbacks can be easily configured for different purposes using the theming system.</source>
@@ -1087,53 +1323,76 @@ Input feedbacks can be easily configured for different purposes using the themin
</translation>
</message>
<message id="xx_input_feedback_page_button1">
- <location filename="../feedbackpage.cpp" line="102"/>
+ <location filename="../feedbackpage.cpp" line="101"/>
<source>Default</source>
<translation>缺省</translation>
</message>
<message id="xx_input_feedback_page_button2">
- <location filename="../feedbackpage.cpp" line="104"/>
+ <location filename="../feedbackpage.cpp" line="103"/>
<source>Different</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button3">
- <location filename="../feedbackpage.cpp" line="106"/>
+ <location filename="../feedbackpage.cpp" line="105"/>
<source>Sluggish</source>
<translation type="unfinished"></translation>
</message>
<message id="xx_input_feedback_page_button4">
- <location filename="../feedbackpage.cpp" line="108"/>
+ <location filename="../feedbackpage.cpp" line="107"/>
<source>Babytoy</source>
<translation>婴儿玩具</translation>
</message>
<message id="xx_input_feedback_page_button5">
- <location filename="../feedbackpage.cpp" line="110"/>
+ <location filename="../feedbackpage.cpp" line="109"/>
<source>Space</source>
<translation>空间</translation>
</message>
<message id="xx_input_feedback_page_button6">
- <location filename="../feedbackpage.cpp" line="112"/>
+ <location filename="../feedbackpage.cpp" line="111"/>
<source>Silent</source>
<translation>静音</translation>
</message>
+ <message id="xx_gridpage_configuration">
+ <location filename="../mgridpage.cpp" line="193"/>
+ <source>Configuration</source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="xx_gridpage_title">
- <location filename="../mgridpage.cpp" line="96"/>
+ <location filename="../mgridpage.cpp" line="204"/>
<source>Grid page</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_video_container_page_title">
- <location filename="../videocontainerpage.cpp" line="372"/>
- <source>Video container</source>
+ <message id="xx_gridpage_set_columns">
+ <location filename="../mgridpage.cpp" line="290"/>
+ <source>Set columns</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="xx_gridpage_landscape">
+ <location filename="../mgridpage.cpp" line="316"/>
+ <source>Landscape</source>
+ <translation type="unfinished">横屏</translation>
+ </message>
+ <message id="xx_gridpage_portrait">
+ <location filename="../mgridpage.cpp" line="321"/>
+ <source>Portrait</source>
+ <translation type="unfinished">竖屏</translation>
+ </message>
+ <message id="xx_bubblepage_title">
+ <location filename="../bubblepage.cpp" line="143"/>
+ <source>Speech Bubble</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_video_container_page_info_label">
- <location filename="../videocontainerpage.cpp" line="377"/>
- <source>Tap video thumbnail to play/pause it. Tap and hold thumbnail to open video in it&apos;s native size.</source>
+ <message id="xx_wg_bubblepage_linkactivated">
+ <location filename="../bubblepage.cpp" line="156"/>
+ <source>Link activated</source>
<translation type="unfinished"></translation>
</message>
- <message id="xx_video_container_header_title">
- <location filename="../videocontainerpage.cpp" line="380"/>
- <source>Gallery</source>
+ <message id="xx_content_items_subtitle">
+ <location filename="../contentitemspage.cpp" line="63"/>
+ <location filename="../contentitemspage.cpp" line="71"/>
+ <location filename="../contentitemspage.cpp" line="81"/>
+ <location filename="../contentitemspage.cpp" line="90"/>
+ <source>Subtitle</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/demos/widgetsgallery/widgetsgallery.pro b/demos/widgetsgallery/widgetsgallery.pro
index ac7b0ff8..5c24bd77 100644
--- a/demos/widgetsgallery/widgetsgallery.pro
+++ b/demos/widgetsgallery/widgetsgallery.pro
@@ -9,11 +9,11 @@ INCLUDEPATH += . \
$$MSRC/corelib
QMAKE_LIBDIR += $$MLIB
-win32|macx {
- macx {
+win32|macx {
+ macx {
QMAKE_LFLAGS += -F../../lib
LIBS += -framework meegotouchcore \
- -framework meegotouchviews
+ -framework meegotouchviews
}
win32:LIBS += -lmeegotouchcore0 \
-lmeegotouchviews0
@@ -38,13 +38,12 @@ contains(DEFINES, HAVE_DBUS) {
}
SOURCES += main.cpp \
templatepage.cpp \
- listpage.cpp \
+ mainpage.cpp \
labelpage.cpp \
pushbuttonpage.cpp \
feedbackpage.cpp \
iconbuttonpage.cpp \
switchpage.cpp \
- dialogsandnotificationspage.cpp \
imagepage.cpp \
applicationmenupage.cpp \
toolbarpage.cpp \
@@ -72,16 +71,24 @@ SOURCES += main.cpp \
gridimagewidget.cpp \
itemdetailpage.cpp \
gridvideowidget.cpp \
- swaphook.cpp
+ swaphook.cpp \
+ maincategorypage.cpp \
+ contentitemspage.cpp \
+ bannerspage.cpp \
+ querydialogspage.cpp \
+ multipleselectiondialogspage.cpp \
+ singleselectiondialogspage.cpp \
+ phonebookcell.cpp \
+ bubblepage.cpp \
+ bubblelistmodel.cpp \
HEADERS += templatepage.h \
- listpage.h \
+ mainpage.h \
labelpage.h \
pushbuttonpage.h \
feedbackpage.h \
iconbuttonpage.h \
switchpage.h \
- dialogsandnotificationspage.h \
imagepage.h \
applicationmenupage.h \
toolbarpage.h \
@@ -109,7 +116,16 @@ HEADERS += templatepage.h \
gridimagewidget.h \
itemdetailpage.h \
gridvideowidget.h \
- swaphook.h
+ swaphook.h \
+ maincategorypage.h \
+ contentitemspage.h \
+ bannerspage.h \
+ querydialogspage.h \
+ multipleselectiondialogspage.h \
+ singleselectiondialogspage.h \
+ phonebookcell.h \
+ bubblepage.h \
+ bubblelistmodel.h \
# theme
include(theme/theme.pri)
diff --git a/mkspecs/common.pri b/mkspecs/common.pri
index 37fbfd99..feeb5833 100644
--- a/mkspecs/common.pri
+++ b/mkspecs/common.pri
@@ -62,6 +62,9 @@ include($${M_BUILD_TREE}/mkspecs/features/meegotouch_defines.prf)
# TRANSLATION_DIR determines the default translation path
DEFINES += TRANSLATION_DIR=\\\"\"$$M_TRANSLATION_DIR\"\\\"
+ # extra data for libicu to be used be default
+ DEFINES += M_ICUEXTRADATA_DIR=\\\"\"$$M_ICUEXTRADATA_DIR\"\\\"
+
# M_THEME_PRELOAD_DIR and M_THEME_POST_PRELOAD_DIR defines from where
# to get lists of images to be preloaded
DEFINES += M_THEME_PRELOAD_DIR=\\\"\"$$M_THEME_PRELOAD_DIR\"\\\"
diff --git a/mkspecs/features/meegotouch_defines.prf.in b/mkspecs/features/meegotouch_defines.prf.in
index 12fca3f4..5e649110 100644
--- a/mkspecs/features/meegotouch_defines.prf.in
+++ b/mkspecs/features/meegotouch_defines.prf.in
@@ -6,7 +6,7 @@
M_MAJOR_VERSION = 0
M_MINOR_VERSION = 20
-M_PATCH_VERSION = 12
+M_PATCH_VERSION = 14
M_VERSION=$${M_MAJOR_VERSION}.$${M_MINOR_VERSION}.$${M_PATCH_VERSION}
# first set default value for meegotouch prefix
@@ -52,6 +52,7 @@ unix|win32 {
M_NOTIFICATIONS_EVENT_TYPES_DIR=$$M_INSTALL_DATA/meegotouch/notifications/eventtypes
M_XDG_DIR = $$M_INSTALL_SYSCONF/xdg
M_TRANSLATION_DIR = $$M_INSTALL_DATA/l10n/meegotouch
+ M_ICUEXTRADATA_DIR = $$M_INSTALL_DATA/meegotouch/icu
M_DBUS_INTERFACES_DIR = /usr/share/dbus-1/interfaces
M_DBUS_SERVICES_DIR = $$system(pkg-config --variable session_bus_services_dir dbus-1)
diff --git a/plainqt/style/qtmaemo6style.cpp b/plainqt/style/qtmaemo6style.cpp
index f38f8bd2..fba2cdd4 100644
--- a/plainqt/style/qtmaemo6style.cpp
+++ b/plainqt/style/qtmaemo6style.cpp
@@ -133,6 +133,8 @@ QtMaemo6StylePrivate::QtMaemo6StylePrivate()
m_menuBar(0),
m_kinetic(0)
{
+ m_excludeClasses.append("QShapedPixmapWidget");
+ m_excludeClasses.append("QTipLabel");
}
QtMaemo6StylePrivate::~QtMaemo6StylePrivate()
@@ -863,6 +865,10 @@ void QtMaemo6Style::polish(QWidget *widget)
if(qobject_cast<QDesktopWidget*>(widget))
return;
+ //Qt internal class, skip this
+ if(d->m_excludeClasses.contains(widget->metaObject()->className()))
+ return;
+
if( !isStyled( widget ) ) {
return;
}
diff --git a/plainqt/style/qtmaemo6style_p.h b/plainqt/style/qtmaemo6style_p.h
index 2a17cd8c..f2771e3f 100644
--- a/plainqt/style/qtmaemo6style_p.h
+++ b/plainqt/style/qtmaemo6style_p.h
@@ -343,6 +343,7 @@ public:
QtMaemo6KineticScrolling* m_kinetic;
+ QList<QString> m_excludeClasses;
};
#endif
diff --git a/projects.pro b/projects.pro
index 37a4ba01..8ddd1f67 100644
--- a/projects.pro
+++ b/projects.pro
@@ -36,6 +36,9 @@ for(PROJECT, $$list($$lower($$unique(M_BUILD_PARTS)))) {
src \
src/translations \
+ contains(DEFINES, HAVE_ICU) {
+ SUBDIRS += src/icu-extradata
+ }
contains(DEFINES, HAVE_DBUS) {
SUBDIRS += \
mappletrunner \
diff --git a/src/corelib/animation/widget/mwidgetmoveanimation.cpp b/src/corelib/animation/widget/mwidgetmoveanimation.cpp
new file mode 100644
index 00000000..25a73db4
--- /dev/null
+++ b/src/corelib/animation/widget/mwidgetmoveanimation.cpp
@@ -0,0 +1,92 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include <QPauseAnimation>
+#include <QPropertyAnimation>
+#include <QSequentialAnimationGroup>
+
+#include "mwidgetmoveanimation.h"
+#include "mwidgetmoveanimation_p.h"
+#include "mwidgetcontroller.h"
+
+void MWidgetMoveAnimationPrivate::init()
+{
+ Q_Q(MWidgetMoveAnimation);
+
+ widget = 0;
+
+ QSequentialAnimationGroup *delayedAnimation = new QSequentialAnimationGroup;
+
+ delay = new QPauseAnimation;
+ delay->setDuration(q->style()->delay());
+ positionAnimation = new QPropertyAnimation;
+ positionAnimation->setPropertyName("pos");
+ positionAnimation->setDuration(q->style()->duration());
+ positionAnimation->setEasingCurve(q->style()->easingCurve());
+
+ delayedAnimation->addAnimation(delay);
+ delayedAnimation->addAnimation(positionAnimation);
+ q->addAnimation(delayedAnimation);
+}
+
+MWidgetMoveAnimation::MWidgetMoveAnimation(QObject *parent) :
+ MParallelAnimationGroup(new MWidgetMoveAnimationPrivate, parent)
+{
+ Q_D(MWidgetMoveAnimation);
+
+ d->init();
+}
+
+MWidgetMoveAnimation::MWidgetMoveAnimation(MWidgetMoveAnimationPrivate *dd, QObject *parent) :
+ MParallelAnimationGroup(dd, parent)
+{
+ Q_D(MWidgetMoveAnimation);
+
+ d->init();
+}
+
+void MWidgetMoveAnimation::setWidget(MWidgetController *widget)
+{
+ Q_D(MWidgetMoveAnimation);
+
+ d->widget = widget;
+}
+
+void MWidgetMoveAnimation::setFinalPos(const QPointF &pos)
+{
+ Q_D(MWidgetMoveAnimation);
+
+ d->finalPos = pos;
+}
+
+void MWidgetMoveAnimation::updateState(QAbstractAnimation::State newState,
+ QAbstractAnimation::State oldState)
+{
+ Q_D(MWidgetMoveAnimation);
+
+ if (oldState == QAbstractAnimation::Stopped &&
+ newState == QAbstractAnimation::Running)
+ {
+ d->positionAnimation->setTargetObject(d->widget);
+ d->positionAnimation->setStartValue(d->widget->pos());
+ d->positionAnimation->setEndValue(d->finalPos);
+ }
+}
+
+#include "moc_mwidgetmoveanimation.cpp"
diff --git a/src/corelib/animation/widget/mwidgetmoveanimation.h b/src/corelib/animation/widget/mwidgetmoveanimation.h
new file mode 100644
index 00000000..7bc51447
--- /dev/null
+++ b/src/corelib/animation/widget/mwidgetmoveanimation.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MWIDGETMOVEANIMATION_H
+#define MWIDGETMOVEANIMATION_H
+
+#include <QtGlobal>
+
+#include <mparallelanimationgroup.h>
+#include <mwidgetmoveanimationstyle.h>
+
+#include <QPointF>
+
+class MWidgetMoveAnimationPrivate;
+class MWidgetController;
+
+//! \internal
+
+class MWidgetMoveAnimation : public MParallelAnimationGroup
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(MWidgetMoveAnimation)
+ M_ANIMATION_GROUP(MWidgetMoveAnimationStyle)
+
+public:
+ MWidgetMoveAnimation(QObject *parent = NULL);
+ void setWidget(MWidgetController *widget);
+ void setFinalPos(const QPointF &pos);
+
+protected:
+ MWidgetMoveAnimation(MWidgetMoveAnimationPrivate *dd, QObject *parent = NULL);
+ virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
+};
+
+//! \internal_end
+
+#endif
diff --git a/src/corelib/animation/widget/mwidgetmoveanimation_p.h b/src/corelib/animation/widget/mwidgetmoveanimation_p.h
new file mode 100644
index 00000000..f0b86e86
--- /dev/null
+++ b/src/corelib/animation/widget/mwidgetmoveanimation_p.h
@@ -0,0 +1,44 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MWIDGETMOVEANIMATION_P_H
+#define MWIDGETMOVEANIMATION_P_H
+
+#include "mwidgetmoveanimation.h"
+#include "mparallelanimationgroup_p.h"
+#include <QPointer>
+
+class MWidgetController;
+class QPauseAnimation;
+class QPropertyAnimation;
+
+class MWidgetMoveAnimationPrivate : public MParallelAnimationGroupPrivate
+{
+ Q_DECLARE_PUBLIC(MWidgetMoveAnimation)
+public:
+ virtual void init();
+
+ QPointer<MWidgetController> widget;
+
+ QPointF finalPos;
+ QPauseAnimation *delay;
+ QPropertyAnimation *positionAnimation;
+};
+
+#endif
diff --git a/src/corelib/animation/widget/widget.pri b/src/corelib/animation/widget/widget.pri
index faa98d24..f8ceee0e 100644
--- a/src/corelib/animation/widget/widget.pri
+++ b/src/corelib/animation/widget/widget.pri
@@ -9,16 +9,19 @@ ANIMATIONS_WIDGET_SRC_DIR=./animation/widget
PUBLIC_HEADERS += \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetfadeanimation.h \
+ $$ANIMATIONS_WIDGET_SRC_DIR/mwidgetmoveanimation.h \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetslideanimation.h \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetzoomanimation.h \
PRIVATE_HEADERS += \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetfadeanimation_p.h \
+ $$ANIMATIONS_WIDGET_SRC_DIR/mwidgetmoveanimation_p.h \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetslideanimation_p.h \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetzoomanimation_p.h \
SOURCES += \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetfadeanimation.cpp \
+ $$ANIMATIONS_WIDGET_SRC_DIR/mwidgetmoveanimation.cpp \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetslideanimation.cpp \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetzoomanimation.cpp \
diff --git a/src/corelib/core/mapplicationifproxy.cpp b/src/corelib/core/mapplicationifproxy.cpp
index 0b701cb9..f0852952 100644
--- a/src/corelib/core/mapplicationifproxy.cpp
+++ b/src/corelib/core/mapplicationifproxy.cpp
@@ -37,17 +37,27 @@ QDBusPendingReply<> MApplicationIfProxy::close()
QDBusPendingReply<> MApplicationIfProxy::exit()
{
- return asyncCall(QLatin1String("exit"));
+ // here we only do the dbus call, when the interface is valid,
+ // i.e. there is a program listening "on the other side" of the
+ // dbus connection.
+ if ( isValid() )
+ {
+ return asyncCall(QLatin1String("exit"));
+ }
+ else
+ {
+ return QDBusPendingReply<>();
+ }
}
QDBusPendingReply<> MApplicationIfProxy::launch()
{
- return asyncCallWithArgumentList(QLatin1String("launch"), QList<QVariant>());
+ return callWithArgumentList(QDBus::BlockWithGui, QLatin1String("launch"), QList<QVariant>());
}
QDBusPendingReply<> MApplicationIfProxy::launch(const QStringList &parameters)
{
QList<QVariant> argumentList;
argumentList << qVariantFromValue(parameters);
- return asyncCallWithArgumentList(QLatin1String("launch"), argumentList);
+ return callWithArgumentList(QDBus::BlockWithGui, QLatin1String("launch"), argumentList);
}
diff --git a/src/corelib/core/mcomponentcache.cpp b/src/corelib/core/mcomponentcache.cpp
index b890ff26..3175ae62 100644
--- a/src/corelib/core/mcomponentcache.cpp
+++ b/src/corelib/core/mcomponentcache.cpp
@@ -52,6 +52,11 @@ MComponentCachePrivate::~MComponentCachePrivate()
delete glWidgetOfOtherWindow;
if (mApplicationWindowInstance != 0)
delete mApplicationWindowInstance;
+
+ while (!shareWidgetsCache.isEmpty()) {
+ FormatWidgetPair pair = shareWidgetsCache.takeFirst();
+ delete pair.second;
+ }
}
bool MComponentCachePrivate::populating()
@@ -81,13 +86,33 @@ void MComponentCachePrivate::populateForMApplication()
cacheBeingPopulated = false;
}
-QGLWidget* MComponentCachePrivate::createNewGlWidget()
+QGLWidget* MComponentCachePrivate::createNewGlWidget(const QGLFormat* format)
{
QGLFormat fmt;
- // disable multisampling, is enabled by default in Qt
- fmt.setSampleBuffers(false);
- fmt.setSamples(0);
- return new QGLWidget(fmt);
+
+ if (!format) {
+ // disable multisampling, is enabled by default in Qt
+ fmt.setSampleBuffers(false);
+ fmt.setSamples(0);
+ }
+ else {
+ fmt = *format;
+ }
+
+ QGLWidget* shareWidget = NULL;
+ foreach(FormatWidgetPair pair, shareWidgetsCache) {
+ if (pair.first == fmt) {
+ shareWidget = pair.second;
+ break;
+ }
+ }
+
+ if (!shareWidget) {
+ shareWidget = new QGLWidget(fmt);
+ shareWidgetsCache.append(qMakePair(fmt, shareWidget));
+ }
+
+ return new QGLWidget(fmt, NULL, shareWidget);
}
MApplication* MComponentCachePrivate::mApplication(int &argc, char **argv, const QString &appIdentifier, MApplicationService *service)
@@ -199,17 +224,21 @@ MApplicationWindow* MComponentCachePrivate::mApplicationWindow()
return returnValue;
}
-QGLWidget* MComponentCachePrivate::glWidget()
+QGLWidget* MComponentCachePrivate::glWidget(const QGLFormat* format)
{
QGLWidget *returnValue;
- if (cacheBeingPopulated && glWidgetOfmApplicationWindowInstance != 0) {
+ if (cacheBeingPopulated && glWidgetOfmApplicationWindowInstance != 0
+ && (!format || glWidgetOfmApplicationWindowInstance->format() == *format))
+ {
returnValue = glWidgetOfmApplicationWindowInstance;
glWidgetOfmApplicationWindowInstance = 0;
- } else if (glWidgetOfOtherWindow != 0) {
+ } else if (glWidgetOfOtherWindow != 0
+ && (!format || glWidgetOfOtherWindow->format() == *format))
+ {
returnValue = glWidgetOfOtherWindow;
glWidgetOfOtherWindow = 0;
} else {
- returnValue = createNewGlWidget();
+ returnValue = createNewGlWidget(format);
}
return returnValue;
}
@@ -242,3 +271,8 @@ QGLWidget* MComponentCache::glWidget()
{
return d_ptr->glWidget();
}
+
+QGLWidget* MComponentCache::glWidget(const QGLFormat& format)
+{
+ return d_ptr->glWidget(&format);
+}
diff --git a/src/corelib/core/mcomponentcache.h b/src/corelib/core/mcomponentcache.h
index cd1251fe..8eb52b79 100644
--- a/src/corelib/core/mcomponentcache.h
+++ b/src/corelib/core/mcomponentcache.h
@@ -28,6 +28,7 @@ class MApplication;
class MApplicationWindow;
class MApplicationService;
class QGLWidget;
+class QGLFormat;
class MComponentCachePrivate;
/*!
@@ -94,8 +95,9 @@ private:
/* QGLWidget object returned by glWidget is owned by the caller */
static QGLWidget* glWidget();
+ static QGLWidget* glWidget(const QGLFormat& format);
friend class MApplicationWindow;
- friend class MWindow;
+ friend class MWindowPrivate;
#ifdef UNIT_TEST
friend class Ut_MComponentCache;
diff --git a/src/corelib/core/mcomponentcache_p.h b/src/corelib/core/mcomponentcache_p.h
index 533a34ce..8143d4ea 100644
--- a/src/corelib/core/mcomponentcache_p.h
+++ b/src/corelib/core/mcomponentcache_p.h
@@ -20,6 +20,9 @@
#ifndef MCOMPONENTCACHE_P_H
#define MCOMPONENTCACHE_P_H
+#include <QList>
+#include <QPair>
+
class MComponentCache;
class MApplication;
class MApplicationWindow;
@@ -34,12 +37,12 @@ public:
bool populating();
MApplication* mApplication(int &argc, char **argv, const QString &appIdentifier, MApplicationService *service);
MApplicationWindow* mApplicationWindow();
- QGLWidget* glWidget();
+ QGLWidget* glWidget(const QGLFormat* format = NULL);
bool canUseCachedApp(int &argc, char **argv, const QString &appIdentifier);
bool hasExtraParams(int &argc, char **argv, const QString &appIdentifier);
- static QGLWidget* createNewGlWidget();
+ QGLWidget* createNewGlWidget(const QGLFormat* format = NULL);
private:
MApplication *mApplicationInstance;
@@ -48,6 +51,9 @@ private:
QGLWidget *glWidgetOfOtherWindow;
bool cacheBeingPopulated;
+ typedef QPair<QGLFormat,QGLWidget*> FormatWidgetPair;
+ QList<FormatWidgetPair> shareWidgetsCache;
+
#ifdef UNIT_TEST
friend class Ut_MComponentCache;
#endif
diff --git a/src/corelib/core/mcomponentdata.cpp b/src/corelib/core/mcomponentdata.cpp
index fc2ff54f..0fedece7 100644
--- a/src/corelib/core/mcomponentdata.cpp
+++ b/src/corelib/core/mcomponentdata.cpp
@@ -504,6 +504,9 @@ void MComponentDataPrivate::init(int &argc, char **argv, const QString &appIdent
if (catalog.isEmpty())
catalog = fileInfo.fileName();
+ // set the path for the icu extra data:
+ MLocale::setDataPath(M_ICUEXTRADATA_DIR);
+
MLocale systemLocale; // gets the current system locale, creating it if necessary.
#ifdef Q_OS_WIN
// walk to translation dir relative to bin dir
diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro
index f73b5f82..bba023d6 100644
--- a/src/corelib/corelib.pro
+++ b/src/corelib/corelib.pro
@@ -23,12 +23,6 @@ contains(DEFINES, HAVE_DBUS) {
include(notification/notification.pri)
}
-contains(DEFINES, HAVE_ICU) {
- include(icu-extradata/extradata.pri)
- EXTRADATA_SOURCE=icu-extradata/extradata.txt
-}
-
-
# install .prf files
system(test -w $$[QT_INSTALL_DATA]) {
install_prf.path = $$[QT_INSTALL_DATA]/mkspecs/features
diff --git a/src/corelib/events/morientationtracker.cpp b/src/corelib/events/morientationtracker.cpp
index ff32f890..d80485ab 100644
--- a/src/corelib/events/morientationtracker.cpp
+++ b/src/corelib/events/morientationtracker.cpp
@@ -77,10 +77,12 @@ void MOrientationTrackerPrivate::topEdgeChanged()
angle = M::Angle270;
orientation = M::Portrait;
} else if (edge == "right") {
- angle = M::Angle90;
+ //angle = M::Angle90; Disabled for now
+ angle = M::Angle270;
orientation = M::Portrait;
} else if (edge == "bottom") {
- angle = M::Angle180;
+ //angle = M::Angle180; Disabled for now
+ angle = M::Angle0;
} else {
angle = M::Angle0;
}
diff --git a/src/corelib/events/mpanrecognizer.cpp b/src/corelib/events/mpanrecognizer.cpp
index 60c3e132..3e711d69 100644
--- a/src/corelib/events/mpanrecognizer.cpp
+++ b/src/corelib/events/mpanrecognizer.cpp
@@ -98,20 +98,9 @@ QGestureRecognizer::Result MPanRecognizer::recognize( QGesture* gesture,
if (panGesture->state() == Qt::NoGesture) {
- if (distX > d->movementThreshold) {
- if (panGesture->panDirection.testFlag(Qt::Vertical)) {
- result = QGestureRecognizer::CancelGesture;
- } else {
- panGesture->panDirection = Qt::Horizontal;
- result = QGestureRecognizer::TriggerGesture;
- }
- } else if (distY > d->movementThreshold) {
- if (panGesture->panDirection.testFlag(Qt::Horizontal)) {
- result = QGestureRecognizer::CancelGesture;
- } else {
- panGesture->panDirection = Qt::Vertical;
- result = QGestureRecognizer::TriggerGesture;
- }
+ if (distX > d->movementThreshold || distY > d->movementThreshold) {
+ panGesture->panDirection = (distX > distY ? Qt::Horizontal : Qt::Vertical);
+ result = QGestureRecognizer::TriggerGesture;
} else {
result = QGestureRecognizer::MayBeGesture;
}
diff --git a/src/corelib/i18n/mlocale.cpp b/src/corelib/i18n/mlocale.cpp
index af8d4afd..570c7fe8 100644
--- a/src/corelib/i18n/mlocale.cpp
+++ b/src/corelib/i18n/mlocale.cpp
@@ -52,7 +52,6 @@
namespace
{
const char *const BackupNameFormatString = "%d%t%g%t%m%t%f";
- const char *const ExtraDataBundleName = "extradata";
const QString RtlLanguages("am:ar:fa:he:ps:ur:");
const char *const Languages = "Languages";
const char *const Countries = "Countries";
@@ -244,7 +243,7 @@ bool MTranslationCatalog::loadWith(MLocale *mlocale, MLocale::Category category)
// Loading the new file into the QTranslator failed.
// Clear any old contents of the QTranslator before returning false.
// This is necessary because the QTranslator may still have old contents.
- // For example, assume that we an Arabic translation "foo_ar.qm" has been loaded
+ // For example, assume that an Arabic translation "foo_ar.qm" has been loaded
// into the translator before and now this loadWith() function tries to
// load "foo_de.qm" because the language has been switched to German
// but "foo_de.qm" does not exist. We do *not* want to keep the previous
@@ -347,6 +346,7 @@ MLocalePrivate::MLocalePrivate()
#endif
, q_ptr(0)
{
+ loadCountryCodes();
}
// copy constructor
@@ -359,6 +359,7 @@ MLocalePrivate::MLocalePrivate(const MLocalePrivate &other)
_calendarLocale(other._calendarLocale),
_monetaryLocale(other._monetaryLocale),
_nameLocale(other._nameLocale),
+ _validCountryCodes( other._validCountryCodes ),
_calendarType(other._calendarType),
_collation(other._collation),
#ifdef HAVE_ICU
@@ -407,6 +408,7 @@ MLocalePrivate &MLocalePrivate::operator=(const MLocalePrivate &other)
_messageTranslations = other._messageTranslations;
_timeTranslations = other._timeTranslations;
_trTranslations = other._trTranslations;
+ _validCountryCodes = other._validCountryCodes;
#ifdef HAVE_ICU
delete _numberFormat;
@@ -422,6 +424,243 @@ MLocalePrivate &MLocalePrivate::operator=(const MLocalePrivate &other)
return *this;
}
+void MLocalePrivate::loadCountryCodes()
+{
+ _validCountryCodes.clear();
+
+
+ _validCountryCodes
+ << "1"
+ << "20"
+ << "212"
+ << "213"
+ << "214"
+ << "215"
+ << "216"
+ << "218"
+ << "219"
+ << "220"
+ << "221"
+ << "222"
+ << "223"
+ << "224"
+ << "225"
+ << "226"
+ << "227"
+ << "228"
+ << "229"
+ << "230"
+ << "231"
+ << "232"
+ << "233"
+ << "234"
+ << "235"
+ << "236"
+ << "237"
+ << "238"
+ << "239"
+ << "240"
+ << "241"
+ << "242"
+ << "243"
+ << "244"
+ << "245"
+ << "246"
+ << "247"
+ << "248"
+ << "249"
+ << "250"
+ << "251"
+ << "252"
+ << "253"
+ << "254"
+ << "255"
+ << "256"
+ << "257"
+ << "258"
+ << "259"
+ << "260"
+ << "261"
+ << "262"
+ << "263"
+ << "264"
+ << "265"
+ << "266"
+ << "267"
+ << "268"
+ << "269"
+ << "27"
+ << "290"
+ << "291"
+ << "297"
+ << "298"
+ << "299"
+ << "30"
+ << "31"
+ << "32"
+ << "33"
+ << "34"
+ << "350"
+ << "351"
+ << "352"
+ << "353"
+ << "354"
+ << "355"
+ << "356"
+ << "357"
+ << "358"
+ << "359"
+ << "36"
+ << "370"
+ << "371"
+ << "372"
+ << "373"
+ << "374"
+ << "375"
+ << "376"
+ << "377"
+ << "378"
+ << "379"
+ << "380"
+ << "381"
+ << "382"
+ << "385"
+ << "386"
+ << "387"
+ << "388"
+ << "389"
+ << "39"
+ << "40"
+ << "41"
+ << "420"
+ << "421"
+ << "423"
+ << "43"
+ << "44"
+ << "45"
+ << "46"
+ << "47"
+ << "48"
+ << "49"
+ << "500"
+ << "501"
+ << "502"
+ << "503"
+ << "504"
+ << "505"
+ << "506"
+ << "507"
+ << "508"
+ << "509"
+ << "51"
+ << "52"
+ << "53"
+ << "54"
+ << "55"
+ << "56"
+ << "57"
+ << "58"
+ << "590"
+ << "591"
+ << "592"
+ << "593"
+ << "594"
+ << "595"
+ << "596"
+ << "597"
+ << "598"
+ << "599"
+ << "60"
+ << "61"
+ << "62"
+ << "63"
+ << "64"
+ << "65"
+ << "66"
+ << "670"
+ << "672"
+ << "673"
+ << "674"
+ << "675"
+ << "676"
+ << "677"
+ << "678"
+ << "679"
+ << "680"
+ << "681"
+ << "682"
+ << "683"
+ << "685"
+ << "686"
+ << "687"
+ << "688"
+ << "689"
+ << "690"
+ << "691"
+ << "692"
+ << "7"
+ << "800"
+ << "808"
+ << "81"
+ << "82"
+ << "84"
+ << "850"
+ << "852"
+ << "853"
+ << "855"
+ << "856"
+ << "86"
+ << "870"
+ << "871"
+ << "872"
+ << "873"
+ << "874"
+ << "878"
+ << "880"
+ << "881"
+ << "882"
+ << "883"
+ << "886"
+ << "888"
+ << "90"
+ << "91"
+ << "92"
+ << "93"
+ << "94"
+ << "95"
+ << "960"
+ << "961"
+ << "962"
+ << "963"
+ << "964"
+ << "965"
+ << "966"
+ << "967"
+ << "968"
+ << "970"
+ << "971"
+ << "972"
+ << "973"
+ << "974"
+ << "975"
+ << "976"
+ << "977"
+ << "979"
+ << "98"
+ << "991"
+ << "992"
+ << "993"
+ << "994"
+ << "995"
+ << "996"
+ << "998";
+}
+
+bool MLocalePrivate::isValidCountryCode( const QString& code ) const
+{
+ return _validCountryCodes.contains( code );
+}
+
#ifdef HAVE_ICU
// creates icu::Locale presenting a category
Locale MLocalePrivate::getCategoryLocale(MLocale::Category category) const
@@ -878,11 +1117,23 @@ void MLocale::setDefault(const MLocale &locale)
// (locale.d_ptr)->currentLanguageItem.set(newLanguage);
//#endif
+ // sends QEvent::LanguageChange to qApp:
+ (s_systemDefault->d_ptr)->insertTrToQCoreApp();
// Setting the default QLocale is needed to get localized number
// support in translations via %Ln, %L1, %L2, ...:
QLocale::setDefault((s_systemDefault->d_ptr)->createQLocale(MLcNumeric));
- // sends QEvent::LanguageChange to qApp:
- (s_systemDefault->d_ptr)->insertTrToQCoreApp();
+ // The event queue needs to be flushed here because
+ // QCoreApplication::removeTranslator() and
+ // QCoreApplication::installTranslator() which are called by
+ // removeTrFromQCoreApp() and insertTrToQCoreApp()
+ // send several QEvent::LanguageChange events which are handled
+ // by the QApplication event handler and may set the
+ // layout direction incorrectly there (see qapplication.cpp in
+ // the Qt source code). We need to make sure these events
+ // are handled *before* we finally set the correct layout direction
+ // below.
+ // (see also bug 169305)
+ QCoreApplication::sendPostedEvents();
// sends QEvent::ApplicationLayoutDirectionChange to qApp:
qApp->setLayoutDirection(s_systemDefault->textDirection());
@@ -1611,34 +1862,15 @@ QString MLocale::icuFormatString( DateType dateType,
TimeType timeType,
CalendarType calendarType) const
{
-
- // Create calLocale which has the time pattern we want to use
- icu::Locale calLocale = MIcuConversions::createLocale(
- categoryName(MLocale::MLcTime),
- calendarType);
-
- icu::DateFormat::EStyle dateStyle = MIcuConversions::toEStyle(dateType);
- icu::DateFormat::EStyle timeStyle = MIcuConversions::toEStyle(timeType);
- icu::DateFormat *df
- = icu::DateFormat::createDateTimeInstance(dateStyle, timeStyle, calLocale);
-
- // Both the locale and the calendarType seem to
- // be ignored here anyway. I.e. the following two statements can be replaced with
- // DateFormatSymbols *dfs = MLocalePrivate::createDateFormatSymbols(icu::Locale(""));
- // without a change in behaviour:
- icu::Locale symbolLocale
- = MIcuConversions::createLocale(categoryName(MLocale::MLcMessages),
- calendarType);
- DateFormatSymbols *dfs = MLocalePrivate::createDateFormatSymbols(symbolLocale);
+ Q_D(const MLocale);
+ MCalendar mcalendar(calendarType);
+ icu::DateFormat *df = d->createDateFormat(dateType, timeType, mcalendar);
QString icuFormatQString;
if (df)
{
icu::UnicodeString icuFormatString;
- // This is not nice but seems to be the only way to set the
- // symbols with the public API
- static_cast<SimpleDateFormat *>(df)->adoptDateFormatSymbols(dfs);
static_cast<SimpleDateFormat *>(df)->toPattern(icuFormatString);
icuFormatQString = MIcuConversions::unicodeStringToQString(icuFormatString);
delete df;
@@ -1683,28 +1915,7 @@ QDateTime MLocale::parseDateTime(const QString &dateTime, CalendarType calendarT
#ifdef HAVE_ICU
QString MLocale::monthName(const MCalendar &mCalendar, int monthNumber) const
{
- Q_D(const MLocale);
- monthNumber--; // months in array starting from index zero
-
- // use message locale as the output language
- icu::Locale symbolLocale
- = MIcuConversions::createLocale(d->categoryName(MLcMessages),
- mCalendar.type());
-
- icu::DateFormatSymbols *dfs = MLocalePrivate::createDateFormatSymbols(symbolLocale);
-
- int len;
- const UnicodeString *months = dfs->getMonths(len);
-
- QString result;
-
- if (monthNumber < len && monthNumber >= 0) {
- result = MIcuConversions::unicodeStringToQString(months[monthNumber]);
- }
-
- delete dfs;
-
- return result;
+ return monthName(mCalendar, monthNumber, MLocale::DateSymbolStandalone, MLocale::DateSymbolWide);
}
#endif
@@ -1731,12 +1942,12 @@ QString MLocale::monthName(const MCalendar &mCalendar, int monthNumber,
icu::DateFormatSymbols::DtWidthType icuWidth =
MIcuConversions::mDateWidthToIcu(symbolLength);
- int len;
+ int len = -1;
const UnicodeString *months = dfs->getMonths(len, icuContext, icuWidth);
QString result;
- if (monthNumber < len && monthNumber >= 0) {
+ if (len > 0 && monthNumber < len && monthNumber >= 0) {
result = MIcuConversions::unicodeStringToQString(months[monthNumber]);
}
@@ -1749,27 +1960,7 @@ QString MLocale::monthName(const MCalendar &mCalendar, int monthNumber,
#ifdef HAVE_ICU
QString MLocale::weekdayName(const MCalendar &mCalendar, int weekday) const
{
- Q_D(const MLocale);
- // use message locale as the output language
- icu::Locale symbolLocale
- = MIcuConversions::createLocale(d->categoryName(MLcMessages),
- mCalendar.type());
-
- icu::DateFormatSymbols *dfs = MLocalePrivate::createDateFormatSymbols(symbolLocale);
-
- int len;
- const UnicodeString *weekdayNames = dfs->getWeekdays(len);
- int weekdayNum = MIcuConversions::icuWeekday(weekday);
-
- QString result;
-
- if (weekdayNum < len && weekdayNum > 0) {
- result = MIcuConversions::unicodeStringToQString(weekdayNames[weekdayNum]);
- }
-
- delete dfs;
-
- return result;
+ return weekdayName(mCalendar, weekday, MLocale::DateSymbolStandalone, MLocale::DateSymbolWide);
}
#endif
@@ -1791,13 +1982,13 @@ QString MLocale::weekdayName(const MCalendar &mCalendar, int weekday,
icu::DateFormatSymbols::DtWidthType icuWidth
= MIcuConversions::mDateWidthToIcu(symbolLength);
- int len;
+ int len = -1;
const UnicodeString *weekdayNames = dfs->getWeekdays(len, icuContext, icuWidth);
int weekdayNum = MIcuConversions::icuWeekday(weekday);
QString result;
- if (weekdayNum < len && weekdayNum > 0) {
+ if (len > 0 && weekdayNum < len && weekdayNum > 0) {
result = MIcuConversions::unicodeStringToQString(weekdayNames[weekdayNum]);
}
@@ -1808,39 +1999,6 @@ QString MLocale::weekdayName(const MCalendar &mCalendar, int weekday,
#endif
#ifdef HAVE_ICU
-namespace
-{
-// fetches a resource bundle for name formats
- UResourceBundle *nameFmtsResourceBundle()
- {
- UErrorCode status = U_ZERO_ERROR;
-
- UResourceBundle *extraData = ures_openDirect(ExtraDataBundleName, "", &status);
-
- if (U_FAILURE(status)) {
- mDebug("mlocale.cpp") << "Error ures_open" << u_errorName(status);
- }
-
- UResourceBundle *posixData = ures_getByKey(extraData, "posixdata", NULL, &status);
-
- if (U_FAILURE(status)) {
- mDebug("mlocale.cpp") << "Error ures_open posixData" << u_errorName(status);
- }
-
- UResourceBundle *nameFmts = ures_getByKey(posixData, "nameFmts", NULL, &status);
- if (U_FAILURE(status)) {
- mDebug("mlocale.cpp") << "Error ures_open nameFmts" << u_errorName(status);
- }
-
- ures_close(extraData);
- ures_close(posixData);
-
- return nameFmts;
- }
-}
-#endif
-
-#ifdef HAVE_ICU
QString MLocale::languageEndonym() const
{
Q_D(const MLocale);
@@ -1849,7 +2007,7 @@ QString MLocale::languageEndonym() const
// TODO: implement a workaround for
// http://site.icu-project.org/design/resbund/issues
#if (U_ICU_VERSION_MAJOR_NUM > 4) || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM >=4)
- UResourceBundle *res = ures_open("ICUDATA-lang", qPrintable(d->_defaultLocale), &status);
+ UResourceBundle *res = ures_open(U_ICUDATA_NAME "-lang", qPrintable(d->_defaultLocale), &status);
#else
UResourceBundle *res = ures_open(NULL, qPrintable(d->_defaultLocale), &status);
#endif
@@ -1887,7 +2045,7 @@ QString MLocale::countryEndonym() const
// TODO: implement a workaround for
// http://site.icu-project.org/design/resbund/issues
#if (U_ICU_VERSION_MAJOR_NUM > 4) || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM >=4)
- UResourceBundle *res = ures_open("ICUDATA-region", qPrintable(d->_defaultLocale), &status);
+ UResourceBundle *res = ures_open(U_ICUDATA_NAME "-region", qPrintable(d->_defaultLocale), &status);
#else
UResourceBundle *res = ures_open(NULL, qPrintable(d->_defaultLocale), &status);
#endif
@@ -2117,13 +2275,25 @@ void MLocale::refreshSettings()
if (settingsHaveReallyChanged) {
if (this == s_systemDefault) {
- // Setting the default QLocale is needed to get localized number
- // support in translations via %Ln, %L1, %L2, ...:
- QLocale::setDefault(d->createQLocale(MLcNumeric));
d->removeTrFromQCoreApp();
d->loadTrCatalogs();
// sends QEvent::LanguageChange to qApp:
d->insertTrToQCoreApp();
+ // Setting the default QLocale is needed to get localized number
+ // support in translations via %Ln, %L1, %L2, ...:
+ QLocale::setDefault(d->createQLocale(MLcNumeric));
+ // The event queue needs to be flushed here because
+ // QCoreApplication::removeTranslator() and
+ // QCoreApplication::installTranslator() which are called by
+ // removeTrFromQCoreApp() and insertTrToQCoreApp()
+ // send several QEvent::LanguageChange events which are handled
+ // by the QApplication event handler and may set the
+ // layout direction incorrectly there (see qapplication.cpp in
+ // the Qt source code). We need to make sure these events
+ // are handled *before* we finally set the correct layout direction
+ // below.
+ // (see also bug 169305)
+ QCoreApplication::sendPostedEvents();
// sends QEvent::ApplicationLayoutDirectionChange to qApp:
qApp->setLayoutDirection(this->textDirection());
}
@@ -2135,3 +2305,290 @@ void MLocale::refreshSettings()
#endif
}
+QString MLocale::formatPhoneNumber( const QString& phoneNumber,
+ PhoneNumberGrouping grouping ) const
+{
+ Q_D(const MLocale);
+ return d->formatPhoneNumber( phoneNumber, grouping );
+}
+
+// when string starts with numbers 2 to 9
+QString groupedNormalString( const QString& phoneNumber )
+{
+ QString result;
+ QString remaining( phoneNumber );
+
+ // for remaining number length 1 (also 0) to 3 return number unchanged
+ if ( remaining.length() < 4 )
+ {
+ result.append( remaining );
+ return result;
+ }
+ else if ( remaining.length() < 8 )
+ {
+ result.append( remaining.left( 3 ) );
+ remaining.remove( 0, 3 );
+ result.append( '-' );
+ result.append( remaining );
+ return result;
+ }
+ else if ( remaining.length() < 11 )
+ {
+ result.append( '(' );
+ result.append( remaining.left( 3 ) );
+ remaining.remove( 0, 3 );
+ result.append( ") " );
+ result.append( remaining.left( 3 ) );
+ remaining.remove( 0, 3 );
+ result.append( '-' );
+ result.append( remaining );
+ return result;
+ }
+ else
+ {
+ result.append( remaining );
+ return result;
+ }
+}
+
+// when string starts with number 1
+QString groupedOneString( const QString& phoneNumber )
+{
+ QString result;
+ QString remaining( phoneNumber );
+
+ // for remaining number length 1 (also 0) to 3 return number unchanged
+ if ( remaining.length() < 2 )
+ {
+ result.append( remaining );
+ return result;
+ }
+ else if ( remaining.length() < 3 )
+ {
+ result.append( remaining.left( 1 ) );
+ remaining.remove( 0, 1 );
+ result.append( " (" );
+ result.append( remaining );
+ result.append( " )" );
+ return result;
+ }
+ else if ( remaining.length() < 4 )
+ {
+ result.append( remaining.left( 1 ) );
+ remaining.remove( 0, 1 );
+ result.append( " (" );
+ result.append( remaining );
+ result.append( " )" );
+ return result;
+ }
+ else if ( remaining.length() < 5 )
+ {
+ result.append( remaining.left( 1 ) );
+ remaining.remove( 0, 1 );
+ result.append( " (" );
+ result.append( remaining );
+ result.append( ')' );
+ return result;
+ }
+ else if ( remaining.length() < 8 )
+ {
+ result.append( remaining.left( 1 ) );
+ remaining.remove( 0, 1 );
+ result.append( " (" );
+ result.append( remaining.left( 3 ) );
+ remaining.remove( 0, 3 );
+ result.append( ") " );
+ result.append( remaining );
+ return result;
+ }
+ else if ( remaining.length() < 12 )
+ {
+ result.append( remaining.left( 1 ) );
+ remaining.remove( 0, 1 );
+ result.append( " (" );
+ result.append( remaining.left( 3 ) );
+ remaining.remove( 0, 3 );
+ result.append( ") " );
+ result.append( remaining.left( 3 ) );
+ remaining.remove( 0, 3 );
+ result.append( '-' );
+ result.append( remaining );
+ return result;
+ }
+ else
+ {
+ result.append( remaining );
+ return result;
+ }
+}
+
+// when string starts with numbers 2 to 9
+QString groupedInternationalString( const QString& phoneNumber )
+{
+ QString result;
+ QString remaining( phoneNumber );
+
+ // for remaining number length 1 (also 0) to 3 return number unchanged
+ if ( remaining.length() < 4 )
+ {
+ result.append( '(' );
+ result.append( remaining );
+ result.append( ')' );
+ return result;
+ }
+ else if ( remaining.length() < 7 )
+ {
+ result.append( '(' );
+ result.append( remaining.left( 3 ) );
+ remaining.remove( 0, 3 );
+ result.append( ") " );
+ result.append( remaining );
+ return result;
+ }
+ else if ( remaining.length() < 11 )
+ {
+ result.append( '(' );
+ result.append( remaining.left( 3 ) );
+ remaining.remove( 0, 3 );
+ result.append( ") " );
+ result.append( remaining.left( 3 ) );
+ remaining.remove( 0, 3 );
+ result.append( '-' );
+ result.append( remaining );
+ return result;
+ }
+ else
+ {
+ result.append( remaining );
+ return result;
+ }
+}
+
+QString MLocalePrivate::formatPhoneNumber( const QString& phoneNumber,
+ MLocale::PhoneNumberGrouping grouping ) const
+{
+ // first do sanity check of the input string
+ QRegExp rx( "\\+?\\d*" );
+ if ( ! rx.exactMatch( phoneNumber ) )
+ {
+ qWarning( "MLocale::formatPhoneNumber: cannot understand number: %s",
+ qPrintable( phoneNumber ) );
+ return phoneNumber;
+ }
+
+ // 00 is not a valid country calling code in north america
+ // -> do not do grouping in this case at all
+ if ( ( grouping == MLocale::NorthAmericanGrouping )
+ && phoneNumber.startsWith( "00" ) )
+ {
+ return phoneNumber;
+ }
+
+ QString remaining( phoneNumber );
+ QString result;
+
+ // if we find any error, we will return the string unchanged
+ // bool error = false;
+
+ // first extract the country code
+
+ bool foundCountryCodeIndicator = false;
+
+ // valid beginnings for a country code are "+", "00" or "011"
+ if ( remaining.startsWith( '+' ) )
+ {
+ foundCountryCodeIndicator = true;
+ result.append( '+' );
+ remaining.remove( 0, 1 );
+ }
+ else if ( remaining.startsWith( "00" ) )
+ {
+ foundCountryCodeIndicator = true;
+ result.append( "00 " );
+ remaining.remove( 0, 2 );
+ }
+ else if ( remaining.startsWith( "011" ) )
+ {
+ foundCountryCodeIndicator = true;
+ result.append( "011 " );
+ remaining.remove( 0, 3 );
+ }
+
+
+ // now check for valid country code
+ if ( foundCountryCodeIndicator )
+ {
+ int length = 1;
+ QString code;
+
+ code = remaining.left( length );
+
+ if ( isValidCountryCode( code ) )
+ {
+ result.append( code );
+ result.append( ' ' );
+ remaining.remove( 0, code.length() );
+ }
+ else
+ {
+ length = 2;
+ code = remaining.left( length );
+ if ( isValidCountryCode( code ) )
+ {
+ result.append( code );
+ result.append( ' ' );
+ remaining.remove( 0, code.length() );
+ }
+ else
+ {
+ length = 3;
+ code = remaining.left( length );
+ if ( isValidCountryCode( code ) )
+ {
+ result.append( code );
+ result.append( ' ' );
+ remaining.remove( 0, code.length() );
+ }
+ else
+ {
+ // no valid country code -> error -> return string
+ return phoneNumber;
+ }
+ }
+ }
+ } // found country code indicator
+
+ // if it exists, the country code is split off now
+ if ( grouping != MLocale::NorthAmericanGrouping )
+ {
+ result.append( remaining );
+ return result;
+ }
+ else
+ {
+ // has country code -> do not handle one special.
+ if ( foundCountryCodeIndicator )
+ {
+ result.append( groupedInternationalString( remaining ) );
+ return result;
+ }
+ // 11 is an invalid code, so disable grouping for this case
+ else if ( remaining.startsWith( "11" ) )
+ {
+ result.append( remaining );
+ return result;
+ }
+ else if ( remaining.startsWith( '1' ) )
+ {
+ result.append( groupedOneString( remaining ) );
+ return result;
+ }
+ else
+ {
+ result.append( groupedNormalString( remaining ) );
+ return result;
+ }
+ }
+
+ return phoneNumber;
+}
diff --git a/src/corelib/i18n/mlocale.h b/src/corelib/i18n/mlocale.h
index 2c1dd115..12b7aad8 100644
--- a/src/corelib/i18n/mlocale.h
+++ b/src/corelib/i18n/mlocale.h
@@ -158,6 +158,22 @@ public:
enum DateSymbolLength {DateSymbolAbbreviated, DateSymbolWide, DateSymbolNarrow};
+ /*!
+ * \ brief Grouping formats for phone numbers
+ * The phone number grouping specifies, how phone numbers will
+ * be displayed to the user.
+ * NoGrouping means that the phone numbers are not grouped at all.
+ * NorthAmericanGrouping means that the phone numbers are grouped
+ * according to the "North American Numbering Plan"
+ * DefaultGrouping means that grouping is done according to the
+ * current system settings.
+ */
+ enum PhoneNumberGrouping {
+ DefaultGrouping,
+ NoGrouping,
+ NorthAmericanGrouping
+ };
+
static MLocale *createSystemMLocale();
static MLocale createCLocale();
@@ -622,6 +638,13 @@ public:
const QString &formatString) const;
/*!
+ * \brief Formats a phone number according to the given grouping
+ */
+ QString formatPhoneNumber( const QString& phoneNumber,
+ PhoneNumberGrouping grouping =
+ DefaultGrouping ) const;
+
+ /*!
* \brief returns ICU date and time format string of the current locale
* \param dateType style of date formatting
* \param timeType style of time formatting
@@ -840,15 +863,63 @@ public:
const char *comment = 0, int n = -1);
/*!
- * \brief Sets the DataPaths for locale system to given paths.
- * This should be called at most once before creating any MLocale instances
- * Data itself should be in the ICU specific subdirectory at the given paths, e.g.
- * somePath/icudt42l/
+ * \brief Sets the DataPaths for the (ICU) locale system to the given paths.
+ *
+ * \param dataPaths a list of paths
+ *
+ * This should be called at most once in a process before creating
+ * any MLocale instances. This function is not thread-safe.
+ * Use it before doing anything with MLocale instances from multiple
+ * threads.
+ *
+ * This function calls u_setDataDirectory() in libicu, see also
+ * <a href="http://icu-project.org/apiref/icu4c/putil_8h.html">
+ * http://icu-project.org/apiref/icu4c/putil_8h.html</a>.
+ *
+ * libmeegotouch initialises this data path to the value of the macro
+ *
+ * \code
+ * M_ICUEXTRADATA_DIR
+ * \endcode
+ *
+ * which is normally set to
+ *
+ * \code
+ * /usr/share/meegotouch/icu/
+ * \endcode
+ *
+ * usually one should not change this.
+ *
+ * The user data itself should be in the ICU specific
+ * subdirectories at the given paths, e.g. a user override file
+ * for some of the basic data of the Finnish locale should be
+ * in
+ *
+ * \code
+ * /usr/share/meegotouch/icu/usrdt42l/fi.res
+ * \endcode
+ *
+ * and a user override file for the lang data of the Finnish
+ * locale should be in
+ *
+ * \code
+ * /usr/share/meegotouch/icu/usrdt42l/lang/fi.res
+ * \endcode
+ *
+ * etc.
+ *
+ * \sa void setDataPath(const QString &dataPath)
*/
static void setDataPaths(const QStringList &dataPaths);
/*!
* \brief Sets the DatPaths to given path
+ *
+ * \param dataPath the data path
+ *
+ * convenience function to set the data path to a single directory
+ *
+ * \sa setDataPaths(const QStringList &dataPaths)
*/
static void setDataPath(const QString &dataPath);
diff --git a/src/corelib/i18n/mlocale_p.h b/src/corelib/i18n/mlocale_p.h
index e19249bb..290e5e30 100644
--- a/src/corelib/i18n/mlocale_p.h
+++ b/src/corelib/i18n/mlocale_p.h
@@ -20,6 +20,7 @@
#ifndef MLOCALE_P_H
#define MLOCALE_P_H
+#include <QSet>
#include <QList>
#include <QString>
#include <QStringList>
@@ -106,6 +107,13 @@ public:
static QString parseScript(const QString &localeString);
static QString parseVariant(const QString &localeString);
+ void loadCountryCodes();
+
+ QString formatPhoneNumber( const QString& phoneNumber,
+ MLocale::PhoneNumberGrouping grouping ) const;
+
+ bool isValidCountryCode( const QString& code ) const;
+
bool _valid;
// the default locale is used for messages and other categories if not
@@ -118,6 +126,9 @@ public:
QString _monetaryLocale;
QString _nameLocale;
+ // the list of valid country codes for the formatPhoneNumber function
+ QSet<QString> _validCountryCodes;
+
// the used calendar and collation may be overridden
MLocale::CalendarType _calendarType;
MLocale::Collation _collation;
diff --git a/src/corelib/icu-extradata/extradata.pri b/src/corelib/icu-extradata/extradata.pri
deleted file mode 100644
index 866a9eef..00000000
--- a/src/corelib/icu-extradata/extradata.pri
+++ /dev/null
@@ -1,12 +0,0 @@
-ICUBINDIR = $$system(icu-config --bindir)
-extradata.name = libextradata builder
-extradata.input = EXTRADATA_SOURCE
-extradata.output = $$DESTDIR/lib${QMAKE_FILE_BASE}.a
-extradata.commands += $$ICUBINDIR/genrb -d $$OBJECTS_DIR -s $$IN_PWD -e UTF-8 ${QMAKE_FILE_BASE}.txt;
-extradata.commands += $$ICUBINDIR/pkgdata --name ${QMAKE_FILE_BASE} --mode static -v -d $$DESTDIR -T $$OBJECTS_DIR -s $$OBJECTS_DIR $$IN_PWD/packagelist.txt
-
-
-extradata.clean += $$OBJECTS_DIR/*.mak $$OBJECTS_DIR/*.lst $$OBJECTS_DIR/*.ao $$OBJECTS_DIR/*.o $$OBJECTS_DIR/*.res $$OBJECTS_DIR/*.c $$DESTDIR/lib${QMAKE_FILE_BASE}.a $$DESTDIR/README_${QMAKE_FILE_BASE}.txt
-extradata.CONFIG = target_predeps
-
-QMAKE_EXTRA_COMPILERS += extradata
diff --git a/src/corelib/icu-extradata/extradata.txt b/src/corelib/icu-extradata/extradata.txt
deleted file mode 100644
index a7dad1a4..00000000
--- a/src/corelib/icu-extradata/extradata.txt
+++ /dev/null
@@ -1,1322 +0,0 @@
-root {
-posixdata {
- postalFmts {
- DJ {"%z%c%T%s%b%e%r"}
- ER {"%z%c%T%s%b%e%r"}
- ET {"%z%c%T%s%b%e%r"}
- ZA {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- ES {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- AE {"%z%c%T%s%b%e%r"}
- BH {"%z%c%T%s%b%e%r"}
- DZ {"%z%c%T%s%b%e%r"}
- EG {"%z%c%T%s%b%e%r"}
- IN {"%z%c%T%s%b%e%r"}
- IQ {"%z%c%T%s%b%e%r"}
- JO {"%z%c%T%s%b%e%r"}
- KW {"%z%c%T%s%b%e%r"}
- LB {"%z%c%T%s%b%e%r"}
- LY {"%z%c%T%s%b%e%r"}
- MA {"%z%c%T%s%b%e%r"}
- OM {"%z%c%T%s%b%e%r"}
- QA {"%z%c%T%s%b%e%r"}
- SA {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- SD {"%z%c%T%s%b%e%r"}
- SY {"%z%c%T%s%b%e%r"}
- TN {"%z%c%T%s%b%e%r"}
- YE {"%z%c%T%s%b%e%r"}
- AZ {"???"}
- BY {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- BG {"%f%N%a%N%d%N%b%N%sN%h, %e, %r%N%z %T%N%c%N"}
- BD {"%a%N%f%N%d%N%b%N%h %s %e %r%N%T %z%N%c%N"}
- FR {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- BA {"%a%N%f%N%d%N%b%N%h %s %e %r%N%T %z%N%c%N"}
- AD {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- IT {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- UA {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- CZ {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- PL {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- GB {"%d%N%f%N%d%N%b%N%s %h 5e %r%N%C%z %T%N%c%N"}
- DK {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- AT {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- BE {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- CH {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- DE {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- LI {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- LU {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- BT {"%f%N%a%N%d%N%r%t%e%t%b%N%h%t%s%N%T%N%S%N%z%c%N"}
- CY {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- GR {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- AU {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- BW {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- CA {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- HK {"%z%c%T%s%b%e%r"}
- IE {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- NG {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- NZ {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- PH {"%z%c%T%s%b%e%r"}
- SG {"%z%c%T%s%b%e%r"}
- US {"%a%N%f%N%d%N%b%N%h %s %e %r%N%T, %S %z%N%c%N"}
- ZW {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- AR {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- BO {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- CL {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- CO {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- CR {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- DO {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- EC {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- GT {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- HN {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- MX {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- NI {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- PA {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- PE {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- PR {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- PY {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- SV {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- UY {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- VE {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- EE {"%a%N%f%N%d%N%b%N%s%t%h%t%e%t%r%N%C-%z %T%N%c%N"}
- IR {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- FI {"TISSIS FINLAND %f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- FO {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- NL {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- IL {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- HR {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- HU {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- AM {"%d%N%f%N%d%N%b%N%s %h 5e %r%N%C%z %T%N%c%N"}
- ID {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- IS {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- JP {"%z%c%T%s%b%e%r"}
- GE {"%d%N%f%N%d%N%b%N%s %h 5e %r%N%C%z %T%N%c%N"}
- KZ {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- GL {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- KH {"%f%N%a%N%d%N%r%t%e%t%b%N%h%t%s%N%T%N%S%N%z%c%N"}
- KR {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- TR {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- KG {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- UG {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- LA {"%f%N%a%N%d%N%r%t%e%t%b%N%h%t%s%N%T%N%S%N%z%c%N"}
- LT {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- LV {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- MG {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- MK {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- MN {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- MY {"%z%c%T%s%b%e%r"}
- MT {"%z%c%T%s%b%e%r"}
- NO {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- NP {"%z%c%T%s%b%e%r"}
- KE {"%z%c%T%s%b%e%r"}
- PK {"%a%N%f%N%d%N%b%N%h %s %e %r%N%T %z%N%c%N"}
- AN {"%d%N%f%N%d%N%b%N%s %h 5e %r%N%C%z %T%N%c%N"}
- BR {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- PT {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- RO {"%f%N%a%d%N%s%t%h%N%b%t%e%t%r%N%z%t%T%N%S%t%c%N"}
- RU {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- RW {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- LK {"%z%c%T%s%b%e%r"}
- SK {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- SI {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- SO {"%z%c%T%s%b%e%r"}
- AL {"%z%c%T%s%b%e%r"}
- ME {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- RS {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- SE {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- TJ {"%a%N%f%N%d%N%b%N%h %s %e %r%N%T %z%N%c%N"}
- TH {"%f%N%a%N%d%N%r%t%e%t%b%N%h%t%s%N%T%N%S%N%z%c%N"}
- TM {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- CN {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- UZ {"%C%N%T%N%s %h%N%f%N%b%N%d%N%e %r%N%a%N%z"}
- VN {"%z%c%T%s%b%e%r"}
- SN {"%f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N"}
- }
-
- nameFmts {
- aa_DJ {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Maqanxa"}
- name_mr {"Toobokoyta"}
- name_mrs {"Gisti"}
- name_ms {""}
- }
- aa_ER {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Maqanxa"}
- name_mr {"Toobokoyta"}
- name_mrs {"Gisti"}
- name_ms {""}
- }
- aa_ET {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Maqanxa"}
- name_mr {"Toobokoyta"}
- name_mrs {"Gisti"}
- name_ms {""}
- }
- af_ZA {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"mej"}
- name_mr {"mnr"}
- name_mrs {"mev"}
- name_ms {"me"}
- }
- am_ET {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"ወ/ሪት"}
- name_mr {"አቶ"}
- name_mrs {"ወ/ሮ"}
- name_ms {"ወ/ሪት"}
- }
- an_ES {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ar_AE {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_BH {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_DZ {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_EG {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_IQ {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_JO {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_KW {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_LB {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_LY {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_MA {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_OM {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_QA {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_SA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ar_SD {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_SY {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_TN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ar_YE {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- as_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"কুমাৰী"}
- name_mr {"শ্ৰী"}
- name_mrs {"শ্ৰীমতী"}
- name_ms {"কুমাৰী"}
- }
- ast_ES {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- az_AZ {
- name_fmt {"???"}
- }
- be_BY {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ber_DZ {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ber_MA {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"-san"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- bg_BG {
- name_fmt {"%s%t%g%t%m%t%f"}
- name_miss {"г-жица"}
- name_mr {"г-дин"}
- name_mrs {"г-жа"}
- name_ms {"г-жа"}
- }
- bn_BD {
- name_fmt {"%p%t%f%t%m%t%g"}
- name_gen {""}
- name_miss {"বেগম"}
- name_mr {"জনাব"}
- name_mrs {"বেগম"}
- name_ms {"বেগম"}
- }
- bn_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"কুমারী"}
- name_mr {"শ্রী"}
- name_mrs {"শ্রীমতী"}
- name_ms {"শ্রীমতী"}
- }
- br_FR {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Mlle"}
- name_mr {"M."}
- name_mrs {"Mme"}
- name_ms {""}
- }
- bs_BA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- byn_ER {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"ወ/ሪት"}
- name_mr {"ኣቶ"}
- name_mrs {"ወ/ሮ"}
- name_ms {"ወ/ሪት"}
- }
- ca_AD {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ca_ES {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ca_FR {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ca_IT {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- crh_UA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- cs_CZ {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Slečna"}
- name_mr {"Pan"}
- name_mrs {"Paní"}
- name_ms {"Paní"}
- }
- csb_PL {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- cy_GB {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- da_DK {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- de_AT {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- de_BE {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- de_CH {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- de_DE {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Fräulein"}
- name_mr {"Herr"}
- name_mrs {"Frau"}
- name_ms {"Frau"}
- }
- de_LI {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- de_LU {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- dz_BT {
- name_fmt {"%p%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"མོ"}
- name_mr {"ཕོ"}
- name_mrs {"ཨམ"}
- }
- el_CY {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- el_GR {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- en_AU {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- en_BW {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- en_CA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- en_DK {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- en_GB {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- en_HK {
- name_fmt {"%p%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Ms."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {""}
- }
- en_IE {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- en_IN {
- name_fmt {"%p%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Ms."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {""}
- }
- en_NG {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- en_NZ {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- en_PH {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- en_SG {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- en_US {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- en_ZA {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Miss"}
- name_mr {"Mr"}
- name_mrs {"Mrs"}
- name_ms {"Ms"}
- }
- en_ZW {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- eo_US {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_mr {"s-ro"}
- name_mrs {"s-ino"}
- name_ms {"s-ino"}
- }
- es_AR {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_BO {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_CL {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_CO {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_CR {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_DO {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_EC {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_ES {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_GT {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_HN {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_MX {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_NI {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_PA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_PE {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_PR {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_PY {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_SV {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_US {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_UY {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- es_VE {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- et_EE {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- eu_ES {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- eu_FR {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- fa_IR {
- name_fmt {"%d%t%s%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"خانم"}
- name_mr {"آقای"}
- name_mrs {"خانم"}
- name_ms {"خانم"}
- }
- fi_FI {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- fil_PH {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Bb."}
- name_mr {"G."}
- name_mrs {"Gng."}
- name_ms {"Bb."}
- }
- fo_FO {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- fr_BE {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Mlle"}
- name_mr {"M."}
- name_mrs {"Mme"}
- name_ms {""}
- }
- fr_CA {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Mlle"}
- name_mr {"M."}
- name_mrs {"Mme"}
- name_ms {""}
- }
- fr_CH {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Mlle"}
- name_mr {"M."}
- name_mrs {"Mme"}
- name_ms {""}
- }
- fr_FR {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Mlle"}
- name_mr {"M."}
- name_mrs {"Mme"}
- name_ms {""}
- }
- fr_LU {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Mlle"}
- name_mr {"M."}
- name_mrs {"Mme"}
- name_ms {""}
- }
- fur_IT {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- fy_DE {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Fräulein"}
- name_mr {"Herr"}
- name_mrs {"Frau"}
- name_ms {"Frau"}
- }
- fy_NL {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ga_IE {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- gd_GB {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- gez_ER {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"ወ/ሪት"}
- name_mr {"ኣቶ"}
- name_mrs {"ወ/ሮ"}
- name_ms {"ወ/ሪት"}
- }
- gez_ET {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"ወ/ሪት"}
- name_mr {"አቶ"}
- name_mrs {"ወ/ሮ"}
- name_ms {"ወ/ሪት"}
- }
- gl_ES {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- gu_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"જાતિ"}
- name_miss {"કુમારી"}
- name_mr {"શ્રીમાન"}
- name_mrs {"શ્રીમતિ"}
- name_ms {"સશ્રી"}
- }
- gv_GB {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ha_NG {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- he_IL {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- hi_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- hr_HR {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- hsb_DE {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"knježna"}
- name_mr {"knjez"}
- name_mrs {"knjeni"}
- }
- hu_HU {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- hy_AM {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"օրիորդ"}
- name_mr {"պրն"}
- name_mrs {"տկն"}
- }
- id_ID {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ig_NG {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ik_CA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- is_IS {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- it_CH {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- it_IT {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- iu_CA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- iw_IL {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ja_JP {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"様"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ka_GE {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- kk_KZ {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- kl_GL {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- km_KH {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_mr {"ທ"}
- name_mrs {"ນ"}
- }
- kn_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ko_KR {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ks_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ku_TR {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {"Barêz"}
- name_miss {"Barêz"}
- name_mr {"Barêz"}
- name_mrs {"Barêz"}
- name_ms {"Barêz"}
- }
- kw_GB {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ky_KG {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- lg_UG {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Mla"}
- name_mr {"Mw"}
- name_mrs {"Mla"}
- name_ms {"Mla"}
- }
- li_BE {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- li_NL {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- lo_LA {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_mr {"ທ"}
- name_mrs {"ນ"}
- }
- lt_LT {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- lv_LV {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- mai_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- mg_MG {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- mi_NZ {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- mk_MK {
- name_fmt {"%g%t%f"}
- name_gen {"почитуван"}
- name_miss {"г-ѓица"}
- name_mr {"г-дин"}
- name_mrs {"г-ѓа"}
- name_ms {"г-ѓа"}
- }
- ml_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {"ശ്രീ"}
- name_miss {"കുമാരി"}
- name_mr {"ശ്രീമാനു്"}
- name_mrs {"ശ്രീമതി"}
- name_ms {"ശ്രീമതി"}
- }
- mn_MN {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Хатагтай"}
- name_mr {"Ноён"}
- name_mrs {"Хатагтай"}
- name_ms {"Хатагтай"}
- }
- mr_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- ms_MY {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"cik"}
- name_mr {"Eecik"}
- name_mrs {"Puan"}
- name_ms {"cik/Puan"}
- }
- mt_MT {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- nb_NO {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- nds_DE {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Fräulein"}
- name_mr {"Herr"}
- name_mrs {"Frau"}
- name_ms {"Frau"}
- }
- nds_NL {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ne_NP {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- nl_BE {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- nl_NL {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- nn_NO {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- nr_ZA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- nso_ZA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- oc_FR {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Mlle"}
- name_mr {"M."}
- name_mrs {"Mme"}
- name_ms {""}
- }
- om_ET {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Du"}
- name_mr {"Ob"}
- name_mrs {"Ad"}
- name_ms {""}
- }
- om_KE {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Du"}
- name_mr {"Ob"}
- name_mrs {"Ad"}
- name_ms {""}
- }
- or_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- pa_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- pa_PK {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- pap_AN {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- pl_PL {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- pt_BR {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- pt_PT {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ro_RO {
- name_fmt {"%d%t%s%t%f%t%g%t%m"}
- name_miss {"D-ra."}
- name_mr {"Dl."}
- name_mrs {"D-na."}
- }
- ru_RU {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ru_UA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- rw_RW {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- sa_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"कुमारी"}
- name_mr {"श्री"}
- name_mrs {"श्रीमती"}
- name_ms {"श्रीमती"}
- }
- sc_IT {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- se_NO {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- shs_CA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- si_LK {
- name_fmt {"%g%t%m%t%f%t%s"}
- name_gen {""}
- name_miss {"මිය"}
- name_mr {"මයා"}
- name_mrs {"මිය"}
- name_ms {"මිය"}
- }
- sid_ET {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Beeto"}
- name_mr {"Kalaa"}
- name_mrs {"Dukko"}
- name_ms {""}
- }
- sk_SK {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- sl_SI {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- so_DJ {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {""}
- name_mr {"Md"}
- name_mrs {"Mw"}
- name_ms {"Mw"}
- }
- so_ET {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {""}
- name_mr {"Md"}
- name_mrs {"Mw"}
- name_ms {"Mw"}
- }
- so_KE {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {""}
- name_mr {"Md"}
- name_mrs {"Mw"}
- name_ms {"Mw"}
- }
- so_SO {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {""}
- name_mr {"Md"}
- name_mrs {"Mw"}
- name_ms {"Mw"}
- }
- sq_AL {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- sr_ME {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"г-ђица"}
- name_mr {"г-дин"}
- name_mrs {"г-ђа"}
- name_ms {"г-ђа"}
- }
- sr_RS {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"г-ђица"}
- name_mr {"г-дин"}
- name_mrs {"г-ђа"}
- name_ms {"г-ђа"}
- }
- ss_ZA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- st_ZA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- sv_FI {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- sv_SE {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- ta_IN {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"செல்வி "}
- name_mr {"திரு "}
- name_mrs {"திருமதி "}
- name_ms {"Ms."}
- }
- te_IN {
- name_fmt {"%p%t%f%t%g%t%m"}
- name_gen {""}
- name_miss {"కుమారి "}
- name_mr {"శ్రీ "}
- name_mrs {"శ్రీమతి "}
- name_ms {""}
- }
- tg_TJ {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- th_TH {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {"คุณ"}
- name_miss {"นางสาว"}
- name_mr {"นาย"}
- name_mrs {"นาง"}
- }
- ti_ER {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"ወ/ሪት"}
- name_mr {"ኣቶ"}
- name_mrs {"ወ/ሮ"}
- name_ms {"ወ/ሪት"}
- }
- ti_ET {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"ወ/ሪት"}
- name_mr {"አቶ"}
- name_mrs {"ወ/ሮ"}
- name_ms {"ወ/ሪት"}
- }
- tig_ER {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"ወ/ሪት"}
- name_mr {"ኣቶ"}
- name_mrs {"ወ/ሮ"}
- name_ms {"ወ/ሪት"}
- }
- tk_TM {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {""}
- name_mr {""}
- name_mrs {""}
- name_ms {""}
- }
- tl_PH {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- tn_ZA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- tr_CY {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {"Sayın"}
- name_miss {"Bayan"}
- name_mr {"Bay"}
- name_mrs {"Bayan"}
- name_ms {"Bayan"}
- }
- tr_TR {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {"Sayın"}
- name_miss {"Bayan"}
- name_mr {"Bay"}
- name_mrs {"Bayan"}
- name_ms {"Bayan"}
- }
- ts_ZA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- tt_RU {
- name_fmt {"???"}
- }
- ug_CN {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- uk_UA {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {"шановний(-на)"}
- name_miss {"панна"}
- name_mr {"пан"}
- name_mrs {"пані"}
- name_ms {"пані"}
- }
- ur_PK {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- uz_UZ {
- name_fmt {"%d%t%f%t%g%t%m"}
- name_gen {"Hurmatli"}
- name_miss {""}
- name_mr {"Janob"}
- name_mrs {"Xonim"}
- name_ms {""}
- }
- ve_ZA {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- vi_VN {
- name_fmt {"%p%t%f%t%m%t%g"}
- name_gen {""}
- name_miss {"C."}
- name_mr {"Ô."}
- name_mrs {"B."}
- name_ms {""}
- }
- wa_BE {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"Mle"}
- name_mr {"M."}
- name_mrs {"Mme"}
- name_ms {"Mme"}
- }
- wal_ET {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_gen {""}
- name_miss {"ኬታዩ"}
- name_mr {"ሚሲያ"}
- name_mrs {"ኬታዋ"}
- name_ms {"ኬታዩ"}
- }
- wo_SN {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- xh_ZA {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Nkosazana"}
- name_mr {"Mnumzana"}
- name_mrs {"Nkosikazi"}
- name_ms {""}
- }
- yi_US {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- yo_NG {
- name_fmt {"%d%t%g%t%m%t%f"}
- }
- zh_HK {
- name_fmt {"%f%t%d1"}
- name_gen {"君"}
- name_miss {"小姐"}
- name_mr {"先生"}
- name_mrs {"夫人."}
- name_ms {"女士"}
- }
- zh_SG {
- name_fmt {"%p%t%f%t%g"}
- name_gen {""}
- name_miss {"Miss."}
- name_mr {"Mr."}
- name_mrs {"Mrs."}
- name_ms {"Ms."}
- }
- zu_ZA {
- name_fmt {"%d%t%g%t%m%t%f"}
- name_miss {"Nkosazane"}
- name_mr {"Mnumzane"}
- name_mrs {"Nkosikazi"}
- name_ms {""}
- }
- }
-}
-}
diff --git a/src/corelib/icu-extradata/packagelist.txt b/src/corelib/icu-extradata/packagelist.txt
deleted file mode 100644
index 41992931..00000000
--- a/src/corelib/icu-extradata/packagelist.txt
+++ /dev/null
@@ -1 +0,0 @@
-root.res
diff --git a/src/corelib/scene/mscene.cpp b/src/corelib/scene/mscene.cpp
index dc9e1f9d..91f9f0ef 100644
--- a/src/corelib/scene/mscene.cpp
+++ b/src/corelib/scene/mscene.cpp
@@ -387,6 +387,46 @@ void MScenePrivate::logFpsCounter(const QTime *timeStamp, float fps)
fpsLog.stream << " " << QString("%1").arg(fps, 0, 'f', 1) << endl;
}
+void MScenePrivate::fillMarginRectWithPattern(QPainter * painter, const QRectF& rect, int thickness)
+{
+ if(thickness == 0)
+ return;
+
+ QColor fillColor;
+
+ switch(thickness)
+ {
+ case 24:
+ fillColor = QColor(122, 24, 127);
+ break;
+ case 16:
+ fillColor = QColor(250, 25, 0);
+ break;
+ case 12:
+ fillColor = QColor(100, 190, 69);
+ break;
+ case 8:
+ fillColor = QColor(0, 51, 250);
+ break;
+ case 6:
+ fillColor = QColor(138, 93, 59);
+ break;
+ case 4:
+ fillColor = QColor(255, 171, 0);
+ break;
+ case 2:
+ fillColor = QColor(250, 250, 2);
+ break;
+
+ default:
+ fillColor = QColor(2, 254, 255);
+ }
+
+ painter->fillRect(rect, QBrush(fillColor));
+ painter->setOpacity(0.6);
+ painter->fillRect(rect, QBrush(Qt::black, Qt::BDiagPattern));
+}
+
MScene::MScene(QObject *parent)
: QGraphicsScene(parent),
d_ptr(new MScenePrivate)
@@ -468,20 +508,22 @@ void MScene::drawForeground(QPainter *painter, const QRectF &rect)
if (layoutItem) {
qreal left, top, right, bottom;
layoutItem->getContentsMargins(&left, &top, &right, &bottom);
- if (left != 0 || top != 0 || right != 0 || bottom != 0) {
- QPainterPath path;
- path.addPolygon(bp);
- path.addPolygon((*item)->mapToScene(br.adjusted(left, top, -right, -bottom)));
-
- painter->setOpacity(MarginBackgroundOpacity);
- painter->fillPath(path, QBrush(MarginColor));
- painter->setOpacity(1.0);
- painter->fillPath(path, QBrush(MarginColor, Qt::BDiagPattern));
- QPen pen(Qt::DashLine);
- pen.setWidth(MarginBorderWidth);
- pen.setColor(MarginColor);
- painter->strokePath(path, pen);
- }
+
+ QRectF outerRect = (*item)->mapRectToScene(br.x(),br.y(), br.width(), br.height());
+ QRectF innerRect = outerRect.adjusted(left, top, -right, -bottom);
+
+ QRectF leftRect(outerRect.x(), outerRect.y(), innerRect.x() - outerRect.x(), outerRect.height());
+ QRectF topRect(innerRect.x(), outerRect.y(), innerRect.width(), innerRect.y() - outerRect.y());
+ QRectF rightRect(innerRect.bottomRight().x(), outerRect.y(), outerRect.bottomRight().x() - innerRect.bottomRight().x(), outerRect.height());
+ QRectF bottomRect(innerRect.x(), innerRect.bottomRight().y(), innerRect.width(), outerRect.bottomRight().y() - innerRect.bottomRight().y());
+
+ painter->setOpacity(0.5);
+
+ d->fillMarginRectWithPattern(painter, leftRect, leftRect.width());
+ d->fillMarginRectWithPattern(painter, topRect, topRect.height());
+ d->fillMarginRectWithPattern(painter, rightRect, rightRect.width());
+ d->fillMarginRectWithPattern(painter, bottomRect, bottomRect.height());
+
}
painter->setOpacity(1.0);
diff --git a/src/corelib/scene/mscene_p.h b/src/corelib/scene/mscene_p.h
index b7a66034..1e2ad8bc 100644
--- a/src/corelib/scene/mscene_p.h
+++ b/src/corelib/scene/mscene_p.h
@@ -65,6 +65,7 @@ public:
void touchPointCopyMousePosToPointStartPos(QTouchEvent::TouchPoint &point, const QGraphicsSceneMouseEvent *event);
bool eventEmulatePinch(QEvent* event);
bool eventEmulatePan(QEvent* event);
+ void fillMarginRectWithPattern(QPainter * painter, const QRectF& rect, int thickness);
protected:
MScene *q_ptr;
diff --git a/src/corelib/scene/mscenemanager.cpp b/src/corelib/scene/mscenemanager.cpp
index ab574658..7527dd02 100644
--- a/src/corelib/scene/mscenemanager.cpp
+++ b/src/corelib/scene/mscenemanager.cpp
@@ -63,6 +63,7 @@
#include <mwidgetslideanimation.h>
#include <mwidgetfadeanimation.h>
#include <mwidgetzoomanimation.h>
+#include <mwidgetmoveanimation.h>
namespace
{
@@ -358,10 +359,6 @@ void MSceneManagerPrivate::_q_onSceneWindowDisappeared()
if (window->windowType() == MSceneWindow::StatusBar) {
statusBar = 0;
-
- // All other scene windows have to be repositioned since now there's more
- // space available in the scene.
- setSceneWindowGeometries();
}
if (isOnDisplay()) {
@@ -907,10 +904,6 @@ void MSceneManagerPrivate::prepareWindowShow(MSceneWindow *window)
Q_ASSERT(statusBar == 0);
statusBar = window;
-
- // All other scene windows have to be repositioned since now there's less
- // space available in the scene for them.
- setSceneWindowGeometries();
}
window->show();
@@ -1191,6 +1184,24 @@ void MSceneManagerPrivate::createAppearanceAnimationForSceneWindow(MSceneWindow
animation = objectMenuAnimation;
break;
}
+ case MSceneWindow::StatusBar: {
+ MWidgetSlideAnimation *slideInAnimation = new MWidgetSlideAnimation(sceneWindow);
+ slideInAnimation->setTransitionDirection(MWidgetSlideAnimation::In);
+ animation = slideInAnimation;
+
+ QList<MSceneWindow*> sceneWindows = *windows;
+ sceneWindows.removeAll(sceneWindow);
+ foreach (MSceneWindow *window, sceneWindows) {
+ if (window->windowType() != MSceneWindow::ApplicationPage &&
+ window->windowType() != MSceneWindow::DockWidget) {
+ MWidgetMoveAnimation *moveAnimation = new MWidgetMoveAnimation;
+ moveAnimation->setWidget(window);
+ moveAnimation->setFinalPos(QPointF(window->x(), window->y() + sceneWindow->effectiveSizeHint(Qt::PreferredSize).height()));
+ animation->addAnimation(moveAnimation);
+ }
+ }
+ break;
+ }
case MSceneWindow::ObjectMenu: {
MWidgetZoomAnimation *objectMenuAnimation =
new MWidgetZoomAnimation(sceneWindow);
@@ -1247,6 +1258,24 @@ void MSceneManagerPrivate::createDisappearanceAnimationForSceneWindow(MSceneWind
animation = zoomAnimation;
break;
}
+ case MSceneWindow::StatusBar: {
+ MWidgetSlideAnimation *slideOutAnimation = new MWidgetSlideAnimation(sceneWindow);
+ slideOutAnimation->setTransitionDirection(MWidgetSlideAnimation::Out);
+ animation = slideOutAnimation;
+
+ QList<MSceneWindow*> sceneWindows = *windows;
+ sceneWindows.removeAll(sceneWindow);
+ foreach (MSceneWindow *window, sceneWindows) {
+ if (window->windowType() != MSceneWindow::ApplicationPage &&
+ window->windowType() != MSceneWindow::DockWidget) {
+ MWidgetMoveAnimation *moveAnimation = new MWidgetMoveAnimation;
+ moveAnimation->setWidget(window);
+ moveAnimation->setFinalPos(QPointF(window->x(), window->y() - sceneWindow->effectiveSizeHint(Qt::PreferredSize).height()));
+ animation->addAnimation(moveAnimation);
+ }
+ }
+ break;
+ }
case MSceneWindow::ObjectMenu: {
MWidgetZoomAnimation *zoomAnimation =
new MWidgetZoomAnimation(sceneWindow);
diff --git a/src/corelib/style/mwidgetfadeanimationstyle.h b/src/corelib/style/mwidgetfadeanimationstyle.h
index 27fac88c..205a364a 100644
--- a/src/corelib/style/mwidgetfadeanimationstyle.h
+++ b/src/corelib/style/mwidgetfadeanimationstyle.h
@@ -24,7 +24,7 @@
#include <QEasingCurve>
//! \internal
-class MWidgetFadeAnimationStyle : public MAbstractWidgetAnimationStyle
+class M_EXPORT MWidgetFadeAnimationStyle : public MAbstractWidgetAnimationStyle
{
Q_OBJECT
M_STYLE_INTERNAL(MWidgetFadeAnimationStyle)
diff --git a/src/corelib/style/mwidgetmoveanimationstyle.h b/src/corelib/style/mwidgetmoveanimationstyle.h
new file mode 100644
index 00000000..148ce6ee
--- /dev/null
+++ b/src/corelib/style/mwidgetmoveanimationstyle.h
@@ -0,0 +1,43 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MWIDGETMOVEANIMATIONSTYLE_H
+#define MWIDGETMOVEANIMATIONSTYLE_H
+
+#include <manimationstyle.h>
+#include <QEasingCurve>
+
+//! \internal
+class MWidgetMoveAnimationStyle : public MAnimationStyle
+{
+ Q_OBJECT
+ M_STYLE_INTERNAL(MWidgetMoveAnimationStyle)
+
+ M_STYLE_ATTRIBUTE(int, delay, Delay)
+ M_STYLE_ATTRIBUTE(int, duration, Duration)
+ M_STYLE_ATTRIBUTE(QEasingCurve, easingCurve, EasingCurve)
+};
+
+class MWidgetMoveAnimationStyleContainer : public MAnimationStyleContainer
+{
+ M_STYLE_CONTAINER_INTERNAL(MWidgetMoveAnimationStyle)
+};
+//! \internal_end
+
+#endif
diff --git a/src/corelib/style/style.pri b/src/corelib/style/style.pri
index 1ec272cd..8a56e509 100644
--- a/src/corelib/style/style.pri
+++ b/src/corelib/style/style.pri
@@ -29,6 +29,7 @@ MGEN_STYLE_HEADERS += \
$$STYLE_SRC_DIR/mgroupanimationstyle.h \
$$STYLE_SRC_DIR/mlayoutanimationstyle.h \
$$STYLE_SRC_DIR/mwidgetfadeanimationstyle.h \
+ $$STYLE_SRC_DIR/mwidgetmoveanimationstyle.h \
$$STYLE_SRC_DIR/mwidgetslideanimationstyle.h \
$$STYLE_SRC_DIR/mwidgetzoomanimationstyle.h \
$$STYLE_SRC_DIR/mpageswitchanimationstyle.h \
diff --git a/src/corelib/widgets/mabstractitemmodel.cpp b/src/corelib/widgets/mabstractitemmodel.cpp
new file mode 100644
index 00000000..bfbee6f6
--- /dev/null
+++ b/src/corelib/widgets/mabstractitemmodel.cpp
@@ -0,0 +1,171 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "mabstractitemmodel.h"
+#include "mabstractitemmodel_p.h"
+
+MAbstractItemModelPrivate::MAbstractItemModelPrivate()
+ : groupMode(false)
+{
+}
+
+MAbstractItemModelPrivate::~MAbstractItemModelPrivate()
+{
+}
+
+void MAbstractItemModelPrivate::connectModel()
+{
+ Q_Q(MAbstractItemModel);
+
+ connect(q, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(_q_rowsInsertAnimated(QModelIndex,int,int)));
+ connect(q, SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(_q_rowsRemoveAnimated(QModelIndex,int,int)));
+}
+
+void MAbstractItemModelPrivate::setGrouped(bool mode)
+{
+ groupMode = mode;
+}
+
+bool MAbstractItemModelPrivate::isGrouped() const
+{
+ return groupMode;
+}
+
+void MAbstractItemModelPrivate::setChangeAnimated(bool animated)
+{
+ animatedChange.push(animated);
+}
+
+bool MAbstractItemModelPrivate::changeAnimated()
+{
+ return animatedChange.pop();
+}
+
+void MAbstractItemModelPrivate::_q_rowsInsertAnimated(const QModelIndex &parent, int first, int last)
+{
+ Q_Q(MAbstractItemModel);
+
+ emit q->rowsInserted(parent, first, last, changeAnimated());
+}
+
+void MAbstractItemModelPrivate::_q_rowsRemoveAnimated(const QModelIndex &parent, int first, int last)
+{
+ Q_Q(MAbstractItemModel);
+
+ emit q->rowsRemoved(parent, first, last, changeAnimated());
+}
+
+MAbstractItemModel::MAbstractItemModel(QObject *parent)
+ : QAbstractItemModel(parent),
+ d_ptr(new MAbstractItemModelPrivate)
+{
+ Q_D(MAbstractItemModel);
+
+ d->q_ptr = this;
+ d->connectModel();
+}
+
+MAbstractItemModel::~MAbstractItemModel()
+{
+}
+
+void MAbstractItemModel::setGrouped(bool mode)
+{
+ Q_D(MAbstractItemModel);
+
+ if (d->isGrouped() == mode)
+ return;
+
+ d->setGrouped(mode);
+ emit layoutChanged();
+}
+
+bool MAbstractItemModel::isGrouped() const
+{
+ Q_D(const MAbstractItemModel);
+
+ return d->isGrouped();
+}
+
+int MAbstractItemModel::rowCount(const QModelIndex &parent) const
+{
+ if (isGrouped()) {
+ if (parent.isValid())
+ return rowCountInGroup(parent.row());
+ else
+ return groupCount();
+ } else {
+ if (parent.isValid())
+ return 0;
+ else
+ return rowCountInGroup(-1);
+ }
+}
+
+QModelIndex MAbstractItemModel::index(int row, int column, const QModelIndex &parent) const
+{
+ return row < rowCountInGroup(parent.row()) ? createIndex(row, column, parent.row()) : QModelIndex();
+}
+
+QModelIndex MAbstractItemModel::parent(const QModelIndex &child) const
+{
+ if (isGrouped()) {
+ return index(child.internalId(), 0);
+ }
+
+ return QModelIndex();
+}
+
+int MAbstractItemModel::columnCount(const QModelIndex &parent) const
+{
+ Q_UNUSED(parent);
+
+ return 1;
+}
+
+QVariant MAbstractItemModel::data(const QModelIndex &index, int role) const
+{
+ if (isGrouped()) {
+ if (!index.parent().isValid())
+ return groupTitle(index.row());
+ else
+ return itemData(index.row(), index.parent().row(), role);
+ } else {
+ if (index.isValid())
+ return itemData(index.row(), -1, role);
+ }
+
+ return QVariant();
+}
+
+void MAbstractItemModel::beginInsertRows(const QModelIndex &parent, int first, int last, bool animated)
+{
+ Q_D(MAbstractItemModel);
+
+ QAbstractItemModel::beginInsertRows(parent, first, last);
+ d->setChangeAnimated(animated);
+}
+
+void MAbstractItemModel::beginRemoveRows(const QModelIndex &parent, int first, int last, bool animated)
+{
+ Q_D(MAbstractItemModel);
+
+ QAbstractItemModel::beginRemoveRows(parent, first, last);
+ d->setChangeAnimated(animated);
+}
diff --git a/src/corelib/widgets/mabstractitemmodel.h b/src/corelib/widgets/mabstractitemmodel.h
new file mode 100644
index 00000000..c2f117c4
--- /dev/null
+++ b/src/corelib/widgets/mabstractitemmodel.h
@@ -0,0 +1,141 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MABSTRACTITEMMODEL_H
+#define MABSTRACTITEMMODEL_H
+
+#include <MExport>
+#include <QAbstractItemModel>
+
+class MAbstractItemModelPrivate;
+
+/*!
+ \class MAbstractItemModel
+ \brief MAbstractItemModel implementation of a simple list data model.
+*/
+class M_EXPORT MAbstractItemModel : public QAbstractItemModel
+{
+ Q_OBJECT
+ /*!
+ \property MAbstractItemModel::grouped
+ \brief True if the model is a grouped (tree) model, false if the model is
+ a plain list model.
+ */
+ Q_PROPERTY(bool grouped READ isGrouped WRITE setGrouped)
+
+public:
+ /*!
+ \brief Constructor.
+ \param parent Item model owner.
+ */
+ MAbstractItemModel(QObject *parent = NULL);
+ /*!
+ \brief Destructor.
+ */
+ virtual ~MAbstractItemModel();
+
+ /*!
+ \return Number of groups in the model. (O - for the plain list model).
+ */
+ virtual int groupCount() const = 0;
+
+ /*!
+ \return Number of rows in the group.
+ */
+ virtual int rowCountInGroup(int group) const = 0;
+
+ /*!
+ \param group The group index.
+ \return Title of the group.
+ */
+ virtual QString groupTitle(int group) const = 0;
+
+ /*!
+ \param row The row index in the group.
+ \param group The group index in the model, (-1 - for the plain list model).
+ \param role The item data role request.
+ \return The item data for the specified role.
+ */
+ virtual QVariant itemData(int row, int group, int role = Qt::DisplayRole) const = 0;
+
+ /*!
+ \brief Set's the grouping mode for the data model.
+ \param mode The grouping mode of the model to set.
+ */
+ void setGrouped(bool mode);
+
+ /*!
+ \return The model grouping mode.
+ */
+ bool isGrouped() const;
+
+ //! \reimp
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ //! \reimp_end
+
+protected:
+ //! \reimp
+ int columnCount(const QModelIndex &parent) const;
+ QModelIndex parent(const QModelIndex &child) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ //! \reimp_end
+
+ /*!
+ \param parent The parent index where the row insertion begins.
+ \param first The first row index.
+ \param last The last row index.
+ \param animated Flag to insert rows with or without animations.
+ */
+ void beginInsertRows(const QModelIndex &parent, int first, int last, bool animated);
+
+ /*!
+ \param parent The parent index from which the rows are going to be removed.
+ \param first The first row index.
+ \param last The last row index.
+ \param animated Flag to remove rows with or without animations.
+ */
+ void beginRemoveRows(const QModelIndex &parent, int first, int last, bool animated);
+
+Q_SIGNALS:
+ /*!
+ \param parent Parent index in which the rows were inserted.
+ \param first First inserted row index.
+ \param last Last inserted row index.
+ \param animated Flag that shows if the insert operation was with animations or not.
+ */
+ void rowsInserted(const QModelIndex &parent, int first, int last, bool animated);
+
+ /*!
+ \param parent Parent index in which the rows were removed.
+ \param first First removed row index.
+ \param last Last removed row index.
+ \param animated Flag that shows if the remove operation was with animations or not.
+ */
+ void rowsRemoved(const QModelIndex &parent, int first, int last, bool animated);
+
+private:
+ Q_DISABLE_COPY(MAbstractItemModel)
+ Q_DECLARE_PRIVATE(MAbstractItemModel)
+ //! \internal
+ MAbstractItemModelPrivate *const d_ptr;
+ //! \internal_end
+};
+
+#endif // MABSTRACTITEMMODEL_H
diff --git a/src/corelib/widgets/mabstractitemmodel_p.h b/src/corelib/widgets/mabstractitemmodel_p.h
new file mode 100644
index 00000000..f7a5d784
--- /dev/null
+++ b/src/corelib/widgets/mabstractitemmodel_p.h
@@ -0,0 +1,56 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MABSTRACTITEMMODEL_P_H
+#define MABSTRACTITEMMODEL_P_H
+
+#include <QObject>
+#include <QModelIndex>
+#include <QStack>
+
+class MAbstractItemModel;
+
+class MAbstractItemModelPrivate : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PUBLIC(MAbstractItemModel)
+
+public:
+ MAbstractItemModelPrivate();
+ virtual ~MAbstractItemModelPrivate();
+
+ void connectModel();
+
+ void setGrouped(bool mode);
+ bool isGrouped() const;
+
+ void setChangeAnimated(bool animated);
+ bool changeAnimated();
+
+private Q_SLOTS:
+ void _q_rowsInsertAnimated(const QModelIndex &parent, int first, int last);
+ void _q_rowsRemoveAnimated(const QModelIndex &parent, int first, int last);
+
+private:
+ MAbstractItemModel *q_ptr;
+ QStack<bool> animatedChange;
+ bool groupMode;
+};
+
+#endif // MABSTRACTITEMMODEL_P_H
diff --git a/src/corelib/widgets/mapplicationpage.h b/src/corelib/widgets/mapplicationpage.h
index 5d8de699..27fdd372 100644
--- a/src/corelib/widgets/mapplicationpage.h
+++ b/src/corelib/widgets/mapplicationpage.h
@@ -42,7 +42,7 @@ class MPannableViewport;
the assiciated show animation for the page. If you want to show a page instantly, refer to
MSceneManager API.
- A page can contain actions, which will be shown in the navigation bar or on a view menu.
+ A page can contain actions, which will be shown in the navigation bar in the application menu.
\li addAction()
\li actions()
diff --git a/src/corelib/widgets/mapplicationwindow.cpp b/src/corelib/widgets/mapplicationwindow.cpp
index 0d58e98c..9e5a5a96 100644
--- a/src/corelib/widgets/mapplicationwindow.cpp
+++ b/src/corelib/widgets/mapplicationwindow.cpp
@@ -225,9 +225,9 @@ void MApplicationWindowPrivate::windowStateChangeEvent(QWindowStateChangeEvent *
#endif
if (q->isFullScreen() && !event->oldState().testFlag(Qt::WindowFullScreen)) {
- q->sceneManager()->disappearSceneWindowNow(statusBar);
+ q->sceneManager()->disappearSceneWindow(statusBar);
} else if (!q->isFullScreen() && event->oldState().testFlag(Qt::WindowFullScreen)) {
- q->sceneManager()->appearSceneWindowNow(statusBar);
+ q->sceneManager()->appearSceneWindow(statusBar);
}
}
@@ -241,9 +241,9 @@ void MApplicationWindowPrivate::_q_updateStatusBarVisibility()
if (q->isFullScreen()) {
if (callStatusProperty.value().toString() == "active") {
- q->sceneManager()->appearSceneWindowNow(statusBar);
+ q->sceneManager()->appearSceneWindow(statusBar);
} else {
- q->sceneManager()->disappearSceneWindowNow(statusBar);
+ q->sceneManager()->disappearSceneWindow(statusBar);
}
}
}
@@ -381,7 +381,6 @@ void MApplicationWindowPrivate::openMenu()
if (menu->actions().count() > 0) {
menu->appear(q);
escapeButtonPanel->setEnabled(false);
- toolBar->setEnabled(false);
}
}
@@ -569,8 +568,11 @@ void MApplicationWindowPrivate::updateDockWidgetVisibility()
bool toolbarHasVisibleActions = false;
for (int i = 0; i < count; ++i) {
if (actions[i]->isVisible()) {
- toolbarHasVisibleActions = true;
- break;
+ MAction *action = qobject_cast<MAction*>(actions[i]);
+ if(!action || action->location().testFlag(MAction::ToolBarPortraitLocation)) {
+ toolbarHasVisibleActions = true;
+ break;
+ }
}
}
diff --git a/src/corelib/widgets/mbubbleitem.cpp b/src/corelib/widgets/mbubbleitem.cpp
new file mode 100644
index 00000000..d8bbf0e6
--- /dev/null
+++ b/src/corelib/widgets/mbubbleitem.cpp
@@ -0,0 +1,171 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+
+#include "mbubbleitem.h"
+#include "mbubbleitem_p.h"
+#include "mbubbleitemmodel.h"
+
+#include "mimagewidget.h"
+#include "mwidgetcreator.h"
+
+M_REGISTER_WIDGET(MBubbleItem)
+
+MBubbleItemPrivate::MBubbleItemPrivate()
+ : MWidgetControllerPrivate()
+{
+}
+
+MBubbleItemPrivate::~MBubbleItemPrivate()
+{
+}
+
+void MBubbleItemPrivate::init()
+{
+}
+
+MBubbleItem::MBubbleItem(QGraphicsItem *parent)
+ : MWidgetController(new MBubbleItemPrivate, new MBubbleItemModel, parent)
+{
+ Q_D(MBubbleItem);
+
+ d->init();
+}
+
+MBubbleItem::MBubbleItem(MBubbleItemPrivate *dd, MBubbleItemModel *model, QGraphicsItem *parent)
+ : MWidgetController(dd, model, parent)
+{
+ Q_D(MBubbleItem);
+
+ d->init();
+}
+
+MBubbleItem::~MBubbleItem()
+{
+}
+
+MImageWidget* MBubbleItem::avatar() const
+{
+ return model()->avatar();
+}
+
+void MBubbleItem::setAvatar(MImageWidget* avatar)
+{
+ model()->setAvatar(avatar);
+}
+
+void MBubbleItem::setAvatar(const QPixmap &avatar)
+{
+ model()->beginTransaction();
+
+ if (!model()->avatar())
+ model()->setAvatar(new MImageWidget);
+
+ model()->avatar()->setPixmap(avatar);
+ model()->commitTransaction();
+}
+
+QString MBubbleItem::senderName()
+{
+ return model()->senderName();
+}
+
+void MBubbleItem::setSenderName(const QString &senderName)
+{
+ model()->setSenderName(senderName);
+}
+
+QString MBubbleItem::timeStamp()
+{
+ return model()->timeStamp();
+}
+
+void MBubbleItem::setTimeStamp(const QString &timeStamp)
+{
+ model()->setTimeStamp(timeStamp);
+}
+
+QString MBubbleItem::message()
+{
+ return model()->message();
+}
+
+void MBubbleItem::setMessage(const QString &message)
+{
+ model()->setMessage(message);
+}
+
+MBubbleItem::MessageType MBubbleItem::messageType() const
+{
+ return static_cast<MBubbleItem::MessageType>(model()->messageType());
+}
+
+void MBubbleItem::setMessageType(MessageType messageType)
+{
+ model()->beginTransaction();
+
+ if (messageType == MBubbleItem::Outgoing)
+ model()->setAvatar(NULL);
+
+ model()->setMessageType(messageType);
+ model()->commitTransaction();
+}
+
+void MBubbleItem::setCentralWidget(QGraphicsWidget* centralWidget)
+{
+ model()->setCentralWidget( centralWidget );
+}
+
+QGraphicsWidget* MBubbleItem::centralWidget()
+{
+ return model()->centralWidget();
+}
+
+QStack<QGraphicsWidget*> MBubbleItem::informationWidgets()
+{
+ return model()->informationWidgets();
+}
+
+void MBubbleItem::addInformationWidget(QGraphicsWidget* item)
+{
+ QStack<QGraphicsWidget*> stack = model()->informationWidgets();
+ stack.push(item);
+ model()->setInformationWidgets( stack );
+}
+
+QString MBubbleItem::commentsString()
+{
+ return model()->commentsString();
+}
+
+void MBubbleItem::setCommentsString(const QString &comments)
+{
+ model()->setCommentsString(comments);
+}
+
+QString MBubbleItem::thumbsUpString()
+{
+ return model()->thumbsUpString();
+}
+
+void MBubbleItem::setThumbsUpString(const QString &thumbsUp)
+{
+ model()->setThumbsUpString(thumbsUp);
+}
+
diff --git a/src/corelib/widgets/mbubbleitem.h b/src/corelib/widgets/mbubbleitem.h
new file mode 100644
index 00000000..939dd3eb
--- /dev/null
+++ b/src/corelib/widgets/mbubbleitem.h
@@ -0,0 +1,294 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MBUBBLEITEM_H
+#define MBUBBLEITEM_H
+
+#include <MWidgetController>
+#include "mbubbleitemmodel.h"
+
+class MBubbleItemPrivate;
+class MImageWidget;
+
+/*!
+ \class MBubbleItem
+ \brief MBubbleItem is a speech bubble like widget for conversation views.
+
+ MBubbleItem, MListItem and MContentItem can usually be used for the same
+ type of purposes, however the MBubbleItem API is message-centric and therefore
+ better suited for messaging applications. When several bubble items are put into
+ a layout the visual impression is that of a back and forth conversation.
+
+ The speech bubble supports avatar images, separate styling for incoming and
+ outgoing messages, as well as an area for application specific widgets.
+*/
+class M_EXPORT MBubbleItem : public MWidgetController
+{
+ Q_OBJECT
+ M_CONTROLLER(MBubbleItem)
+
+public:
+
+ /*!
+ \property MBubbleItem::senderName
+ Name of the message sender.
+ */
+ Q_PROPERTY(QString senderName READ senderName WRITE setSenderName)
+
+ /*!
+ \property MBubbleItem::timeStamp
+ Time the message was sent, displayed as part of the bubble.
+ */
+ Q_PROPERTY(QString timeStamp READ timeStamp WRITE setTimeStamp)
+
+ /*!
+ \property MBubbleItem::message
+ The main body of the message.
+ */
+ Q_PROPERTY(QString message READ message WRITE setMessage)
+
+ /*!
+ \property MBubbleItem::commentsString
+ The number of comments received, displayed as part of the bubble.
+ */
+ Q_PROPERTY(QString commentsString READ commentsString WRITE setCommentsString)
+
+ /*!
+ \property MBubbleItem::thumbsUpString
+ The number of thumbs up received, displayed as part of the bubble.
+ */
+ Q_PROPERTY(QString thumbsUpString READ thumbsUpString WRITE setThumbsUpString)
+
+ /*!
+ The type determines if the message is incoming or outgoing, and the widget
+ may be styled differently based on this.
+ */
+ enum MessageType {
+ Incoming,
+ Outgoing
+ };
+
+public:
+
+ /*!
+ Constructs a MBubbleItem instance. The optional \a parent argument is passed to MWidgetController's constructor.
+ */
+ explicit MBubbleItem(QGraphicsItem *parent = 0);
+
+ /*!
+ Destroys the item.
+ */
+ virtual ~MBubbleItem();
+
+ /*!
+ Returns the image widget used for the avatar.
+
+ \sa setAvatar()
+ */
+ MImageWidget* avatar() const;
+
+ /*!
+ Returns the name of the message sender.
+
+ \sa setSenderName()
+ */
+ QString senderName();
+
+ /*!
+ Returns the time stamp string displayed as part of the bubble.
+
+ \sa setSenderName()
+ */
+ QString timeStamp();
+
+ /*!
+ Returns the body of the message.
+
+ \sa setMessage()
+ */
+ QString message();
+
+ /*!
+ Returns the type of the message.
+
+ \sa setMessageType()
+ */
+ MessageType messageType() const;
+
+ /*!
+ Returns the central widget.
+
+ For performance reasons, the central widget is not created by default.
+ If the central widget has not been previously set the function returns 0.
+
+ \sa setCentralWidget()
+ */
+ QGraphicsWidget* centralWidget();
+
+ /*!
+ Returns the stack of informational widgets attached to the bubble.
+
+ \sa addInformationWidget()
+ \sa setCommentsString()
+ \sa setThumbsUpString()
+ */
+ QStack<QGraphicsWidget*> informationWidgets();
+
+ /*!
+ Returns the string for the number of comments received for the bubble.
+
+ \sa setCommentsString();
+ */
+ QString commentsString();
+
+ /*!
+ Returns the string for the number of thumbs-up received for the bubble.
+
+ \sa setThumbsUpString()
+ */
+ QString thumbsUpString();
+
+Q_SIGNALS:
+ /*!
+ This signal is emitted if a link pointing to \a url in the message is clicked.
+
+ Links can be created using HTML notation, see the MLabel documentation for
+ further information.
+ */
+ void linkActivated(const QString &url);
+
+ /*!
+ This signal is emitted if the bubble that contains the message is clicked.
+ */
+ void bubbleClicked();
+
+public Q_SLOTS:
+
+ /**
+ Replaces the current avatar image widget attached to the bubble with \a avatar
+
+ \sa avatar()
+ */
+ void setAvatar(MImageWidget* avatar);
+
+ /*!
+ Sets the avatar image to display the \a pixmap
+
+ \sa avatar()
+ */
+ void setAvatar(const QPixmap &pixmap);
+
+ /**
+ Sets the name of the message sender to \a name
+
+ \sa senderName()
+ */
+ void setSenderName(const QString &name);
+
+ /**
+ Sets the time stamp string of the message to \a timeStamp
+
+ \sa timeStamp()
+ */
+ void setTimeStamp(const QString &timeStamp);
+
+ /**
+ Sets the body of the message to \a message
+
+ \sa message()
+ */
+ void setMessage(const QString &message);
+
+ /**
+ Sets type of the message (incoming or outgoing) to \a messageType.
+
+ \sa messageType()
+ */
+
+ void setMessageType(MessageType messageType);
+
+ /**
+ Sets the \a centralWidget
+
+ The central widget is the attachment point for application specific content
+ inside the bubble item.
+
+ Example:
+ \code
+ MBubbleItem *bubble = new MBubbleItem();
+ MWidget *container = new MWidget();
+ MImageWidget *image1 = new MImageWidget("foo");
+ MImageWidget *image2 = new MImageWidget("bar");
+ QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical, container);
+ layout->addItem(image1);
+ layout->addItem(image2);
+
+ bubble->setCentralWidget(container);
+ \endcode
+
+ \sa centralWidget()
+ */
+ void setCentralWidget(QGraphicsWidget* centralWidget);
+
+ /**
+ Adds the \a widget to the informational widgets stack.
+
+ Informational widgets are displayed as part of the message bubble main body.
+ There are two pre-defined information widgets for the bubble: number of comments and thumbs up received.
+
+ \sa informationWidgets()
+ \sa setCommentsString();
+ \sa setThumbsUpString();
+ */
+ void addInformationWidget(QGraphicsWidget* widget);
+
+ /**
+ Sets the string for number of comments received for the bubble item to \a comments.
+
+ This is a convenience method that creates widgets on the informationWidgets() stack
+ for showing the number of comments attached to the bubble item. An example of
+ a string could "+3", but it is up to the application to determine how the string
+ is formatted.
+
+ \sa commentsString()
+ */
+ void setCommentsString(const QString &comments);
+
+ /**
+ Sets the string for number of thumbs up received for the bubble item to \a thumbsUp
+
+ This is a convenience method that creates widgets on the informationWidgets() stack
+ for showing the number of "thumbs up" attached to the bubble item. An example of
+ a string could "+3", but it is up to the application to determine how the string
+ is formatted.
+
+ \sa thumbsUpString()
+ */
+ void setThumbsUpString(const QString &thumbsUp);
+
+private:
+ //! \internal
+ MBubbleItem(MBubbleItemPrivate *dd, MBubbleItemModel *model, QGraphicsItem *parent);
+ //! \internal_end
+
+ Q_DISABLE_COPY(MBubbleItem)
+ Q_DECLARE_PRIVATE(MBubbleItem)
+};
+
+#endif
diff --git a/src/corelib/widgets/mbubbleitem_p.h b/src/corelib/widgets/mbubbleitem_p.h
new file mode 100644
index 00000000..d7c3a772
--- /dev/null
+++ b/src/corelib/widgets/mbubbleitem_p.h
@@ -0,0 +1,38 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MBUBBLEITEM_P_H__
+#define MBUBBLEITEM_P_H__
+
+#include "private/mwidgetcontroller_p.h"
+
+class MBubbleItem;
+
+class MBubbleItemPrivate : public MWidgetControllerPrivate
+{
+ Q_DECLARE_PUBLIC(MBubbleItem)
+
+public:
+ MBubbleItemPrivate();
+ virtual ~MBubbleItemPrivate();
+
+ void init();
+};
+
+#endif
diff --git a/src/corelib/widgets/mbubbleitemmodel.cpp b/src/corelib/widgets/mbubbleitemmodel.cpp
new file mode 100644
index 00000000..ab3c88b3
--- /dev/null
+++ b/src/corelib/widgets/mbubbleitemmodel.cpp
@@ -0,0 +1,20 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "mbubbleitemmodel.h"
diff --git a/src/corelib/widgets/mbubbleitemmodel.h b/src/corelib/widgets/mbubbleitemmodel.h
new file mode 100644
index 00000000..7b6d52ee
--- /dev/null
+++ b/src/corelib/widgets/mbubbleitemmodel.h
@@ -0,0 +1,91 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MBUBBLEITEMMODEL_H__
+#define MBUBBLEITEMMODEL_H__
+
+#include <mwidgetmodel.h>
+#include <QStack>
+
+class QPixmap;
+class QGraphicsWidget;
+class MImageWidget;
+
+class M_EXPORT MBubbleItemModel : public MWidgetModel
+{
+ Q_OBJECT
+ M_MODEL_INTERNAL(MBubbleItemModel)
+
+public:
+ /*!
+ \property MBubbleItemModel::avatar
+ \brief Avatar.
+ */
+ M_MODEL_PTR_PROPERTY(MImageWidget *, avatar, Avatar, true, 0)
+
+ /*!
+ \property MBubbleItemModel::senderName
+ \brief Sender name.
+ */
+ M_MODEL_PROPERTY(QString, senderName, SenderName, true, QString())
+
+ /*!
+ \property MBubbleItemModel::timeStamp
+ \brief Timestamp.
+ */
+ M_MODEL_PROPERTY(QString, timeStamp, TimeStamp, true, QString())
+
+ /*!
+ \property MBubbleItemModel::message
+ \brief Message.
+ */
+ M_MODEL_PROPERTY(QString, message, Message, true, QString())
+
+ /*!
+ \property MBubbleItemModel::centralWidget
+ \brief CentralWidget.
+ */
+ M_MODEL_PTR_PROPERTY(QGraphicsWidget *, centralWidget, CentralWidget, true, NULL)
+
+ /*!
+ \property MBubbleItemModel::items
+ \brief Stack of items shown in the header, for example icons
+ */
+ M_MODEL_PROPERTY(QStack<QGraphicsWidget*>, informationWidgets, InformationWidgets, true, QStack<QGraphicsWidget*>())
+
+ /*!
+ \property MBubbleItemModel::type
+ \brief centralWidget.
+ */
+ M_MODEL_PTR_PROPERTY(int, messageType, MessageType, true, NULL)
+
+ /*!
+ \property MBubbleItemModel::commentsString
+ \brief Comment string.
+ */
+ M_MODEL_PROPERTY(QString, commentsString, CommentsString, true, QString())
+
+ /*!
+ \property MBubbleItemModel::thumbsUpString
+ \brief Thumbs up string.
+ */
+ M_MODEL_PROPERTY(QString, thumbsUpString, ThumbsUpString, true, QString())
+};
+
+#endif
diff --git a/src/corelib/widgets/mcontentitem.cpp b/src/corelib/widgets/mcontentitem.cpp
index c06b4e6e..ecc33971 100644
--- a/src/corelib/widgets/mcontentitem.cpp
+++ b/src/corelib/widgets/mcontentitem.cpp
@@ -69,6 +69,11 @@ QImage MContentItem::image() const
return d->image;
}
+QString MContentItem::imageID() const
+{
+ return model()->itemImageID();
+}
+
QString MContentItem::title() const
{
return model()->title();
@@ -103,11 +108,12 @@ void MContentItem::setImage(const QImage &image)
model()->setItemImage(d->image);
}
-void MContentItem::setImage(const QString &id)
+void MContentItem::setImageID(const QString &id, const QSize &size)
{
- Q_D(MContentItem);
- d->imageID = id;
- model()->setItemImageID(d->imageID);
+ model()->beginTransaction();
+ model()->setItemImageID(id);
+ model()->setItemImageSize(size);
+ model()->commitTransaction();
}
void MContentItem::setTitle(const QString &text)
@@ -153,6 +159,14 @@ void MContentItem::setOptionalImage(const QImage &image)
model()->setOptionalImage(d->optionalImage);
}
+void MContentItem::setOptionalImageID(const QString &id, const QSize &size)
+{
+ model()->beginTransaction();
+ model()->setOptionalImageID(id);
+ model()->setOptionalImageSize(size);
+ model()->commitTransaction();
+}
+
QPixmap MContentItem::optionalPixmap() const
{
Q_D(const MContentItem);
@@ -165,6 +179,11 @@ QImage MContentItem::optionalImage() const
return d->optionalImage;
}
+QString MContentItem::optionalImageID() const
+{
+ return model()->optionalImageID();
+}
+
void MContentItem::setAdditionalItem(MWidget* widget)
{
model()->setAdditionalItem(widget);
diff --git a/src/corelib/widgets/mcontentitem.h b/src/corelib/widgets/mcontentitem.h
index 7734375a..83b3dd8a 100644
--- a/src/corelib/widgets/mcontentitem.h
+++ b/src/corelib/widgets/mcontentitem.h
@@ -126,6 +126,12 @@ public:
Q_PROPERTY(QImage image READ image WRITE setImage)
/*!
+ \property MContentItem::imageID
+ \brief image from theme which will be displayed
+ */
+ Q_PROPERTY(QString imageID READ imageID WRITE setImageID)
+
+ /*!
\property MContentItem::title
\brief See MContentItemModel::title
*/
@@ -145,6 +151,12 @@ public:
Q_PROPERTY(QImage optionalImage READ optionalImage WRITE setOptionalImage)
+ /*!
+ \property MContentItem::optionalImage
+ \brief image from theme which will be displayed as "optional image"
+ */
+ Q_PROPERTY(QString optionalImageID READ optionalImageID WRITE setOptionalImageID)
+
public:
/*!
@@ -172,6 +184,12 @@ public:
QImage image() const;
/*!
+ \brief Get the thumbnail image theme-id
+ \return id
+ */
+ QString imageID() const;
+
+ /*!
\brief Get the title.
\return title text string.
*/
@@ -213,6 +231,12 @@ public:
*/
QImage optionalImage() const;
+ /*!
+ \brief Get the optional image theme-id
+ \return id
+ */
+ QString optionalImageID() const;
+
public Q_SLOTS:
/**
\brief Sets thumbnail pixmap.
@@ -229,8 +253,9 @@ public Q_SLOTS:
/**
\brief Sets thumbnail image.
\param id, image id in theme system.
+ \param size, requested size of the icon
*/
- void setImage(const QString &id);
+ void setImageID(const QString &id, const QSize &size = QSize());
/**
\brief Set title text. This is first line.
@@ -284,6 +309,13 @@ public Q_SLOTS:
*/
void setOptionalImage(const QImage& image);
+ /**
+ \brief Sets optional image (Icon).
+ \param id, image id in theme system.
+ \param s, requested size of the icon
+ */
+ void setOptionalImageID(const QString &id, const QSize &s = QSize());
+
/*!
\brief Makes content item to send clicked() signal.
*/
diff --git a/src/corelib/widgets/mcontentitem_p.h b/src/corelib/widgets/mcontentitem_p.h
index 0f9c4be4..65f81a74 100644
--- a/src/corelib/widgets/mcontentitem_p.h
+++ b/src/corelib/widgets/mcontentitem_p.h
@@ -33,7 +33,6 @@ public:
QPixmap pixmap;
QImage image;
- QString imageID;
QPixmap optionalPixmap;
QImage optionalImage;
MLabel* smallText;
diff --git a/src/corelib/widgets/mcontentitemmodel.h b/src/corelib/widgets/mcontentitemmodel.h
index 6a182ac5..4e852bd6 100644
--- a/src/corelib/widgets/mcontentitemmodel.h
+++ b/src/corelib/widgets/mcontentitemmodel.h
@@ -75,11 +75,25 @@ public:
*/
M_MODEL_PROPERTY(QImage, itemImage, ItemImage, false, QImage())
- M_MODEL_PROPERTY(QImage, itemQImage, ItemQImage, false, QImage())
+ /*!
+ \property MContentItemModel::itemImageID
+ \brief Item thumbnail theme ID.
+ \sa MContentItemView
+ */
M_MODEL_PROPERTY(QString, itemImageID, ItemImageID, true, QString())
/*!
+ \property MContentItemModel::itemImageSize
+ \brief Contains size of the thumbnail (set thumbnail from theme using itemImageID).
+
+ \sa MContentItemView
+ */
+ M_MODEL_PROPERTY(QSize, itemImageSize, ItemImageSize, true, QSize())
+
+ M_MODEL_PROPERTY(QImage, itemQImage, ItemQImage, false, QImage())
+
+ /*!
\property MContentItemModel::selected
\brief Contains selection status of item.
*/
@@ -98,6 +112,22 @@ public:
M_MODEL_PROPERTY(QImage, optionalImage, OptionalImage, false, QImage())
/*!
+ \property MContentItemModel::optionalImageID
+ \brief Contains theme ID of optional icon on the right-hand side.
+
+ \sa MContentItemView
+ */
+ M_MODEL_PROPERTY(QString, optionalImageID, OptionalImageID, true, QString())
+
+ /*!
+ \property MContentItemModel::optionalImageSize
+ \brief Contains size of the optional icon (set optional icon from theme with optionalImageID).
+
+ \sa MContentItemView
+ */
+ M_MODEL_PROPERTY(QSize, optionalImageSize, OptionalImageSize, true, QSize())
+
+ /*!
\property MContentItemModel::additionalItem
\brief MWidget as e.g. progress bar, visible below the title.
In case there is already a subtitle it will be replaced.
diff --git a/src/corelib/widgets/mlabel.cpp b/src/corelib/widgets/mlabel.cpp
index 8e7d04e1..e4c3dfdc 100644
--- a/src/corelib/widgets/mlabel.cpp
+++ b/src/corelib/widgets/mlabel.cpp
@@ -32,13 +32,11 @@ M_REGISTER_WIDGET(MLabel)
MLabel::MLabel(QGraphicsItem *parent, MLabelModel *model) :
MWidgetController(new MLabelPrivate, model == NULL ? new MLabelModel : model, parent)
{
- grabGesture(Qt::TapAndHoldGesture);
}
MLabel::MLabel(QString const &text, QGraphicsItem *parent) :
MWidgetController(new MLabelPrivate, new MLabelModel, parent)
{
- grabGesture(Qt::TapAndHoldGesture);
setText(text);
}
diff --git a/src/corelib/widgets/mlist.cpp b/src/corelib/widgets/mlist.cpp
index decec0f3..fea4b469 100644
--- a/src/corelib/widgets/mlist.cpp
+++ b/src/corelib/widgets/mlist.cpp
@@ -29,16 +29,18 @@
#include "mlist_p.h"
#include "mlabel.h"
#include "mpannableviewport.h"
+#include "mlistfilter.h"
#include "mwidgetcreator.h"
M_REGISTER_WIDGET(MList)
- MListPrivate::MListPrivate() : selectionMode(MList::NoSelection)
+MListPrivate::MListPrivate() : selectionMode(MList::NoSelection)
{
}
MListPrivate::~MListPrivate()
{
+ delete listFilter;
}
void MListPrivate::init()
@@ -47,6 +49,8 @@ void MListPrivate::init()
q->setSelectionMode(MList::NoSelection);
q->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); //grow to available space in both directions
+ listFilter = new MListFilter(q);
+ listFilter->setEnabled(false);
}
MList::MList(MListPrivate *dd, MListModel *model, QGraphicsItem *parent)
@@ -88,6 +92,10 @@ void MList::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
void MList::setItemModel(QAbstractItemModel *itemModel)
{
+ Q_D(MList);
+ if(d->listFilter->enabled())
+ itemModel = d->listFilter->updateItemModel(itemModel);
+
setSelectionModel(NULL);
if (itemModel)
@@ -229,3 +237,17 @@ MList::SelectionMode MList::selectionMode() const
Q_D(const MList);
return d->selectionMode;
}
+
+MListFilter *MList::filtering() const
+{
+ Q_D(const MList);
+ return d->listFilter;
+}
+
+void MList::keyPressEvent(QKeyEvent *event)
+{
+ Q_D(MList);
+
+ if(d->listFilter->enabled())
+ d->listFilter->keyPressEvent(event);
+}
diff --git a/src/corelib/widgets/mlist.h b/src/corelib/widgets/mlist.h
index f525db0a..91a8cd77 100644
--- a/src/corelib/widgets/mlist.h
+++ b/src/corelib/widgets/mlist.h
@@ -31,6 +31,7 @@ class QItemSelectionModel;
class QAbstractItemModel;
class QModelIndex;
class MCellCreator;
+class MListFilter;
/*!
\class MList
@@ -319,6 +320,11 @@ public:
*/
bool indexVisible();
+ /*!
+ \return filter which implements live filtering of list contents.
+ */
+ MListFilter *filtering() const;
+
public Q_SLOTS:
/*!
\brief Convenience function - Select the given item.
@@ -392,6 +398,11 @@ protected:
*/
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
+ /*!
+ Handling of key events
+ */
+ virtual void keyPressEvent(QKeyEvent *event);
+
private:
Q_DECLARE_PRIVATE(MList)
Q_DISABLE_COPY(MList)
diff --git a/src/corelib/widgets/mlist_p.h b/src/corelib/widgets/mlist_p.h
index fcd917dc..829e556e 100644
--- a/src/corelib/widgets/mlist_p.h
+++ b/src/corelib/widgets/mlist_p.h
@@ -32,6 +32,7 @@
class MPannableViewport;
class MWidget;
+class MListFilter;
#include "mlist.h"
@@ -48,6 +49,7 @@ public:
MList::SelectionMode selectionMode;
+ MListFilter* listFilter;
public slots:
/*!
* \brief This slot is called when items are changed in the model. The changed items are those
diff --git a/src/corelib/widgets/mlistfilter.cpp b/src/corelib/widgets/mlistfilter.cpp
new file mode 100644
index 00000000..828d8ba0
--- /dev/null
+++ b/src/corelib/widgets/mlistfilter.cpp
@@ -0,0 +1,167 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "mlistfilter.h"
+#include "mlistfilter_p.h"
+
+#include <MList>
+#include <MTextEdit>
+#include <MPannableViewport>
+
+#include <QKeyEvent>
+#include <QPointF>
+#include <MSortFilterProxyModel>
+
+MListFilterPrivate::MListFilterPrivate()
+: cachedPannableViewport(NULL), q_ptr(NULL)
+{
+}
+
+MListFilterPrivate::~MListFilterPrivate()
+{
+}
+
+void MListFilterPrivate::init()
+{
+ Q_Q(MListFilter);
+ connect(q->list, SIGNAL(panningStarted()), this, SLOT(panningStarted()));
+}
+
+void MListFilterPrivate::panningStarted()
+{
+ // When list's pannable viewport can be resolved for the first time,
+ // connect a signal to get viewport position changes
+ if(!cachedPannableViewport && pannableViewport()) {
+ MPannableViewport* viewport = pannableViewport();
+ connect(viewport, SIGNAL(positionChanged(QPointF)), this, SLOT(viewportPositionChanged(QPointF)));
+ }
+ panningStartPos = viewportPos;
+}
+
+void MListFilterPrivate::viewportPositionChanged(const QPointF& pos)
+{
+ Q_Q(MListFilter);
+
+ viewportPos = pos;
+ if(q->filteringEnabled && viewportPos.y() < 0 && panningStartPos.y() == 0) {
+ emit q->listPannedUpFromTop();
+ }
+}
+
+MPannableViewport* MListFilterPrivate::pannableViewport()
+{
+ Q_Q(MListFilter);
+
+ if(!cachedPannableViewport) {
+ QGraphicsWidget* parentWidget = q->list->parentWidget();
+ while(parentWidget && !cachedPannableViewport) {
+ cachedPannableViewport = qobject_cast<MPannableViewport*>(parentWidget);
+ parentWidget = parentWidget->parentWidget();
+ }
+ }
+ return cachedPannableViewport;
+}
+
+MListFilter::MListFilter(MList *parent)
+: list(parent), filterEditor(NULL), filterProxy(NULL), filteringEnabled(false), d_ptr(new MListFilterPrivate)
+{
+ Q_D(MListFilter);
+
+ d->q_ptr = this;
+ d->init();
+
+ filterProxy = new MSortFilterProxyModel(parent);
+ filterEditor = new MTextEdit(MTextEditModel::SingleLine, "", parent);
+ filterEditor->setVisible(false);
+
+ connect(filterEditor, SIGNAL(textChanged()), this, SLOT(editorTextChanged()));
+}
+
+MListFilter::~MListFilter()
+{
+}
+
+void MListFilter::setEnabled(bool enabled)
+{
+ filteringEnabled = enabled;
+
+ if(enabled) {
+ filterProxy->setSourceModel(list->itemModel());
+ list->setItemModel(filterProxy);
+ list->setFlag(QGraphicsItem::ItemIsFocusable, true);
+ list->setFocusPolicy(Qt::StrongFocus);
+ list->setFocus();
+ } else {
+ list->setFlag(QGraphicsItem::ItemIsFocusable, false);
+ if(filterProxy->sourceModel())
+ list->setItemModel(filterProxy->sourceModel());
+ filterProxy->setSourceModel(NULL);
+ }
+}
+
+QAbstractItemModel* MListFilter::updateItemModel(QAbstractItemModel *itemModel)
+{
+ QAbstractItemModel* proxyModel = itemModel;
+ if(filteringEnabled && itemModel != filterProxy) {
+ filterProxy->setSourceModel(itemModel);
+ proxyModel = filterProxy;
+ }
+ return proxyModel;
+}
+
+bool MListFilter::enabled()
+{
+ return filteringEnabled;
+}
+
+MTextEdit *MListFilter::editor() const
+{
+ return filterEditor;
+}
+
+MSortFilterProxyModel *MListFilter::proxy() const
+{
+ return filterProxy;
+}
+
+void MListFilter::setFilterRole(int role)
+{
+ filterProxy->setFilterRole(role);
+}
+
+int MListFilter::filterRole() const
+{
+ return filterProxy->filterRole();
+}
+
+void MListFilter::keyPressEvent(QKeyEvent *event)
+{
+ if(filteringEnabled && event->text()[0].isPrint()) {
+ filterEditor->insert(event->text());
+ filterEditor->setFocus();
+ }
+}
+
+void MListFilter::editorTextChanged()
+{
+ QRegExp::PatternSyntax syntax = QRegExp::RegExp;
+ Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive;
+ QRegExp regExp(filterEditor->text(), caseSensitivity, syntax);
+ filterProxy->setFilterRegExp(regExp);
+}
diff --git a/src/corelib/widgets/mlistfilter.h b/src/corelib/widgets/mlistfilter.h
new file mode 100644
index 00000000..a6ab86f2
--- /dev/null
+++ b/src/corelib/widgets/mlistfilter.h
@@ -0,0 +1,127 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MLISTFILTER_H
+#define MLISTFILTER_H
+
+#include <QObject>
+#include "mexport.h"
+
+class MListFilterPrivate;
+class MList;
+class MTextEdit;
+class MSortFilterProxyModel;
+class QAbstractItemModel;
+class QKeyEvent;
+
+/*!
+ * \class MListFilter
+ * \brief MListFilter implements live filtering, for searching through the list content.
+ *
+ * MListFilter creates a text editor and an item proxy model to be used to filter MList items.
+ * Application is responsible of putting the text editor into layout.
+ *
+ */
+class M_EXPORT MListFilter : public QObject
+{
+ Q_OBJECT
+
+public:
+
+ /*!
+ * \brief Default constructor. Constructs the list filter.
+ * \param parent The list controller of the list filter content.
+ */
+ MListFilter(MList *parent = NULL);
+
+ /*!
+ * \brief Default destructor. Cleanups and destroys the list filter.
+ */
+ virtual ~MListFilter();
+
+ /*!
+ * \brief Sets live filtering to enabled or disabled. When
+ * live filtering is enabled list uses QSortFilterProxyModel
+ * as item model. By default live filtering is disabled.
+ */
+ void setEnabled(bool enabled);
+
+ /*!
+ * \return <code>true</code> if live filtering is enabled, otherwise false
+ */
+ bool enabled();
+
+ /*!
+ * \return text editor used in live filtering
+ */
+ MTextEdit *editor() const;
+
+ /*!
+ * \return proxy model used in live filtering
+ */
+ MSortFilterProxyModel *proxy() const;
+
+ /*!
+ * \brief Sets filter role to be used in live filtering proxy. Default is Qt::DisplayRole
+ */
+ void setFilterRole(int role);
+
+ /*!
+ * \return filter role used in live filtering proxy. Default is Qt::DisplayRole
+ */
+ int filterRole() const;
+
+ /*!
+ * \brief Handling of key events - used to pass key presses to text editor when
+ * live filtering is enabled
+ */
+ void keyPressEvent(QKeyEvent *event);
+
+public Q_SLOTS:
+
+ /*!
+ * \brief Handles text changes in live filtering text editor. Updates live filtering
+ * model regular expression.
+ */
+ void editorTextChanged();
+
+Q_SIGNALS:
+
+ /*!
+ * \brief Emitted when list is panned up starting from top position. This signal can
+ * be used in applications as a starter for list filtering with virtual keyboard.
+ */
+ void listPannedUpFromTop();
+
+protected:
+ QAbstractItemModel *updateItemModel(QAbstractItemModel* itemModel);
+
+private:
+ Q_DISABLE_COPY(MListFilter)
+ Q_DECLARE_PRIVATE(MListFilter)
+ friend class MList;
+
+ MList *list;
+ MTextEdit *filterEditor;
+ MSortFilterProxyModel *filterProxy;
+ bool filteringEnabled;
+ MListFilterPrivate *d_ptr;
+};
+
+#endif
diff --git a/src/corelib/widgets/mlistfilter_p.h b/src/corelib/widgets/mlistfilter_p.h
new file mode 100644
index 00000000..05078ed4
--- /dev/null
+++ b/src/corelib/widgets/mlistfilter_p.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MLISTFILTER_P_H
+#define MLISTFILTER_P_H
+
+#include <QObject>
+#include <QPointF>
+#include "mlistfilter.h"
+
+class MPannableViewport;
+
+class MListFilterPrivate : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PUBLIC(MListFilter)
+
+public:
+ MListFilterPrivate();
+ virtual ~MListFilterPrivate();
+ void init();
+
+public Q_SLOTS:
+ void panningStarted();
+ void viewportPositionChanged(const QPointF& pos);
+
+private:
+ MPannableViewport* pannableViewport();
+
+private:
+ QPointF viewportPos;
+ QPointF panningStartPos;
+ MPannableViewport *cachedPannableViewport;
+ MListFilter *q_ptr;
+};
+
+#endif
diff --git a/src/corelib/widgets/mlistitem.cpp b/src/corelib/widgets/mlistitem.cpp
new file mode 100644
index 00000000..1c58f913
--- /dev/null
+++ b/src/corelib/widgets/mlistitem.cpp
@@ -0,0 +1,51 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "mlistitem.h"
+#include "mlistitem_p.h"
+
+#include "mwidgetcreator.h"
+
+M_REGISTER_WIDGET(MListItem)
+
+MListItemPrivate::MListItemPrivate()
+ : MWidgetControllerPrivate()
+{
+}
+
+MListItemPrivate::~MListItemPrivate()
+{
+}
+
+MListItem::MListItem(QGraphicsItem *parent)
+ : MWidgetController(new MListItemPrivate, new MListItemModel, parent)
+{
+}
+
+MListItem::~MListItem()
+{
+}
+
+void MListItem::click()
+{
+ emit clicked();
+}
+
+
+
diff --git a/src/corelib/widgets/mlistitem.h b/src/corelib/widgets/mlistitem.h
new file mode 100644
index 00000000..61d28c35
--- /dev/null
+++ b/src/corelib/widgets/mlistitem.h
@@ -0,0 +1,72 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MLISTITEM_H
+#define MLISTITEM_H
+
+#include <MWidgetController>
+
+#include "mlistitemmodel.h"
+
+class MLayout;
+class MListItemPrivate;
+
+/*!
+ \class MListItem
+ \brief MListItem is a simple widget for displaying content with basic functionality
+ like background rendering with differend object modes.
+
+ \ingroup widgets
+
+ \sa MListItemView
+*/
+class M_EXPORT MListItem : public MWidgetController
+{
+ Q_OBJECT
+ M_CONTROLLER(MListItem)
+
+public:
+ /*!
+ \brief Constructs a MListItem with a \a parent.
+ \param parent Parent object.
+ */
+ MListItem(QGraphicsItem *parent = 0);
+ /*!
+ \brief Destructor.
+ */
+ virtual ~MListItem();
+
+public Q_SLOTS:
+ /*!
+ \brief Makes the list cell to send clicked() signal.
+ */
+ void click();
+
+Q_SIGNALS:
+ /*!
+ \brief The signal is emitted when the list cell is clicked.
+ */
+ void clicked();
+
+private:
+ Q_DECLARE_PRIVATE(MListItem)
+ Q_DISABLE_COPY(MListItem)
+};
+
+#endif // MLISTITEM_H
diff --git a/src/corelib/widgets/mlistitem_p.h b/src/corelib/widgets/mlistitem_p.h
new file mode 100644
index 00000000..5f71dbc9
--- /dev/null
+++ b/src/corelib/widgets/mlistitem_p.h
@@ -0,0 +1,37 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MLISTITEM_P_H
+#define MLISTITEM_P_H
+
+#include <mwidgetcontroller_p.h>
+
+#include "mlistitem.h"
+
+class MListItemPrivate : MWidgetControllerPrivate
+{
+public:
+ MListItemPrivate();
+ virtual ~MListItemPrivate();
+
+private:
+ Q_DECLARE_PUBLIC(MListItem)
+};
+
+#endif // MLISTITEM_P_H
diff --git a/src/corelib/widgets/mlistitemmodel.h b/src/corelib/widgets/mlistitemmodel.h
new file mode 100644
index 00000000..22bc3237
--- /dev/null
+++ b/src/corelib/widgets/mlistitemmodel.h
@@ -0,0 +1,30 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MLISTITEMMODEL_H
+#define MLISTITEMMODEL_H
+
+#include <MWidgetModel>
+
+class M_EXPORT MListItemModel : public MWidgetModel
+{
+ M_MODEL(MListItemModel)
+};
+
+#endif // MLISTITEMMODEL_H
diff --git a/src/corelib/widgets/mnavigationbar.h b/src/corelib/widgets/mnavigationbar.h
index f77dc922..df53674d 100644
--- a/src/corelib/widgets/mnavigationbar.h
+++ b/src/corelib/widgets/mnavigationbar.h
@@ -56,7 +56,7 @@ public:
virtual ~MNavigationBar();
/**
- * Returns the iconID of the icon of the view menu button.
+ * Returns the iconID of the icon of the application menu button.
*/
QString viewMenuIconID() const;
@@ -90,7 +90,7 @@ public Q_SLOTS:
void setViewMenuDescription(const QString &text);
/**
- * Sets the new icon of the view menu button.
+ * Sets the new icon of the application menu button.
* \param the id of the icon that should be shown.
*/
void setViewMenuIconID(const QString &id);
diff --git a/src/corelib/widgets/mpannableviewport.cpp b/src/corelib/widgets/mpannableviewport.cpp
index ac15bcb6..fc789a9a 100644
--- a/src/corelib/widgets/mpannableviewport.cpp
+++ b/src/corelib/widgets/mpannableviewport.cpp
@@ -361,6 +361,21 @@ void MPannableViewport::updateGeometry()
MPannableWidget::updateGeometry();
}
+void MPannableViewport::updateData(const QList<const char *> &modifications)
+{
+ Q_D(MPannableViewport);
+ const char *member;
+
+ foreach(member, modifications) {
+ if (member == MPannableWidgetModel::Enabled) {
+ if (isEnabled())
+ d->viewportLayout->setPanningDirections(panDirection());
+ else
+ d->viewportLayout->setPanningDirections(0);
+ }
+ }
+}
+
void MPannableViewport::setPositionIndicator(MPositionIndicator *positionIndicator)
{
Q_D(MPannableViewport);
diff --git a/src/corelib/widgets/mpannableviewport.h b/src/corelib/widgets/mpannableviewport.h
index dfcaf680..d345e7f3 100644
--- a/src/corelib/widgets/mpannableviewport.h
+++ b/src/corelib/widgets/mpannableviewport.h
@@ -168,6 +168,7 @@ public:
void setPanDirection(const Qt::Orientations &panDirection);
void resizeEvent(QGraphicsSceneResizeEvent *event);
void updateGeometry();
+ void updateData(const QList<const char *> &modifications);
//! \reimp_end
Q_SIGNALS:
diff --git a/src/corelib/widgets/mpannableviewportlayout.cpp b/src/corelib/widgets/mpannableviewportlayout.cpp
index c56b5a82..f3e54bff 100644
--- a/src/corelib/widgets/mpannableviewportlayout.cpp
+++ b/src/corelib/widgets/mpannableviewportlayout.cpp
@@ -53,11 +53,13 @@ void MPannableViewportLayout::setGeometry(const QRectF &rect)
if (pannedWidget) {
if (panningDirections.testFlag(Qt::Horizontal)) {
- unboundedRect.setWidth(pannedWidget->effectiveSizeHint(Qt::PreferredSize).width());
+ qreal width = qMax(rect.width(), pannedWidget->effectiveSizeHint(Qt::PreferredSize).width());
+ unboundedRect.setWidth(width);
}
if (panningDirections.testFlag(Qt::Vertical)) {
- unboundedRect.setHeight(pannedWidget->effectiveSizeHint(Qt::PreferredSize).height());
+ qreal height = qMax(rect.height(), pannedWidget->effectiveSizeHint(Qt::PreferredSize).height());
+ unboundedRect.setHeight(height);
}
}
diff --git a/src/corelib/widgets/mpannablewidget.cpp b/src/corelib/widgets/mpannablewidget.cpp
index 441bb13d..8f273630 100644
--- a/src/corelib/widgets/mpannablewidget.cpp
+++ b/src/corelib/widgets/mpannablewidget.cpp
@@ -180,8 +180,6 @@ MPannableWidgetPrivate::~MPannableWidgetPrivate()
void MPannableWidgetPrivate::translateEventToItemCoordinates(const QGraphicsItem *srcItem, const QGraphicsItem *destItem, QGraphicsSceneMouseEvent *event)
{
- //we only handle left button here. Every other buttons are filtered out in the glassMousePressEvents();
- event->setButtonDownPos(Qt::LeftButton, destItem->mapFromItem(srcItem, event->buttonDownPos(Qt::LeftButton)));
event->setLastPos(destItem->mapFromItem(srcItem, event->lastPos()));
event->setPos(destItem->mapFromItem(srcItem, event->pos()));
}
@@ -189,6 +187,13 @@ void MPannableWidgetPrivate::translateEventToItemCoordinates(const QGraphicsItem
void MPannableWidgetPrivate::deliverPressEvent()
{
Q_Q(MPannableWidget);
+
+ if (physics->inMotion())
+ {
+ physics->stop();
+ return;
+ }
+
glass->ungrabMouse();
q->resendEvent(&pressEvent);
mouseGrabber = q->scene()->mouseGrabberItem();
@@ -405,14 +410,7 @@ void MPannableWidget::glassMousePressEvent(QGraphicsSceneMouseEvent *event)
}
copyGraphicsSceneMouseEvent(d->pressEvent, *event);
- if (!d->physics->inMotion()) {
- // sending it now, we will send "cancel" if it will be needed.
- copyGraphicsSceneMouseEvent(d->pressEvent, *event);
- d->initialPressStartTimer();
-
- } else {
- d->physics->stop();
- }
+ d->initialPressStartTimer();
}
void MPannableWidget::glassMouseReleaseEvent(QGraphicsSceneMouseEvent *event)
@@ -467,8 +465,9 @@ void MPannableWidget::glassPanEvent(QGestureEvent *event, QPanGesture* panGestur
d->mouseGrabber = 0;
}
- d->physics->pointerPress(d->pressEvent.pos() + panGesture->offset());
- break;
+ d->physics->pointerPress(d->pressEvent.pos());
+ //Fallthough is intentionary, we need to handle the movement that
+ //is delivered with a started gesture.
case Qt::GestureUpdated:
d->physics->pointerMove(d->pressEvent.pos() + panGesture->offset());
break;
diff --git a/src/corelib/widgets/mphysics2dpanning.cpp b/src/corelib/widgets/mphysics2dpanning.cpp
index d3d3bfc8..77b3cfd2 100644
--- a/src/corelib/widgets/mphysics2dpanning.cpp
+++ b/src/corelib/widgets/mphysics2dpanning.cpp
@@ -23,9 +23,7 @@
#include "mphysics2dpanning.h"
#include "mphysics2dpanning_p.h"
-static const int PanningTimelineDuration = 1000000; /* in ms */
-static const int PanningTimelineInterval = 20; /* in ms */
-static const int PositionNoiseDampingDelta = 2; /* in px */
+static const int PositionNoiseDampingDelta = 2; /* in px */
MPhysics2DPanningPrivate::MPhysics2DPanningPrivate(MPhysics2DPanning *publicObject) :
enabled(true),
@@ -37,8 +35,7 @@ MPhysics2DPanningPrivate::MPhysics2DPanningPrivate(MPhysics2DPanning *publicObje
pointerSpringX(0.0),
pointerSpringY(0.0),
sceneLastPos(QPointF()),
- timeLine(new QTimeLine()),
- currFrame(0),
+ panningAnimation(new PanningAnimation),
pointerPressed(false),
pointerSpringK(0.0),
frictionC(0.0),
@@ -53,75 +50,68 @@ MPhysics2DPanningPrivate::MPhysics2DPanningPrivate(MPhysics2DPanning *publicObje
MPhysics2DPanningPrivate::~MPhysics2DPanningPrivate()
{
- delete timeLine;
+ delete panningAnimation;
}
-void MPhysics2DPanningPrivate::_q_integrator(int frame)
+void MPhysics2DPanningPrivate::_q_integrator(const QVariant &value)
{
Q_Q(MPhysics2DPanning);
+ Q_UNUSED(value);
qreal accX, accY;
qreal tempPosX;
qreal tempPosY;
- int i = 0;
tempPosX = posX;
tempPosY = posY;
- while (frame > currFrame) {
- if (panDirection.testFlag(Qt::Horizontal)) {
- q->integrateAxis(Qt::Horizontal,
- posX,
- velX,
- accX,
- pointerSpringX,
- pointerPressed
- );
- } else {
- posX = 0.0;
- velX = 0.0;
- accX = 0.0;
- }
+ if (panDirection.testFlag(Qt::Horizontal)) {
+ q->integrateAxis(Qt::Horizontal,
+ posX,
+ velX,
+ accX,
+ pointerSpringX,
+ pointerPressed
+ );
+ } else {
+ posX = 0.0f;
+ velX = 0.0f;
+ accX = 0.0f;
+ }
- if (panDirection.testFlag(Qt::Vertical)) {
- q->integrateAxis(Qt::Vertical,
- posY,
- velY,
- accY,
- pointerSpringY,
- pointerPressed
- );
+ if (panDirection.testFlag(Qt::Vertical)) {
+ q->integrateAxis(Qt::Vertical,
+ posY,
+ velY,
+ accY,
+ pointerSpringY,
+ pointerPressed
+ );
- } else {
- posY = 0.0;
- velY = 0.0;
- accY = 0.0;
- }
+ } else {
+ posY = 0.0f;
+ velY = 0.0f;
+ accY = 0.0f;
+ }
- // Checking if the viewport is currently dragged beyond it's borders and the integration should
- // continue even though the speed is low.
- bool inRangeX = (panDirection.testFlag(Qt::Horizontal) == false) ||
- (posX >= range.left() && posX <= range.right());
+ // Checking if the viewport is currently dragged beyond it's borders and the integration should
+ // continue even though the speed is low.
+ bool inRangeX = (panDirection.testFlag(Qt::Horizontal) == false) ||
+ (posX >= range.left() && posX <= range.right());
- bool inRangeY = (panDirection.testFlag(Qt::Vertical) == false) ||
- (posY >= range.top() && posY <= range.bottom());
+ bool inRangeY = (panDirection.testFlag(Qt::Vertical) == false) ||
+ (posY >= range.top() && posY <= range.bottom());
// Integration stop condition.
- if (inRangeX && inRangeY &&
- qAbs(accX) < 1 &&
- qAbs(accY) < 1 &&
- qAbs(velX) < 1 &&
- qAbs(velY) < 1 &&
- !pointerPressed) {
- timeLine->stop();
-
- emit q->panningStopped();
-
- break;
- }
-
- currFrame++;
- i++;
+ if (inRangeX && inRangeY &&
+ qAbs(accX) < 1 &&
+ qAbs(accY) < 1 &&
+ qAbs(velX) < 1 &&
+ qAbs(velY) < 1 &&
+ !pointerPressed) {
+ panningAnimation->stop();
+
+ emit q->panningStopped();
}
if (tempPosX != posX || tempPosY != posY) {
@@ -134,8 +124,7 @@ MPhysics2DPanning::MPhysics2DPanning(QObject *parent)
d_ptr(new MPhysics2DPanningPrivate(this))
{
Q_D(MPhysics2DPanning);
- connect(d->timeLine, SIGNAL(frameChanged(int)),
- this, SLOT(_q_integrator(int)));
+ connect(d->panningAnimation, SIGNAL(valueChanged(QVariant)), SLOT(_q_integrator(QVariant)));
}
@@ -221,20 +210,20 @@ void MPhysics2DPanning::start()
{
Q_D(MPhysics2DPanning);
if (!inMotion()) {
- d->velX = 0.0;
- d->velY = 0.0;
-
- d->timeLine->setDuration(PanningTimelineDuration);
- d->timeLine->setUpdateInterval(PanningTimelineInterval);
- d->timeLine->setFrameRange(0, 29999);
- d->timeLine->setCurrentTime(0);
- d->timeLine->setCurveShape(QTimeLine::LinearCurve);
- d->currFrame = 0;
- d->timeLine->start();
+ d->velX = 0.0f;
+ d->velY = 0.0f;
+
+ // Duration does not matter as we loop until the physics termination condition is hit
+ d->panningAnimation->setDuration(1000000);
+ d->panningAnimation->setLoopCount(-1);
+
+ d->panningAnimation->setStartValue(0.0f);
+ d->panningAnimation->setEndValue(1.0f);
+
+ d->panningAnimation->start();
}
}
-
void MPhysics2DPanning::stop()
{
Q_D(MPhysics2DPanning);
@@ -248,7 +237,7 @@ void MPhysics2DPanning::stop()
(d->posY >= d->range.top() && d->posY <= d->range.bottom());
if (inRangeX && inRangeY) {
- d->timeLine->stop();
+ d->panningAnimation->stop();
emit panningStopped();
}
}
@@ -320,7 +309,7 @@ bool MPhysics2DPanning::inMotion() const
{
Q_D(const MPhysics2DPanning);
- return (d->timeLine->state() == QTimeLine::Running);
+ return (d->panningAnimation->state() == QAbstractAnimation::Running);
}
@@ -334,8 +323,8 @@ void MPhysics2DPanning::pointerPress(const QPointF &pos)
d->pointerPressed = true;
d->sceneLastPos = pos;
- d->pointerSpringX = 0.0;
- d->pointerSpringY = 0.0;
+ d->pointerSpringX = 0.0f;
+ d->pointerSpringY = 0.0f;
}
@@ -466,11 +455,11 @@ void MPhysics2DPanning::integrateAxis(Qt::Orientation orientation,
} else {
- acceleration = force;
+ acceleration = force - pointerDifference;
velocity += acceleration;
position += velocity;
- pointerDifference += velocity;
+ pointerDifference = 0;
}
}
diff --git a/src/corelib/widgets/mphysics2dpanning.h b/src/corelib/widgets/mphysics2dpanning.h
index a4955c15..0ae9d4b5 100644
--- a/src/corelib/widgets/mphysics2dpanning.h
+++ b/src/corelib/widgets/mphysics2dpanning.h
@@ -277,7 +277,7 @@ private:
Q_DISABLE_COPY(MPhysics2DPanning)
Q_DECLARE_PRIVATE(MPhysics2DPanning)
- Q_PRIVATE_SLOT(d_func(),void _q_integrator(int))
+ Q_PRIVATE_SLOT(d_func(),void _q_integrator(QVariant))
#ifdef UNIT_TEST
//! Test unit is defined as a friend of production code to access private members
diff --git a/src/corelib/widgets/mphysics2dpanning_p.h b/src/corelib/widgets/mphysics2dpanning_p.h
index 0c328eab..318c8c44 100644
--- a/src/corelib/widgets/mphysics2dpanning_p.h
+++ b/src/corelib/widgets/mphysics2dpanning_p.h
@@ -22,10 +22,16 @@
#include <QRectF>
#include <QPointF>
+#include <QVariantAnimation>
#include "mphysics2dpanning.h"
class QTimeLine;
+class PanningAnimation : public QVariantAnimation
+{
+ virtual void updateCurrentValue(const QVariant&) {}
+};
+
class MPhysics2DPanningPrivate
{
Q_DECLARE_PUBLIC(MPhysics2DPanning)
@@ -45,8 +51,7 @@ public:
qreal pointerSpringY;
QPointF sceneLastPos;
- QTimeLine *timeLine;
- int currFrame;
+ PanningAnimation *panningAnimation;
// Integration algorithm constants
bool pointerPressed;
@@ -57,7 +62,7 @@ public:
qreal borderFrictionC;
Qt::Orientations panDirection;
- void _q_integrator(int frame);
+ void _q_integrator(const QVariant &value);
protected:
MPhysics2DPanning *q_ptr;
diff --git a/src/corelib/widgets/mprogressindicator.h b/src/corelib/widgets/mprogressindicator.h
index c07589d2..6c0d3bd2 100644
--- a/src/corelib/widgets/mprogressindicator.h
+++ b/src/corelib/widgets/mprogressindicator.h
@@ -44,7 +44,7 @@ class MProgressIndicatorPrivate;
\li Application can decide to display label indicating the state of the operation next to indicator such as
"124 / 345 kt received." or "75%".
\li If the wait operation applies to the whole view, a spinner should be used to temporarily replace the view's
- view menu icon.
+ application menu icon.
\section ProgressIndicatorVariants Variants
\li \link MProgressIndicatorBarView Progress bar \endlink
diff --git a/src/corelib/widgets/msortfilterproxymodel.cpp b/src/corelib/widgets/msortfilterproxymodel.cpp
new file mode 100644
index 00000000..15f77e6d
--- /dev/null
+++ b/src/corelib/widgets/msortfilterproxymodel.cpp
@@ -0,0 +1,38 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "msortfilterproxymodel.h"
+
+MSortFilterProxyModel::MSortFilterProxyModel(QObject *parent)
+ : QSortFilterProxyModel(parent)
+{
+}
+
+MSortFilterProxyModel::~MSortFilterProxyModel()
+{
+}
+
+bool MSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
+{
+ if (!source_parent.isValid() &&
+ sourceModel()->rowCount(sourceModel()->index(source_row, 0, source_parent)) > 0)
+ return true;
+
+ return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
+}
diff --git a/src/corelib/widgets/msortfilterproxymodel.h b/src/corelib/widgets/msortfilterproxymodel.h
new file mode 100644
index 00000000..ebddcaa1
--- /dev/null
+++ b/src/corelib/widgets/msortfilterproxymodel.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MSORTFILTERPROXYMODEL_H
+#define MSORTFILTERPROXYMODEL_H
+
+#include <MExport>
+#include <QSortFilterProxyModel>
+
+/*!
+ \class MSortFilterProxyModel
+ \brief MSortFilterProxyModel reimplementation of a custom sort/filter proxy data model.
+ In case of filtering does not filter out the group headers (oposite to default
+ QSortFilterProxyModel behavior).
+*/
+class M_EXPORT MSortFilterProxyModel : public QSortFilterProxyModel
+{
+ Q_OBJECT
+
+public:
+ /*!
+ \brief Constructor.
+ \param parent Model owner.
+ */
+ MSortFilterProxyModel(QObject *parent = NULL);
+
+ /*!
+ \brief Destructor.
+ */
+ virtual ~MSortFilterProxyModel();
+
+ //! \reimp
+ virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
+ //! \reimp_end
+};
+
+#endif // MSORTFILTERPROXYMODEL_H
diff --git a/src/corelib/widgets/mtextedit.cpp b/src/corelib/widgets/mtextedit.cpp
index f95eaf96..64a8d99e 100644
--- a/src/corelib/widgets/mtextedit.cpp
+++ b/src/corelib/widgets/mtextedit.cpp
@@ -1500,16 +1500,40 @@ bool MTextEdit::setCursorPosition(int index)
void MTextEdit::handleMousePress(int cursorPosition, QGraphicsSceneMouseEvent *event)
{
+ handleMousePress(cursorPosition, event, NULL);
+}
+
+
+void MTextEdit::handleMousePress(int cursorPosition, QGraphicsSceneMouseEvent *event,
+ TextFieldLocationType *location)
+{
Q_D(MTextEdit);
+ if (textInteractionFlags() != Qt::NoTextInteraction && location) {
+ QString text = document()->toPlainText();
+ MBreakIterator breakIterator(text);
+
+ if (breakIterator.isBoundary(cursorPosition) == true) {
+ *location = MTextEdit::WordBoundary;
+ } else {
+ *location = MTextEdit::Word;
+ }
+ }
+
d->notifyInputContextMouseHandler(cursorPosition, event);
}
void MTextEdit::handleMouseRelease(int eventCursorPosition, QGraphicsSceneMouseEvent *event)
{
- Q_D(MTextEdit);
+ handleMouseRelease(eventCursorPosition, event, NULL);
+}
+
+void MTextEdit::handleMouseRelease(int eventCursorPosition, QGraphicsSceneMouseEvent *event,
+ TextFieldLocationType *location)
+{
+ Q_D(MTextEdit);
if (textInteractionFlags() == Qt::NoTextInteraction)
return;
@@ -1528,9 +1552,15 @@ void MTextEdit::handleMouseRelease(int eventCursorPosition, QGraphicsSceneMouseE
// clicks on word boundaries move the cursor
if (breakIterator.isBoundary(eventCursorPosition) == true) {
+ if (location) {
+ *location = MTextEdit::WordBoundary;
+ }
d->setCursorPosition(eventCursorPosition);
} else {
+ if (location) {
+ *location = MTextEdit::Word;
+ }
if (inputMethodCorrectionEnabled()) {
// clicks on words remove them from the normal contents and makes them preedit.
int start = breakIterator.previousInclusive(eventCursorPosition);
@@ -1568,6 +1598,9 @@ void MTextEdit::handleMouseRelease(int eventCursorPosition, QGraphicsSceneMouseE
}
} else {
+ if (location) {
+ *location = MTextEdit::Word;
+ }
d->notifyInputContextMouseHandler(eventCursorPosition, event);
}
@@ -1576,7 +1609,6 @@ void MTextEdit::handleMouseRelease(int eventCursorPosition, QGraphicsSceneMouseE
}
}
-
void MTextEdit::handleMouseMove(int cursorPosition, QGraphicsSceneMouseEvent *event)
{
Q_D(MTextEdit);
diff --git a/src/corelib/widgets/mtextedit.h b/src/corelib/widgets/mtextedit.h
index 0c18d7f5..203c8901 100644
--- a/src/corelib/widgets/mtextedit.h
+++ b/src/corelib/widgets/mtextedit.h
@@ -80,6 +80,15 @@ class M_EXPORT MTextEdit : public MWidgetController
public:
typedef M::TextContentType TextContentType; // workaround for moc bug
+ //! What is under the press or release location
+ enum TextFieldLocationType {
+ //! Pressed on top of a word
+ Word,
+
+ //! Pressed between words or empty space
+ WordBoundary
+ };
+
/*!
* \brief Default constructor. Creates a textedit field with a specified text and line mode.
* \param type widget type (single line or multiline).
@@ -188,6 +197,13 @@ public:
* The implementation will notify possible input context.
* \param cursorPosition position of the click within characters
* \param event event the view received
+ * \param location assigned by the method either as Word or as WordBoundary depending on where in text mouse is pressed
+ * \note Location parameter is assigned by the method only if Qt::TextInteractionFlags is something other than Qt::NoTextInteraction
+ */
+ void handleMousePress(int cursorPosition, QGraphicsSceneMouseEvent *event, TextFieldLocationType *location);
+
+ /*!
+ * \overload handleMousePress()
*/
void handleMousePress(int cursorPosition, QGraphicsSceneMouseEvent *event);
@@ -199,6 +215,13 @@ public:
* clicked word as preedit if possible.
* \param cursorPosition position of the click within characters
* \param event event the view received
+ * \param location assigned by the method either as Word or as WordBoundary depending on where in text mouse is released
+ * \note Location parameter is assigned by the method only if Qt::TextInteractionFlags is something other than Qt::NoTextInteraction
+ */
+ void handleMouseRelease(int cursorPosition, QGraphicsSceneMouseEvent *event, TextFieldLocationType *location);
+
+ /*!
+ * \overload handleMouseRelease()
*/
void handleMouseRelease(int cursorPosition, QGraphicsSceneMouseEvent *event);
diff --git a/src/corelib/widgets/mtoolbar.h b/src/corelib/widgets/mtoolbar.h
index 64e392e4..1342df2c 100644
--- a/src/corelib/widgets/mtoolbar.h
+++ b/src/corelib/widgets/mtoolbar.h
@@ -74,18 +74,18 @@ class MToolBarPrivate;
\endcode
\section MToolBarUseGuidelines Usage guidelines
- - The toolbar is functionally in the same role as in the view menu: it has commands that
+ - The toolbar is functionally in the same role as in the application menu: it has commands that
are not related specifically to any content item or button displayed within the contents
of the view.
- The toolbar should be utilized only if the commands are expected to be used often. The
toolbar takes away space from the content area. If the commands are not important to the
view and the main use cases, it is recommendable to not have a toolbar at all, and place
- the commands in the view menu. Similarly, reconsider your design if you would have only
- one or two buttons to the toolbar; commands can be placed to the view menu, or embedded
- to the view.
+ the commands in the application menu. Similarly, reconsider your design if you would have only
+ one or two buttons to the toolbar; commands can be placed to the application menu, or embedded
+ to the page.
- Note that the toolbar is not scalable: do not place commands in the toolbar if the view is
expected to grow with more functionalities in the future.
- - The commands in the toolbar and in the view menu are not to be duplicated.
+ - The commands in the toolbar and in the application menu are not to be duplicated.
- Since the Direct UI style has no focus for the items in the content view, it is not
possible to create toolbars that have actions that affect on a single item on screen. For
instance you shouldn't design a toolbar with "Reply", "Delete", "Move" etc. commands, if
@@ -94,10 +94,10 @@ class MToolBarPrivate;
The scrollable area ends on top of the toolbar (so that the latest in the list should not
end up being stuck behind the toolbar)
- The user is not able to personalize the contents of the toolbar. The application designer
- decides what is shown in toolbar and what in view menu.
+ decides what is shown in the toolbar and what in the application menu.
- Application design can also decide whether toolbar is used in both landscape and portrait
modes. For example, a toolbar can be shown only in landscape mode, and then in portrait
- mode the functionalities are provided somewhere else (for instance in the view menu).
+ mode the functionalities are provided somewhere else (for instance in the application menu).
- The toolbar can be hidden if application designer decides so, for example when using
full-screen media, virtual keyboard or web browser. Toolbar is hidden and shown together
with command area.
diff --git a/src/corelib/widgets/mwindow.cpp b/src/corelib/widgets/mwindow.cpp
index 27d5856d..d9fac5bc 100644
--- a/src/corelib/widgets/mwindow.cpp
+++ b/src/corelib/widgets/mwindow.cpp
@@ -132,6 +132,74 @@ void MWindowPrivate::init()
if (MApplication::fullScreen())
q->showFullScreen();
+}
+
+void MWindowPrivate::initSoftwareViewport()
+{
+ Q_Q(MWindow);
+
+ mWarning("MWindow") << "Switching to software rendering";
+
+#ifdef M_USE_OPENGL
+ MGLES2Renderer::activate(NULL);
+ MGLES2Renderer::destroy(glWidget);
+ glWidget = NULL;
+#endif
+
+ q->setViewport(new QWidget());
+ q->setViewportUpdateMode(MWindow::MinimalViewportUpdate);
+
+ configureViewport();
+}
+
+void MWindowPrivate::initGLViewport()
+{
+#ifdef QT_OPENGL_LIB
+ Q_Q(MWindow);
+
+ mWarning("MWindow") << "Window restored, switching to GL rendering";
+
+ bool translucent = q->testAttribute(Qt::WA_TranslucentBackground);
+
+ // The sequence of calls here is important. When translucency is not
+ // enabled, ensure setViewport() is called before DuiGLES2Renderer
+ // initializes its vertices, otherwise call setViewport() after
+ // DuiGLES2Renderer initializes itself. Failure to do this will cause
+ // a crash.
+ // This QGLWidget is owned by the viewport so previous one
+ // actually gets deleted if we overwrite it with a new one
+ if (translucent) {
+ QGLFormat fmt;
+ // disable multisampling, is enabled by default in Qt
+ fmt.setSampleBuffers(false);
+ fmt.setSamples(0);
+ fmt.setAlpha(true); // Workaround for NB#153625
+
+ glWidget = MComponentCache::glWidget(fmt);
+ QPalette palette;
+ palette.setColor(QPalette::Base, Qt::transparent);
+ glWidget->setAutoFillBackground(true);
+ glWidget->setPalette(palette);
+ } else {
+ glWidget = MComponentCache::glWidget();
+ q->setViewport(glWidget);
+ }
+#ifdef M_USE_OPENGL
+ MGLES2Renderer::instance(glWidget);
+ MGLES2Renderer::activate(glWidget);
+#endif
+ if (translucent)
+ q->setViewport(glWidget);
+#endif
+
+ q->setViewportUpdateMode(MWindow::FullViewportUpdate);
+
+ configureViewport();
+}
+
+void MWindowPrivate::configureViewport()
+{
+ Q_Q(MWindow);
q->viewport()->grabGesture(Qt::TapAndHoldGesture);
q->viewport()->grabGesture(Qt::PinchGesture);
@@ -142,6 +210,7 @@ void MWindowPrivate::init()
q->setAttribute(Qt::WA_AcceptTouchEvents);
}
+
#ifdef Q_WS_X11
void MWindowPrivate::appendVisibilityChangeMask()
{
@@ -341,51 +410,13 @@ void MWindow::setTranslucentBackground(bool enable)
{
Q_D(MWindow);
- if (!MApplication::softwareRendering()) {
-#ifdef QT_OPENGL_LIB
- setViewportUpdateMode(MWindow::FullViewportUpdate);
-
- // The sequence of calls here is important. When translucency is not
- // enabled, ensure setViewport() is called before MGLES2Renderer
- // initializes its vertices, otherwise call setViewport() after
- // MGLES2Renderer initializes itself. Failure to do this will cause
- // a crash.
- if (enable) {
- QGLFormat fmt;
- // disable multisampling, is enabled by default in Qt
- fmt.setSampleBuffers(false);
- fmt.setSamples(0);
-
- //d->glWidget->setAttribute(Qt::WA_TranslucentBackground);
-
- fmt.setAlpha(true); // Workaround for NB#153625
- d->glWidget = new QGLWidget(fmt);
- QPalette palette;
- palette.setColor(QPalette::Base, Qt::transparent);
- d->glWidget->setAutoFillBackground(true);
- d->glWidget->setPalette(palette);
- } else {
- d->glWidget = MComponentCache::glWidget();
-
- if (d->glWidget->isValid() == false) {
- qCritical("Could not create a valid QGLWidget, quitting.");
- exit(EXIT_FAILURE);
- }
-
- setViewport(d->glWidget);
- }
-#ifdef M_USE_OPENGL
- MGLES2Renderer::instance(d->glWidget);
- MGLES2Renderer::activate(d->glWidget);
-#endif
- if (enable)
- setViewport(d->glWidget);
-#endif
- } else {
- viewport()->setAutoFillBackground(!enable);
- }
if (enable)
setAttribute(Qt::WA_TranslucentBackground);
+
+ if (MApplication::softwareRendering() || MApplication::isPrestarted())
+ d->initSoftwareViewport();
+ else
+ d->initGLViewport();
}
void MWindow::setGlobalAlpha(qreal level)
@@ -870,6 +901,9 @@ void MWindow::setVisible(bool visible)
if (MApplication::isPrestarted()) {
return;
} else {
+ if (!MApplication::softwareRendering() && d->glWidget == 0) {
+ d->initGLViewport();
+ }
d->isLogicallyClosed = false;
}
diff --git a/src/corelib/widgets/mwindow_p.h b/src/corelib/widgets/mwindow_p.h
index faf70762..30a1ad17 100644
--- a/src/corelib/widgets/mwindow_p.h
+++ b/src/corelib/widgets/mwindow_p.h
@@ -66,6 +66,10 @@ public:
void propagateMOnDisplayChangeEventToScene(MOnDisplayChangeEvent *event);
+ void initGLViewport();
+ void initSoftwareViewport();
+ void configureViewport();
+
bool onDisplay;
bool onDisplaySet;
diff --git a/src/corelib/widgets/widgets.pri b/src/corelib/widgets/widgets.pri
index ca45964c..f2731321 100644
--- a/src/corelib/widgets/widgets.pri
+++ b/src/corelib/widgets/widgets.pri
@@ -26,6 +26,7 @@ PUBLIC_HEADERS += \
$$WIDGETS_SRC_DIR/mlabel.h \
$$WIDGETS_SRC_DIR/mlabelhighlighter.h \
$$WIDGETS_SRC_DIR/mlist.h \
+ $$WIDGETS_SRC_DIR/mlistfilter.h \
$$WIDGETS_SRC_DIR/mgriditem.h \
$$WIDGETS_SRC_DIR/mmessagebox.h \
$$WIDGETS_SRC_DIR/mnavigationbar.h \
@@ -54,6 +55,10 @@ PUBLIC_HEADERS += \
$$WIDGETS_SRC_DIR/mwidgetrecycler.h \
$$WIDGETS_SRC_DIR/mabstractcellcreator.h \
$$WIDGETS_SRC_DIR/mcontentitem.h \
+ $$WIDGETS_SRC_DIR/mlistitem.h \
+ $$WIDGETS_SRC_DIR/mabstractitemmodel.h \
+ $$WIDGETS_SRC_DIR/msortfilterproxymodel.h \
+ $$WIDGETS_SRC_DIR/mbubbleitem.h \
MGEN_MODEL_HEADERS += \
$$WIDGETS_SRC_DIR/mwidgetmodel.h \
@@ -87,6 +92,8 @@ MGEN_MODEL_HEADERS += \
$$WIDGETS_SRC_DIR/mcontainermodel.h \
$$WIDGETS_SRC_DIR/mcompletermodel.h \
$$WIDGETS_SRC_DIR/mcontentitemmodel.h \
+ $$WIDGETS_SRC_DIR/mlistitemmodel.h \
+ $$WIDGETS_SRC_DIR/mbubbleitemmodel.h \
PUBLIC_HEADERS += \
$$MGEN_MODEL_HEADERS \
@@ -96,6 +103,9 @@ PRIVATE_HEADERS += \
$$WIDGETS_SRC_DIR/mpannableviewportlayout.h \
$$WIDGETS_SRC_DIR/mcontentitem_p.h \
$$WIDGETS_SRC_DIR/mbuttongroup_p.h \
+ $$WIDGETS_SRC_DIR/mlistitem_p.h \
+ $$WIDGETS_SRC_DIR/mabstractitemmodel_p.h \
+ $$WIDGETS_SRC_DIR/mlistfilter_p.h \
SOURCES += \
$$WIDGETS_SRC_DIR/mwidgetmodel.cpp \
@@ -118,6 +128,7 @@ SOURCES += \
$$WIDGETS_SRC_DIR/mlabelmodel.cpp \
$$WIDGETS_SRC_DIR/mlabelhighlighter.cpp \
$$WIDGETS_SRC_DIR/mlist.cpp \
+ $$WIDGETS_SRC_DIR/mlistfilter.cpp \
$$WIDGETS_SRC_DIR/mgriditem.cpp \
$$WIDGETS_SRC_DIR/minfobannermodel.cpp \
$$WIDGETS_SRC_DIR/mapplicationmenu.cpp \
@@ -152,3 +163,8 @@ SOURCES += \
$$WIDGETS_SRC_DIR/mcontentitemmodel.cpp \
$$WIDGETS_SRC_DIR/mlistmodel.cpp \
$$WIDGETS_SRC_DIR/mpopuplistmodel.cpp \
+ $$WIDGETS_SRC_DIR/mlistitem.cpp \
+ $$WIDGETS_SRC_DIR/mabstractitemmodel.cpp \
+ $$WIDGETS_SRC_DIR/msortfilterproxymodel.cpp \
+ $$WIDGETS_SRC_DIR/mbubbleitem.cpp \
+ $$WIDGETS_SRC_DIR/mbubbleitemmodel.cpp \
diff --git a/src/extensions/applicationextension/mapplicationextensionarea.cpp b/src/extensions/applicationextension/mapplicationextensionarea.cpp
index f06a9545..63215ea9 100644
--- a/src/extensions/applicationextension/mapplicationextensionarea.cpp
+++ b/src/extensions/applicationextension/mapplicationextensionarea.cpp
@@ -42,8 +42,8 @@ void MApplicationExtensionAreaPrivate::init(const QString &interface)
{
Q_Q(MApplicationExtensionArea);
extensionManager = QSharedPointer<MApplicationExtensionManager>(new MApplicationExtensionManager(interface));
- QObject::connect(extensionManager.data(), SIGNAL(extensionInstantiated(MApplicationExtensionInterface *)), q, SIGNAL(extensionInstantiated(MApplicationExtensionInterface *)), Qt::QueuedConnection);
- QObject::connect(extensionManager.data(), SIGNAL(extensionRemoved(MApplicationExtensionInterface*)), q, SIGNAL(extensionRemoved(MApplicationExtensionInterface*)), Qt::QueuedConnection);
+ QObject::connect(extensionManager.data(), SIGNAL(extensionInstantiated(MApplicationExtensionInterface *)), q, SIGNAL(extensionInstantiated(MApplicationExtensionInterface *)));
+ QObject::connect(extensionManager.data(), SIGNAL(extensionRemoved(MApplicationExtensionInterface*)), q, SIGNAL(extensionRemoved(MApplicationExtensionInterface*)));
QObject::connect(extensionManager.data(), SIGNAL(widgetCreated(QGraphicsWidget*, MDataStore&)), q, SLOT(addWidget(QGraphicsWidget*, MDataStore&)));
QObject::connect(extensionManager.data(), SIGNAL(widgetRemoved(QGraphicsWidget*)), q, SLOT(removeWidget(QGraphicsWidget*)));
}
diff --git a/src/extensions/applicationextension/mapplicationextensionarea.h b/src/extensions/applicationextension/mapplicationextensionarea.h
index a443a3ff..d068cee9 100644
--- a/src/extensions/applicationextension/mapplicationextensionarea.h
+++ b/src/extensions/applicationextension/mapplicationextensionarea.h
@@ -94,7 +94,9 @@ public:
/*!
* Initializes the application extension area. All setters introduced by
- * this class must be called before the area is initialized. Initialization
+ * this class must be called before the area is initialized, and the
+ * signals must be connected, because calling init() will result in
+ * the extensions being created. Initialization
* will fail if no interface name has been provided or if the area has
* already been initialized.
*
diff --git a/src/extensions/applicationextension/mapplicationextensionareaview.cpp b/src/extensions/applicationextension/mapplicationextensionareaview.cpp
index 5253a28a..c27ccdbf 100644
--- a/src/extensions/applicationextension/mapplicationextensionareaview.cpp
+++ b/src/extensions/applicationextension/mapplicationextensionareaview.cpp
@@ -38,8 +38,11 @@ void MApplicationExtensionAreaViewPrivate::init(MApplicationExtensionArea *contr
{
this->controller = controller;
- layout = new QGraphicsLinearLayout(Qt::Vertical);
+ QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->setSpacing(0);
controller->setLayout(layout);
+ this->layout = layout;
}
void MApplicationExtensionAreaViewPrivate::addToLayout(QGraphicsWidget *widget, int index)
diff --git a/src/extensions/applicationextension/mapplicationextensionmanager.cpp b/src/extensions/applicationextension/mapplicationextensionmanager.cpp
index 9da4d619..637e493a 100644
--- a/src/extensions/applicationextension/mapplicationextensionmanager.cpp
+++ b/src/extensions/applicationextension/mapplicationextensionmanager.cpp
@@ -28,6 +28,7 @@
#include "mdesktopentry.h"
#include "mextensionhandle.h"
#include "mfiledatastore.h"
+#include "msubdatastore.h"
#include "mdebug.h"
MApplicationExtensionManager::MApplicationExtensionManager(const QString &interface) :
@@ -76,15 +77,34 @@ bool MApplicationExtensionManager::init()
updateAvailableExtensions(APPLICATION_EXTENSION_DATA_DIR);
// Start watching the application extensions directory for changes
- connect(&watcher, SIGNAL(directoryChanged(const QString)), this, SLOT(updateAvailableExtensions(QString)));
- watcher.addPath(APPLICATION_EXTENSION_DATA_DIR);
-
+ connectSignals();
+ desktopDirectoryWatcher.addPath(APPLICATION_EXTENSION_DATA_DIR);
return true;
}
+void MApplicationExtensionManager::parseAndInstantiateExtension(
+ const QString& desktopFile,
+ QSet<QString>* currentExtensionsList)
+{
+ QSharedPointer<const MApplicationExtensionMetaData>
+ metadata(new MApplicationExtensionMetaData(desktopFile));
+ if (metadata->isValid() && metadata->type() == "X-MeeGoApplicationExtension" && metadata->interface() == interface) {
+ if (currentExtensionsList != NULL) {
+ currentExtensionsList->insert(desktopFile);
+ }
+ if (!extensionMetaDatas.contains(desktopFile)) {
+ // This extension is a new one. Instantiate it
+ if (instantiateExtension(metadata)) {
+ extensionMetaDatas[desktopFile] = metadata;
+ }
+ }
+ }
+}
+
void MApplicationExtensionManager::updateAvailableExtensions(const QString &path)
{
- QList<QString> currentExtensionsList;
+ disconnectSignals();
+ QSet<QString> currentExtensionsList;
QDir applicationExtensionsDir(path);
if (applicationExtensionsDir.exists()) {
@@ -92,33 +112,38 @@ void MApplicationExtensionManager::updateAvailableExtensions(const QString &path
filter << "*.desktop";
foreach(const QString &fileName, applicationExtensionsDir.entryList(filter, QDir::Files)) {
const QString desktopFile = QFileInfo(applicationExtensionsDir, fileName).absoluteFilePath();
- QSharedPointer<MApplicationExtensionMetaData> metadata(new MApplicationExtensionMetaData(desktopFile));
- if (metadata->isValid() && metadata->type() == "X-MeeGoApplicationExtension" && metadata->interface() == interface) {
- currentExtensionsList.append(fileName);
-
- if (!extensionMetaDatas.contains(fileName)) {
- // This extension is a new one. Instantiate it
- if (instantiateExtension(*metadata.data())) {
- extensionMetaDatas[fileName] = metadata;
- }
- }
- }
+ parseAndInstantiateExtension(desktopFile,
+ &currentExtensionsList);
}
-
// Find what extensions got removed
- QList<QString> toBeRemovedExtensions;
+ QSet<QString> toBeRemovedExtensions;
MetaDataEntryHash::const_iterator itEnd = extensionMetaDatas.constEnd();
for (MetaDataEntryHash::const_iterator it = extensionMetaDatas.constBegin(); it != itEnd; ++it) {
if (!currentExtensionsList.contains(it.key())) {
- toBeRemovedExtensions.append(it.key());
+ toBeRemovedExtensions.insert(it.key());
}
}
// Remove extensions that no longer exist
foreach (const QString &fileName, toBeRemovedExtensions) {
- removeExtension(*extensionMetaDatas[fileName].data());
- extensionMetaDatas.remove(fileName);
+ removeExtension(*extensionMetaDatas[fileName]);
}
}
+ connectSignals();
+}
+
+void MApplicationExtensionManager::updateExtension(
+ const MDesktopEntry &extensionData)
+{
+ const MApplicationExtensionMetaData* metadata =
+ dynamic_cast<const MApplicationExtensionMetaData*>(&extensionData);
+ if (!metadata) {
+ return;
+ }
+ disconnectSignals();
+ QString fileName = metadata->fileName();
+ removeExtension(*metadata);
+ parseAndInstantiateExtension(fileName, NULL);
+ connectSignals();
}
bool MApplicationExtensionManager::isInProcess(const MApplicationExtensionMetaData &metaData)
@@ -126,25 +151,28 @@ bool MApplicationExtensionManager::isInProcess(const MApplicationExtensionMetaDa
return metaData.runnerBinary().isEmpty();
}
-bool MApplicationExtensionManager::instantiateExtension(const MApplicationExtensionMetaData &metadata)
+bool MApplicationExtensionManager::instantiateExtension(QSharedPointer<const MApplicationExtensionMetaData> &metadata)
{
bool success = false;
- if (isInProcess(metadata)) {
- if (metadata.fileName().indexOf(inProcessFilter) >= 0) {
- success = instantiateInProcessExtension(metadata.extensionBinary());
+ if (isInProcess(*metadata)) {
+ if (metadata->fileName().indexOf(inProcessFilter) >= 0) {
+ success = instantiateInProcessExtension(metadata);
}
} else {
- if (metadata.fileName().indexOf(outOfProcessFilter) >= 0) {
+ if (metadata->fileName().indexOf(outOfProcessFilter) >= 0) {
success = instantiateOutOfProcessExtension(metadata);
}
}
-
+ if (success) {
+ extensionWatcher.addExtension(metadata);
+ }
return success;
}
-bool MApplicationExtensionManager::instantiateInProcessExtension(const QString &binary)
+bool MApplicationExtensionManager::instantiateInProcessExtension(QSharedPointer<const MApplicationExtensionMetaData> &metadata)
{
+ QString binary = metadata->extensionBinary();
QPluginLoader loader(binary);
QObject *object = loader.instance();
@@ -157,14 +185,16 @@ bool MApplicationExtensionManager::instantiateInProcessExtension(const QString &
if (success) {
QGraphicsWidget *widget = extension->widget();
if (widget) {
- // Inform about the added extension widget
- emit widgetCreated(widget, *extensionDataStore.data());
+ QString tmp = metadata->fileName();
+ QSharedPointer<MDataStore> dataStore =
+ createSubDataStore(*metadata);
+ inProcessDataStores[metadata.data()] = dataStore;
+ emit widgetCreated(widget, *dataStore);
}
+ // Store the instantiated extension
+ inProcessExtensions[metadata.data()] = qMakePair(extension, widget);
// Inform interested parties about the new extension
emit extensionInstantiated(extension);
-
- // Store the instantiated extension
- inProcessExtensions[binary] = qMakePair(extension, widget);
}
}
}
@@ -176,12 +206,15 @@ bool MApplicationExtensionManager::instantiateInProcessExtension(const QString &
return success;
}
-bool MApplicationExtensionManager::instantiateOutOfProcessExtension(const MApplicationExtensionMetaData &metadata)
+bool MApplicationExtensionManager::instantiateOutOfProcessExtension(
+ QSharedPointer<const MApplicationExtensionMetaData> &metadata)
{
MExtensionHandle *handle = new MExtensionHandle;
- handle->init(metadata.runnerBinary(), metadata.fileName());
- outOfProcessHandles.insert(metadata.fileName(), handle);
- emit widgetCreated(handle, *extensionDataStore.data());
+ handle->init(metadata->runnerBinary(), metadata->fileName());
+ outOfProcessHandles.insert(metadata.data(), handle);
+ QSharedPointer<MDataStore> dataStore = createSubDataStore(*metadata);
+ outOfProcessDataStores[metadata.data()] = dataStore;
+ emit widgetCreated(handle, *dataStore);
return true;
}
@@ -194,35 +227,41 @@ QString MApplicationExtensionManager::dataPath() const
void MApplicationExtensionManager::removeExtension(const MApplicationExtensionMetaData &metadata)
{
+ QString fileName = metadata.fileName();
if (isInProcess(metadata)) {
- removeInProcessExtension(metadata.extensionBinary());
+ removeInProcessExtension(metadata);
} else {
removeOutOfProcessExtension(metadata);
}
+ extensionMetaDatas.remove(fileName);
+ extensionWatcher.removeExtension(metadata.fileName());
}
-void MApplicationExtensionManager::removeInProcessExtension(const QString &binary)
+void MApplicationExtensionManager::removeInProcessExtension(
+ const MApplicationExtensionMetaData &metadata)
{
- if (inProcessExtensions.contains(binary)) {
- InProcessExtensionData extension = inProcessExtensions.take(binary);
+ if (inProcessExtensions.contains(&metadata)) {
+ InProcessExtensionData extension = inProcessExtensions.take(&metadata);
emit extensionRemoved(extension.first);
if (extension.second) {
emit widgetRemoved(extension.second);
}
+ inProcessDataStores.remove(&metadata);
delete extension.first;
+ QPluginLoader loader(metadata.extensionBinary());
+ loader.unload();
}
}
void MApplicationExtensionManager::removeOutOfProcessExtension(const MApplicationExtensionMetaData &metadata)
{
QString desktopFileName = metadata.fileName();
- if (outOfProcessHandles.contains(desktopFileName)) {
- MExtensionHandle *handle = outOfProcessHandles.take(desktopFileName);
- if (handle) {
- emit widgetRemoved(handle);
- handle->kill();
- delete handle;
- }
+ MExtensionHandle *handle = outOfProcessHandles.take(&metadata);
+ if (handle) {
+ emit widgetRemoved(handle);
+ handle->kill();
+ outOfProcessDataStores.remove(&metadata);
+ delete handle;
}
}
@@ -259,3 +298,41 @@ bool MApplicationExtensionManager::createDataStore()
return false;
}
}
+
+QSharedPointer<MDataStore> MApplicationExtensionManager::createSubDataStore(
+ const MApplicationExtensionMetaData &metadata)
+{
+ return QSharedPointer<MDataStore>(
+ new MSubDataStore(
+ metadata.fileName().replace('/', '\\')
+ + QString("/"), *extensionDataStore));
+}
+
+void MApplicationExtensionManager::connectSignals()
+{
+ connect(&extensionWatcher,
+ SIGNAL(extensionChanged(
+ const MDesktopEntry &)),
+ this,
+ SLOT(updateExtension(
+ const MDesktopEntry &)));
+ connect(&desktopDirectoryWatcher,
+ SIGNAL(directoryChanged(const QString)),
+ this,
+ SLOT(updateAvailableExtensions(QString)));
+}
+
+void MApplicationExtensionManager::disconnectSignals()
+{
+ disconnect(&extensionWatcher,
+ SIGNAL(extensionChanged(
+ const MDesktopEntry &)),
+ this,
+ SLOT(updateExtension(
+ const MDesktopEntry &)));
+ disconnect(&desktopDirectoryWatcher,
+ SIGNAL(directoryChanged(const QString)),
+ this,
+ SLOT(updateAvailableExtensions(QString)));
+}
+
diff --git a/src/extensions/applicationextension/mapplicationextensionmanager.h b/src/extensions/applicationextension/mapplicationextensionmanager.h
index 5eb80e1e..99acbe0b 100644
--- a/src/extensions/applicationextension/mapplicationextensionmanager.h
+++ b/src/extensions/applicationextension/mapplicationextensionmanager.h
@@ -24,8 +24,8 @@
#include <QFileSystemWatcher>
#include <QHash>
#include <QSharedPointer>
-#include <QHash>
#include <QRegExp>
+#include "mextensionwatcher.h"
class MApplicationExtensionMetaData;
class MDataStore;
@@ -124,13 +124,22 @@ private slots:
*/
void updateAvailableExtensions(const QString &path);
+ /*!
+ * \brief Slot for updating an extension when the files for the extension
+ * have been updated.
+ * \param extensionData the extension to update
+ */
+ void updateExtension(const MDesktopEntry &extensionData);
+
private:
//! Whether the manager has been initialized or not
bool initialized;
//! A file system watcher for the desktop entry file directory
- QFileSystemWatcher watcher;
+ QFileSystemWatcher desktopDirectoryWatcher;
+ //! An extension watcher for observing modifications to the extensions
+ MExtensionWatcher extensionWatcher;
//! The name of the interface extensions to be instantiated should implement
QString interface;
@@ -145,13 +154,19 @@ private:
typedef QPair<MApplicationExtensionInterface*, QGraphicsWidget*> InProcessExtensionData;
- //! Instantiated in-process extensions. A map from the shared library name to the extension instance.
- QHash<QString, InProcessExtensionData> inProcessExtensions;
+ //! In-process extensions and datastores
+ QHash<const MApplicationExtensionMetaData*, InProcessExtensionData> inProcessExtensions;
+
+ QHash<const MApplicationExtensionMetaData*,
+ QSharedPointer<MDataStore> > inProcessDataStores;
- //! Hash of desktop file name versus the widget (handle) created
- QHash<QString, MExtensionHandle*> outOfProcessHandles;
+ //! Ouf-of-process extensions and datastores
+ QHash<const MApplicationExtensionMetaData*, MExtensionHandle*> outOfProcessHandles;
- typedef QHash<QString, QSharedPointer<MApplicationExtensionMetaData> > MetaDataEntryHash;
+ QHash<const MApplicationExtensionMetaData*, QSharedPointer<MDataStore> >
+ outOfProcessDataStores;
+
+ typedef QHash<QString, QSharedPointer<const MApplicationExtensionMetaData> > MetaDataEntryHash;
/*!
* A container for application extension desktop entries with the correct application extension interface defined.
* This container also only contains the entries that succeeded to instantiate.
@@ -179,38 +194,67 @@ private:
bool createDataStore();
/*!
+ * Creates a subdatastore for an extension
+ * \param metaData Metadata for the extension
+ */
+ QSharedPointer<MDataStore> createSubDataStore(
+ const MApplicationExtensionMetaData &metaData);
+ /*!
+ * Connects the signals for the directory watcher and the extension
+ * watcher.
+ */
+ void connectSignals();
+ /*!
+ * Disconnects the signals for the directory watcher and the extension
+ * watcher.
+ */
+ void disconnectSignals();
+
+ /*!
+ * Creates extension metadata and instantiates an extension
+ * if it isn't already instantiated.
+ * \param desktopFile Full path of the desktop file to parse.
+ * \param currentExtensionsList List of current extensions.
+ * Used by updateAvailableExtensions to keep track of which
+ * extensions exist and which need to be removed.
+ */
+ void parseAndInstantiateExtension(const QString& desktopFile,
+ QSet<QString>* currentExtensionsList);
+ /*!
* Instantiate an extension for an application extension metadata
* \param metadata the metadata object of the extension
* \return \c true if extension instantiated succesfully, \c false otherwise
*/
- bool instantiateExtension(const MApplicationExtensionMetaData &metadata);
+ bool instantiateExtension(
+ QSharedPointer<const MApplicationExtensionMetaData> &metadata);
/*!
* Instantiates an in process extension.
- *
- * \param binary the name of the in process extension binary
+ * \param metadata metadata for the extension
* \return \c true if the instantiation succeeds, \c false otherwise
*/
- bool instantiateInProcessExtension(const QString &binary);
+ bool instantiateInProcessExtension(
+ QSharedPointer<const MApplicationExtensionMetaData> &metadata);
/*!
* Instantiate out of process extensions
- * \param metadata for the extension
+ * \param metadata metadata for the extension
* \return bool True if extension instantiated, else return false
*/
- bool instantiateOutOfProcessExtension(const MApplicationExtensionMetaData &metadata);
+ bool instantiateOutOfProcessExtension(
+ QSharedPointer<const MApplicationExtensionMetaData> &metadata);
/*!
* Removes an extension that was defined in the desktop entry given as a parameter.
- * \param metadata the relevant metadata.
+ * \param metadata metadata for the extension
*/
void removeExtension(const MApplicationExtensionMetaData &metadata);
/*!
* Removes an in process extension that was loaded from the specified library.
- * \param library the path name to the library
+ * \param metadata metadata for the extension
*/
- void removeInProcessExtension(const QString &library);
+ void removeInProcessExtension(const MApplicationExtensionMetaData &metadata);
/*!
* Removes an out of process extension that was loaded from the specified metadata
diff --git a/src/extensions/applicationextension/mapplicationextensionmetadata.cpp b/src/extensions/applicationextension/mapplicationextensionmetadata.cpp
index cd73f112..81d11d91 100644
--- a/src/extensions/applicationextension/mapplicationextensionmetadata.cpp
+++ b/src/extensions/applicationextension/mapplicationextensionmetadata.cpp
@@ -21,9 +21,9 @@
#include <QDir>
#include <MDebug>
-const QString ExtensionBinaryKey("X-MeeGoApplicationExtension/Extension");
-const QString IdentifierKey("X-MeeGoApplicationExtension/Identifier");
-const QString InterfaceKey("X-MeeGoApplicationExtension/Interface");
+const QString EXTENSION_BINARY_KEY("X-MeeGoApplicationExtension/Extension");
+const QString IDENTIFIER_KEY("X-MeeGoApplicationExtension/Identifier");
+const QString INTERFACE_KEY("X-MeeGoApplicationExtension/Interface");
MApplicationExtensionMetaData::MApplicationExtensionMetaData(const QString &fileName) : MDesktopEntry(fileName)
{
@@ -42,7 +42,7 @@ bool MApplicationExtensionMetaData::isValid() const
// Loop through keys and check that all are found
QStringList requiredKeys;
- requiredKeys << ExtensionBinaryKey << InterfaceKey;
+ requiredKeys << EXTENSION_BINARY_KEY << INTERFACE_KEY;
foreach(const QString &key, requiredKeys) {
if (!contains(key)) {
return false;
@@ -80,7 +80,7 @@ QString MApplicationExtensionMetaData::runnerBinary() const
QString MApplicationExtensionMetaData::extensionBinary() const
{
// Fetch the absolute file path and return it.
- QFileInfo extension(QString(APPLICATION_EXTENSION_LIBS), value(ExtensionBinaryKey));
+ QFileInfo extension(QString(APPLICATION_EXTENSION_LIBS), value(EXTENSION_BINARY_KEY));
if (extension.exists() && extension.isFile()) {
return extension.absoluteFilePath();
} else {
@@ -91,7 +91,7 @@ QString MApplicationExtensionMetaData::extensionBinary() const
QString MApplicationExtensionMetaData::interface() const
{
- return value(InterfaceKey);
+ return value(INTERFACE_KEY);
}
QString MApplicationExtensionMetaData::extractLibraryName(const QString &libFileName)
@@ -114,8 +114,8 @@ QString MApplicationExtensionMetaData::resourceIdentifier() const
QString resourceId;
QString binary = extensionBinary();
- if (contains(IdentifierKey)) {
- resourceId = value(IdentifierKey);
+ if (contains(IDENTIFIER_KEY)) {
+ resourceId = value(IDENTIFIER_KEY);
} else if (!binary.isNull()) {
resourceId = extractLibraryName(binary);
} else {
diff --git a/src/extensions/applicationextension/mapplicationextensionmetadata.h b/src/extensions/applicationextension/mapplicationextensionmetadata.h
index 6ee05884..f3651182 100644
--- a/src/extensions/applicationextension/mapplicationextensionmetadata.h
+++ b/src/extensions/applicationextension/mapplicationextensionmetadata.h
@@ -55,7 +55,7 @@ public:
* file in that is given as a construction parameter.
* \param filename Location of .desktop file to be read by constructed MApplicationExtensionMetaData instance.
*/
- MApplicationExtensionMetaData(const QString &filename);
+ explicit MApplicationExtensionMetaData(const QString &filename);
/*!
* Destructor
diff --git a/src/extensions/applicationextension/mextensionareaview.cpp b/src/extensions/applicationextension/mextensionareaview.cpp
index ad89c7c2..a1aadefb 100644
--- a/src/extensions/applicationextension/mextensionareaview.cpp
+++ b/src/extensions/applicationextension/mextensionareaview.cpp
@@ -24,6 +24,8 @@
#include "mdatastore.h"
#include "mcontainer.h"
+static const QString LAYOUT_INDEX = "layoutIndex";
+
MExtensionAreaViewPrivate::MExtensionAreaViewPrivate()
: controller(0),
layout(0),
@@ -80,8 +82,8 @@ void MExtensionAreaViewPrivate::updateData()
// Change the data in the store if item is still valid and geometry has changed.
if (centralWidget != NULL && dsMap->contains(centralWidget) &&
- (*dsMap)[centralWidget]->value("layoutIndex") != i) {
- (*dsMap)[centralWidget]->createValue("layoutIndex", i);
+ (*dsMap)[centralWidget]->value(LAYOUT_INDEX) != i) {
+ (*dsMap)[centralWidget]->createValue(LAYOUT_INDEX, i);
}
}
}
@@ -114,7 +116,8 @@ void MExtensionAreaViewPrivate::updateLayout()
bool alreadyInLayout = false;
const int count = layout->count();
for (int i = 0; i < count; ++i) {
- MContainer *theContainer = dynamic_cast<MContainer *>(layout->itemAt(i));
+ MContainer *theContainer =
+ dynamic_cast<MContainer *>(layout->itemAt(i));
if (widget == theContainer->centralWidget()) {
// Widget found from the layout, don't add again
alreadyInLayout = true;
@@ -131,21 +134,19 @@ void MExtensionAreaViewPrivate::updateLayout()
if (container) {
setContainerEnabled(*container, q->style()->containerMode());
}
-
- int layoutIndex = 0;
-
// Add widget to the layout policy
- if (store->allKeys().contains("layoutIndex") &&
- store->value("layoutIndex").type() == QVariant::Int) {
- layoutIndex = store->value("layoutIndex").toInt();
- addToLayout(container, layoutIndex);
+ int layoutIndex = 0;
+ bool layoutIndexFound = false;
+ int tmpIndex =
+ store->value(LAYOUT_INDEX).toInt(&layoutIndexFound);
+ if (layoutIndexFound) {
+ layoutIndex = tmpIndex;
} else {
layoutIndex = layout->count();
- addToLayout(container);
}
-
+ addToLayout(container, layoutIndex);
// Write the layout data to the permanent store
- store->createValue("layoutIndex", layoutIndex);
+ store->createValue(LAYOUT_INDEX, layoutIndex);
}
}
}
diff --git a/src/extensions/applicationextension/mextensionrunner.cpp b/src/extensions/applicationextension/mextensionrunner.cpp
index 4cbebff0..805874df 100644
--- a/src/extensions/applicationextension/mextensionrunner.cpp
+++ b/src/extensions/applicationextension/mextensionrunner.cpp
@@ -167,7 +167,6 @@ bool MExtensionRunner::init(const QString &serverName)
teardown();
return false;
}
-
return true;
}
@@ -383,10 +382,7 @@ void MExtensionRunner::createAppletPixmap(Qt::HANDLE handle)
pixmap = QPixmap::fromX11Pixmap(handle, QPixmap::ExplicitlyShared);
#ifdef QT_OPENGL_LIB
- // Try to use opengl to render directly to the pixmap
- if (context != NULL)
- delete context;
-
+ // The QGLWidget takes the ownership of the context
context = new QGLContext(QGLFormat::defaultFormat(), &pixmap);
context->create();
if (context->isValid()) {
diff --git a/src/extensions/extensions.pro b/src/extensions/extensions.pro
index 3c5a58ce..4798d970 100644
--- a/src/extensions/extensions.pro
+++ b/src/extensions/extensions.pro
@@ -22,6 +22,9 @@ contains(DEFINES, HAVE_DBUS) {
LIBS += -lmeegotouchviews -lmeegotouchsettings -lmeegotouchcore
-SOURCES += mextensionslibrary.cpp
+SOURCES += mextensionwatcher.cpp \
+ mextensionslibrary.cpp
+
+HEADERS += mextensionwatcher.h
include(../common_bot.pri)
diff --git a/src/extensions/mashup/mashup/mappletinstancemanager.cpp b/src/extensions/mashup/mashup/mappletinstancemanager.cpp
index 99f2f11f..2a9ec44d 100644
--- a/src/extensions/mashup/mashup/mappletinstancemanager.cpp
+++ b/src/extensions/mashup/mashup/mappletinstancemanager.cpp
@@ -33,6 +33,8 @@
#include "mscenemanager.h"
#include "morientationtracker.h"
#include "maction.h"
+#include "mextensionwatcher.h"
+#include <algorithm>
const QString MAppletInstanceManager::PACKAGE_MANAGER_DBUS_SERVICE = "com.nokia.package_manager";
const QString MAppletInstanceManager::PACKAGE_MANAGER_DBUS_PATH = "/com/nokia/package_manager";
@@ -50,6 +52,7 @@ MAppletInstanceManager::~MAppletInstanceManager()
{
qDeleteAll(applets.values());
delete fileDataStore;
+ delete watcher;
}
void MAppletInstanceManager::init(const QString &mashupCanvasName, MDataStore *dataStore)
@@ -57,6 +60,7 @@ void MAppletInstanceManager::init(const QString &mashupCanvasName, MDataStore *d
this->applicationName = QFileInfo(QCoreApplication::applicationFilePath()).fileName();
this->mashupCanvasName = mashupCanvasName;
this->dataStore = dataStore;
+ this->watcher = new MExtensionWatcher;
if (dataStore == NULL) {
// Create a file datastore if a data store was not provided
@@ -75,6 +79,8 @@ void MAppletInstanceManager::init(const QString &mashupCanvasName, MDataStore *d
// Connect to the system bus to receive the Package Manager signals
QDBusConnection::systemBus().connect(QString(), PACKAGE_MANAGER_DBUS_PATH, PACKAGE_MANAGER_DBUS_INTERFACE, "OperationComplete", this, SLOT(operationComplete(QString, QString, QString)));
+ connect(watcher, SIGNAL(extensionChanged(const MDesktopEntry &)),
+ this, SLOT(updateApplet(const MDesktopEntry &)));
}
bool MAppletInstanceManager::restoreApplets()
@@ -114,6 +120,29 @@ void MAppletInstanceManager::instantiateAppletFromPackage(const QString &package
instantiateApplet(appletId);
}
+/*!
+ * A helper functor class for finding remaining applet instances
+ * after removing one instance
+ */
+struct FindAppletByFileName
+{
+ QString fileName_;
+ /**
+ * Constructs the functor
+ * \param fileName File name to compare against
+ */
+ explicit FindAppletByFileName(const QString& fileName)
+ : fileName_(fileName){
+ }
+ /**
+ * Compares an applet instance against the wanted file name
+ * \param data Instance to compare
+ */
+ bool operator()(const MAppletInstanceData* data) {
+ return data->desktopFile == fileName_;
+ }
+};
+
bool MAppletInstanceManager::removeApplet(MAppletId appletId)
{
// Make sure the applet instance exists in this particular applet instance manager
@@ -121,12 +150,20 @@ bool MAppletInstanceManager::removeApplet(MAppletId appletId)
appletId.mashupCanvasName() == mashupCanvasName && applets.contains(appletId.instanceId())) {
// Get the data for the applet
MAppletInstanceData *data = applets.value(appletId.instanceId());
-
+ QString fileName = data->desktopFile;
// Let interested parties know that the applet's widget should be removed
emit appletRemoved(data->widget);
// Remove the applet instance data
removeAppletInstanceData(appletId);
+
+ if (std::find_if(applets.constBegin(), applets.constEnd(),
+ FindAppletByFileName(fileName))
+ == applets.constEnd()) {
+ // this was the last instance, remove from watcher
+ watcher->removeExtension(data->desktopFile);
+ }
+
return true;
}
@@ -169,21 +206,24 @@ bool MAppletInstanceManager::instantiateApplet(MAppletId appletId)
QFile desktopFile(data->desktopFile);
if ((!data->desktopFile.isEmpty() && desktopFile.exists()) || data->installationStatus == MAppletInstanceData::Installing) {
// The desktop file exists, so the applet is installed or the applet was being installed: instantiate the applet
- MAppletMetaData metadata(data->desktopFile);
- if (metadata.isValid()) {
+ QSharedPointer<const MAppletMetaData>
+ metadata(new MAppletMetaData(data->desktopFile));
+ if (metadata->isValid()) {
// Check whether a runner is defined
bool success;
- if (metadata.runnerBinary().isEmpty()) {
+ if (metadata->runnerBinary().isEmpty()) {
// Runner not defined: create an in-process applet
- success = instantiateInProcessApplet(data, metadata);
+ // IN PROCESS APPLETS ARE NOT FULLY SUPPORTED AT THE MOMENT
+ success = instantiateInProcessApplet(data, *metadata);
} else {
// Runner is defined: create an out-of-process applet
- success = instantiateOutOfProcessApplet(data, metadata);
+ success = instantiateOutOfProcessApplet(data, *metadata);
}
if (success) {
// Notify that the applet placeholder instantiation is done
emit appletInstantiated(data->widget, *data->mashupCanvasDataStore);
+ watcher->addExtension(metadata);
return true;
}
}
@@ -208,6 +248,26 @@ bool MAppletInstanceManager::instantiateApplet(MAppletId appletId)
return false;
}
+void MAppletInstanceManager::updateApplet(const MDesktopEntry &updatedExtension)
+{
+ const MAppletMetaData* metadata =
+ dynamic_cast<const MAppletMetaData*>(&updatedExtension);
+ if (metadata->runnerBinary().isEmpty()) {
+ // Runner not defined: create an in-process applet
+ // IN PROCESS APPLETS ARE NOT FULLY SUPPORTED AT THE MOMENT
+ qWarning() << "In-process applet updates are not supported at the moment";
+ } else {
+ AppletContainerIterator appletIterator(applets);
+ while (appletIterator.hasNext()) {
+ appletIterator.next();
+ if (appletIterator.value()->desktopFile == metadata->fileName()) {
+ MAppletHandle *handle = dynamic_cast<MAppletHandle *>(appletIterator.value()->widget);
+ handle->reinit();
+ }
+ }
+ }
+}
+
bool MAppletInstanceManager::instantiateOutOfProcessApplet(MAppletInstanceData *data, const MAppletMetaData &metadata)
{
// Create an applet handle if one doesn't exist already
@@ -245,6 +305,7 @@ bool MAppletInstanceManager::instantiateOutOfProcessApplet(MAppletInstanceData *
return true;
}
+// IN PROCESS APPLETS ARE NOT FULLY SUPPORTED AT THE MOMENT
bool MAppletInstanceManager::instantiateInProcessApplet(MAppletInstanceData *data, const MAppletMetaData &metadata)
{
MFileDataStore *instanceDataStore = new MFileDataStore(data->instanceDataFilePath);
diff --git a/src/extensions/mashup/mashup/mappletinstancemanager.h b/src/extensions/mashup/mashup/mappletinstancemanager.h
index 52e1067b..b00fc81b 100644
--- a/src/extensions/mashup/mashup/mappletinstancemanager.h
+++ b/src/extensions/mashup/mashup/mappletinstancemanager.h
@@ -32,6 +32,8 @@ class MAppletMetaData;
class MAppletHandle;
class MFileDataStore;
class QDBusPendingCallWatcher;
+class MExtensionWatcher;
+class MDesktopEntry;
//! \internal
@@ -160,6 +162,14 @@ private slots:
*/
void receiveOperation(QDBusPendingCallWatcher *watcher);
+ /*!
+ * Tells us that we need to update the applet. Currently the \c watcher informs the manager
+ * that the update desktop file has changed
+ *
+ * \param appletData The applet that has changed.
+ */
+ void updateApplet(const MDesktopEntry &appletData);
+
private:
/*!
* Initializes the instance manager.
@@ -380,6 +390,9 @@ private:
//! A map for keeping track of running applets
AppletContainer applets;
+ //! The watcher used to monitor changes in the applets
+ MExtensionWatcher *watcher;
+
//! The last applet ID that used to be free
MAppletId::AppletInstanceID lastAppletInstanceID;
diff --git a/src/extensions/mextensionwatcher.cpp b/src/extensions/mextensionwatcher.cpp
new file mode 100644
index 00000000..44464d84
--- /dev/null
+++ b/src/extensions/mextensionwatcher.cpp
@@ -0,0 +1,68 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "mextensionwatcher.h"
+#include "mdesktopentry.h"
+#include "mapplicationextensionmetadata.h"
+#include <QFile>
+#include <QStringList>
+
+
+MExtensionWatcher::MExtensionWatcher()
+{
+ connect(&watcher, SIGNAL(fileChanged(const QString &)), this, SLOT(notifyDataChanged(const QString &)));
+}
+
+MExtensionWatcher::~MExtensionWatcher()
+{
+}
+
+void MExtensionWatcher::addExtension(
+ QSharedPointer<const MDesktopEntry> extension)
+{
+ QString fileName = extension->fileName();
+ if (!extensionsToWatch.contains(fileName)) {
+ extensionsToWatch.insert(fileName, extension);
+ watcher.addPath(fileName);
+ }
+}
+
+void MExtensionWatcher::removeExtension(const QString &fileName)
+{
+ extensionsToWatch.remove(fileName);
+}
+
+void MExtensionWatcher::notifyDataChanged(const QString &path) const
+{
+ // If the file does not exist anymore no need to signal an update for it
+ // observation of the file removal is handled by the instance managers
+ if (!QFile::exists(path)) {
+ return;
+ }
+ QHash<QString, QSharedPointer<const MDesktopEntry> >::const_iterator
+ extension = extensionsToWatch.find(path);
+ if (extension != extensionsToWatch.constEnd()) {
+ emit extensionChanged(*extension.value());
+ }
+ if (!watcher.files().contains(path)) {
+ // if the file is removed and recreated, we need to re-add
+ // the path to the watcher
+ watcher.addPath(path);
+ }
+}
diff --git a/src/extensions/mextensionwatcher.h b/src/extensions/mextensionwatcher.h
new file mode 100644
index 00000000..bc0a227e
--- /dev/null
+++ b/src/extensions/mextensionwatcher.h
@@ -0,0 +1,98 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MEXTENSIONWATCHER_H
+#define MEXTENSIONWATCHER_H
+
+#include <QFileSystemWatcher>
+#include <QHash>
+#include <QSharedPointer>
+
+class MDesktopEntry;
+
+/*!
+ * \brief \c MExtensionWatcher provides means to watch if either a given
+ * applet or a application extension has been updated by the package manager.
+ * If the change happens a corresponding signal will be emitted.
+ *
+ * The user of this class is responsible for the lifecycle management of the
+ * watched entries. This class does not assume ownership of the items nor can
+ * it detect if they are deleted. The user must remove the item from this
+ * watcher before deleting the item. Otherwise desktop file modification
+ * notification leads to undefined behaviour, because the target item of the
+ * notification will not exist.
+ */
+class MExtensionWatcher : public QObject
+{
+ Q_OBJECT
+
+public:
+ /*!
+ * Constructs the watcher instance
+ */
+ MExtensionWatcher();
+
+
+ /*!
+ * Destroys the wathcer instance
+ */
+ virtual ~MExtensionWatcher();
+
+ /*!
+ * Add an extension to the list of watched extensions.
+ * If the extension (its desktop entry) changes,
+ * a signal \see extensionChanged will be emitted.
+ *
+ * \param extension The extension to watch.
+ */
+ void addExtension(QSharedPointer<const MDesktopEntry> extension);
+
+ /*!
+ * Removes an extension from the list of watched extension
+ *
+ * \param fileName Name of the desktop file of the extension to
+ * remove
+ */
+ void removeExtension(const QString &fileName);
+
+Q_SIGNALS:
+
+ /*!
+ * Informs that an extension (its desktop file) has changed.
+ *
+ * \param extension The extension that has changed
+ */
+ void extensionChanged(const MDesktopEntry &extension) const;
+
+private slots:
+ //! Listens in on the actual changes
+ void notifyDataChanged(const QString &path) const;
+
+private:
+ //! The watcher instance for observing changes to desktop files
+ mutable QFileSystemWatcher watcher;
+ //! The list of applets to watch
+ QHash<QString, QSharedPointer<const MDesktopEntry> > extensionsToWatch;
+
+#ifdef UNIT_TEST
+ friend class Ut_MExtensionWatcher;
+#endif
+};
+
+#endif //MEXTENSIONWATCHER_H
diff --git a/src/icu-extradata/4.4.1/fi.txt b/src/icu-extradata/4.4.1/fi.txt
new file mode 100644
index 00000000..15b942ce
--- /dev/null
+++ b/src/icu-extradata/4.4.1/fi.txt
@@ -0,0 +1,21 @@
+fi{
+ calendar{
+ gregorian{
+ DateTimePatterns{
+ "H.mm.ss zzzz",
+ "H.mm.ss z",
+ "H.mm.ss",
+ "H.mm",
+ "cccc d. MMMM y",
+ "d. MMMM y",
+ "d.M.yyyy",
+ "d.M.yyyy",
+ "{1} {0}",
+ "{1} {0}",
+ "{1} {0}",
+ "{1} {0}",
+ "{1} {0}",
+ }
+ }
+ }
+}
diff --git a/src/icu-extradata/4.4.1/it.txt b/src/icu-extradata/4.4.1/it.txt
new file mode 100644
index 00000000..1c7b07aa
--- /dev/null
+++ b/src/icu-extradata/4.4.1/it.txt
@@ -0,0 +1,21 @@
+it{
+ calendar{
+ gregorian{
+ DateTimePatterns{
+ "HH:mm:ss zzzz",
+ "HH:mm:ss z",
+ "HH:mm:ss",
+ "HH:mm",
+ "cccc d LLLL y",
+ "dd MMMM y",
+ "dd/MMM/y",
+ "dd/MM/yy",
+ "{1} {0}",
+ "{1} {0}",
+ "{1} {0}",
+ "{1} {0}",
+ "{1} {0}",
+ }
+ }
+ }
+}
diff --git a/src/icu-extradata/4.4.1/lang/de_CH.txt b/src/icu-extradata/4.4.1/lang/de_CH.txt
new file mode 100644
index 00000000..22c5cea4
--- /dev/null
+++ b/src/icu-extradata/4.4.1/lang/de_CH.txt
@@ -0,0 +1,712 @@
+de_CH{
+ Keys{
+ calendar{"Kalender"}
+ collation{"Sortierung"}
+ currency{"Währung"}
+ }
+ Languages{
+ aa{"Afar"}
+ ab{"Abchasisch"}
+ ace{"Aceh-Sprache"}
+ ach{"Acholi-Sprache"}
+ ada{"Adangme"}
+ ady{"Adygeisch"}
+ ae{"Avestisch"}
+ af{"Afrikaans"}
+ afa{"Afroasiatisch"}
+ afh{"Afrihili"}
+ ain{"Ainu-Sprache"}
+ ak{"Akan"}
+ akk{"Akkadisch"}
+ ale{"Aleutisch"}
+ alg{"Algonkin-Sprache"}
+ alt{"Süd-Altaisch"}
+ am{"Amharisch"}
+ an{"Aragonesisch"}
+ ang{"Altenglisch"}
+ anp{"Angika"}
+ apa{"Apache-Sprache"}
+ ar{"Arabisch"}
+ arc{"Aramäisch"}
+ arn{"Araukanisch"}
+ arp{"Arapaho-Sprache"}
+ art{"Kunstsprache"}
+ arw{"Arawak-Sprache"}
+ as{"Assamesisch"}
+ ast{"Asturianisch"}
+ ath{"Athapaskisch"}
+ aus{"Australisch"}
+ av{"Awarisch"}
+ awa{"Awadhi"}
+ ay{"Aymara"}
+ az{"Aserbaidschanisch"}
+ ba{"Baschkirisch"}
+ bad{"Banda-Sprache"}
+ bai{"Bamileke-Sprache"}
+ bal{"Belutschisch"}
+ ban{"Balinesisch"}
+ bas{"Basaa-Sprache"}
+ bat{"Baltisch"}
+ be{"Weissrussisch"}
+ bej{"Bedauye"}
+ bem{"Bemba-Sprache"}
+ ber{"Berbersprache"}
+ bg{"Bulgarisch"}
+ bh{"Biharisch"}
+ bho{"Bhodschpuri"}
+ bi{"Bislama"}
+ bik{"Bikol-Sprache"}
+ bin{"Bini-Sprache"}
+ bla{"Blackfoot-Sprache"}
+ bm{"Bambara-Sprache"}
+ bn{"Bengalisch"}
+ bnt{"Bantusprache"}
+ bo{"Tibetisch"}
+ br{"Bretonisch"}
+ bra{"Braj-Bhakha"}
+ bs{"Bosnisch"}
+ btk{"Batak"}
+ bua{"Burjatisch"}
+ bug{"Buginesisch"}
+ byn{"Blin"}
+ ca{"Katalanisch"}
+ cad{"Caddo"}
+ cai{"Zentralamerikanische Indianersprache"}
+ car{"Karibisch"}
+ cau{"Kaukasisch"}
+ cch{"Atsam"}
+ ce{"Tschetschenisch"}
+ ceb{"Cebuano"}
+ cel{"Keltisch"}
+ ch{"Chamorro-Sprache"}
+ chb{"Chibcha-Sprache"}
+ chg{"Tschagataisch"}
+ chk{"Trukesisch"}
+ chm{"Tscheremissisch"}
+ chn{"Chinook"}
+ cho{"Choctaw"}
+ chp{"Chipewyan"}
+ chr{"Cherokee"}
+ chy{"Cheyenne"}
+ cmc{"Cham-Sprache"}
+ co{"Korsisch"}
+ cop{"Koptisch"}
+ cpe{"Kreolisch-Englische Sprache"}
+ cpf{"Kreolisch-Französische Sprache"}
+ cpp{"Kreolisch-Portugiesische Sprache"}
+ cr{"Cree"}
+ crh{"Krimtatarisch"}
+ crp{"Kreolische Sprache"}
+ cs{"Tschechisch"}
+ csb{"Kaschubisch"}
+ cu{"Kirchenslawisch"}
+ cus{"Kuschitisch"}
+ cv{"Tschuwaschisch"}
+ cy{"Walisisch"}
+ da{"Dänisch"}
+ dak{"Dakota-Sprache"}
+ dar{"Darginisch"}
+ day{"Dajak"}
+ de{"Deutsch"}
+ de_AT{"Österreichisches Deutsch"}
+ de_CH{"Schweizer Hochdeutsch"}
+ del{"Delaware-Sprache"}
+ den{"Slave"}
+ dgr{"Dogrib"}
+ din{"Dinka-Sprache"}
+ doi{"Dogri"}
+ dra{"Drawidisch"}
+ dsb{"Niedersorbisch"}
+ dua{"Duala"}
+ dum{"Mittelniederländisch"}
+ dv{"Maledivisch"}
+ dyu{"Dyula-Sprache"}
+ dz{"Bhutanisch"}
+ ee{"Ewe-Sprache"}
+ efi{"Efik"}
+ egy{"Ägyptisch"}
+ eka{"Ekajuk"}
+ el{"Griechisch"}
+ elx{"Elamisch"}
+ en{"Englisch"}
+ en_AU{"Australisches Englisch"}
+ en_CA{"Kanadisches Englisch"}
+ en_GB{"Britisches Englisch"}
+ en_US{"Amerikanisches Englisch"}
+ enm{"Mittelenglisch"}
+ eo{"Esperanto"}
+ es{"Spanisch"}
+ es_419{"Lateinamerikanisches Spanisch"}
+ es_ES{"Iberisches Spanisch"}
+ et{"Estnisch"}
+ eu{"Baskisch"}
+ ewo{"Ewondo"}
+ fa{"Persisch"}
+ fan{"Pangwe-Sprache"}
+ fat{"Fanti-Sprache"}
+ ff{"Ful"}
+ fi{"Finnisch"}
+ fil{"Filipino"}
+ fiu{"Finnougrisch"}
+ fj{"Fidschianisch"}
+ fo{"Färöisch"}
+ fon{"Fon-Sprache"}
+ fr{"Französisch"}
+ fr_CA{"Kanadisches Französisch"}
+ fr_CH{"Schweizer Französisch"}
+ frm{"Mittelfranzösisch"}
+ fro{"Altfranzösisch"}
+ frr{"Nordfriesisch"}
+ frs{"Ostfriesisch"}
+ fur{"Friulisch"}
+ fy{"Friesisch"}
+ ga{"Irisch"}
+ gaa{"Ga-Sprache"}
+ gay{"Gayo"}
+ gba{"Gbaya-Sprache"}
+ gd{"Schottisches Gälisch"}
+ gem{"Germanisch"}
+ gez{"Geez"}
+ gil{"Gilbertesisch"}
+ gl{"Galizisch"}
+ gmh{"Mittelhochdeutsch"}
+ gn{"Guarani"}
+ goh{"Althochdeutsch"}
+ gon{"Gondi-Sprache"}
+ gor{"Mongondou"}
+ got{"Gotisch"}
+ grb{"Grebo-Sprache"}
+ grc{"Altgriechisch"}
+ gsw{"Schweizerdeutsch"}
+ gu{"Gujarati"}
+ gv{"Manx"}
+ gwi{"Kutchin-Sprache"}
+ ha{"Hausa"}
+ hai{"Haida-Sprache"}
+ haw{"Hawaiisch"}
+ he{"Hebräisch"}
+ hi{"Hindi"}
+ hil{"Hiligaynon-Sprache"}
+ him{"Himachali"}
+ hit{"Hethitisch"}
+ hmn{"Miao-Sprache"}
+ ho{"Hiri-Motu"}
+ hr{"Kroatisch"}
+ hsb{"Obersorbisch"}
+ ht{"Haitianisch"}
+ hu{"Ungarisch"}
+ hup{"Hupa"}
+ hy{"Armenisch"}
+ hz{"Herero-Sprache"}
+ ia{"Interlingua"}
+ iba{"Iban"}
+ id{"Indonesisch"}
+ ie{"Interlingue"}
+ ig{"Igbo-Sprache"}
+ ii{"Sichuan Yi"}
+ ijo{"Ijo-Sprache"}
+ ik{"Inupiak"}
+ ilo{"Ilokano-Sprache"}
+ inc{"Indoarisch"}
+ ine{"Indogermanisch"}
+ inh{"Inguschisch"}
+ io{"Ido-Sprache"}
+ ira{"Iranische Sprache"}
+ iro{"Irokesische Sprache"}
+ is{"Isländisch"}
+ it{"Italienisch"}
+ iu{"Inukitut"}
+ ja{"Japanisch"}
+ jbo{"Lojban"}
+ jpr{"Jüdisch-Persisch"}
+ jrb{"Jüdisch-Arabisch"}
+ jv{"Javanisch"}
+ ka{"Georgisch"}
+ kaa{"Karakalpakisch"}
+ kab{"Kabylisch"}
+ kac{"Kachin-Sprache"}
+ kaj{"Jju"}
+ kam{"Kamba"}
+ kar{"Karenisch"}
+ kaw{"Kawi"}
+ kbd{"Kabardinisch"}
+ kcg{"Tyap"}
+ kfo{"Koro"}
+ kg{"Kongo"}
+ kha{"Khasi-Sprache"}
+ khi{"Khoisan-Sprache"}
+ kho{"Sakisch"}
+ ki{"Kikuyu-Sprache"}
+ kj{"Kwanyama"}
+ kk{"Kasachisch"}
+ kl{"Grönländisch"}
+ km{"Kambodschanisch"}
+ kmb{"Kimbundu-Sprache"}
+ kn{"Kannada"}
+ ko{"Koreanisch"}
+ kok{"Konkani"}
+ kos{"Kosraeanisch"}
+ kpe{"Kpelle-Sprache"}
+ kr{"Kanuri-Sprache"}
+ krc{"Karatschaiisch-Balkarisch"}
+ krl{"Karelisch"}
+ kro{"Kru-Sprache"}
+ kru{"Oraon-Sprache"}
+ ks{"Kaschmirisch"}
+ ku{"Kurdisch"}
+ kum{"Kumükisch"}
+ kut{"Kutenai-Sprache"}
+ kv{"Komi-Sprache"}
+ kw{"Kornisch"}
+ ky{"Kirgisisch"}
+ la{"Latein"}
+ lad{"Ladino"}
+ lah{"Lahnda"}
+ lam{"Lamba-Sprache"}
+ lb{"Luxemburgisch"}
+ lez{"Lesgisch"}
+ lg{"Ganda-Sprache"}
+ li{"Limburgisch"}
+ ln{"Lingala"}
+ lo{"Laotisch"}
+ lol{"Mongo"}
+ loz{"Rotse-Sprache"}
+ lt{"Litauisch"}
+ lu{"Luba-Katanga"}
+ lua{"Luba-Lulua"}
+ lui{"Luiseno-Sprache"}
+ lun{"Lunda-Sprache"}
+ luo{"Luo-Sprache"}
+ lus{"Lushai-Sprache"}
+ lv{"Lettisch"}
+ mad{"Maduresisch"}
+ mag{"Khotta"}
+ mai{"Maithili"}
+ mak{"Makassarisch"}
+ man{"Manding-Sprache"}
+ map{"Austronesisch"}
+ mas{"Massai-Sprache"}
+ mdf{"Moksha"}
+ mdr{"Mandaresisch"}
+ men{"Mende-Sprache"}
+ mg{"Malagassi-Sprache"}
+ mga{"Mittelirisch"}
+ mh{"Marschallesisch"}
+ mi{"Maori"}
+ mic{"Micmac-Sprache"}
+ min{"Minangkabau-Sprache"}
+ mis{"(andere Sprache)"}
+ mk{"Mazedonisch"}
+ mkh{"Mon-Khmer-Sprache"}
+ ml{"Malayalam"}
+ mn{"Mongolisch"}
+ mnc{"Mandschurisch"}
+ mni{"Meithei-Sprache"}
+ mno{"Manobo-Sprache"}
+ mo{"Moldauisch"}
+ moh{"Mohawk-Sprache"}
+ mos{"Mossi-Sprache"}
+ mr{"Marathi"}
+ ms{"Malaiisch"}
+ mt{"Maltesisch"}
+ mul{"Mehrsprachig"}
+ mun{"Munda-Sprache"}
+ mus{"Muskogee-Sprache"}
+ mwl{"Mirandesisch"}
+ mwr{"Marwari"}
+ my{"Birmanisch"}
+ myn{"Maya-Sprache"}
+ myv{"Ersja-Mordwinisch"}
+ na{"Nauruisch"}
+ nah{"Nahuatl"}
+ nai{"Nordamerikanische Indianersprache"}
+ nap{"Neapolitanisch"}
+ nb{"Norwegisch Bokmål"}
+ nd{"Nord-Ndebele-Sprache"}
+ nds{"Niederdeutsch"}
+ ne{"Nepalesisch"}
+ new{"Newari"}
+ ng{"Ndonga"}
+ nia{"Nias-Sprache"}
+ nic{"Nigerkordofanisch"}
+ niu{"Niue-Sprache"}
+ nl{"Niederländisch"}
+ nl_BE{"Flämisch"}
+ nn{"Norwegisch Nynorsk"}
+ no{"Norwegisch"}
+ nog{"Nogai"}
+ non{"Altnordisch"}
+ nqo{"N’Ko"}
+ nr{"Süd-Ndebele-Sprache"}
+ nso{"Nord-Sotho-Sprache"}
+ nub{"Nubisch"}
+ nv{"Navajo"}
+ nwc{"Alt-Newari"}
+ ny{"Nyanja-Sprache"}
+ nym{"Nyamwezi-Sprache"}
+ nyn{"Nyankole"}
+ nyo{"Nyoro"}
+ nzi{"Nzima"}
+ oc{"Okzitanisch"}
+ oj{"Ojibwa-Sprache"}
+ om{"Oromo"}
+ or{"Orija"}
+ os{"Ossetisch"}
+ osa{"Osage-Sprache"}
+ ota{"Osmanisch"}
+ oto{"Otomangue-Sprache"}
+ pa{"Pandschabisch"}
+ paa{"Papuasprache"}
+ pag{"Pangasinan-Sprache"}
+ pal{"Mittelpersisch"}
+ pam{"Pampanggan-Sprache"}
+ pap{"Papiamento"}
+ pau{"Palau"}
+ peo{"Altpersisch"}
+ phi{"Philippinen-Austronesisch"}
+ phn{"Phönikisch"}
+ pi{"Pali"}
+ pl{"Polnisch"}
+ pon{"Ponapeanisch"}
+ pra{"Prakrit"}
+ pro{"Altprovenzalisch"}
+ ps{"Paschtu"}
+ pt{"Portugiesisch"}
+ pt_BR{"Brasilianisches Portugiesisch"}
+ pt_PT{"Iberisches Portugiesisch"}
+ qu{"Quechua"}
+ raj{"Rajasthani"}
+ rap{"Osterinsel-Sprache"}
+ rar{"Rarotonganisch"}
+ rm{"Rätoromanisch"}
+ rn{"Rundi-Sprache"}
+ ro{"Rumänisch"}
+ roa{"Romanische Sprache"}
+ rom{"Romani"}
+ root{"Root"}
+ ru{"Russisch"}
+ rup{"Aromunisch"}
+ rw{"Ruandisch"}
+ sa{"Sanskrit"}
+ sad{"Sandawe-Sprache"}
+ sah{"Jakutisch"}
+ sai{"Südamerikanische Indianersprache"}
+ sal{"Salish-Sprache"}
+ sam{"Samaritanisch"}
+ sas{"Sasak"}
+ sat{"Santali"}
+ sc{"Sardisch"}
+ scn{"Sizilianisch"}
+ sco{"Schottisch"}
+ sd{"Sindhi"}
+ se{"Nord-Samisch"}
+ sel{"Selkupisch"}
+ sem{"Semitisch"}
+ sg{"Sango"}
+ sga{"Altirisch"}
+ sgn{"Gebärdensprache"}
+ sh{"Serbo-Kroatisch"}
+ shn{"Schan-Sprache"}
+ si{"Singhalesisch"}
+ sid{"Sidamo"}
+ sio{"Sioux-Sprache"}
+ sit{"Sinotibetisch"}
+ sk{"Slowakisch"}
+ sl{"Slowenisch"}
+ sla{"Slawisch"}
+ sm{"Samoanisch"}
+ sma{"Süd-Samisch"}
+ smi{"Lappisch"}
+ smj{"Lule-Lappisch"}
+ smn{"Inari-Lappisch"}
+ sms{"Skolt-Lappisch"}
+ sn{"Shona"}
+ snk{"Soninke-Sprache"}
+ so{"Somali"}
+ sog{"Sogdisch"}
+ son{"Songhai-Sprache"}
+ sq{"Albanisch"}
+ sr{"Serbisch"}
+ srn{"Srananisch"}
+ srr{"Serer-Sprache"}
+ ss{"Swazi"}
+ ssa{"Nilosaharanisch"}
+ st{"Süd-Sotho-Sprache"}
+ su{"Sundanesisch"}
+ suk{"Sukuma-Sprache"}
+ sus{"Susu"}
+ sux{"Sumerisch"}
+ sv{"Schwedisch"}
+ sw{"Suaheli"}
+ swb{"Komorisch"}
+ syc{"Altsyrisch"}
+ syr{"Syrisch"}
+ ta{"Tamilisch"}
+ tai{"Tai-Sprache"}
+ te{"Telugu"}
+ tem{"Temne"}
+ ter{"Tereno-Sprache"}
+ tet{"Tetum-Sprache"}
+ tg{"Tadschikisch"}
+ th{"Thailändisch"}
+ ti{"Tigrinja"}
+ tig{"Tigre"}
+ tiv{"Tiv-Sprache"}
+ tk{"Turkmenisch"}
+ tkl{"Tokelauanisch"}
+ tl{"Tagalog"}
+ tlh{"Klingonisch"}
+ tli{"Tlingit-Sprache"}
+ tmh{"Tamaseq"}
+ tn{"Tswana-Sprache"}
+ to{"Tongaisch"}
+ tog{"Tsonga-Sprache"}
+ tpi{"Neumelanesisch"}
+ tr{"Türkisch"}
+ ts{"Tsonga"}
+ tsi{"Tsimshian-Sprache"}
+ tt{"Tatarisch"}
+ tum{"Tumbuka-Sprache"}
+ tup{"Tupi-Sprache"}
+ tut{"Altaisch"}
+ tvl{"Elliceanisch"}
+ tw{"Twi"}
+ ty{"Tahitisch"}
+ tyv{"Tuwinisch"}
+ udm{"Udmurtisch"}
+ ug{"Uigurisch"}
+ uga{"Ugaritisch"}
+ uk{"Ukrainisch"}
+ umb{"Mbundu-Sprache"}
+ und{"Unbestimmte Sprache"}
+ ur{"Urdu"}
+ uz{"Usbekisch"}
+ vai{"Vai-Sprache"}
+ ve{"Venda-Sprache"}
+ vi{"Vietnamesisch"}
+ vo{"Volapük"}
+ vot{"Wotisch"}
+ wa{"Wallonisch"}
+ wak{"Wakashanisch"}
+ wal{"Walamo-Sprache"}
+ war{"Waray"}
+ was{"Washo-Sprache"}
+ wen{"Sorbisch"}
+ wo{"Wolof"}
+ xal{"Kalmückisch"}
+ xh{"Xhosa"}
+ yao{"Yao-Sprache"}
+ yap{"Yapesisch"}
+ yi{"Jiddisch"}
+ yo{"Yoruba"}
+ ypk{"Yupik-Sprache"}
+ yue{"Kantonesisch"}
+ za{"Zhuang"}
+ zap{"Zapotekisch"}
+ zbl{"Bliss-Symbole"}
+ zen{"Zenaga"}
+ zh{"Chinesisch"}
+ zh_Hans{"Chinesisch (vereinfacht)"}
+ zh_Hant{"Chinesisch (traditionell)"}
+ znd{"Zande-Sprache"}
+ zu{"Zulu"}
+ zun{"Zuni-Sprache"}
+ zxx{"Keine Sprachinhalte"}
+ zza{"Zaza"}
+ }
+ Scripts{
+ Arab{"Arabisch"}
+ Armi{"Armi"}
+ Armn{"Armenisch"}
+ Avst{"Avestisch"}
+ Bali{"Balinesisch"}
+ Batk{"Battakisch"}
+ Beng{"Bengalisch"}
+ Blis{"Bliss-Symbole"}
+ Bopo{"Bopomofo"}
+ Brah{"Brahmi"}
+ Brai{"Blindenschrift"}
+ Bugi{"Buginesisch"}
+ Buhd{"Buhid"}
+ Cakm{"Cakm"}
+ Cans{"UCAS"}
+ Cari{"Karisch"}
+ Cham{"Cham"}
+ Cher{"Cherokee"}
+ Cirt{"Cirth"}
+ Copt{"Koptisch"}
+ Cprt{"Zypriotisch"}
+ Cyrl{"Kyrillisch"}
+ Cyrs{"Altkirchenslawisch"}
+ Deva{"Devanagari"}
+ Dsrt{"Deseret"}
+ Egyd{"Ägyptisch - Demotisch"}
+ Egyh{"Ägyptisch - Hieratisch"}
+ Egyp{"Ägyptische Hieroglyphen"}
+ Ethi{"Äthiopisch"}
+ Geok{"Khutsuri"}
+ Geor{"Georgisch"}
+ Glag{"Glagolitisch"}
+ Goth{"Gotisch"}
+ Grek{"Griechisch"}
+ Gujr{"Gujarati"}
+ Guru{"Gurmukhi"}
+ Hang{"Hangul"}
+ Hani{"Chinesisch"}
+ Hano{"Hanunoo"}
+ Hans{"Vereinfachte Chinesische Schrift"}
+ Hant{"Traditionelle Chinesische Schrift"}
+ Hebr{"Hebräisch"}
+ Hira{"Hiragana"}
+ Hmng{"Pahawh Hmong"}
+ Hrkt{"Katakana oder Hiragana"}
+ Hung{"Altungarisch"}
+ Inds{"Indus-Schrift"}
+ Ital{"Altitalisch"}
+ Java{"Javanesisch"}
+ Jpan{"Japanisch"}
+ Kali{"Kayah Li"}
+ Kana{"Katakana"}
+ Khar{"Kharoshthi"}
+ Khmr{"Khmer"}
+ Knda{"Kannada"}
+ Kore{"Koreanisch"}
+ Kthi{"Kthi"}
+ Lana{"Lanna"}
+ Laoo{"Laotisch"}
+ Latf{"Lateinisch - Fraktur-Variante"}
+ Latg{"Lateinisch - Gälische Variante"}
+ Latn{"Lateinisch"}
+ Lepc{"Lepcha"}
+ Limb{"Limbu"}
+ Lina{"Linear A"}
+ Linb{"Linear B"}
+ Lyci{"Lykisch"}
+ Lydi{"Lydisch"}
+ Mand{"Mandäisch"}
+ Mani{"Manichäisch"}
+ Maya{"Maya-Hieroglyphen"}
+ Mero{"Meroitisch"}
+ Mlym{"Malaysisch"}
+ Mong{"Mongolisch"}
+ Moon{"Moon"}
+ Mtei{"Meitei Mayek"}
+ Mymr{"Birmanisch"}
+ Nkoo{"N’Ko"}
+ Ogam{"Ogham"}
+ Olck{"Ol Chiki"}
+ Orkh{"Orchon-Runen"}
+ Orya{"Oriya"}
+ Osma{"Osmanisch"}
+ Perm{"Altpermisch"}
+ Phag{"Phags-pa"}
+ Phli{"Phli"}
+ Phlp{"Phlp"}
+ Phlv{"Pahlavi"}
+ Phnx{"Phönizisch"}
+ Plrd{"Pollard Phonetisch"}
+ Prti{"Prti"}
+ Qaai{"Geerbter Schriftwert"}
+ Rjng{"Rejang"}
+ Roro{"Rongorongo"}
+ Runr{"Runenschrift"}
+ Samr{"Samaritanisch"}
+ Sara{"Sarati"}
+ Saur{"Saurashtra"}
+ Sgnw{"Gebärdensprache"}
+ Shaw{"Shaw-Alphabet"}
+ Sinh{"Singhalesisch"}
+ Sund{"Sundanesisch"}
+ Sylo{"Syloti Nagri"}
+ Syrc{"Syrisch"}
+ Syre{"Syrisch - Estrangelo-Variante"}
+ Syrj{"Westsyrisch"}
+ Syrn{"Ostsyrisch"}
+ Tagb{"Tagbanwa"}
+ Tale{"Tai Le"}
+ Talu{"Tai Lue"}
+ Taml{"Tamilisch"}
+ Tavt{"Tavt"}
+ Telu{"Telugu"}
+ Teng{"Tengwar"}
+ Tfng{"Tifinagh"}
+ Tglg{"Tagalog"}
+ Thaa{"Thaana"}
+ Thai{"Thai"}
+ Tibt{"Tibetisch"}
+ Ugar{"Ugaritisch"}
+ Vaii{"Vai"}
+ Visp{"Sichtbare Sprache"}
+ Xpeo{"Altpersisch"}
+ Xsux{"Sumerisch-akkadische Keilschrift"}
+ Yiii{"Yi"}
+ Zmth{"Zmth"}
+ Zsym{"Zsym"}
+ Zxxx{"Schriftlos"}
+ Zyyy{"Unbestimmt"}
+ Zzzz{"Uncodierte Schrift"}
+ }
+ Types{
+ calendar{
+ buddhist{"Buddhistischer Kalender"}
+ chinese{"Chinesischer Kalender"}
+ gregorian{"Gregorianischer Kalender"}
+ hebrew{"Hebräischer Kalender"}
+ indian{"Indischer Nationalkalender"}
+ islamic{"Islamischer Kalender"}
+ islamic-civil{"Bürgerlicher islamischer Kalender"}
+ japanese{"Japanischer Kalender"}
+ roc{"Kalender der Republik China"}
+ }
+ collation{
+ big5han{"Traditionelles Chinesisch - Big5"}
+ direct{"Direkte Sortierregeln"}
+ gb2312han{"Vereinfachtes Chinesisch - GB2312"}
+ phonebook{"Telefonbuch-Sortierregeln"}
+ pinyin{"Pinyin-Sortierregeln"}
+ stroke{"Strichfolge"}
+ traditional{"Traditionelle Sortierregeln"}
+ }
+ }
+ Variants{
+ 1606NICT{"Spätes Mittelfranzösisch"}
+ 1694ACAD{"Klassisches Französisch"}
+ 1901{"Alte deutsche Rechtschreibung"}
+ 1994{"Standardisierte Resianische Rechtschreibung"}
+ 1996{"Neue deutsche Rechtschreibung"}
+ AREVELA{"Ostarmenisch"}
+ AREVMDA{"Westarmenisch"}
+ BAKU1926{"Einheitliches Türkisches Alphabet"}
+ BISKE{"Bela-Dialekt"}
+ BOONT{"Boontling"}
+ FONIPA{"IPA Phonetisch"}
+ FONUPA{"Phonetisch (UPA)"}
+ LIPAW{"Lipovaz-Dialekt"}
+ MONOTON{"Monotonisch"}
+ NEDIS{"Natisone-Dialekt"}
+ NJIVA{"Njiva-Dialekt"}
+ OSOJS{"Osojane-Dialekt"}
+ PINYIN{"Pinyin"}
+ POLYTON{"Polytonisch"}
+ POSIX{"Posix"}
+ REVISED{"Revidierte Rechtschreibung"}
+ ROZAJ{"Resianisch"}
+ SAAHO{"Saho"}
+ SCOTLAND{"Schottisches Standardenglisch"}
+ SCOUSE{"Scouse-Dialekt"}
+ SOLBA{"Solbica-Dialekt"}
+ TARASK{"Taraskievica-Orthographie"}
+ VALENCIA{"Valencianisch"}
+ WADEGILE{"Wade-Giles"}
+ }
+ Version{"2.0.48.64"}
+ codePatterns{
+ language{"Sprache: {0}"}
+ script{"Schrift: {0}"}
+ territory{"Region: {0}"}
+ }
+ localeDisplayPattern{
+ pattern{"{0} ({1})"}
+ separator{", "}
+ }
+}
diff --git a/src/icu-extradata/4.4.1/region/de_CH.txt b/src/icu-extradata/4.4.1/region/de_CH.txt
new file mode 100644
index 00000000..5a129f9f
--- /dev/null
+++ b/src/icu-extradata/4.4.1/region/de_CH.txt
@@ -0,0 +1,294 @@
+de_CH{
+ Countries{
+ 001{"Welt"}
+ 002{"Afrika"}
+ 003{"Nordamerika"}
+ 005{"Südamerika"}
+ 009{"Ozeanien"}
+ 011{"Westafrika"}
+ 013{"Mittelamerika"}
+ 014{"Ostafrika"}
+ 015{"Nordafrika"}
+ 017{"Zentralafrika"}
+ 018{"Südliches Afrika"}
+ 019{"Amerika"}
+ 021{"Nördliches Amerika"}
+ 029{"Karibik"}
+ 030{"Ostasien"}
+ 034{"Südasien"}
+ 035{"Südostasien"}
+ 039{"Südeuropa"}
+ 053{"Australien und Neuseeland"}
+ 054{"Melanesien"}
+ 057{"Mikronesisches Inselgebiet"}
+ 061{"Polynesien"}
+ 062{"Süd-Zentralasien"}
+ 142{"Asien"}
+ 143{"Zentralasien"}
+ 145{"Westasien"}
+ 150{"Europa"}
+ 151{"Osteuropa"}
+ 154{"Nordeuropa"}
+ 155{"Westeuropa"}
+ 172{"Gemeinschaft Unabhängiger Staaten"}
+ 419{"Lateinamerika und Karibik"}
+ 830{"Kanalinseln"}
+ AC{"Ascension"}
+ AD{"Andorra"}
+ AE{"Vereinigte Arabische Emirate"}
+ AF{"Afghanistan"}
+ AG{"Antigua und Barbuda"}
+ AI{"Anguilla"}
+ AL{"Albanien"}
+ AM{"Armenien"}
+ AN{"Niederländische Antillen"}
+ AO{"Angola"}
+ AQ{"Antarktis"}
+ AR{"Argentinien"}
+ AS{"Amerikanisch-Samoa"}
+ AT{"Österreich"}
+ AU{"Australien"}
+ AW{"Aruba"}
+ AX{"Alandinseln"}
+ AZ{"Aserbaidschan"}
+ BA{"Bosnien und Herzegowina"}
+ BB{"Barbados"}
+ BD{"Bangladesh"}
+ BE{"Belgien"}
+ BF{"Burkina Faso"}
+ BG{"Bulgarien"}
+ BH{"Bahrain"}
+ BI{"Burundi"}
+ BJ{"Benin"}
+ BL{"St. Barthélemy"}
+ BM{"Bermuda"}
+ BN{"Brunei"}
+ BO{"Bolivien"}
+ BR{"Brasilien"}
+ BS{"Bahamas"}
+ BT{"Bhutan"}
+ BV{"Bouvetinsel"}
+ BW{"Botswana"}
+ BY{"Weissrussland"}
+ BZ{"Belize"}
+ CA{"Kanada"}
+ CC{"Kokosinseln"}
+ CD{"Kongo-Kinshasa"}
+ CF{"Zentralafrikanische Republik"}
+ CG{"Kongo-Brazzaville"}
+ CH{"Schweiz"}
+ CI{"Côte d’Ivoire"}
+ CK{"Cookinseln"}
+ CL{"Chile"}
+ CM{"Kamerun"}
+ CN{"China"}
+ CO{"Kolumbien"}
+ CP{"Clipperton-Insel"}
+ CR{"Costa Rica"}
+ CS{"Serbien und Montenegro"}
+ CU{"Kuba"}
+ CV{"Kapverden"}
+ CX{"Weihnachtsinsel"}
+ CY{"Zypern"}
+ CZ{"Tschechische Republik"}
+ DE{"Deutschland"}
+ DG{"Diego Garcia"}
+ DJ{"Djibouti"}
+ DK{"Dänemark"}
+ DM{"Dominica"}
+ DO{"Dominikanische Republik"}
+ DZ{"Algerien"}
+ EA{"Ceuta und Melilla"}
+ EC{"Ecuador"}
+ EE{"Estland"}
+ EG{"Ägypten"}
+ EH{"Westsahara"}
+ ER{"Eritrea"}
+ ES{"Spanien"}
+ ET{"Äthiopien"}
+ EU{"Europäische Union"}
+ FI{"Finnland"}
+ FJ{"Fidschi"}
+ FK{"Falklandinseln"}
+ FM{"Mikronesien"}
+ FO{"Färöer"}
+ FR{"Frankreich"}
+ GA{"Gabun"}
+ GB{"Grossbritannien"}
+ GD{"Grenada"}
+ GE{"Georgien"}
+ GF{"Französisch-Guayana"}
+ GG{"Guernsey"}
+ GH{"Ghana"}
+ GI{"Gibraltar"}
+ GL{"Grönland"}
+ GM{"Gambia"}
+ GN{"Guinea"}
+ GP{"Guadeloupe"}
+ GQ{"Äquatorialguinea"}
+ GR{"Griechenland"}
+ GS{"Südgeorgien und die Südlichen Sandwichinseln"}
+ GT{"Guatemala"}
+ GU{"Guam"}
+ GW{"Guinea-Bissau"}
+ GY{"Guyana"}
+ HK{"Sonderverwaltungszone Hongkong"}
+ HM{"Heard- und McDonald-Inseln"}
+ HN{"Honduras"}
+ HR{"Kroatien"}
+ HT{"Haiti"}
+ HU{"Ungarn"}
+ IC{"Kanarische Inseln"}
+ ID{"Indonesien"}
+ IE{"Irland"}
+ IL{"Israel"}
+ IM{"Isle of Man"}
+ IN{"Indien"}
+ IO{"Britisches Territorium im Indischen Ozean"}
+ IQ{"Irak"}
+ IR{"Iran"}
+ IS{"Island"}
+ IT{"Italien"}
+ JE{"Jersey"}
+ JM{"Jamaika"}
+ JO{"Jordanien"}
+ JP{"Japan"}
+ KE{"Kenia"}
+ KG{"Kirgisistan"}
+ KH{"Kambodscha"}
+ KI{"Kiribati"}
+ KM{"Komoren"}
+ KN{"St. Kitts und Nevis"}
+ KP{"Demokratische Volksrepublik Korea"}
+ KR{"Republik Korea"}
+ KW{"Kuwait"}
+ KY{"Kaimaninseln"}
+ KZ{"Kasachstan"}
+ LA{"Laos"}
+ LB{"Libanon"}
+ LC{"St. Lucia"}
+ LI{"Liechtenstein"}
+ LK{"Sri Lanka"}
+ LR{"Liberia"}
+ LS{"Lesotho"}
+ LT{"Litauen"}
+ LU{"Luxemburg"}
+ LV{"Lettland"}
+ LY{"Libyen"}
+ MA{"Marokko"}
+ MC{"Monaco"}
+ MD{"Republik Moldau"}
+ ME{"Montenegro"}
+ MF{"St. Martin"}
+ MG{"Madagaskar"}
+ MH{"Marshall-Inseln"}
+ MK{"Mazedonien"}
+ ML{"Mali"}
+ MM{"Myanmar"}
+ MN{"Mongolei"}
+ MO{"Sonderverwaltungszone Macao"}
+ MP{"Nördliche Marianen"}
+ MQ{"Martinique"}
+ MR{"Mauretanien"}
+ MS{"Montserrat"}
+ MT{"Malta"}
+ MU{"Mauritius"}
+ MV{"Malediven"}
+ MW{"Malawi"}
+ MX{"Mexiko"}
+ MY{"Malaysia"}
+ MZ{"Mosambik"}
+ NA{"Namibia"}
+ NC{"Neukaledonien"}
+ NE{"Niger"}
+ NF{"Norfolkinsel"}
+ NG{"Nigeria"}
+ NI{"Nicaragua"}
+ NL{"Niederlande"}
+ NO{"Norwegen"}
+ NP{"Nepal"}
+ NR{"Nauru"}
+ NU{"Niue"}
+ NZ{"Neuseeland"}
+ OM{"Oman"}
+ PA{"Panama"}
+ PE{"Peru"}
+ PF{"Französisch-Polynesien"}
+ PG{"Papua-Neuguinea"}
+ PH{"Philippinen"}
+ PK{"Pakistan"}
+ PL{"Polen"}
+ PM{"St. Pierre und Miquelon"}
+ PN{"Pitcairn"}
+ PR{"Puerto Rico"}
+ PS{"Palästinensische Autonomiegebiete"}
+ PT{"Portugal"}
+ PW{"Palau"}
+ PY{"Paraguay"}
+ QA{"Katar"}
+ QO{"Äusseres Ozeanien"}
+ RE{"Réunion"}
+ RO{"Rumänien"}
+ RS{"Serbien"}
+ RU{"Russische Föderation"}
+ RW{"Rwanda"}
+ SA{"Saudi-Arabien"}
+ SB{"Salomon-Inseln"}
+ SC{"Seychellen"}
+ SD{"Sudan"}
+ SE{"Schweden"}
+ SG{"Singapur"}
+ SH{"St. Helena"}
+ SI{"Slowenien"}
+ SJ{"Svalbard und Jan Mayen"}
+ SK{"Slowakei"}
+ SL{"Sierra Leone"}
+ SM{"San Marino"}
+ SN{"Senegal"}
+ SO{"Somalia"}
+ SR{"Suriname"}
+ ST{"Sao Tomé und Principe"}
+ SV{"El Salvador"}
+ SY{"Syrien"}
+ SZ{"Swasiland"}
+ TA{"Tristan da Cunha"}
+ TC{"Turks- und Caicosinseln"}
+ TD{"Tschad"}
+ TF{"Französische Süd- und Antarktisgebiete"}
+ TG{"Togo"}
+ TH{"Thailand"}
+ TJ{"Tadschikistan"}
+ TK{"Tokelau"}
+ TL{"Osttimor"}
+ TM{"Turkmenistan"}
+ TN{"Tunesien"}
+ TO{"Tonga"}
+ TR{"Türkei"}
+ TT{"Trinidad und Tobago"}
+ TV{"Tuvalu"}
+ TW{"Taiwan"}
+ TZ{"Tansania"}
+ UA{"Ukraine"}
+ UG{"Uganda"}
+ UM{"Amerikanisch-Ozeanien"}
+ US{"Vereinigte Staaten"}
+ UY{"Uruguay"}
+ UZ{"Usbekistan"}
+ VA{"Vatikanstadt"}
+ VC{"St. Vincent und die Grenadinen"}
+ VE{"Venezuela"}
+ VG{"Britische Jungferninseln"}
+ VI{"Amerikanische Jungferninseln"}
+ VN{"Vietnam"}
+ VU{"Vanuatu"}
+ WF{"Wallis und Futuna"}
+ WS{"Samoa"}
+ YE{"Jemen"}
+ YT{"Mayotte"}
+ ZA{"Südafrika"}
+ ZM{"Sambia"}
+ ZW{"Zimbabwe"}
+ ZZ{"Unbekannte oder ungültige Region"}
+ }
+ Version{"2.0.48.64"}
+}
diff --git a/src/icu-extradata/icu-extradata.pro b/src/icu-extradata/icu-extradata.pro
new file mode 100644
index 00000000..397fc4aa
--- /dev/null
+++ b/src/icu-extradata/icu-extradata.pro
@@ -0,0 +1,85 @@
+include($${M_BUILD_TREE}/mkspecs/features/meegotouch_defines.prf)
+
+ICUBINDIR = $$system(icu-config --bindir)
+ICUVERSION = $$system(icu-config --version)
+ICUDATA = $$system(icu-config --icudata) # for example “icudt44l”
+ICUUSRDATA = $$replace(ICUDATA, icudt, usrdt) # for example “usrdt44l”
+
+greaterThan(ICUVERSION, 4.4) {
+ LOCALESTXT = $${ICUVERSION}/fi.txt \
+ $${ICUVERSION}/it.txt
+ LANGTXT = $${ICUVERSION}/lang/de_CH.txt
+ REGIONTXT = $${ICUVERSION}/region/de_CH.txt
+} else {
+ # old icu version, just do nothing
+ LOCALESTXT = # empty, do nothing
+ LANGTXT = # empty, do nothing
+ REGIONTXT = # empty, do nothing
+}
+
+defineReplace(installPaths){
+ for(a,$$1){
+ val = $$replace(a, $${ICUVERSION}, $${ICUUSRDATA})
+ val = $$replace(val, txt, res)
+ val = $$OUT_PWD/$$val
+ result += $$val
+ }
+ return($$result)
+}
+
+LOCALESRES = $$installPaths(LOCALESTXT)
+LANGRES = $$installPaths(LANGTXT)
+REGIONRES = $$installPaths(REGIONTXT)
+
+isEqual(TEMPLATE_PREFIX, vc):vcproj=1
+isEmpty(vcproj) {
+ QMAKE_LINK = @: IGNORE THIS LINE
+ OBJECTS_DIR =
+ win32:CONFIG -= embed_manifest_exe
+} else {
+ CONFIG += console
+ PHONY_DEPS = .
+ phony_src.input = PHONY_DEPS
+ phony_src.output = phony.c
+ phony_src.variable_out = GENERATED_SOURCES
+ phony_src.commands = echo int main() { return 0; } > phony.c
+ phony_src.name = CREATE phony.c
+ phony_src.CONFIG += combine
+ QMAKE_EXTRA_COMPILERS += phony_src
+}
+
+locales.name = icu-locales-extradata-builder
+locales.input = LOCALESTXT
+locales.output = $$OUT_PWD/$$ICUUSRDATA/${QMAKE_FILE_BASE}.res
+locales.commands += mkdir -p $$OUT_PWD/$$ICUUSRDATA && $$ICUBINDIR/genrb -d $$OUT_PWD/$$ICUUSRDATA -s $$IN_PWD -e UTF-8 ${QMAKE_FILE_IN}
+locales.CONFIG = no_link target_predeps
+QMAKE_EXTRA_COMPILERS += locales
+
+lang.name = icu-lang-extradata-builder
+lang.input = LANGTXT
+lang.output = $$OUT_PWD/$$ICUUSRDATA/lang/${QMAKE_FILE_BASE}.res
+lang.commands += mkdir -p $$OUT_PWD/$$ICUUSRDATA/lang && $$ICUBINDIR/genrb -d $$OUT_PWD/$$ICUUSRDATA/lang -s $$IN_PWD -e UTF-8 ${QMAKE_FILE_IN}
+lang.CONFIG = no_link target_predeps
+QMAKE_EXTRA_COMPILERS += lang
+
+region.name = icu-region-extradata-builder
+region.input = REGIONTXT
+region.output = $$OUT_PWD/$$ICUUSRDATA/region/${QMAKE_FILE_BASE}.res
+region.commands += mkdir -p $$OUT_PWD/$$ICUUSRDATA/region && $$ICUBINDIR/genrb -d $$OUT_PWD/$$ICUUSRDATA/region -s $$IN_PWD -e UTF-8 ${QMAKE_FILE_IN}
+region.CONFIG = no_link target_predeps
+QMAKE_EXTRA_COMPILERS += region
+
+localesres.files = $$LOCALESRES
+localesres.CONFIG += no_check_exist
+localesres.path = $$M_ICUEXTRADATA_DIR/$$ICUUSRDATA
+INSTALLS += localesres
+
+langres.files = $$LANGRES
+langres.CONFIG += no_check_exist
+langres.path = $$M_ICUEXTRADATA_DIR/$$ICUUSRDATA/lang
+INSTALLS += langres
+
+regionres.files = $$REGIONRES
+regionres.CONFIG += no_check_exist
+regionres.path = $$M_ICUEXTRADATA_DIR/$$ICUUSRDATA/region
+INSTALLS += regionres
diff --git a/src/include/MAbstractItemModel b/src/include/MAbstractItemModel
new file mode 100644
index 00000000..3401afc8
--- /dev/null
+++ b/src/include/MAbstractItemModel
@@ -0,0 +1 @@
+#include "mabstractitemmodel.h" \ No newline at end of file
diff --git a/src/include/MBubbleItem b/src/include/MBubbleItem
new file mode 100644
index 00000000..4c713274
--- /dev/null
+++ b/src/include/MBubbleItem
@@ -0,0 +1 @@
+#include "mbubbleitem.h" \ No newline at end of file
diff --git a/src/include/MListFilter b/src/include/MListFilter
new file mode 100644
index 00000000..8849ff39
--- /dev/null
+++ b/src/include/MListFilter
@@ -0,0 +1,2 @@
+#include "mlistfilter.h"
+
diff --git a/src/include/MListItem b/src/include/MListItem
new file mode 100644
index 00000000..97a327cd
--- /dev/null
+++ b/src/include/MListItem
@@ -0,0 +1 @@
+#include "mlistitem.h"
diff --git a/src/include/MSortFilterProxyModel b/src/include/MSortFilterProxyModel
new file mode 100644
index 00000000..e7f5ae7f
--- /dev/null
+++ b/src/include/MSortFilterProxyModel
@@ -0,0 +1 @@
+#include "msortfilterproxymodel.h" \ No newline at end of file
diff --git a/src/include/mabstractitemmodel.h b/src/include/mabstractitemmodel.h
new file mode 100644
index 00000000..b8104851
--- /dev/null
+++ b/src/include/mabstractitemmodel.h
@@ -0,0 +1,20 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "../corelib/widgets/mabstractitemmodel.h"
diff --git a/src/include/mbubbleitem.h b/src/include/mbubbleitem.h
new file mode 100644
index 00000000..467e03bd
--- /dev/null
+++ b/src/include/mbubbleitem.h
@@ -0,0 +1,20 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "../corelib/widgets/mbubbleitem.h"
diff --git a/src/include/mlistfilter.h b/src/include/mlistfilter.h
new file mode 100644
index 00000000..380f7b9c
--- /dev/null
+++ b/src/include/mlistfilter.h
@@ -0,0 +1,21 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "../corelib/widgets/mlistfilter.h"
+
diff --git a/src/include/mlistitem.h b/src/include/mlistitem.h
new file mode 100644
index 00000000..6394f2d5
--- /dev/null
+++ b/src/include/mlistitem.h
@@ -0,0 +1,20 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "../corelib/widgets/mlistitem.h"
diff --git a/src/include/msortfilterproxymodel.h b/src/include/msortfilterproxymodel.h
new file mode 100644
index 00000000..94def391
--- /dev/null
+++ b/src/include/msortfilterproxymodel.h
@@ -0,0 +1,20 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "../corelib/widgets/msortfilterproxymodel.h" \ No newline at end of file
diff --git a/src/views/animations/mwarpanimation.cpp b/src/views/animations/mwarpanimation.cpp
index 780d5a94..92a7ce3b 100644
--- a/src/views/animations/mwarpanimation.cpp
+++ b/src/views/animations/mwarpanimation.cpp
@@ -99,6 +99,12 @@ void MWarpAnimation::updateState(QAbstractAnimation::State newState,
offsetAnimation->setStartValue(QPointF(0, 0));
offsetAnimation->setEndValue(QPointF(style()->warpDistance(), 0));
}
+ } else if (newState == Stopped && target) {
+ if (warpDirection == OutFromLeft || warpDirection == OutFromRight) {
+ target->hide();
+ target->setOpacity(1);
+ target->setPaintOffset(QPointF(0, 0));
+ }
}
}
diff --git a/src/views/mapplicationmenuview.h b/src/views/mapplicationmenuview.h
index a3d51238..d9d4f073 100644
--- a/src/views/mapplicationmenuview.h
+++ b/src/views/mapplicationmenuview.h
@@ -36,9 +36,9 @@ class MApplicationMenuViewPrivate;
\section MApplicationMenuViewOverview Overview
MApplicationMenuView is used to visualize actions placed into the MApplicationMenu.
- MApplicationMenuView appears once the user clicks on the view menu title area. It is opened on
+ MApplicationMenuView appears once the user clicks on the application menu title area. It is opened on
top of the current application view. Background of the view is dimmed/blurred when application
- menu is open. The outlook of view menu can be changed using the styling attributes defined in
+ menu is open. The outlook of application menu can be changed using the styling attributes defined in
MApplicationMenuStyle and MSceneWindowStyle.
The following action widgets are supported for this particular view:
@@ -67,9 +67,9 @@ class MApplicationMenuViewPrivate;
\section MApplicationMenuInteractions Interactions
- The view can be closed by tapping anywhere outside the menu (anywhere in the dimmed area)
- - The view can also be closed from the top of screen (from the view menu title, or the top right corner)
- - Selecting an action command from the view menu closes the menu
- - Selecting a view style command closes the view menu and sets the view and its contents in
+ - The view can also be closed from the top of screen (from the application menu title, or the top right corner)
+ - Selecting an action command from the application menu closes the menu
+ - Selecting a view style command closes the application menu and sets the view and its contents in
the newly selected style.
\sa MApplicationMenu MApplicationMenuModel MApplicationMenuStyle
diff --git a/src/views/mbubbleitembackgroundview.cpp b/src/views/mbubbleitembackgroundview.cpp
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/views/mbubbleitembackgroundview.cpp
diff --git a/src/views/mbubbleitembackgroundview.h b/src/views/mbubbleitembackgroundview.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/views/mbubbleitembackgroundview.h
diff --git a/src/views/mbubbleitemview.cpp b/src/views/mbubbleitemview.cpp
new file mode 100644
index 00000000..55edc5e4
--- /dev/null
+++ b/src/views/mbubbleitemview.cpp
@@ -0,0 +1,299 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include <MScalableImage>
+#include <MImageWidget>
+#include <MLabel>
+#include <MWidgetController>
+#include <MWidgetView>
+#include <MCancelEvent>
+#include <mviewcreator.h>
+#include <MSeparator>
+
+#include <QGraphicsGridLayout>
+#include <QGraphicsLinearLayout>
+#include <QGraphicsSceneEvent>
+
+#include "mbubbleitem.h"
+#include "mbubbleitemview.h"
+#include "mbubbleitemview_p.h"
+#include "mbubbleitembackground_p.h"
+
+MBubbleItemViewPrivate::MBubbleItemViewPrivate()
+ : avatar(0),
+ speechBubble(0),
+ timeStampLabel(0),
+ messageComposition(0),
+ numberOfCommentsLabel(0),
+ numberOfThumbsUpLabel(0),
+ separator(0),
+ currentCentralWidget(0)
+{
+ layout = new QGraphicsGridLayout;
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->setSpacing(0);
+
+ innerLayout = new QGraphicsLinearLayout(Qt::Vertical);
+
+ timeStampLabel = new MLabel();
+ timeStampLabel->setObjectName("MBubbleItemTimeStamp");
+ timeStampLabel->setAlignment(Qt::AlignRight);
+
+ messageComposition = new MLabel();
+ messageComposition->setWordWrap(true);
+ messageComposition->setAlignment(Qt::AlignLeft);
+}
+
+MBubbleItemViewPrivate::~MBubbleItemViewPrivate()
+{
+ clearLayout();
+}
+
+void MBubbleItemViewPrivate::initLayout()
+{
+ Q_Q(MBubbleItemView);
+
+ clearLayout();
+
+ replaceAvatar();
+
+ if (controller->messageType() == MBubbleItem::Incoming) {
+ if(controller->avatar()) {
+ layout->addItem(controller->avatar(), 0,0);
+ layout->addItem(speechBubble,0,1);
+ } else {
+ layout->addItem(speechBubble,0,0);
+ }
+ } else if(controller->messageType() == MBubbleItem::Outgoing) {
+ layout->addItem(speechBubble,0,0);
+ }
+
+ innerLayout = new QGraphicsLinearLayout(Qt::Vertical, speechBubble);
+ messageComposition->setObjectName("MBubbleItemMessage");
+
+ innerLayout->addItem(messageComposition);
+
+ if (q->model()->commentsString().isEmpty() && q->model()->thumbsUpString().isEmpty()) {
+ innerLayout->addItem(timeStampLabel);
+ timeStampLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
+ } else {
+ timeStampLabel->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
+
+ QGraphicsLinearLayout* informationWidgetsLayout = new QGraphicsLinearLayout(Qt::Horizontal);
+ informationWidgetsLayout->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
+
+ MLabel* alignTimeStampToTheRight = new MLabel();
+ alignTimeStampToTheRight->setAlignment(Qt::AlignLeft);
+ alignTimeStampToTheRight->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Minimum);
+ informationWidgetsLayout->addItem(alignTimeStampToTheRight);
+
+ if (!q->model()->commentsString().isEmpty()) {
+ MImageWidget* numberOfCommentsIcon = new MImageWidget("icon-s-common-presence-away");
+ numberOfCommentsIcon->setObjectName("MBubbleItemNumberOfCommentsIcon");
+
+ numberOfCommentsLabel = new MLabel(q->model()->commentsString());
+ numberOfCommentsLabel->setObjectName("MBubbleItemNumberOfCommentsLabel");
+
+ informationWidgetsLayout->addItem(numberOfCommentsIcon);
+ informationWidgetsLayout->addItem(numberOfCommentsLabel);
+ }
+ if (!q->model()->thumbsUpString().isEmpty()) {
+ MImageWidget* numberOfThumbsIcon = new MImageWidget("icon-s-common-presence-offline");
+ numberOfThumbsIcon->setObjectName("MBubbleItemNumberOfThumbsIcon");
+
+ numberOfThumbsUpLabel = new MLabel(q->model()->thumbsUpString());
+ numberOfThumbsUpLabel->setObjectName("MBubbleItemNumberofThumbsLabel");
+
+ informationWidgetsLayout->addItem(numberOfThumbsIcon);
+ informationWidgetsLayout->addItem(numberOfThumbsUpLabel);
+ }
+
+ informationWidgetsLayout->addItem(timeStampLabel);
+ innerLayout->addItem(informationWidgetsLayout);
+ }
+
+ setupCentralWidget();
+
+ controller->connect(speechBubble, SIGNAL(clicked()), controller, SIGNAL(bubbleClicked()));
+}
+
+void MBubbleItemViewPrivate::clearLayout()
+{
+ for (int i = 0; i < layout->count(); i++)
+ layout->removeAt(0);
+ for (int i = 0; i < innerLayout->count(); i++)
+ innerLayout->removeAt(0);
+}
+
+void MBubbleItemViewPrivate::replaceAvatar()
+{
+ if (avatar) {
+ for (int i = 0; i < layout->count(); i ++) {
+ if (layout->itemAt(i) == avatar)
+ layout->removeAt(i);
+ }
+ delete avatar;
+ avatar = 0;
+ }
+
+ if (controller->avatar() && controller->messageType() == MBubbleItem::Incoming) {
+ if (controller->avatar()->objectName().isEmpty())
+ controller->avatar()->setObjectName("MBubbleItemAvatar");
+ layout->addItem(controller->avatar(), 0, 0);
+ avatar = controller->avatar();
+ }
+}
+
+void MBubbleItemViewPrivate::setupCentralWidget()
+{
+ Q_Q(MBubbleItemView);
+
+ if (q->model()->centralWidget() &&
+ q->model()->centralWidget() != currentCentralWidget) {
+ separator = new MSeparator;
+ separator->setOrientation(Qt::Horizontal);
+ innerLayout->addItem(separator);
+
+ currentCentralWidget = q->model()->centralWidget();
+ innerLayout->addItem(currentCentralWidget);
+ } else {
+ if (separator) {
+ innerLayout->removeItem(separator);
+ delete separator;
+ separator = 0;
+ }
+
+ if (currentCentralWidget) {
+ innerLayout->removeItem(currentCentralWidget);
+ currentCentralWidget = 0;
+ }
+ }
+}
+
+void MBubbleItemViewPrivate::applyStyle()
+{
+}
+
+void MBubbleItemViewPrivate::updateMessageComposition()
+{
+ Q_Q(MBubbleItemView);
+
+ if (controller->messageType() == MBubbleItem::Incoming)
+ messageComposition->setText("<b>" + q->model()->senderName() + "</b>: " + q->model()->message());
+ else if (controller->messageType() == MBubbleItem::Outgoing)
+ messageComposition->setText(q->model()->message() + "<b></b>");
+}
+
+MBubbleItemView::MBubbleItemView(MBubbleItem *controller)
+ : MWidgetView(* new MBubbleItemViewPrivate, controller)
+{
+ Q_D(MBubbleItemView);
+ d->controller = controller;
+ controller->setLayout(d->layout);
+ d->layout->setParentLayoutItem(controller);
+}
+
+MBubbleItemView::MBubbleItemView(MBubbleItemViewPrivate &dd, MBubbleItem *controller)
+ : MWidgetView(dd, controller)
+{
+ Q_D(MBubbleItemView);
+ d->controller = controller;
+ controller->setLayout(d->layout);
+}
+
+MBubbleItemView::~MBubbleItemView()
+{
+}
+
+void MBubbleItemView::applyStyle()
+{
+ MWidgetView::applyStyle();
+
+ Q_D(MBubbleItemView);
+ d->applyStyle();
+}
+
+void MBubbleItemView::updateData(const QList<const char *> &modifications)
+{
+ Q_D(MBubbleItemView);
+
+ MWidgetView::updateData(modifications);
+
+ const char *member;
+ for (int i = 0; i < modifications.count(); i++) {
+ member = modifications[i];
+ if (member == MBubbleItemModel::Avatar) {
+ d->replaceAvatar();
+ } else if (member == MBubbleItemModel::SenderName) {
+ d->updateMessageComposition();
+ } else if (member == MBubbleItemModel::TimeStamp) {
+ d->timeStampLabel->setText(model()->timeStamp());
+ } else if (member == MBubbleItemModel::Message) {
+ d->updateMessageComposition();
+ } else if (member == MBubbleItemModel::CentralWidget) {
+ d->setupCentralWidget();
+ } else if (member == MBubbleItemModel::MessageType) {
+ d->speechBubble->setMessageType(static_cast<MBubbleItem::MessageType>(model()->messageType()));
+ d->updateMessageComposition();
+ d->initLayout();
+ } else if(member == MBubbleItemModel::CommentsString) {
+ if (d->numberOfCommentsLabel)
+ d->numberOfCommentsLabel->setText(model()->commentsString());
+ } else if(member == MBubbleItemModel::ThumbsUpString) {
+ if (d->numberOfCommentsLabel)
+ d->numberOfCommentsLabel->setText(model()->thumbsUpString());
+ }
+ }
+}
+
+void MBubbleItemView::setupModel()
+{
+ Q_D(MBubbleItemView);
+
+ MWidgetView::setupModel();
+
+ d->timeStampLabel->setText(model()->timeStamp());
+
+ connect(d->messageComposition, SIGNAL(linkActivated(QString)), d->controller, SIGNAL(linkActivated(QString)));
+ d->updateMessageComposition();
+
+ d->speechBubble = new MBubbleItemBackground(d->controller);
+ d->speechBubble->setMessageType(static_cast<MBubbleItem::MessageType>(model()->messageType()));
+
+ d->initLayout();
+}
+
+void MBubbleItemView::setSelected(bool selected)
+{
+ Q_UNUSED(selected);
+}
+
+void MBubbleItemView::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_UNUSED(event);
+}
+
+void MBubbleItemView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_UNUSED(event);
+}
+
+
+M_REGISTER_VIEW_NEW(MBubbleItemView, MBubbleItem)
+
diff --git a/src/views/mbubbleitemview.h b/src/views/mbubbleitemview.h
new file mode 100644
index 00000000..a07254be
--- /dev/null
+++ b/src/views/mbubbleitemview.h
@@ -0,0 +1,74 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MBUBBLEITEMVIEW_H__
+#define MBUBBLEITEMVIEW_H__
+
+#include "mwidgetview.h"
+#include <MImageWidget>
+#include "mimagewidgetview.h"
+#include "mbubbleitemmodel.h"
+#include "mbubbleitembackgroundstyle.h"
+
+class MBubbleItem;
+class MBubbleItemViewPrivate;
+
+/*!
+ \class MBubbleItemView
+ \brief View class for MBubbleItem.
+
+ \ingroup views
+
+ \section MBubbleItemView Overview
+ MBubbleItemView draws a MBubbleItem in 2 text lines and an avatar, and a speech bubble in the background.
+
+ \image html bubble-item.png
+ */
+class M_EXPORT MBubbleItemView : public MWidgetView
+{
+ Q_OBJECT
+ M_VIEW(MBubbleItemModel, MWidgetStyle)
+
+public:
+ MBubbleItemView(MBubbleItem *controller);
+ virtual ~MBubbleItemView();
+
+protected slots:
+ virtual void updateData(const QList<const char *> &modifications);
+ void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+
+protected:
+ //! \reimp
+ virtual void setupModel();
+ virtual void applyStyle();
+ //! \reimp_end
+
+ void setSelected(bool selected);
+
+ //! \internal
+ MBubbleItemView(MBubbleItemViewPrivate &dd, MBubbleItem *controller);
+ //! \internal_end
+
+private:
+ Q_DISABLE_COPY(MBubbleItemView)
+ Q_DECLARE_PRIVATE(MBubbleItemView)
+};
+
+#endif
diff --git a/src/views/mbubbleitemview_p.h b/src/views/mbubbleitemview_p.h
new file mode 100644
index 00000000..150d162e
--- /dev/null
+++ b/src/views/mbubbleitemview_p.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MBUBBLEITEM_P_H__
+#define MBUBBLEITEM_P_H__
+
+#include "mbubbleitem.h"
+#include "core/mwidgetview_p.h"
+
+class MLabel;
+class MImageWidget;
+class MScalableImage;
+class MControllerWidget;
+class QGraphicsGridLayout;
+class MBubbleItemBackground;
+class MSeparator;
+class MImageWidget;
+
+class MBubbleItemViewPrivate : public MWidgetViewPrivate
+{
+ Q_DECLARE_PUBLIC(MBubbleItemView)
+
+public:
+ MBubbleItemViewPrivate();
+ virtual ~MBubbleItemViewPrivate();
+
+ void initLayout();
+ void clearLayout();
+ void replaceAvatar();
+ void setupCentralWidget();
+
+ void applyStyle();
+ void updateMessageComposition();
+
+ MImageWidget *avatar;
+ MBubbleItemBackground* speechBubble;
+
+ MLabel* timeStampLabel;
+ MLabel* messageComposition;
+ MLabel* numberOfCommentsLabel;
+ MLabel* numberOfThumbsUpLabel;
+
+ MImageWidget* serviceIcon;
+ MSeparator* separator;
+
+ QGraphicsWidget* currentCentralWidget;
+
+private:
+ MBubbleItem *controller;
+ QGraphicsGridLayout *layout;
+ QGraphicsLinearLayout *innerLayout;
+};
+
+#endif
diff --git a/src/views/mbuttonview.cpp b/src/views/mbuttonview.cpp
index b0fa0105..7daafe39 100644
--- a/src/views/mbuttonview.cpp
+++ b/src/views/mbuttonview.cpp
@@ -335,11 +335,18 @@ void MButtonView::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
rect.adjust(-RELEASE_MISS_DELTA, -RELEASE_MISS_DELTA,
RELEASE_MISS_DELTA, RELEASE_MISS_DELTA);
- bool pressed = rect.contains(touch);
-
- if ( pressed != model()->down()) {
- model()->setDown(pressed);
+ if (rect.contains(touch)) {
+ if (!model()->down()) {
+ model()->setDown(true);
+ style()->pressFeedback().play();
+ }
+ } else {
+ if (model()->down()) {
+ model()->setDown(false);
+ style()->cancelFeedback().play();
+ }
}
+
}
void MButtonView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
@@ -368,6 +375,9 @@ void MButtonView::cancelEvent(MCancelEvent *event)
if (!model()->down()) {
return;
}
+
+ style()->cancelFeedback().play();
+
model()->setDown(false);
}
diff --git a/src/views/mcontentitemview.cpp b/src/views/mcontentitemview.cpp
index 4e9e86cb..f400cfd7 100644
--- a/src/views/mcontentitemview.cpp
+++ b/src/views/mcontentitemview.cpp
@@ -286,9 +286,9 @@ void MContentItemViewPrivate::setImage(const QImage &i)
image()->setImage(i);
}
-void MContentItemViewPrivate::setImageID(const QString &id)
+void MContentItemViewPrivate::setImage(const QString &i, const QSize &s)
{
- image()->setImage(id);
+ image()->setImage(i, s);
}
void MContentItemViewPrivate::setOptionalImage(const QImage& i)
@@ -296,6 +296,11 @@ void MContentItemViewPrivate::setOptionalImage(const QImage& i)
optionalImage()->setImage(i);
}
+void MContentItemViewPrivate::setOptionalImage(const QString &i, const QSize &s)
+{
+ optionalImage()->setImage(i, s);
+}
+
void MContentItemViewPrivate::applyStyle()
{
Q_Q(MContentItemView);
@@ -371,16 +376,20 @@ void MContentItemView::updateData(const QList<const char *> &modifications)
d->setSubtitle(model()->subtitle());
} else if (member == MContentItemModel::ItemPixmap) {
d->setPixmap(model()->itemPixmap());
- } else if (member == MContentItemModel::ItemImageID) {
- d->setImageID(model()->itemImageID());
} else if (member == MContentItemModel::Selected) {
setSelected(model()->selected());
} else if(member == MContentItemModel::OptionalPixmap){
d->setOptionalPixmap(d->controller->optionalPixmap());
} else if(member == MContentItemModel::OptionalImage){
d->setOptionalImage(model()->optionalImage());
+ } else if(member == MContentItemModel::OptionalImageID ||
+ member == MContentItemModel::OptionalImageSize) {
+ d->setOptionalImage(model()->optionalImageID(), model()->optionalImageSize());
} else if(member == MContentItemModel::ItemImage) {
d->setImage(model()->itemImage());
+ } else if(member == MContentItemModel::ItemImageID ||
+ member == MContentItemModel::ItemImageSize) {
+ d->setImage(model()->itemImageID(), model()->itemImageSize());
} else if(member == MContentItemModel::AdditionalItem ||
member == MContentItemModel::SmallItem) {
if (d->configuredStyle == MContentItem::TwoIconsTwoWidgets) {
@@ -407,10 +416,12 @@ void MContentItemView::setupModel()
d->setOptionalPixmap(d->controller->optionalPixmap());
if(!d->controller->optionalImage().isNull())
d->setOptionalImage(d->controller->optionalImage());
+ if(!model()->optionalImageID().isNull())
+ d->setOptionalImage(model()->optionalImageID(), model()->optionalImageSize());
if(!d->controller->image().isNull())
d->setImage(d->controller->image());
if(!model()->itemImageID().isNull())
- d->setImageID(model()->itemImageID());
+ d->setImage(model()->itemImageID(), model()->itemImageSize());
d->initLayout(static_cast<MContentItem::ContentItemStyle>(model()->itemStyle()));
}
diff --git a/src/views/mcontentitemview_p.h b/src/views/mcontentitemview_p.h
index 1689c7f9..97aeba7f 100644
--- a/src/views/mcontentitemview_p.h
+++ b/src/views/mcontentitemview_p.h
@@ -48,8 +48,9 @@ public:
inline void setPixmap(const QPixmap& pixmap);
inline void setOptionalPixmap(const QPixmap& pixmap);
inline void setImage(const QImage& image);
- inline void setImageID(const QString &id);
+ inline void setImage(const QString& id, const QSize &s);
inline void setOptionalImage(const QImage& image);
+ inline void setOptionalImage(const QString& id, const QSize &s);
void initLayout(MContentItem::ContentItemStyle style);
void clearLayout();
diff --git a/src/views/mdialogview.cpp b/src/views/mdialogview.cpp
index c6c76fd1..ca7049a3 100644
--- a/src/views/mdialogview.cpp
+++ b/src/views/mdialogview.cpp
@@ -438,6 +438,10 @@ void MDialogViewPrivate::addButton(MButtonModel *buttonModel)
buttonAdded = true;
}
} while (!buttonAdded);
+ for (i = 0; i < buttonBoxLayout->count(); i++) {
+ buttonBoxLayoutPolicy->itemAt(i)->setPreferredWidth(
+ buttonBox->preferredWidth() / buttonBoxLayout->count());
+ }
}
int MDialogViewPrivate::stdButtonOrder(M::StandardButton buttonType)
diff --git a/src/views/mescapebuttonpanelview.cpp b/src/views/mescapebuttonpanelview.cpp
index 39879d3f..c64709cd 100644
--- a/src/views/mescapebuttonpanelview.cpp
+++ b/src/views/mescapebuttonpanelview.cpp
@@ -22,7 +22,6 @@
#include "mbutton.h"
#include "mviewcreator.h"
#include "mescapebuttonpanel.h"
-#include "animations/mwarpanimation.h"
#include "mdebug.h"
#include <QDebug>
@@ -41,6 +40,8 @@ MEscapeButtonPanelViewPrivate::MEscapeButtonPanelViewPrivate() :
MEscapeButtonPanelViewPrivate::~MEscapeButtonPanelViewPrivate()
{
+ delete warpInAnimation;
+ delete warpOutAnimation;
}
void MEscapeButtonPanelViewPrivate::init()
@@ -58,8 +59,14 @@ void MEscapeButtonPanelViewPrivate::init()
void MEscapeButtonPanelViewPrivate::animatedEscapeButtonTransition()
{
- MWarpAnimation *warpInAnimation = 0;
- MWarpAnimation *warpOutAnimation = 0;
+ if (warpInAnimation && warpInAnimation->state() == QAbstractAnimation::Running) {
+ warpInAnimation->setCurrentTime(warpInAnimation->duration());
+ delete warpInAnimation;
+ }
+ if (warpOutAnimation && warpOutAnimation->state() == QAbstractAnimation::Running) {
+ warpOutAnimation->setCurrentTime(warpOutAnimation->duration());
+ delete warpOutAnimation;
+ }
switch (escapeMode) {
case MEscapeButtonPanelModel::CloseMode:
diff --git a/src/views/mescapebuttonpanelview_p.h b/src/views/mescapebuttonpanelview_p.h
index 86c55558..8501b1cf 100644
--- a/src/views/mescapebuttonpanelview_p.h
+++ b/src/views/mescapebuttonpanelview_p.h
@@ -21,6 +21,8 @@
#define MESCAPEBUTTONPANELVIEW_P_H
#include "mescapebuttonpanelmodel.h"
+#include "animations/mwarpanimation.h"
+#include <QPointer>
class MEscapeButtonPanel;
class MButton;
@@ -46,6 +48,8 @@ public:
MEscapeButtonPanelModel::EscapeMode escapeMode;
MEscapeButtonPanel *controller;
+ QPointer<MWarpAnimation> warpInAnimation;
+ QPointer<MWarpAnimation> warpOutAnimation;
private:
void animatedEscapeButtonTransition();
diff --git a/src/views/mlabelview.cpp b/src/views/mlabelview.cpp
index 4bec5b8d..07867673 100644
--- a/src/views/mlabelview.cpp
+++ b/src/views/mlabelview.cpp
@@ -28,7 +28,6 @@
#include <QAbstractTextDocumentLayout>
#include <QGraphicsSceneMouseEvent>
#include <QGraphicsSceneResizeEvent>
-#include <QTapAndHoldGesture>
MLabelViewPrivate::MLabelViewPrivate()
{
@@ -208,23 +207,15 @@ void MLabelView::cancelEvent(MCancelEvent *event)
void MLabelView::longPressEvent(QGraphicsSceneContextMenuEvent *event)
{
- //FIXME
- //Functionality replaced by tapAndHoldGestureEvent, this function not needed any more
+ Q_D(MLabelView);
event->ignore();
+ d->impl->longPressEvent(event);
}
void MLabelView::tapAndHoldGestureEvent(QGestureEvent *event, QTapAndHoldGesture* gesture)
{
Q_UNUSED(event);
- Q_D(MLabelView);
-
- if (gesture->state() == Qt::GestureFinished) {
- QGraphicsSceneContextMenuEvent ev;
- ev.setPos(gesture->position());
- d->impl->longPressEvent(&ev);
- }
-
- event->accept();
+ Q_UNUSED(gesture);
}
diff --git a/src/views/mlistitemview.cpp b/src/views/mlistitemview.cpp
new file mode 100644
index 00000000..9ebc56cd
--- /dev/null
+++ b/src/views/mlistitemview.cpp
@@ -0,0 +1,129 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "mlistitemview.h"
+#include "mlistitemview_p.h"
+
+#include <MListItem>
+
+#include <QGraphicsSceneMouseEvent>
+
+#define RELEASE_MISS_DELTA 30.0
+
+MListItemViewPrivate::MListItemViewPrivate(MWidgetController *controller)
+ : MWidgetViewPrivate(),
+ down(false)
+{
+ this->controller = dynamic_cast<MListItem *>(controller);
+}
+
+MListItemViewPrivate::~MListItemViewPrivate()
+{
+}
+
+void MListItemViewPrivate::updateStyleMode()
+{
+ Q_Q(MListItemView);
+
+ if (down) {
+ q->style().setModePressed();
+ } else {
+ if (controller->isSelected())
+ q->style().setModeSelected();
+ else
+ q->style().setModeDefault();
+ }
+
+ q->applyStyle();
+ q->update();
+}
+
+void MListItemViewPrivate::click()
+{
+ controller->click();
+}
+
+MListItemView::MListItemView(MWidgetController *controller)
+ : MWidgetView(new MListItemViewPrivate(controller))
+{
+}
+
+void MListItemView::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_UNUSED(event);
+ Q_D(MListItemView);
+
+ if (d->down)
+ return;
+
+ d->down = true;
+ d->updateStyleMode();
+}
+
+void MListItemView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_UNUSED(event);
+ Q_D(MListItemView);
+
+ if (!d->down)
+ return;
+
+ d->down = false;
+ d->updateStyleMode();
+
+ QPointF touch = event->scenePos();
+ QRectF rect = d->controller->sceneBoundingRect();
+ rect.adjust(-RELEASE_MISS_DELTA, -RELEASE_MISS_DELTA,
+ RELEASE_MISS_DELTA, RELEASE_MISS_DELTA);
+ bool pressed = rect.contains(touch);
+
+ if (pressed)
+ d->click();
+}
+
+void MListItemView::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_UNUSED(event);
+ Q_D(MListItemView);
+
+ QPointF touch = event->scenePos();
+ QRectF rect = d->controller->sceneBoundingRect();
+ rect.adjust(-RELEASE_MISS_DELTA, -RELEASE_MISS_DELTA,
+ RELEASE_MISS_DELTA, RELEASE_MISS_DELTA);
+ bool pressed = rect.contains(touch);
+
+ if (pressed != d->down) {
+ d->down = pressed;
+ d->updateStyleMode();
+ }
+}
+
+void MListItemView::cancelEvent(MCancelEvent *event)
+{
+ Q_UNUSED(event);
+ Q_D(MListItemView);
+
+ if (!d->down)
+ return;
+
+ d->down = false;
+ d->updateStyleMode();
+}
+
+M_REGISTER_VIEW_NEW(MListItemView, MListItem)
diff --git a/src/views/mlistitemview.h b/src/views/mlistitemview.h
new file mode 100644
index 00000000..c41535f5
--- /dev/null
+++ b/src/views/mlistitemview.h
@@ -0,0 +1,50 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MLISTITEMVIEW_H
+#define MLISTITEMVIEW_H
+
+#include <MWidgetView>
+
+#include <mlistitemmodel.h>
+#include <mlistitemstyle.h>
+
+class MListItemViewPrivate;
+
+class MListItemView : public MWidgetView
+{
+ Q_OBJECT
+ M_VIEW(MListItemModel, MListItemStyle)
+
+public:
+ MListItemView(MWidgetController *controller);
+
+protected:
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+ void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+
+ void cancelEvent(MCancelEvent *event);
+
+private:
+ Q_DISABLE_COPY(MListItemView)
+ Q_DECLARE_PRIVATE(MListItemView)
+};
+
+#endif // MLISTITEMVIEW_H
diff --git a/src/views/mlistitemview_p.h b/src/views/mlistitemview_p.h
new file mode 100644
index 00000000..2029f874
--- /dev/null
+++ b/src/views/mlistitemview_p.h
@@ -0,0 +1,44 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MLISTITEMVIEW_P_H
+#define MLISTITEMVIEW_P_H
+
+#include <private/mwidgetview_p.h>
+
+class MListItem;
+
+class MListItemViewPrivate : public MWidgetViewPrivate
+{
+public:
+ MListItemViewPrivate(MWidgetController *controller);
+ virtual ~MListItemViewPrivate();
+
+ void updateStyleMode();
+ void click();
+
+private:
+ bool down;
+ MListItem *controller;
+
+private:
+ Q_DECLARE_PUBLIC(MListItemView)
+};
+
+#endif // MLISTITEMVIEW_P_H
diff --git a/src/views/mlistview.cpp b/src/views/mlistview.cpp
index 57cb9809..91a4d733 100644
--- a/src/views/mlistview.cpp
+++ b/src/views/mlistview.cpp
@@ -226,11 +226,12 @@ void MListView::dataChanged(const QModelIndex &topLeft, const QModelIndex &botto
*
* \sa QAbstractItemView::rowsInserted(), exposedRectUpdated()
*/
-void MListView::rowsInserted(const QModelIndex &parent, int start, int end)
+void MListView::rowsInserted(const QModelIndex &parent, int start, int end, bool animated)
{
Q_UNUSED(parent);
Q_UNUSED(start);
Q_UNUSED(end);
+ Q_UNUSED(animated);
layoutChanged();
}
@@ -241,11 +242,12 @@ void MListView::rowsInserted(const QModelIndex &parent, int start, int end)
*
* \sa rowsInserted(), exposedRectUpdated()
*/
-void MListView::rowsRemoved(const QModelIndex &parent, int start, int end)
+void MListView::rowsRemoved(const QModelIndex &parent, int start, int end, bool animated)
{
Q_UNUSED(parent);
Q_UNUSED(start);
Q_UNUSED(end);
+ Q_UNUSED(animated);
layoutChanged();
}
diff --git a/src/views/mlistview.h b/src/views/mlistview.h
index 10acd0aa..8a37e171 100644
--- a/src/views/mlistview.h
+++ b/src/views/mlistview.h
@@ -56,8 +56,9 @@ protected:
protected slots:
virtual void updateData(const QList<const char *>& modifications);
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
- void rowsInserted(const QModelIndex &parent, int start, int end);
- void rowsRemoved(const QModelIndex &parent, int start, int end);
+ void rowsInserted(const QModelIndex &parent, int start, int end, bool animated = false);
+ void rowsRemoved(const QModelIndex &parent, int start, int end, bool animated = false);
+
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
void itemClick();
void layoutChanged();
diff --git a/src/views/mlistview_p.cpp b/src/views/mlistview_p.cpp
index 2f743a6f..a3804ed8 100644
--- a/src/views/mlistview_p.cpp
+++ b/src/views/mlistview_p.cpp
@@ -21,6 +21,7 @@
#include <MSeparator>
#include <MList>
#include <MPannableViewport>
+#include <MAbstractItemModel>
#include <QItemSelectionModel>
@@ -311,7 +312,7 @@ void MListViewPrivate::resetModel(MListModel *mListModel)
disconnect(q_ptr, SLOT(dataChanged(QModelIndex, QModelIndex)));
disconnect(q_ptr, SLOT(rowsInserted(QModelIndex, int, int)));
- disconnect(q_ptr, SLOT(rowsRemoved(QModelIndex, int, int)));
+ disconnect(q_ptr, SLOT(rowsRemoved(QModelIndex, int, int, bool)));
disconnect(q_ptr, SLOT(layoutChanged()));
disconnect(q_ptr, SLOT(modelReset()));
disconnect(q_ptr, SLOT(rowsMoved(QModelIndex, int, int, QModelIndex, int)));
@@ -326,8 +327,13 @@ void MListViewPrivate::resetModel(MListModel *mListModel)
if (model) {
connect(model, SIGNAL(dataChanged(QModelIndex, QModelIndex)), q_ptr, SLOT(dataChanged(QModelIndex, QModelIndex)));
- connect(model, SIGNAL(rowsInserted(QModelIndex, int, int)), q_ptr, SLOT(rowsInserted(QModelIndex, int, int)));
- connect(model, SIGNAL(rowsRemoved(QModelIndex, int, int)), q_ptr, SLOT(rowsRemoved(QModelIndex, int, int)));
+ if (model->inherits("MAbstractItemModel")) {
+ connect(model, SIGNAL(rowsInserted(QModelIndex, int, int, bool)), q_ptr, SLOT(rowsInserted(QModelIndex, int, int, bool)));
+ connect(model, SIGNAL(rowsRemoved(QModelIndex, int, int, bool)), q_ptr, SLOT(rowsRemoved(QModelIndex, int, int, bool)));
+ } else {
+ connect(model, SIGNAL(rowsInserted(QModelIndex, int, int)), q_ptr, SLOT(rowsInserted(QModelIndex, int, int)));
+ connect(model, SIGNAL(rowsRemoved(QModelIndex, int, int)), q_ptr, SLOT(rowsRemoved(QModelIndex, int, int)));
+ }
connect(model, SIGNAL(layoutChanged()), q_ptr, SLOT(layoutChanged()));
connect(model, SIGNAL(modelReset()), q_ptr, SLOT(modelReset()));
connect(model, SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), q_ptr, SLOT(rowsMoved(QModelIndex, int, int, QModelIndex, int)));
diff --git a/src/views/mnavigationbarview.cpp b/src/views/mnavigationbarview.cpp
index 84ccdf2e..dc6d2091 100644
--- a/src/views/mnavigationbarview.cpp
+++ b/src/views/mnavigationbarview.cpp
@@ -69,7 +69,7 @@ void MNavigationBarViewPrivate::setMenuButtonwidth()
Q_Q(MNavigationBarView);
/* FIXME: Its there because the UI specs contains the following formula:
- width of view menu button = width of portrait view - width of home button - width of close button.
+ width of application menu button = width of portrait view - width of home button - width of close button.
This needs to be removed when there exists support for reading CSS constants in the code
*/
int widthofPortraitMode = MDeviceProfile::instance()->resolution().height();
diff --git a/src/views/mscenelayereffectdimview.cpp b/src/views/mscenelayereffectdimview.cpp
index 41ba6d47..abad48b0 100644
--- a/src/views/mscenelayereffectdimview.cpp
+++ b/src/views/mscenelayereffectdimview.cpp
@@ -62,6 +62,8 @@ void MSceneLayerEffectDimView::applyStyle()
{
Q_D(MSceneLayerEffectDimView);
+ MSceneWindowView::applyStyle();
+
d->controller->setOpacity(style()->opacity());
}
diff --git a/src/views/msliderview.cpp b/src/views/msliderview.cpp
index 121aecb3..67f8bfac 100644
--- a/src/views/msliderview.cpp
+++ b/src/views/msliderview.cpp
@@ -190,32 +190,51 @@ MSliderIndicator::~MSliderIndicator()
void MSliderIndicator::setText(const QString &text)
{
+ bool sizeHintChanged = false;
label->setVisible(!text.isEmpty());
label->setText(text);
- while (layout->count() > 0)
- layout->removeAt(0);
-
- layout->addAnchor(layout, Qt::AnchorVerticalCenter, label, Qt::AnchorVerticalCenter);
- layout->addAnchor(layout, Qt::AnchorVerticalCenter, image, Qt::AnchorVerticalCenter);
if (text.isEmpty()) {
- label->setMinimumSize(0, 0);
- label->setPreferredSize(0, 0);
- label->setMaximumSize(0, 0);
+ QSizeF emptySize(0, 0);
+
+ if (emptySize != label->minimumSize()) {
+ label->setMinimumSize(0, 0);
+ sizeHintChanged = true;
+ }
+ if (emptySize != label->preferredSize()) {
+ label->setPreferredSize(0, 0);
+ sizeHintChanged = true;
+ }
+ if (emptySize != label->maximumSize()) {
+ label->setMaximumSize(0, 0);
+ sizeHintChanged = true;
+ }
} else {
- label->setMinimumSize(label->sizeHint(Qt::PreferredSize));
- label->setPreferredSize(label->sizeHint(Qt::PreferredSize));
- label->setMaximumSize(label->sizeHint(Qt::PreferredSize));
+ if (label->sizeHint(Qt::PreferredSize) != label->minimumSize()) {
+ label->setMinimumSize(label->sizeHint(Qt::PreferredSize));
+ sizeHintChanged = true;
+ }
+ if (label->sizeHint(Qt::PreferredSize) != label->preferredSize()) {
+ label->setPreferredSize(label->sizeHint(Qt::PreferredSize));
+ sizeHintChanged = true;
+ }
+ if (label->sizeHint(Qt::PreferredSize) != label->maximumSize()) {
+ label->setMaximumSize(label->sizeHint(Qt::PreferredSize));
+ sizeHintChanged = true;
+ }
}
- label->resize(label->sizeHint(Qt::PreferredSize));
+ if (label->sizeHint(Qt::PreferredSize) != label->size())
+ label->resize(label->sizeHint(Qt::PreferredSize));
- updateGeometry();
+ if (sizeHintChanged)
+ updateGeometry();
}
void MSliderIndicator::setImage(const QString &id)
{
+ bool sizeHintChanged = false;
image->setVisible(!id.isEmpty());
imageName = id;
@@ -231,25 +250,41 @@ void MSliderIndicator::setImage(const QString &id)
delete pixmap;
}
- while (layout->count() > 0)
- layout->removeAt(0);
-
- layout->addAnchor(layout, Qt::AnchorVerticalCenter, label, Qt::AnchorVerticalCenter);
- layout->addAnchor(layout, Qt::AnchorVerticalCenter, image, Qt::AnchorVerticalCenter);
-
if (id.isEmpty()) {
- image->setMinimumSize(0, 0);
- image->setPreferredSize(0, 0);
- image->setMaximumSize(0, 0);
+ QSizeF emptySize(0, 0);
+
+ if (emptySize != image->minimumSize()) {
+ image->setMinimumSize(0, 0);
+ sizeHintChanged = true;
+ }
+ if (emptySize != image->preferredSize()) {
+ image->setPreferredSize(0, 0);
+ sizeHintChanged = true;
+ }
+ if (emptySize != image->maximumSize()) {
+ image->setMaximumSize(0, 0);
+ sizeHintChanged = true;
+ }
} else {
- image->setMinimumSize(image->sizeHint(Qt::PreferredSize));
- image->setPreferredSize(image->sizeHint(Qt::PreferredSize));
- image->setMaximumSize(image->sizeHint(Qt::PreferredSize));
+ if (image->sizeHint(Qt::PreferredSize) != image->minimumSize()) {
+ image->setMinimumSize(image->sizeHint(Qt::PreferredSize));
+ sizeHintChanged = true;
+ }
+ if (image->sizeHint(Qt::PreferredSize) != image->preferredSize()) {
+ image->setPreferredSize(image->sizeHint(Qt::PreferredSize));
+ sizeHintChanged = true;
+ }
+ if (image->sizeHint(Qt::PreferredSize) != image->maximumSize()) {
+ image->setMaximumSize(image->sizeHint(Qt::PreferredSize));
+ sizeHintChanged = true;
+ }
}
- image->resize(image->sizeHint(Qt::PreferredSize));
+ if (image->sizeHint(Qt::PreferredSize) != label->size())
+ image->resize(image->sizeHint(Qt::PreferredSize));
- updateGeometry();
+ if (sizeHintChanged)
+ updateGeometry();
}
QSizeF MSliderIndicator::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
@@ -388,6 +423,7 @@ void MSliderGroove::setSliderValues(int min, int max, int val)
handlePos.setX(valueToScreenCoordinate(value));
else
handlePos.setY(valueToScreenCoordinate(value));
+
updateHandlePos(handlePos);
update();
@@ -519,10 +555,14 @@ void MSliderGroove::raiseHandleIndicator()
{
QGraphicsItem *newParent = topLevelItem();
if (newParent) {
- sliderHandleIndicator->setParentItem(newParent);
-
- //by raising handle indicator will be shown
- sliderHandleIndicator->setVisible(true);
+ //reparents slider handle indicator only if it is necessary
+ if (newParent != sliderHandleIndicator->parentItem())
+ sliderHandleIndicator->setParentItem(newParent);
+
+ //by raising handle indicator will be shown (only if it
+ //is not already visible)
+ if (!sliderHandleIndicator->isVisible())
+ sliderHandleIndicator->setVisible(true);
}
updateHandleIndicatorPos();
@@ -746,6 +786,12 @@ void MSliderGroove::updateHandlePos(const QPointF &position)
x = qBound(sliderHandle->rect().width() / 2, x, rect().width() - (sliderHandle->rect().width() / 2));
+ QPointF newPos(x - (sliderHandle->rect().width() / 2), (rect().height() - sliderHandle->rect().height()) / 2);
+
+ //changes slider handle positions only if
+ //it is really necessary
+ if (newPos == sliderHandle->pos())
+ return;
sliderHandle->setPos(x - (sliderHandle->rect().width() / 2), (rect().height() - sliderHandle->rect().height()) / 2);
}
@@ -754,8 +800,16 @@ void MSliderGroove::updateHandlePos(const QPointF &position)
y = qBound(sliderHandle->rect().height() / 2, y, rect().height() - (sliderHandle->rect().height() / 2));
+ QPointF newPos((rect().width() - sliderHandle->rect().width()) / 2, y - (sliderHandle->rect().height() / 2));
+
+ //changes slider handle positions only if
+ //it is really necessary
+ if (newPos == sliderHandle->pos())
+ return;
+
sliderHandle->setPos((rect().width() - sliderHandle->rect().width()) / 2, y - (sliderHandle->rect().height() / 2));
}
+
updateHandleIndicatorPos();
}
@@ -815,7 +869,13 @@ void MSliderGroove::updateHandleIndicatorPos()
if (sliderHandleIndicatorParent)
grooveRelativePos = mapFromScene(scenePos()) - mapFromScene(sliderHandleIndicatorParent->scenePos());
- sliderHandleIndicator->setPos(grooveRelativePos + handleIndicatorPos);
+ //slider handle label position (and bounding rect)
+ //will be changed only if it is really necessary
+ QPointF newPos = grooveRelativePos + handleIndicatorPos;
+ if (newPos == pos())
+ return;
+
+ sliderHandleIndicator->setPos(newPos);
//recalculates bounding rect according to area occupied by handle indicator
//because that area still has to be redrawn whenever slider is redrawn
@@ -1081,21 +1141,41 @@ bool MSliderViewPrivate::isCollision(QGraphicsSceneMouseEvent *event) const
//to mouse cursor position
void MSliderViewPrivate::updateValue(QGraphicsSceneMouseEvent *event)
{
- if (valueAnimation == 0) {
- valueAnimation = new QPropertyAnimation(controller, "value", controller);
- valueAnimation->setDuration(50);
- valueAnimation->setEasingCurve(QEasingCurve::OutSine);
+ Q_Q(MSliderView);
+
+ bool needAnimation = false;
+
+ QRectF clickableHandleRect = sliderGroove->clickableHandleArea();
+ clickableHandleRect.translate(sliderGroove->pos());
+
+ //animation is necessary when tap point is further form
+ //slider handle middle point then slider handle width / height
+ //(depending on slider orientation)
+ if (q->model()->orientation() == Qt::Horizontal) {
+ if (qAbs(event->pos().x() - clickableHandleRect.center().x()) > clickableHandleRect.width())
+ needAnimation = true;
+ } else {
+ if (qAbs(event->pos().y() - clickableHandleRect.center().y()) > clickableHandleRect.height())
+ needAnimation = true;
}
//there are some margins around the view
//and those have to be considered
- Q_Q(MSliderView);
QPointF eventPos = event->pos();
eventPos.setX(eventPos.x() + q->marginLeft());
eventPos.setY(eventPos.y() + q->marginTop());
- valueAnimation->setEndValue(sliderGroove->screenPointToValue(eventPos));
- valueAnimation->start();
+ if (needAnimation) {
+ if (valueAnimation == 0) {
+ valueAnimation = new QPropertyAnimation(controller, "value", controller);
+ valueAnimation->setDuration(150);
+ valueAnimation->setEasingCurve(QEasingCurve::OutSine);
+ }
+
+ valueAnimation->setEndValue(sliderGroove->screenPointToValue(eventPos));
+ valueAnimation->start();
+ } else
+ controller->setValue(sliderGroove->screenPointToValue(eventPos));
}
//refreshes slider groove (min, max and value, slider state)
diff --git a/src/views/mstatusbarview.cpp b/src/views/mstatusbarview.cpp
index 6545faae..8e21fe7e 100644
--- a/src/views/mstatusbarview.cpp
+++ b/src/views/mstatusbarview.cpp
@@ -33,7 +33,8 @@
MStatusBarView::MStatusBarView(MStatusBar *controller) :
MSceneWindowView(controller),
- controller(controller)
+ controller(controller),
+ updatesEnabled(false)
{
#ifdef Q_WS_X11
pixmapDamage = 0;
@@ -41,7 +42,11 @@ MStatusBarView::MStatusBarView(MStatusBar *controller) :
MApplication *mApplication = static_cast<MApplication *>(QCoreApplication::instance());
connect(mApplication, SIGNAL(damageEvent(Qt::HANDLE&, short&, short&, unsigned short&, unsigned short&)),
SLOT(handlePixmapDamageEvent(Qt::HANDLE&, short&, short&, unsigned short&, unsigned short&)));
-
+ connect(controller, SIGNAL(displayExited()),
+ this, SLOT(disablePixmapUpdates()));
+ connect(controller, SIGNAL(displayEntered()),
+ this, SLOT(enablePixmapUpdates()));
+
updateSharedPixmap();
#endif
}
@@ -78,7 +83,7 @@ void MStatusBarView::drawContents(QPainter *painter, const QStyleOptionGraphicsI
sourceRect.setWidth(size().width());
sourceRect.setHeight(size().height());
}
-
+
painter->drawPixmap(QPointF(0.0, 0.0), sharedPixmap, sourceRect);
#else
Q_UNUSED(painter);
@@ -90,6 +95,9 @@ void MStatusBarView::updateSharedPixmap()
{
destroyXDamageForSharedPixmap();
+ if (!updatesEnabled)
+ return;
+
Qt::HANDLE handle;
if (fetchSharedPixmapHandle(&handle)) {
sharedPixmap = QPixmap::fromX11Pixmap(handle, QPixmap::ExplicitlyShared);
@@ -141,6 +149,19 @@ void MStatusBarView::handlePixmapDamageEvent(Qt::HANDLE &damage, short &x, short
controller->update(x, y, width, height);
}
}
+
+void MStatusBarView::enablePixmapUpdates()
+{
+ updatesEnabled = true;
+ updateSharedPixmap();
+}
+
+void MStatusBarView::disablePixmapUpdates()
+{
+ updatesEnabled = false;
+ destroyXDamageForSharedPixmap();
+}
+
#endif
M_REGISTER_VIEW_NEW(MStatusBarView, MStatusBar)
diff --git a/src/views/mstatusbarview.h b/src/views/mstatusbarview.h
index 7c907617..8185d92d 100644
--- a/src/views/mstatusbarview.h
+++ b/src/views/mstatusbarview.h
@@ -45,6 +45,7 @@ private:
Q_DISABLE_COPY(MStatusBarView)
MWidgetController *controller;
+ bool updatesEnabled;
#ifdef Q_WS_X11
void updateSharedPixmap();
@@ -58,6 +59,14 @@ private:
private Q_SLOTS:
void handlePixmapDamageEvent(Qt::HANDLE &damage, short &x, short &y,
unsigned short &width, unsigned short &height);
+
+ void enablePixmapUpdates();
+ void disablePixmapUpdates();
+
+#endif
+
+#ifdef UNIT_TEST
+ friend class Ut_MStatusBarView;
#endif
};
diff --git a/src/views/mtexteditview.cpp b/src/views/mtexteditview.cpp
index f27ec56c..8869bcb7 100644
--- a/src/views/mtexteditview.cpp
+++ b/src/views/mtexteditview.cpp
@@ -522,6 +522,12 @@ void MTextEditViewPrivate::handleDocumentSizeChange(const QSizeF &newSize)
checkScroll();
}
+void MTextEditViewPrivate::playTextFieldSelectionFeedback()
+{
+ Q_Q(const MTextEditView);
+
+ q->style()->changeSelectionFeedback().play();
+}
/*!
* \brief Method to start text selection
@@ -770,6 +776,7 @@ void MTextEditView::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(MTextEditView);
+ MTextEdit::TextFieldLocationType location;
int cursor = d->cursorPosition(event);
d->setMouseTarget(event->pos());
@@ -785,12 +792,23 @@ void MTextEditView::mousePressEvent(QGraphicsSceneMouseEvent *event)
d->ignoreSelection = !d->controller->isSelectionEnabled();
}
+ // let the controller react on click on a cursor index
+ d->controller->handleMousePress(cursor, event, &location);
+
if (model()->textInteractionFlags() != Qt::NoTextInteraction) {
- style()->pressFeedback().play();
+ if (location == MTextEdit::Word) {
+ style()->pressWordFeedback().play();
+ } else {
+ style()->pressBoundaryFeedback().play();
+ }
}
- // let the controller react on click on a cursor index
- d->controller->handleMousePress(cursor, event);
+ // Connect when pressing and disconnect when releasing
+ // to make sure that feedback is only given when user is
+ // making changes to the selection by touching.
+ QObject::connect(d->controller, SIGNAL(selectionChanged()),
+ d, SLOT(playTextFieldSelectionFeedback()),
+ Qt::UniqueConnection);
}
@@ -798,6 +816,7 @@ void MTextEditView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(MTextEditView);
+ MTextEdit::TextFieldLocationType location;
event->accept();
// controller shouldn't do anything for selection ending mouse release
@@ -805,12 +824,15 @@ void MTextEditView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
// don't send either focus gaining mouse click with autoselect
if (d->inAutoSelectionClick == false) {
int cursor = d->cursorPosition(event);
+ d->controller->handleMouseRelease(cursor, event, &location);
if (model()->textInteractionFlags() != Qt::NoTextInteraction) {
- style()->releaseFeedback().play();
+ if (location == MTextEdit::Word) {
+ style()->releaseWordFeedback().play();
+ } else {
+ style()->releaseBoundaryFeedback().play();
+ }
}
-
- d->controller->handleMouseRelease(cursor, event);
}
}
@@ -818,6 +840,9 @@ void MTextEditView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
d->inAutoSelectionClick = false;
d->longPressTimer->stop();
d->scrollTimer->stop();
+
+ QObject::disconnect(d->controller, SIGNAL(selectionChanged()),
+ d, SLOT(playTextFieldSelectionFeedback()));
}
@@ -973,9 +998,11 @@ void MTextEditView::changeEvent(QEvent *event)
void MTextEditView::cancelEvent(MCancelEvent *event)
{
Q_UNUSED(event);
+ Q_D(MTextEditView);
+
+ style()->cancelFeedback().play();
// restore state before as before mouse press
- Q_D(MTextEditView);
d->selecting = false;
d->inAutoSelectionClick = false;
d->longPressTimer->stop();
@@ -985,6 +1012,9 @@ void MTextEditView::cancelEvent(MCancelEvent *event)
if (d->controller->completer() && d->controller->completer()->isActive()) {
d->controller->completer()->hideCompleter();
}
+
+ QObject::disconnect(d->controller, SIGNAL(selectionChanged()),
+ d, SLOT(playTextFieldSelectionFeedback()));
}
diff --git a/src/views/mtexteditview_p.h b/src/views/mtexteditview_p.h
index cc117e99..5b0873d8 100644
--- a/src/views/mtexteditview_p.h
+++ b/src/views/mtexteditview_p.h
@@ -75,6 +75,7 @@ protected slots:
void checkSize();
void handleDocumentUpdate(int position, int charsRemoved, int charsAdded);
void handleDocumentSizeChange(const QSizeF &newSize);
+ void playTextFieldSelectionFeedback();
private:
void scrollingTestAndStart(QGraphicsSceneMouseEvent *event);
diff --git a/src/views/mtoolbarview.cpp b/src/views/mtoolbarview.cpp
index 56f5141e..67b53bbc 100644
--- a/src/views/mtoolbarview.cpp
+++ b/src/views/mtoolbarview.cpp
@@ -33,7 +33,7 @@
#include "mtoolbarview.h"
#include "mtoolbarview_p.h"
-const int MToolBarViewPrivate::maxWidgets = 4;
+const int maxSlots = 4;
/* Make a layout policy for aligning widgets nicely by
* adding spacers.
@@ -44,50 +44,120 @@ class ToolBarLayoutPolicy : public MLinearLayoutPolicy
public:
explicit ToolBarLayoutPolicy(MLayout *layout) :
MLinearLayoutPolicy(layout, Qt::Horizontal) {
+ textEditIndex = -1;
insertSpacer(0);
+ setSpacing(0);
}
~ToolBarLayoutPolicy() {
- for(int i = count()-1; i >= 0; i--)
- removeAt(i);
+ for(int i = widgetCount()-1; i >= 0; i--)
+ removeWidgetAt(i);
QGraphicsLayoutItem *item = MLinearLayoutPolicy::itemAt(0);
MLinearLayoutPolicy::removeAt(0);
delete item;
}
- virtual void insertItem(int index, QGraphicsLayoutItem *item)
+ void insertWidgetAndRemoveOverflow(int index, QGraphicsLayoutItem *item)
{
+ index = qMin((uint)index, (uint)widgetCount());
+ //A ugly hack to try to cope with QTBUG-11134
+ item->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
Q_ASSERT(item);
Q_ASSERT(MLinearLayoutPolicy::count() % 2);
Q_ASSERT(MLinearLayoutPolicy::count() > index*2);
+ if(dynamic_cast<MTextEdit *>(item->graphicsItem())) {
+ if(textEditIndex != -1) //Remove any previous text edit
+ removeWidgetAt(textEditIndex);
+ textEditIndex = index;
+ } else if(index <= textEditIndex)
+ textEditIndex++;
+
//Add an item and a spacer after the item
MLinearLayoutPolicy::insertItem(1 + index*2, item);
+
insertSpacer(2+index*2);
Q_ASSERT(MLinearLayoutPolicy::count() % 2);
+
+ //Prevent overflow - remove any that we've pushed off the end
+ while(takenSlots() > maxSlots) {
+ removeWidgetAt(widgetCount()-1);
+ }
}
- virtual void removeAt(int index)
+ bool roomForWidget(int index, bool textEdit) const {
+ index = qMin((uint)index, (uint)widgetCount());
+
+ if(textEdit) {
+ if(textEditIndex != -1 && index > textEditIndex) {
+ //If we come first, we push the old textedit out of the way
+ return false; //No room for us
+ } else if(index + 1 >= maxSlots) {
+ return false; //No room to add
+ }
+ }
+ else if(index >= maxSlots)
+ return false; //No room to add
+ else if(textEditIndex != -1 && index >= maxSlots -1)
+ return false; //No room to add because textedit takes up two spaces
+ return true;
+ }
+ void removeWidgetAt(int index)
{
+ if(index < 0 || index >= widgetCount())
+ return;
Q_ASSERT(MLinearLayoutPolicy::count() % 2);
Q_ASSERT(MLinearLayoutPolicy::count() > 2+index*2);
//Remove the item first
- QGraphicsLayoutItem *item = MLinearLayoutPolicy::itemAt(2+index*2);
+ if(index == textEditIndex)
+ textEditIndex = -1;
+ else if(textEditIndex != -1 && index < textEditIndex)
+ textEditIndex--;
MLinearLayoutPolicy::removeAt(2+index*2);
MLinearLayoutPolicy::removeAt(1+index*2);
- layout()->removeItem(item);
}
- virtual int count() const
+
+ int widgetCount() const
{
return (MLinearLayoutPolicy::count()-1)/2;
}
- virtual QGraphicsLayoutItem *itemAt(int index) const
+ int takenSlots() const
{
- return MLinearLayoutPolicy::itemAt(1+index*2);
+ if(textEditIndex != -1)
+ return widgetCount() + 1; //textedit counts for two slots
+ else
+ return widgetCount();
+ }
+ int widgetIndexOf(const QGraphicsLayoutItem *item) const {
+ for(int i = widgetCount() -1; i >= 0; i--) {
+ if(MLinearLayoutPolicy::itemAt(1+i*2) == item)
+ return i;
+ }
+ return -1;
+ }
+ void removeWidget(const QGraphicsLayoutItem *item)
+ {
+ removeWidgetAt(widgetIndexOf(item));
+ }
+
+protected:
+ /** Hide the normal functions since these include the spacers
+ * and we want to encourage the user to only use our functions */
+ virtual int count() const { return MLinearLayoutPolicy::count(); }
+ virtual QGraphicsLayoutItem *itemAt(int index) const { return MLinearLayoutPolicy::itemAt(index); }
+ virtual void insertItem(int index, QGraphicsLayoutItem *item) { return MLinearLayoutPolicy::insertItem(index, item); }
+ void indexOf(const QGraphicsLayoutItem *item) const;
+ virtual void removeAt(int index) {
+ //This can be called by the layout, and we need to make sure that we delete the spacer as well
+ removeWidgetAt((index-1)/2);
}
private:
+ int textEditIndex;
+
void insertSpacer(int position) {
+ //Create an item that will expand if necessary
QGraphicsWidget *item = new QGraphicsWidget;
- item->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
+ item->setPreferredSize(1,1); //Ugly hack around QTBUG-11134
+ item->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
MLinearLayoutPolicy::insertItem(position, item);
}
};
@@ -96,8 +166,6 @@ MToolBarViewPrivate::MToolBarViewPrivate(MToolBar *controller)
: QObject(),
q_ptr(0),
layout(0),
- landscapePolicy(0),
- portraitPolicy(0),
buttonGroup(0)
{
this->controller = controller;
@@ -133,11 +201,9 @@ void MToolBarViewPrivate::init()
layout->setContentsMargins(0, 0, 0, 0);
landscapePolicy = new ToolBarLayoutPolicy(layout);
- landscapePolicy->setSpacing(0);
layout->setLandscapePolicy(landscapePolicy);
portraitPolicy = new ToolBarLayoutPolicy(layout);
- portraitPolicy->setSpacing(0);
layout->setPortraitPolicy(portraitPolicy);
QGraphicsLinearLayout *controllerlayout = (QGraphicsLinearLayout *)(controller->layout());
@@ -149,23 +215,28 @@ void MToolBarViewPrivate::init()
}
}
-int MToolBarViewPrivate::policyIndexForAddingAction(QAction *action, MLinearLayoutPolicy *policy) const {
+int MToolBarViewPrivate::policyIndexForAddingAction(QAction *action, ToolBarLayoutPolicy *policy) const {
Q_Q(const MToolBarView);
//We need to add the action's given widget to the policy
//This is a bit complicated because we ideally want to add it in the right place,
//preserving the same order as in the controller->actions()
QList< QAction *> actions = controller->actions();
int parentIndex = actions.indexOf(action)+1;
+ int index = policy->widgetCount();
while(parentIndex < actions.size()) {
MWidget *w = q->getWidget(actions.at(parentIndex));
- if(!w) {
- int policyIndex = policy->indexOf(w);
- if(policyIndex >= 0)
- return policyIndex;
+ if(w) {
+ int policyIndex = policy->widgetIndexOf(w);
+ if(policyIndex >= 0) {
+ index = policyIndex;
+ break;
+ }
}
parentIndex++;
}
- return policy->count(); //Add it to the end
+ if(policy->roomForWidget(index, hasTextEditWidget(action)))
+ return index;
+ return -1;
}
void MToolBarViewPrivate::add(QAction *action)
@@ -174,63 +245,55 @@ void MToolBarViewPrivate::add(QAction *action)
return; //Cancel adding action
// add to policies only if the action is visible
- bool addToLandscape = isLocationValid(action, MAction::ToolBarLandscapeLocation) &&
- reserveSpaceForAction(action, landscapeData);
- bool addToPortrait = isLocationValid(action, MAction::ToolBarPortraitLocation) &&
- reserveSpaceForAction(action, portraitData);
- if (!addToLandscape && !addToPortrait)
+ int landscapeIndex = -1;
+ int portraitIndex = -1;
+ if (isLocationValid(action, MAction::ToolBarLandscapeLocation))
+ landscapeIndex = policyIndexForAddingAction(action, landscapePolicy);
+ if (isLocationValid(action, MAction::ToolBarPortraitLocation))
+ portraitIndex = policyIndexForAddingAction(action, portraitPolicy);
+
+ if (landscapeIndex == -1 && portraitIndex == -1)
return; //Cancel adding action
MWidget *widget = createWidget(action);
Q_ASSERT(widget);
- if (addToLandscape)
- landscapePolicy->insertItem( policyIndexForAddingAction(action, landscapePolicy), widget );
- if (addToPortrait)
- portraitPolicy->insertItem( policyIndexForAddingAction(action, portraitPolicy), widget );
+ if (landscapeIndex != -1)
+ landscapePolicy->insertWidgetAndRemoveOverflow( landscapeIndex, widget );
+ if (portraitIndex != -1)
+ portraitPolicy->insertWidgetAndRemoveOverflow( portraitIndex, widget );
updateWidgetFromAction(widget, action);
}
-void MToolBarViewPrivate::remove(QAction *action)
+void MToolBarViewPrivate::remove(QAction *action, bool hideOnly)
{
MButton *button = buttons.value(action);
MWidget *leased = leasedWidgets.value(action);
MWidget *widget = (button != 0) ? button : leased;
-
if(!widget)
- return; //Action already removed
- bool isTextEditWidget = hasTextEditWidget(action);
- if(landscapePolicy->indexOf(widget) >= 0) {
- if(isTextEditWidget) {
- landscapeData.hasTextEditor = false;
- //one text-edit widget takes space of two buttons
- landscapeData.placedActions -= 2;
- } else
- landscapeData.placedActions--;
- }
- if(portraitPolicy->indexOf(widget) >= 0) {
- if(isTextEditWidget) {
- portraitData.hasTextEditor = false;
- //one text-edit widget takes space of two buttons
- portraitData.placedActions -= 2;
- } else
- portraitData.placedActions--;
- }
-
- layout->removeItem(widget);
+ return;
- if (button) {
- buttons.remove(action);
- if(buttonGroup)
- buttonGroup->removeButton(button);
- delete button;
+ if(hideOnly) {
+ landscapePolicy->removeWidget(widget);
+ portraitPolicy->removeWidget(widget);
} else {
- releaseWidget(action, leased);
- leasedWidgets.remove(action);
+ //Need to fully remove the action
+ layout->removeItem(widget);
+
+ if (button) {
+ buttons.remove(action);
+ if(buttonGroup)
+ buttonGroup->removeButton(button);
+ delete button;
+ } else {
+ releaseWidget(action, leased);
+ leasedWidgets.remove(action);
+ }
}
//There might be space now any actions not already added. Signal a change action which
//will check if an item now has room to be shown
foreach(QAction *action, controller->actions()) {
- change(action);
+ if(action->isVisible())
+ change(action);
}
}
@@ -240,13 +303,13 @@ void MToolBarViewPrivate::change(QAction *action)
if(hasUnusableWidget(action))
return;
if(!action->isVisible()) {
- remove(action);
+ remove(action, true); //Remove action, but only hiding the widget, not deleting/releasing it
return;
}
bool validInLandscape = isLocationValid(action, MAction::ToolBarLandscapeLocation);
bool validInPortrait = isLocationValid(action, MAction::ToolBarPortraitLocation);
if (!validInLandscape && !validInPortrait) {
- remove(action);
+ remove(action, true);
return;
}
@@ -254,7 +317,7 @@ void MToolBarViewPrivate::change(QAction *action)
QList< QAction *> actions = controller->actions();
int indexOfAction = actions.indexOf(action);
if(indexOfAction == -1) {
- remove(action); // I don't think this is possible
+ remove(action, false); // I don't think this is possible
return;
}
@@ -266,23 +329,25 @@ void MToolBarViewPrivate::change(QAction *action)
}
//We have now an action and a widget for it
- int landscapeIndex = landscapePolicy->indexOf(widget);
- int portraitIndex = portraitPolicy->indexOf(widget);
+ int landscapeIndex = landscapePolicy->widgetIndexOf(widget);
+ int portraitIndex = portraitPolicy->widgetIndexOf(widget);
if(!validInLandscape && landscapeIndex >= 0) {
//We are showing it in landscape view but should not be
- landscapePolicy->removeAt(landscapeIndex);
+ landscapePolicy->removeWidgetAt(landscapeIndex);
}
if(!validInPortrait && portraitIndex >= 0) {
//We are showing it in portrait view but should not be
- portraitPolicy->removeAt(portraitIndex);
+ portraitPolicy->removeWidgetAt(portraitIndex);
}
if(validInLandscape && landscapeIndex == -1) {
- if( reserveSpaceForAction(action, landscapeData) )
- landscapePolicy->insertItem( policyIndexForAddingAction(action, landscapePolicy), widget );
+ int index = policyIndexForAddingAction(action, landscapePolicy);
+ if(index != -1)
+ landscapePolicy->insertWidgetAndRemoveOverflow( index, widget );
}
if(validInPortrait && portraitIndex == -1) {
- if( reserveSpaceForAction(action, portraitData) )
- portraitPolicy->insertItem( policyIndexForAddingAction(action, portraitPolicy), widget );
+ int index = policyIndexForAddingAction(action, portraitPolicy);
+ if(index != -1)
+ portraitPolicy->insertWidgetAndRemoveOverflow( index, widget );
}
updateWidgetFromAction(widget, action);
@@ -307,7 +372,7 @@ bool MToolBarViewPrivate::eventFilter(QObject *obj, QEvent *e)
{
switch (e->type()) {
case QEvent::ActionRemoved:
- remove(static_cast<QActionEvent *>(e)->action());
+ remove(static_cast<QActionEvent *>(e)->action(), false);
break;
case QEvent::ActionAdded:
add(static_cast<QActionEvent *>(e)->action());
@@ -336,6 +401,11 @@ MWidget *MToolBarViewPrivate::createWidget(QAction *action)
widget->show();
} else {
MButton *button = new MButton;
+
+ button->setObjectName("toolbaractioncommand");
+ if (widgetAction && !widgetAction->objectName().isEmpty())
+ button->setObjectName(button->objectName() + "_" + widgetAction->objectName());
+
if(buttonGroup) {
button->setViewType("toolbartab");
button->setCheckable(action->isCheckable());
@@ -401,22 +471,6 @@ MWidget *MToolBarView::getWidget(QAction *action) const
return d->leasedWidgets.value(action);
}
-bool MToolBarViewPrivate::reserveSpaceForAction(QAction *action, ActionPlacementData &policyData)
-{
- if(hasTextEditWidget(action)) {
- if (policyData.hasTextEditor || policyData.placedActions > maxWidgets)
- return false; //We can't add two text edits, and there must be two spaces available for a text edit
- policyData.hasTextEditor = true;
- //one text-edit widget takes space of two buttons
- policyData.placedActions += 2;
- } else {
- if (policyData.placedActions >= maxWidgets)
- return false; //no more room
- policyData.placedActions += 1;
- }
- return true;
-}
-
void MToolBarViewPrivate::_q_groupButtonClicked(bool checked)
{
Q_Q(MToolBarView);
diff --git a/src/views/mtoolbarview_p.h b/src/views/mtoolbarview_p.h
index 88705336..7acab644 100644
--- a/src/views/mtoolbarview_p.h
+++ b/src/views/mtoolbarview_p.h
@@ -37,6 +37,7 @@ class MWidgetAction;
class MLayout;
class QGraphicsLayoutItem;
class QGraphicsWidget;
+class ToolBarLayoutPolicy;
class MToolBarViewPrivate : public QObject
{
@@ -49,21 +50,20 @@ public:
void init();
void add(QAction *action);
- void remove(QAction *action);
+ void remove(QAction *action, bool hideOnly);
void change(QAction *action);
protected:
bool eventFilter(QObject *obj, QEvent *event);
MWidget *createWidget(QAction *action);
- int policyIndexForAddingAction(QAction *action, MLinearLayoutPolicy *policy) const;
+ int policyIndexForAddingAction(QAction *action, ToolBarLayoutPolicy *policy) const;
bool isLocationValid(QAction *action, MAction::Location loc) const;
bool releaseWidget(QAction *action, MWidget *widget) const;
bool hasTextEditWidget(QAction *action) const;
bool hasUnusableWidget(QAction *action) const;
void updateWidgetFromAction(MWidget *widget, QAction *action) const;
MWidget *getWidget(QAction *action) const;
-
void _q_groupButtonClicked(bool);
void _q_groupActionToggled(bool);
protected:
@@ -71,33 +71,13 @@ protected:
MToolBar *controller;
MWidget *widgetsContainer;
MLayout *layout;
- MLinearLayoutPolicy *landscapePolicy;
- MLinearLayoutPolicy *portraitPolicy;
QHash<QAction *, MWidget *> leasedWidgets;
QHash<QAction *, MButton *> buttons;
/* If this is non-null, created buttons will be placed in this group */
MButtonGroup * buttonGroup;
- static const int maxWidgets;
-
- enum PlacementMode {
- Managed = 0,
- Unmanaged
- };
-
- struct ActionPlacementData
- {
- ActionPlacementData() {
- hasTextEditor = false;
- placedActions = 0;
- }
- bool hasTextEditor;
- int placedActions;
- };
-
- ActionPlacementData landscapeData;
- ActionPlacementData portraitData;
- bool reserveSpaceForAction(QAction *action, ActionPlacementData &policyData);
+ ToolBarLayoutPolicy *landscapePolicy;
+ ToolBarLayoutPolicy *portraitPolicy;
};
#endif
diff --git a/src/views/style/mbubbleitembackgroundstyle.h b/src/views/style/mbubbleitembackgroundstyle.h
new file mode 100644
index 00000000..c63943f4
--- /dev/null
+++ b/src/views/style/mbubbleitembackgroundstyle.h
@@ -0,0 +1,50 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MBUBBLEITEMBACKGROUNDSTYLE_H
+#define MBUBBLEITEMBACKGROUNDSTYLE_H
+
+#include <mwidgetstyle.h>
+
+/*!
+ * \internal
+ */
+
+class M_EXPORT MBubbleItemBackgroundStyle : public MWidgetStyle
+{
+ Q_OBJECT
+ M_STYLE(MBubbleItemBackgroundStyle)
+
+ M_STYLE_PTR_ATTRIBUTE(MScalableImage *, incomingBackground, IncomingBackground)
+ M_STYLE_PTR_ATTRIBUTE(MScalableImage *, incomingMirroredBackground, IncomingMirroredBackground)
+ M_STYLE_PTR_ATTRIBUTE(MScalableImage *, outgoingBackground, OutgoingBackground)
+ M_STYLE_PTR_ATTRIBUTE(MScalableImage *, outgoingMirroredBackground, OutgoingMirroredBackground)
+};
+
+/*!
+ * \internal
+ */
+
+class M_EXPORT MBubbleItemBackgroundStyleContainer : public MWidgetStyleContainer
+{
+ M_STYLE_CONTAINER(MBubbleItemBackgroundStyle)
+};
+
+#endif
+
diff --git a/src/views/style/mlistitemstyle.h b/src/views/style/mlistitemstyle.h
new file mode 100644
index 00000000..35f30ea9
--- /dev/null
+++ b/src/views/style/mlistitemstyle.h
@@ -0,0 +1,36 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MLISTITEMSTYLE_H
+#define MLISTITEMSTYLE_H
+
+#include <mwidgetstyle.h>
+
+class M_EXPORT MListItemStyle : public MWidgetStyle
+{
+ Q_OBJECT
+ M_STYLE(MListItemStyle)
+};
+
+class M_EXPORT MListItemStyleContainer : public MWidgetStyleContainer
+{
+ M_STYLE_CONTAINER(MListItemStyle)
+};
+
+#endif // MLISTITEMSTYLE_H
diff --git a/src/views/style/mtexteditstyle.h b/src/views/style/mtexteditstyle.h
index 9a9ddfad..f4f19bd1 100644
--- a/src/views/style/mtexteditstyle.h
+++ b/src/views/style/mtexteditstyle.h
@@ -41,6 +41,36 @@ class M_EXPORT MTextEditStyle : public MWidgetStyle
M_STYLE_ATTRIBUTE(QString, pasteFailedIcon, PasteFailedIcon)
M_STYLE_ATTRIBUTE(int, pasteFailedDuration, PasteFailedDuration)
M_STYLE_ATTRIBUTE(int, maskingDelay, MaskingDelay)
+
+ /*!
+ \property MTextEditStyle::pressBoundaryFeedback
+ \brief Feedback given when pressing between words
+ */
+ M_STYLE_ATTRIBUTE(MFeedback, pressBoundaryFeedback, PressBoundaryFeedback)
+
+ /*!
+ \property MTextEditStyle::releaseBoundaryFeedback
+ \brief Feedback given when releasing between words
+ */
+ M_STYLE_ATTRIBUTE(MFeedback, releaseBoundaryFeedback, ReleaseBoundaryFeedback)
+
+ /*!
+ \property MTextEditStyle::pressWordFeedback
+ \brief Feedback given when pressing on top of a word
+ */
+ M_STYLE_ATTRIBUTE(MFeedback, pressWordFeedback, PressWordFeedback)
+
+ /*!
+ \property MTextEditStyle::releaseWordFeedback
+ \brief Feedback given when releasing on top of a word
+ */
+ M_STYLE_ATTRIBUTE(MFeedback, releaseWordFeedback, ReleaseWordFeedback)
+
+ /*!
+ \property MTextEditStyle::changeSelectionFeedback
+ \brief Feedback given when finger movement changes text selection
+ */
+ M_STYLE_ATTRIBUTE(MFeedback, changeSelectionFeedback, ChangeSelectionFeedback)
};
class M_EXPORT MTextEditStyleContainer : public MWidgetStyleContainer
diff --git a/src/views/style/style.pri b/src/views/style/style.pri
index d6a7e0b4..f6c85233 100644
--- a/src/views/style/style.pri
+++ b/src/views/style/style.pri
@@ -48,6 +48,8 @@ MGEN_STYLE_HEADERS += \
$$STYLE_SRC_DIR/mvideowidgetstyle.h \
$$STYLE_SRC_DIR/mlistindexstyle.h \
$$STYLE_SRC_DIR/mwarpanimationstyle.h \
+ $$STYLE_SRC_DIR/mlistitemstyle.h \
+ $$STYLE_SRC_DIR/mbubbleitembackgroundstyle.h \
PUBLIC_HEADERS += \
$$MGEN_STYLE_HEADERS \
diff --git a/src/views/views.pri b/src/views/views.pri
index 00f5ab9a..83438aa0 100644
--- a/src/views/views.pri
+++ b/src/views/views.pri
@@ -46,6 +46,8 @@ PUBLIC_HEADERS += \
mnavigationbarview.h \
mscenelayereffectdimview.h \
mlistindexview.h \
+ mlistitemview.h \
+ mbubbleitemview.h \
PRIVATE_HEADERS += \
mstylablewidgetview_p.h \
@@ -62,6 +64,7 @@ PRIVATE_HEADERS += \
mtoolbartabview_p.h \
mpannablewidgetview_p.h \
mlistindexview_p.h \
+ mlistitemview_p.h \
SOURCES += \
mapplicationpageview.cpp \
@@ -112,3 +115,5 @@ SOURCES += \
mnavigationbarview.cpp \
mscenelayereffectdimview.cpp \
mlistindexview.cpp \
+ mlistitemview.cpp \
+ mbubbleitemview.cpp \
diff --git a/src/views/widgets/mbubbleitembackground.cpp b/src/views/widgets/mbubbleitembackground.cpp
new file mode 100644
index 00000000..c7675237
--- /dev/null
+++ b/src/views/widgets/mbubbleitembackground.cpp
@@ -0,0 +1,129 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include <QGraphicsSceneMouseEvent>
+
+#include "mbubbleitembackground_p.h"
+#include "mwidgetcreator.h"
+#include "mtheme.h"
+#include "mscalableimage.h"
+
+M_REGISTER_WIDGET(MBubbleItemBackground)
+
+M_REGISTER_VIEW(MBubbleItemBackgroundView, MBubbleItemBackground)
+
+/*
+ * View
+ */
+
+MBubbleItemBackgroundView::MBubbleItemBackgroundView(MBubbleItemBackground *_controller)
+ : MWidgetView(_controller),
+ rtl( false )
+{
+ controller = _controller;
+}
+
+void MBubbleItemBackgroundView::drawBackground(QPainter* painter, const QStyleOptionGraphicsItem* option) const
+{
+ Q_UNUSED(option);
+
+ QSizeF currentSize = size();
+ if (currentSize.width() == 0 || currentSize.height() == 0)
+ return;
+
+ qreal oldOpacity = painter->opacity();
+ painter->setOpacity(style()->backgroundOpacity() * effectiveOpacity());
+
+ if( controller->messageType() == MBubbleItem::Incoming ) {
+ if( !rtl ) {
+ if( style()->incomingBackground() )
+ style()->incomingBackground()->draw(0, 0, currentSize.width(), currentSize.height(), painter);
+ } else {
+ if( style()->incomingMirroredBackground() )
+ style()->incomingMirroredBackground()->draw(0, 0, currentSize.width(), currentSize.height(), painter);
+ }
+
+ } else if ( controller->messageType() == MBubbleItem::Outgoing ) {
+ if( !rtl ) {
+ if( style()->outgoingBackground() )
+ style()->outgoingBackground()->draw(0, 0, currentSize.width(), currentSize.height(), painter);
+ } else {
+ if( style()->outgoingMirroredBackground() )
+ style()->outgoingMirroredBackground()->draw(0, 0, currentSize.width(), currentSize.height(), painter);
+ }
+ }
+
+ painter->setOpacity(oldOpacity);
+}
+
+void MBubbleItemBackgroundView::applyStyle()
+{
+ MWidgetView::applyStyle();
+
+ if( controller->layoutDirection() == Qt::RightToLeft )
+ rtl = true;
+ else
+ rtl = false;
+}
+
+bool MBubbleItemBackgroundView::event(QEvent* event)
+{
+ if ( event->type() == QEvent::LayoutDirectionChange ) {
+ if(rtl)
+ rtl = false;
+ else
+ rtl = true;
+ }
+ return MWidgetView::event(event);
+}
+
+/*
+ * Controller
+ */
+
+MBubbleItemBackground::MBubbleItemBackground(QGraphicsItem * parent)
+ : MWidgetController(parent),
+ _messageType(MBubbleItem::Incoming)
+{
+ setView(new MBubbleItemBackgroundView(this));
+}
+
+void MBubbleItemBackground::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_UNUSED(event);
+ style().setModePressed();
+ update();
+}
+
+void MBubbleItemBackground::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_UNUSED(event);
+ style().setModeDefault();
+ emit clicked();
+ update();
+}
+
+void MBubbleItemBackground::cancelEvent(MCancelEvent *event)
+{
+ Q_UNUSED(event);
+ style().setModeDefault();
+ emit canceled();
+ update();
+}
+
diff --git a/src/views/widgets/mbubbleitembackground_p.h b/src/views/widgets/mbubbleitembackground_p.h
new file mode 100644
index 00000000..cc05a178
--- /dev/null
+++ b/src/views/widgets/mbubbleitembackground_p.h
@@ -0,0 +1,94 @@
+/***************************************************************************
+ **
+ ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ ** All rights reserved.
+ ** Contact: Nokia Corporation (directui@nokia.com)
+ **
+ ** This file is part of libmeegotouch.
+ **
+ ** If you have questions regarding the use of this file, please contact
+ ** Nokia at directui@nokia.com.
+ **
+ ** This library is free software; you can redistribute it and/or
+ ** modify it under the terms of the GNU Lesser General Public
+ ** License version 2.1 as published by the Free Software Foundation
+ ** and appearing in the file LICENSE.LGPL included in the packaging
+ ** of this file.
+ **
+ ****************************************************************************/
+
+#ifndef MBUBBLEITEMBACKGROUND_H
+#define MBUBBLEITEMBACKGROUND_H
+
+#include <MWidgetController>
+#include <MWidgetView>
+#include "mbubbleitem.h"
+#include <MScalableImage>
+
+#include "mbubbleitembackgroundstyle.h"
+
+/*!
+ * \internal
+ */
+
+class MBubbleItemBackground;
+
+class MBubbleItemBackgroundView : public MWidgetView
+{
+ Q_OBJECT
+ M_VIEW(MWidgetModel, MBubbleItemBackgroundStyle)
+
+public:
+ MBubbleItemBackgroundView(MBubbleItemBackground *controller);
+ ~MBubbleItemBackgroundView(){}
+
+protected:
+ virtual void drawBackground(QPainter *painter, const QStyleOptionGraphicsItem *option) const;
+
+ virtual bool event(QEvent* event);
+ void applyStyle();
+
+private:
+ bool rtl;
+
+ MBubbleItemBackground* controller;
+ Q_DISABLE_COPY(MBubbleItemBackgroundView)
+};
+
+/*
+ * Controller
+ */
+
+class MBubbleItemBackground : public MWidgetController
+{
+ Q_OBJECT
+ M_CONTROLLER(MWidget) // uses MWidgetModel
+
+public:
+ MBubbleItemBackground(QGraphicsItem *parent = 0);
+ virtual ~MBubbleItemBackground() {}
+
+ void setMessageType(MBubbleItem::MessageType mt)
+ {
+ _messageType = mt;
+ }
+
+ MBubbleItem::MessageType messageType()
+ {
+ return _messageType;
+ }
+
+protected:
+ virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+ virtual void cancelEvent(MCancelEvent *event);
+
+Q_SIGNALS:
+ void clicked();
+ void canceled();
+
+private:
+ MBubbleItem::MessageType _messageType;
+};
+
+#endif
diff --git a/src/views/widgets/widgets.pri b/src/views/widgets/widgets.pri
index 4c20959d..87f615ad 100644
--- a/src/views/widgets/widgets.pri
+++ b/src/views/widgets/widgets.pri
@@ -12,8 +12,10 @@ MGEN_MODEL_HEADERS += \
PRIVATE_HEADERS += \
$$MGEN_MODEL_HEADERS \
$$WIDGETS_SRC_DIR/mcontainerheader_p.h \
+ $$WIDGETS_SRC_DIR/mbubbleitembackground_p.h \
SOURCES += \
$$WIDGETS_SRC_DIR/mapplicationmenubutton.cpp \
$$WIDGETS_SRC_DIR/mcontainerheader.cpp \
$$WIDGETS_SRC_DIR/mlistindex.cpp \
+ $$WIDGETS_SRC_DIR/mbubbleitembackground.cpp \
diff --git a/tests/ft_locales/ft_locales-test-input-icu-4.2.1.txt b/tests/ft_locales/ft_locales-test-input-icu-4.2.1.txt
index a10a3e4c..10f25a31 100644
--- a/tests/ft_locales/ft_locales-test-input-icu-4.2.1.txt
+++ b/tests/ft_locales/ft_locales-test-input-icu-4.2.1.txt
@@ -1520,18 +1520,18 @@ el Date and time short (Islamic Calendar) 18/07/1429 12:31 μ.μ.
el Date and time medium (Islamic Calendar) 18 Rajab 1429 12:31:00 μ.μ.
el Date and time long (Islamic Calendar) 18 Rajab 1429 12:31:00 μ.μ. GMT+0000
el Date and time full (Islamic Calendar) Δευτέρα, 18 Rajab 1429 12:31:00 μ.μ. GMT+0000
-el Name of month 01 (Gregorian Calendar) Ιανουαρίου
-el Name of month 02 (Gregorian Calendar) Φεβρουαρίου
-el Name of month 03 (Gregorian Calendar) Μαρτίου
-el Name of month 04 (Gregorian Calendar) Απριλίου
-el Name of month 05 (Gregorian Calendar) Μαΐου
-el Name of month 06 (Gregorian Calendar) Ιουνίου
-el Name of month 07 (Gregorian Calendar) Ιουλίου
-el Name of month 08 (Gregorian Calendar) Αυγούστου
-el Name of month 09 (Gregorian Calendar) Σεπτεμβρίου
-el Name of month 10 (Gregorian Calendar) Οκτωβρίου
-el Name of month 11 (Gregorian Calendar) Νοεμβρίου
-el Name of month 12 (Gregorian Calendar) Δεκεμβρίου
+el Name of month 01 (Gregorian Calendar) Ιανουάριος
+el Name of month 02 (Gregorian Calendar) Φεβρουάριος
+el Name of month 03 (Gregorian Calendar) Μάρτιος
+el Name of month 04 (Gregorian Calendar) Απρίλιος
+el Name of month 05 (Gregorian Calendar) Μάιος
+el Name of month 06 (Gregorian Calendar) Ιούνιος
+el Name of month 07 (Gregorian Calendar) Ιούλιος
+el Name of month 08 (Gregorian Calendar) Αύγουστος
+el Name of month 09 (Gregorian Calendar) Σεπτέμβριος
+el Name of month 10 (Gregorian Calendar) Οκτώβριος
+el Name of month 11 (Gregorian Calendar) Νοέμβριος
+el Name of month 12 (Gregorian Calendar) Δεκέμβριος
el Name of month 01 (Islamic Calendar) Muharram
el Name of month 02 (Islamic Calendar) Safar
el Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -1572,18 +1572,18 @@ el_CY Date and time short (Islamic Calendar) 18/07/1429 12:31 μ.μ.
el_CY Date and time medium (Islamic Calendar) 18 Rajab 1429 12:31:00 μ.μ.
el_CY Date and time long (Islamic Calendar) 18 Rajab 1429 12:31:00 μ.μ. GMT+0000
el_CY Date and time full (Islamic Calendar) Δευτέρα, 18 Rajab 1429 12:31:00 μ.μ. GMT+0000
-el_CY Name of month 01 (Gregorian Calendar) Ιανουαρίου
-el_CY Name of month 02 (Gregorian Calendar) Φεβρουαρίου
-el_CY Name of month 03 (Gregorian Calendar) Μαρτίου
-el_CY Name of month 04 (Gregorian Calendar) Απριλίου
-el_CY Name of month 05 (Gregorian Calendar) Μαΐου
-el_CY Name of month 06 (Gregorian Calendar) Ιουνίου
-el_CY Name of month 07 (Gregorian Calendar) Ιουλίου
-el_CY Name of month 08 (Gregorian Calendar) Αυγούστου
-el_CY Name of month 09 (Gregorian Calendar) Σεπτεμβρίου
-el_CY Name of month 10 (Gregorian Calendar) Οκτωβρίου
-el_CY Name of month 11 (Gregorian Calendar) Νοεμβρίου
-el_CY Name of month 12 (Gregorian Calendar) Δεκεμβρίου
+el_CY Name of month 01 (Gregorian Calendar) Ιανουάριος
+el_CY Name of month 02 (Gregorian Calendar) Φεβρουάριος
+el_CY Name of month 03 (Gregorian Calendar) Μάρτιος
+el_CY Name of month 04 (Gregorian Calendar) Απρίλιος
+el_CY Name of month 05 (Gregorian Calendar) Μάιος
+el_CY Name of month 06 (Gregorian Calendar) Ιούνιος
+el_CY Name of month 07 (Gregorian Calendar) Ιούλιος
+el_CY Name of month 08 (Gregorian Calendar) Αύγουστος
+el_CY Name of month 09 (Gregorian Calendar) Σεπτέμβριος
+el_CY Name of month 10 (Gregorian Calendar) Οκτώβριος
+el_CY Name of month 11 (Gregorian Calendar) Νοέμβριος
+el_CY Name of month 12 (Gregorian Calendar) Δεκέμβριος
el_CY Name of month 01 (Islamic Calendar) Muharram
el_CY Name of month 02 (Islamic Calendar) Safar
el_CY Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -1624,18 +1624,18 @@ el_GR Date and time short (Islamic Calendar) 18/07/1429 12:31 μ.μ.
el_GR Date and time medium (Islamic Calendar) 18 Rajab 1429 12:31:00 μ.μ.
el_GR Date and time long (Islamic Calendar) 18 Rajab 1429 12:31:00 μ.μ. GMT+0000
el_GR Date and time full (Islamic Calendar) Δευτέρα, 18 Rajab 1429 12:31:00 μ.μ. GMT+0000
-el_GR Name of month 01 (Gregorian Calendar) Ιανουαρίου
-el_GR Name of month 02 (Gregorian Calendar) Φεβρουαρίου
-el_GR Name of month 03 (Gregorian Calendar) Μαρτίου
-el_GR Name of month 04 (Gregorian Calendar) Απριλίου
-el_GR Name of month 05 (Gregorian Calendar) Μαΐου
-el_GR Name of month 06 (Gregorian Calendar) Ιουνίου
-el_GR Name of month 07 (Gregorian Calendar) Ιουλίου
-el_GR Name of month 08 (Gregorian Calendar) Αυγούστου
-el_GR Name of month 09 (Gregorian Calendar) Σεπτεμβρίου
-el_GR Name of month 10 (Gregorian Calendar) Οκτωβρίου
-el_GR Name of month 11 (Gregorian Calendar) Νοεμβρίου
-el_GR Name of month 12 (Gregorian Calendar) Δεκεμβρίου
+el_GR Name of month 01 (Gregorian Calendar) Ιανουάριος
+el_GR Name of month 02 (Gregorian Calendar) Φεβρουάριος
+el_GR Name of month 03 (Gregorian Calendar) Μάρτιος
+el_GR Name of month 04 (Gregorian Calendar) Απρίλιος
+el_GR Name of month 05 (Gregorian Calendar) Μάιος
+el_GR Name of month 06 (Gregorian Calendar) Ιούνιος
+el_GR Name of month 07 (Gregorian Calendar) Ιούλιος
+el_GR Name of month 08 (Gregorian Calendar) Αύγουστος
+el_GR Name of month 09 (Gregorian Calendar) Σεπτέμβριος
+el_GR Name of month 10 (Gregorian Calendar) Οκτώβριος
+el_GR Name of month 11 (Gregorian Calendar) Νοέμβριος
+el_GR Name of month 12 (Gregorian Calendar) Δεκέμβριος
el_GR Name of month 01 (Islamic Calendar) Muharram
el_GR Name of month 02 (Islamic Calendar) Safar
el_GR Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -4120,13 +4120,13 @@ fa Date and time short (Islamic Calendar) ۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:۳۱
fa Date and time medium (Islamic Calendar) ۱۴۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:۳۱:۰۰
fa Date and time long (Islamic Calendar) ۱۸ رجب ۱۴۲۹ ه‍. ق.، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
fa Date and time full (Islamic Calendar) دوشنبه ۱۸ رجب ۱۴۲۹ هجری قمری، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
-fa Name of month 01 (Gregorian Calendar) ژانویهٔ
-fa Name of month 02 (Gregorian Calendar) فوریهٔ
+fa Name of month 01 (Gregorian Calendar) ژانویه
+fa Name of month 02 (Gregorian Calendar) فوریه
fa Name of month 03 (Gregorian Calendar) مارس
fa Name of month 04 (Gregorian Calendar) آوریل
-fa Name of month 05 (Gregorian Calendar) مهٔ
+fa Name of month 05 (Gregorian Calendar) مه
fa Name of month 06 (Gregorian Calendar) ژوئن
-fa Name of month 07 (Gregorian Calendar) ژوئیهٔ
+fa Name of month 07 (Gregorian Calendar) ژوئیه
fa Name of month 08 (Gregorian Calendar) اوت
fa Name of month 09 (Gregorian Calendar) سپتامبر
fa Name of month 10 (Gregorian Calendar) اکتبر
@@ -4172,18 +4172,18 @@ fa_AF Date and time short (Islamic Calendar) ۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:
fa_AF Date and time medium (Islamic Calendar) ۱۴۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:۳۱:۰۰
fa_AF Date and time long (Islamic Calendar) ۱۸ رجب ۱۴۲۹ ه‍. ق.، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
fa_AF Date and time full (Islamic Calendar) دوشنبه ۱۸ رجب ۱۴۲۹ هجری قمری، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
-fa_AF Name of month 01 (Gregorian Calendar) جنوری
-fa_AF Name of month 02 (Gregorian Calendar) فبروری
-fa_AF Name of month 03 (Gregorian Calendar) مارچ
-fa_AF Name of month 04 (Gregorian Calendar) اپریل
-fa_AF Name of month 05 (Gregorian Calendar) می
-fa_AF Name of month 06 (Gregorian Calendar) جون
-fa_AF Name of month 07 (Gregorian Calendar) جولای
-fa_AF Name of month 08 (Gregorian Calendar) اگست
-fa_AF Name of month 09 (Gregorian Calendar) سپتمبر
-fa_AF Name of month 10 (Gregorian Calendar) اکتوبر
-fa_AF Name of month 11 (Gregorian Calendar) نومبر
-fa_AF Name of month 12 (Gregorian Calendar) دسمبر
+fa_AF Name of month 01 (Gregorian Calendar) ژانویه
+fa_AF Name of month 02 (Gregorian Calendar) فوریه
+fa_AF Name of month 03 (Gregorian Calendar) مارس
+fa_AF Name of month 04 (Gregorian Calendar) آوریل
+fa_AF Name of month 05 (Gregorian Calendar) مه
+fa_AF Name of month 06 (Gregorian Calendar) ژوئن
+fa_AF Name of month 07 (Gregorian Calendar) ژوئیه
+fa_AF Name of month 08 (Gregorian Calendar) اوت
+fa_AF Name of month 09 (Gregorian Calendar) سپتامبر
+fa_AF Name of month 10 (Gregorian Calendar) اکتبر
+fa_AF Name of month 11 (Gregorian Calendar) نوامبر
+fa_AF Name of month 12 (Gregorian Calendar) دسامبر
fa_AF Name of month 01 (Islamic Calendar) محرم
fa_AF Name of month 02 (Islamic Calendar) صفر
fa_AF Name of month 03 (Islamic Calendar) ربیع الاول
@@ -4224,13 +4224,13 @@ fa_IR Date and time short (Islamic Calendar) ۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:
fa_IR Date and time medium (Islamic Calendar) ۱۴۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:۳۱:۰۰
fa_IR Date and time long (Islamic Calendar) ۱۸ رجب ۱۴۲۹ ه‍. ق.، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
fa_IR Date and time full (Islamic Calendar) دوشنبه ۱۸ رجب ۱۴۲۹ هجری قمری، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
-fa_IR Name of month 01 (Gregorian Calendar) ژانویهٔ
-fa_IR Name of month 02 (Gregorian Calendar) فوریهٔ
+fa_IR Name of month 01 (Gregorian Calendar) ژانویه
+fa_IR Name of month 02 (Gregorian Calendar) فوریه
fa_IR Name of month 03 (Gregorian Calendar) مارس
fa_IR Name of month 04 (Gregorian Calendar) آوریل
-fa_IR Name of month 05 (Gregorian Calendar) مهٔ
+fa_IR Name of month 05 (Gregorian Calendar) مه
fa_IR Name of month 06 (Gregorian Calendar) ژوئن
-fa_IR Name of month 07 (Gregorian Calendar) ژوئیهٔ
+fa_IR Name of month 07 (Gregorian Calendar) ژوئیه
fa_IR Name of month 08 (Gregorian Calendar) اوت
fa_IR Name of month 09 (Gregorian Calendar) سپتامبر
fa_IR Name of month 10 (Gregorian Calendar) اکتبر
@@ -4276,18 +4276,18 @@ fi Date and time short (Islamic Calendar) 18.7.1429 12.31
fi Date and time medium (Islamic Calendar) 18.7.1429 12.31.00
fi Date and time long (Islamic Calendar) 18. radžab 1429 12.31.00 UTC+0.00
fi Date and time full (Islamic Calendar) maanantaina 18. radžab 1429 12.31.00 UTC+0.00
-fi Name of month 01 (Gregorian Calendar) tammikuuta
-fi Name of month 02 (Gregorian Calendar) helmikuuta
-fi Name of month 03 (Gregorian Calendar) maaliskuuta
-fi Name of month 04 (Gregorian Calendar) huhtikuuta
-fi Name of month 05 (Gregorian Calendar) toukokuuta
-fi Name of month 06 (Gregorian Calendar) kesäkuuta
-fi Name of month 07 (Gregorian Calendar) heinäkuuta
-fi Name of month 08 (Gregorian Calendar) elokuuta
-fi Name of month 09 (Gregorian Calendar) syyskuuta
-fi Name of month 10 (Gregorian Calendar) lokakuuta
-fi Name of month 11 (Gregorian Calendar) marraskuuta
-fi Name of month 12 (Gregorian Calendar) joulukuuta
+fi Name of month 01 (Gregorian Calendar) tammikuu
+fi Name of month 02 (Gregorian Calendar) helmikuu
+fi Name of month 03 (Gregorian Calendar) maaliskuu
+fi Name of month 04 (Gregorian Calendar) huhtikuu
+fi Name of month 05 (Gregorian Calendar) toukokuu
+fi Name of month 06 (Gregorian Calendar) kesäkuu
+fi Name of month 07 (Gregorian Calendar) heinäkuu
+fi Name of month 08 (Gregorian Calendar) elokuu
+fi Name of month 09 (Gregorian Calendar) syyskuu
+fi Name of month 10 (Gregorian Calendar) lokakuu
+fi Name of month 11 (Gregorian Calendar) marraskuu
+fi Name of month 12 (Gregorian Calendar) joulukuu
fi Name of month 01 (Islamic Calendar) muharram
fi Name of month 02 (Islamic Calendar) safar
fi Name of month 03 (Islamic Calendar) rabi’ al-awwal
@@ -4300,20 +4300,20 @@ fi Name of month 09 (Islamic Calendar) ramadan
fi Name of month 10 (Islamic Calendar) šawwal
fi Name of month 11 (Islamic Calendar) dhu-l-qa’da
fi Name of month 12 (Islamic Calendar) dhu-l-hiddža
-fi Name of weekday 01 (Gregorian Calendar) maanantaina
-fi Name of weekday 02 (Gregorian Calendar) tiistaina
-fi Name of weekday 03 (Gregorian Calendar) keskiviikkona
-fi Name of weekday 04 (Gregorian Calendar) torstaina
-fi Name of weekday 05 (Gregorian Calendar) perjantaina
-fi Name of weekday 06 (Gregorian Calendar) lauantaina
-fi Name of weekday 07 (Gregorian Calendar) sunnuntaina
-fi Name of weekday 01 (Islamic Calendar) maanantaina
-fi Name of weekday 02 (Islamic Calendar) tiistaina
-fi Name of weekday 03 (Islamic Calendar) keskiviikkona
-fi Name of weekday 04 (Islamic Calendar) torstaina
-fi Name of weekday 05 (Islamic Calendar) perjantaina
-fi Name of weekday 06 (Islamic Calendar) lauantaina
-fi Name of weekday 07 (Islamic Calendar) sunnuntaina
+fi Name of weekday 01 (Gregorian Calendar) maanantai
+fi Name of weekday 02 (Gregorian Calendar) tiistai
+fi Name of weekday 03 (Gregorian Calendar) keskiviikko
+fi Name of weekday 04 (Gregorian Calendar) torstai
+fi Name of weekday 05 (Gregorian Calendar) perjantai
+fi Name of weekday 06 (Gregorian Calendar) lauantai
+fi Name of weekday 07 (Gregorian Calendar) sunnuntai
+fi Name of weekday 01 (Islamic Calendar) maanantai
+fi Name of weekday 02 (Islamic Calendar) tiistai
+fi Name of weekday 03 (Islamic Calendar) keskiviikko
+fi Name of weekday 04 (Islamic Calendar) torstai
+fi Name of weekday 05 (Islamic Calendar) perjantai
+fi Name of weekday 06 (Islamic Calendar) lauantai
+fi Name of weekday 07 (Islamic Calendar) sunnuntai
fi_FI Language endonym suomi
fi_FI Country endonym Suomi
fi_FI Floating Point Number -123 456 789,012
@@ -4328,18 +4328,18 @@ fi_FI Date and time short (Islamic Calendar) 18.7.1429 12.31
fi_FI Date and time medium (Islamic Calendar) 18.7.1429 12.31.00
fi_FI Date and time long (Islamic Calendar) 18. radžab 1429 12.31.00 UTC+0.00
fi_FI Date and time full (Islamic Calendar) maanantaina 18. radžab 1429 12.31.00 UTC+0.00
-fi_FI Name of month 01 (Gregorian Calendar) tammikuuta
-fi_FI Name of month 02 (Gregorian Calendar) helmikuuta
-fi_FI Name of month 03 (Gregorian Calendar) maaliskuuta
-fi_FI Name of month 04 (Gregorian Calendar) huhtikuuta
-fi_FI Name of month 05 (Gregorian Calendar) toukokuuta
-fi_FI Name of month 06 (Gregorian Calendar) kesäkuuta
-fi_FI Name of month 07 (Gregorian Calendar) heinäkuuta
-fi_FI Name of month 08 (Gregorian Calendar) elokuuta
-fi_FI Name of month 09 (Gregorian Calendar) syyskuuta
-fi_FI Name of month 10 (Gregorian Calendar) lokakuuta
-fi_FI Name of month 11 (Gregorian Calendar) marraskuuta
-fi_FI Name of month 12 (Gregorian Calendar) joulukuuta
+fi_FI Name of month 01 (Gregorian Calendar) tammikuu
+fi_FI Name of month 02 (Gregorian Calendar) helmikuu
+fi_FI Name of month 03 (Gregorian Calendar) maaliskuu
+fi_FI Name of month 04 (Gregorian Calendar) huhtikuu
+fi_FI Name of month 05 (Gregorian Calendar) toukokuu
+fi_FI Name of month 06 (Gregorian Calendar) kesäkuu
+fi_FI Name of month 07 (Gregorian Calendar) heinäkuu
+fi_FI Name of month 08 (Gregorian Calendar) elokuu
+fi_FI Name of month 09 (Gregorian Calendar) syyskuu
+fi_FI Name of month 10 (Gregorian Calendar) lokakuu
+fi_FI Name of month 11 (Gregorian Calendar) marraskuu
+fi_FI Name of month 12 (Gregorian Calendar) joulukuu
fi_FI Name of month 01 (Islamic Calendar) muharram
fi_FI Name of month 02 (Islamic Calendar) safar
fi_FI Name of month 03 (Islamic Calendar) rabi’ al-awwal
@@ -4352,20 +4352,20 @@ fi_FI Name of month 09 (Islamic Calendar) ramadan
fi_FI Name of month 10 (Islamic Calendar) šawwal
fi_FI Name of month 11 (Islamic Calendar) dhu-l-qa’da
fi_FI Name of month 12 (Islamic Calendar) dhu-l-hiddža
-fi_FI Name of weekday 01 (Gregorian Calendar) maanantaina
-fi_FI Name of weekday 02 (Gregorian Calendar) tiistaina
-fi_FI Name of weekday 03 (Gregorian Calendar) keskiviikkona
-fi_FI Name of weekday 04 (Gregorian Calendar) torstaina
-fi_FI Name of weekday 05 (Gregorian Calendar) perjantaina
-fi_FI Name of weekday 06 (Gregorian Calendar) lauantaina
-fi_FI Name of weekday 07 (Gregorian Calendar) sunnuntaina
-fi_FI Name of weekday 01 (Islamic Calendar) maanantaina
-fi_FI Name of weekday 02 (Islamic Calendar) tiistaina
-fi_FI Name of weekday 03 (Islamic Calendar) keskiviikkona
-fi_FI Name of weekday 04 (Islamic Calendar) torstaina
-fi_FI Name of weekday 05 (Islamic Calendar) perjantaina
-fi_FI Name of weekday 06 (Islamic Calendar) lauantaina
-fi_FI Name of weekday 07 (Islamic Calendar) sunnuntaina
+fi_FI Name of weekday 01 (Gregorian Calendar) maanantai
+fi_FI Name of weekday 02 (Gregorian Calendar) tiistai
+fi_FI Name of weekday 03 (Gregorian Calendar) keskiviikko
+fi_FI Name of weekday 04 (Gregorian Calendar) torstai
+fi_FI Name of weekday 05 (Gregorian Calendar) perjantai
+fi_FI Name of weekday 06 (Gregorian Calendar) lauantai
+fi_FI Name of weekday 07 (Gregorian Calendar) sunnuntai
+fi_FI Name of weekday 01 (Islamic Calendar) maanantai
+fi_FI Name of weekday 02 (Islamic Calendar) tiistai
+fi_FI Name of weekday 03 (Islamic Calendar) keskiviikko
+fi_FI Name of weekday 04 (Islamic Calendar) torstai
+fi_FI Name of weekday 05 (Islamic Calendar) perjantai
+fi_FI Name of weekday 06 (Islamic Calendar) lauantai
+fi_FI Name of weekday 07 (Islamic Calendar) sunnuntai
fr Language endonym français
fr Country endonym
fr Floating Point Number -123 456 789,012
@@ -5004,18 +5004,18 @@ it Date and time short (Islamic Calendar) 18/07/29 12.31
it Date and time medium (Islamic Calendar) 18/Rajab/1429 12.31.00
it Date and time long (Islamic Calendar) 18 Rajab 1429 12.31.00 GMT+00.00
it Date and time full (Islamic Calendar) lunedì 18 Rajab 1429 12.31.00 GMT+00.00
-it Name of month 01 (Gregorian Calendar) gennaio
-it Name of month 02 (Gregorian Calendar) febbraio
-it Name of month 03 (Gregorian Calendar) marzo
-it Name of month 04 (Gregorian Calendar) aprile
-it Name of month 05 (Gregorian Calendar) maggio
-it Name of month 06 (Gregorian Calendar) giugno
-it Name of month 07 (Gregorian Calendar) luglio
-it Name of month 08 (Gregorian Calendar) agosto
-it Name of month 09 (Gregorian Calendar) settembre
-it Name of month 10 (Gregorian Calendar) ottobre
-it Name of month 11 (Gregorian Calendar) novembre
-it Name of month 12 (Gregorian Calendar) dicembre
+it Name of month 01 (Gregorian Calendar) Gennaio
+it Name of month 02 (Gregorian Calendar) Febbraio
+it Name of month 03 (Gregorian Calendar) Marzo
+it Name of month 04 (Gregorian Calendar) Aprile
+it Name of month 05 (Gregorian Calendar) Maggio
+it Name of month 06 (Gregorian Calendar) Giugno
+it Name of month 07 (Gregorian Calendar) Luglio
+it Name of month 08 (Gregorian Calendar) Agosto
+it Name of month 09 (Gregorian Calendar) Settembre
+it Name of month 10 (Gregorian Calendar) Ottobre
+it Name of month 11 (Gregorian Calendar) Novembre
+it Name of month 12 (Gregorian Calendar) Dicembre
it Name of month 01 (Islamic Calendar) Muharram
it Name of month 02 (Islamic Calendar) Safar
it Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -5028,20 +5028,20 @@ it Name of month 09 (Islamic Calendar) Ramadan
it Name of month 10 (Islamic Calendar) Shawwal
it Name of month 11 (Islamic Calendar) Dhuʻl-Qiʻdah
it Name of month 12 (Islamic Calendar) Dhuʻl-Hijjah
-it Name of weekday 01 (Gregorian Calendar) lunedì
-it Name of weekday 02 (Gregorian Calendar) martedì
-it Name of weekday 03 (Gregorian Calendar) mercoledì
-it Name of weekday 04 (Gregorian Calendar) giovedì
-it Name of weekday 05 (Gregorian Calendar) venerdì
-it Name of weekday 06 (Gregorian Calendar) sabato
-it Name of weekday 07 (Gregorian Calendar) domenica
-it Name of weekday 01 (Islamic Calendar) lunedì
-it Name of weekday 02 (Islamic Calendar) martedì
-it Name of weekday 03 (Islamic Calendar) mercoledì
-it Name of weekday 04 (Islamic Calendar) giovedì
-it Name of weekday 05 (Islamic Calendar) venerdì
-it Name of weekday 06 (Islamic Calendar) sabato
-it Name of weekday 07 (Islamic Calendar) domenica
+it Name of weekday 01 (Gregorian Calendar) Lunedì
+it Name of weekday 02 (Gregorian Calendar) Martedì
+it Name of weekday 03 (Gregorian Calendar) Mercoledì
+it Name of weekday 04 (Gregorian Calendar) Giovedì
+it Name of weekday 05 (Gregorian Calendar) Venerdì
+it Name of weekday 06 (Gregorian Calendar) Sabato
+it Name of weekday 07 (Gregorian Calendar) Domenica
+it Name of weekday 01 (Islamic Calendar) Lunedì
+it Name of weekday 02 (Islamic Calendar) Martedì
+it Name of weekday 03 (Islamic Calendar) Mercoledì
+it Name of weekday 04 (Islamic Calendar) Giovedì
+it Name of weekday 05 (Islamic Calendar) Venerdì
+it Name of weekday 06 (Islamic Calendar) Sabato
+it Name of weekday 07 (Islamic Calendar) Domenica
it_CH Language endonym italiano
it_CH Country endonym Svizzera
it_CH Floating Point Number -123'456'789.012
@@ -5056,18 +5056,18 @@ it_CH Date and time short (Islamic Calendar) 18.07.29 12.31
it_CH Date and time medium (Islamic Calendar) 18-Rajab-1429 12.31.00
it_CH Date and time long (Islamic Calendar) 18 Rajab 1429 12.31.00 GMT+00.00
it_CH Date and time full (Islamic Calendar) lunedì, 18 Rajab 1429 12.31:00 h GMT+00.00
-it_CH Name of month 01 (Gregorian Calendar) gennaio
-it_CH Name of month 02 (Gregorian Calendar) febbraio
-it_CH Name of month 03 (Gregorian Calendar) marzo
-it_CH Name of month 04 (Gregorian Calendar) aprile
-it_CH Name of month 05 (Gregorian Calendar) maggio
-it_CH Name of month 06 (Gregorian Calendar) giugno
-it_CH Name of month 07 (Gregorian Calendar) luglio
-it_CH Name of month 08 (Gregorian Calendar) agosto
-it_CH Name of month 09 (Gregorian Calendar) settembre
-it_CH Name of month 10 (Gregorian Calendar) ottobre
-it_CH Name of month 11 (Gregorian Calendar) novembre
-it_CH Name of month 12 (Gregorian Calendar) dicembre
+it_CH Name of month 01 (Gregorian Calendar) Gennaio
+it_CH Name of month 02 (Gregorian Calendar) Febbraio
+it_CH Name of month 03 (Gregorian Calendar) Marzo
+it_CH Name of month 04 (Gregorian Calendar) Aprile
+it_CH Name of month 05 (Gregorian Calendar) Maggio
+it_CH Name of month 06 (Gregorian Calendar) Giugno
+it_CH Name of month 07 (Gregorian Calendar) Luglio
+it_CH Name of month 08 (Gregorian Calendar) Agosto
+it_CH Name of month 09 (Gregorian Calendar) Settembre
+it_CH Name of month 10 (Gregorian Calendar) Ottobre
+it_CH Name of month 11 (Gregorian Calendar) Novembre
+it_CH Name of month 12 (Gregorian Calendar) Dicembre
it_CH Name of month 01 (Islamic Calendar) Muharram
it_CH Name of month 02 (Islamic Calendar) Safar
it_CH Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -5080,20 +5080,20 @@ it_CH Name of month 09 (Islamic Calendar) Ramadan
it_CH Name of month 10 (Islamic Calendar) Shawwal
it_CH Name of month 11 (Islamic Calendar) Dhuʻl-Qiʻdah
it_CH Name of month 12 (Islamic Calendar) Dhuʻl-Hijjah
-it_CH Name of weekday 01 (Gregorian Calendar) lunedì
-it_CH Name of weekday 02 (Gregorian Calendar) martedì
-it_CH Name of weekday 03 (Gregorian Calendar) mercoledì
-it_CH Name of weekday 04 (Gregorian Calendar) giovedì
-it_CH Name of weekday 05 (Gregorian Calendar) venerdì
-it_CH Name of weekday 06 (Gregorian Calendar) sabato
-it_CH Name of weekday 07 (Gregorian Calendar) domenica
-it_CH Name of weekday 01 (Islamic Calendar) lunedì
-it_CH Name of weekday 02 (Islamic Calendar) martedì
-it_CH Name of weekday 03 (Islamic Calendar) mercoledì
-it_CH Name of weekday 04 (Islamic Calendar) giovedì
-it_CH Name of weekday 05 (Islamic Calendar) venerdì
-it_CH Name of weekday 06 (Islamic Calendar) sabato
-it_CH Name of weekday 07 (Islamic Calendar) domenica
+it_CH Name of weekday 01 (Gregorian Calendar) Lunedì
+it_CH Name of weekday 02 (Gregorian Calendar) Martedì
+it_CH Name of weekday 03 (Gregorian Calendar) Mercoledì
+it_CH Name of weekday 04 (Gregorian Calendar) Giovedì
+it_CH Name of weekday 05 (Gregorian Calendar) Venerdì
+it_CH Name of weekday 06 (Gregorian Calendar) Sabato
+it_CH Name of weekday 07 (Gregorian Calendar) Domenica
+it_CH Name of weekday 01 (Islamic Calendar) Lunedì
+it_CH Name of weekday 02 (Islamic Calendar) Martedì
+it_CH Name of weekday 03 (Islamic Calendar) Mercoledì
+it_CH Name of weekday 04 (Islamic Calendar) Giovedì
+it_CH Name of weekday 05 (Islamic Calendar) Venerdì
+it_CH Name of weekday 06 (Islamic Calendar) Sabato
+it_CH Name of weekday 07 (Islamic Calendar) Domenica
it_IT Language endonym italiano
it_IT Country endonym Italia
it_IT Floating Point Number -123.456.789,012
@@ -5108,18 +5108,18 @@ it_IT Date and time short (Islamic Calendar) 18/07/29 12.31
it_IT Date and time medium (Islamic Calendar) 18/Rajab/1429 12.31.00
it_IT Date and time long (Islamic Calendar) 18 Rajab 1429 12.31.00 GMT+00.00
it_IT Date and time full (Islamic Calendar) lunedì 18 Rajab 1429 12.31.00 GMT+00.00
-it_IT Name of month 01 (Gregorian Calendar) gennaio
-it_IT Name of month 02 (Gregorian Calendar) febbraio
-it_IT Name of month 03 (Gregorian Calendar) marzo
-it_IT Name of month 04 (Gregorian Calendar) aprile
-it_IT Name of month 05 (Gregorian Calendar) maggio
-it_IT Name of month 06 (Gregorian Calendar) giugno
-it_IT Name of month 07 (Gregorian Calendar) luglio
-it_IT Name of month 08 (Gregorian Calendar) agosto
-it_IT Name of month 09 (Gregorian Calendar) settembre
-it_IT Name of month 10 (Gregorian Calendar) ottobre
-it_IT Name of month 11 (Gregorian Calendar) novembre
-it_IT Name of month 12 (Gregorian Calendar) dicembre
+it_IT Name of month 01 (Gregorian Calendar) Gennaio
+it_IT Name of month 02 (Gregorian Calendar) Febbraio
+it_IT Name of month 03 (Gregorian Calendar) Marzo
+it_IT Name of month 04 (Gregorian Calendar) Aprile
+it_IT Name of month 05 (Gregorian Calendar) Maggio
+it_IT Name of month 06 (Gregorian Calendar) Giugno
+it_IT Name of month 07 (Gregorian Calendar) Luglio
+it_IT Name of month 08 (Gregorian Calendar) Agosto
+it_IT Name of month 09 (Gregorian Calendar) Settembre
+it_IT Name of month 10 (Gregorian Calendar) Ottobre
+it_IT Name of month 11 (Gregorian Calendar) Novembre
+it_IT Name of month 12 (Gregorian Calendar) Dicembre
it_IT Name of month 01 (Islamic Calendar) Muharram
it_IT Name of month 02 (Islamic Calendar) Safar
it_IT Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -5132,20 +5132,20 @@ it_IT Name of month 09 (Islamic Calendar) Ramadan
it_IT Name of month 10 (Islamic Calendar) Shawwal
it_IT Name of month 11 (Islamic Calendar) Dhuʻl-Qiʻdah
it_IT Name of month 12 (Islamic Calendar) Dhuʻl-Hijjah
-it_IT Name of weekday 01 (Gregorian Calendar) lunedì
-it_IT Name of weekday 02 (Gregorian Calendar) martedì
-it_IT Name of weekday 03 (Gregorian Calendar) mercoledì
-it_IT Name of weekday 04 (Gregorian Calendar) giovedì
-it_IT Name of weekday 05 (Gregorian Calendar) venerdì
-it_IT Name of weekday 06 (Gregorian Calendar) sabato
-it_IT Name of weekday 07 (Gregorian Calendar) domenica
-it_IT Name of weekday 01 (Islamic Calendar) lunedì
-it_IT Name of weekday 02 (Islamic Calendar) martedì
-it_IT Name of weekday 03 (Islamic Calendar) mercoledì
-it_IT Name of weekday 04 (Islamic Calendar) giovedì
-it_IT Name of weekday 05 (Islamic Calendar) venerdì
-it_IT Name of weekday 06 (Islamic Calendar) sabato
-it_IT Name of weekday 07 (Islamic Calendar) domenica
+it_IT Name of weekday 01 (Gregorian Calendar) Lunedì
+it_IT Name of weekday 02 (Gregorian Calendar) Martedì
+it_IT Name of weekday 03 (Gregorian Calendar) Mercoledì
+it_IT Name of weekday 04 (Gregorian Calendar) Giovedì
+it_IT Name of weekday 05 (Gregorian Calendar) Venerdì
+it_IT Name of weekday 06 (Gregorian Calendar) Sabato
+it_IT Name of weekday 07 (Gregorian Calendar) Domenica
+it_IT Name of weekday 01 (Islamic Calendar) Lunedì
+it_IT Name of weekday 02 (Islamic Calendar) Martedì
+it_IT Name of weekday 03 (Islamic Calendar) Mercoledì
+it_IT Name of weekday 04 (Islamic Calendar) Giovedì
+it_IT Name of weekday 05 (Islamic Calendar) Venerdì
+it_IT Name of weekday 06 (Islamic Calendar) Sabato
+it_IT Name of weekday 07 (Islamic Calendar) Domenica
ja Language endonym 日本語
ja Country endonym
ja Floating Point Number -123,456,789.012
@@ -5784,18 +5784,18 @@ ru Date and time short (Islamic Calendar) 18.07.29 12:31
ru Date and time medium (Islamic Calendar) 18.07.1429 12:31:00
ru Date and time long (Islamic Calendar) 18 Раджаб 1429 г. 12:31:00 GMT+00:00
ru Date and time full (Islamic Calendar) понедельник, 18 Раджаб 1429 г. 12:31:00 GMT+00:00
-ru Name of month 01 (Gregorian Calendar) января
-ru Name of month 02 (Gregorian Calendar) февраля
-ru Name of month 03 (Gregorian Calendar) марта
-ru Name of month 04 (Gregorian Calendar) апреля
-ru Name of month 05 (Gregorian Calendar) мая
-ru Name of month 06 (Gregorian Calendar) июня
-ru Name of month 07 (Gregorian Calendar) июля
-ru Name of month 08 (Gregorian Calendar) августа
-ru Name of month 09 (Gregorian Calendar) сентября
-ru Name of month 10 (Gregorian Calendar) октября
-ru Name of month 11 (Gregorian Calendar) ноября
-ru Name of month 12 (Gregorian Calendar) декабря
+ru Name of month 01 (Gregorian Calendar) Январь
+ru Name of month 02 (Gregorian Calendar) Февраль
+ru Name of month 03 (Gregorian Calendar) Март
+ru Name of month 04 (Gregorian Calendar) Апрель
+ru Name of month 05 (Gregorian Calendar) Май
+ru Name of month 06 (Gregorian Calendar) Июнь
+ru Name of month 07 (Gregorian Calendar) Июль
+ru Name of month 08 (Gregorian Calendar) Август
+ru Name of month 09 (Gregorian Calendar) Сентябрь
+ru Name of month 10 (Gregorian Calendar) Октябрь
+ru Name of month 11 (Gregorian Calendar) Ноябрь
+ru Name of month 12 (Gregorian Calendar) Декабрь
ru Name of month 01 (Islamic Calendar) Мухаррам
ru Name of month 02 (Islamic Calendar) Сафар
ru Name of month 03 (Islamic Calendar) Раби-уль-авваль
@@ -5808,20 +5808,20 @@ ru Name of month 09 (Islamic Calendar) Рамадан
ru Name of month 10 (Islamic Calendar) Шавваль
ru Name of month 11 (Islamic Calendar) Зуль-Каада
ru Name of month 12 (Islamic Calendar) Зуль-Хиджжа
-ru Name of weekday 01 (Gregorian Calendar) понедельник
-ru Name of weekday 02 (Gregorian Calendar) вторник
-ru Name of weekday 03 (Gregorian Calendar) среда
-ru Name of weekday 04 (Gregorian Calendar) четверг
-ru Name of weekday 05 (Gregorian Calendar) пятница
-ru Name of weekday 06 (Gregorian Calendar) суббота
-ru Name of weekday 07 (Gregorian Calendar) воскресенье
-ru Name of weekday 01 (Islamic Calendar) понедельник
-ru Name of weekday 02 (Islamic Calendar) вторник
-ru Name of weekday 03 (Islamic Calendar) среда
-ru Name of weekday 04 (Islamic Calendar) четверг
-ru Name of weekday 05 (Islamic Calendar) пятница
-ru Name of weekday 06 (Islamic Calendar) суббота
-ru Name of weekday 07 (Islamic Calendar) воскресенье
+ru Name of weekday 01 (Gregorian Calendar) Понедельник
+ru Name of weekday 02 (Gregorian Calendar) Вторник
+ru Name of weekday 03 (Gregorian Calendar) Среда
+ru Name of weekday 04 (Gregorian Calendar) Четверг
+ru Name of weekday 05 (Gregorian Calendar) Пятница
+ru Name of weekday 06 (Gregorian Calendar) Суббота
+ru Name of weekday 07 (Gregorian Calendar) Воскресенье
+ru Name of weekday 01 (Islamic Calendar) Понедельник
+ru Name of weekday 02 (Islamic Calendar) Вторник
+ru Name of weekday 03 (Islamic Calendar) Среда
+ru Name of weekday 04 (Islamic Calendar) Четверг
+ru Name of weekday 05 (Islamic Calendar) Пятница
+ru Name of weekday 06 (Islamic Calendar) Суббота
+ru Name of weekday 07 (Islamic Calendar) Воскресенье
ru_RU Language endonym русский
ru_RU Country endonym Россия
ru_RU Floating Point Number -123 456 789,012
@@ -5836,18 +5836,18 @@ ru_RU Date and time short (Islamic Calendar) 18.07.29 12:31
ru_RU Date and time medium (Islamic Calendar) 18.07.1429 12:31:00
ru_RU Date and time long (Islamic Calendar) 18 Раджаб 1429 г. 12:31:00 GMT+00:00
ru_RU Date and time full (Islamic Calendar) понедельник, 18 Раджаб 1429 г. 12:31:00 GMT+00:00
-ru_RU Name of month 01 (Gregorian Calendar) января
-ru_RU Name of month 02 (Gregorian Calendar) февраля
-ru_RU Name of month 03 (Gregorian Calendar) марта
-ru_RU Name of month 04 (Gregorian Calendar) апреля
-ru_RU Name of month 05 (Gregorian Calendar) мая
-ru_RU Name of month 06 (Gregorian Calendar) июня
-ru_RU Name of month 07 (Gregorian Calendar) июля
-ru_RU Name of month 08 (Gregorian Calendar) августа
-ru_RU Name of month 09 (Gregorian Calendar) сентября
-ru_RU Name of month 10 (Gregorian Calendar) октября
-ru_RU Name of month 11 (Gregorian Calendar) ноября
-ru_RU Name of month 12 (Gregorian Calendar) декабря
+ru_RU Name of month 01 (Gregorian Calendar) Январь
+ru_RU Name of month 02 (Gregorian Calendar) Февраль
+ru_RU Name of month 03 (Gregorian Calendar) Март
+ru_RU Name of month 04 (Gregorian Calendar) Апрель
+ru_RU Name of month 05 (Gregorian Calendar) Май
+ru_RU Name of month 06 (Gregorian Calendar) Июнь
+ru_RU Name of month 07 (Gregorian Calendar) Июль
+ru_RU Name of month 08 (Gregorian Calendar) Август
+ru_RU Name of month 09 (Gregorian Calendar) Сентябрь
+ru_RU Name of month 10 (Gregorian Calendar) Октябрь
+ru_RU Name of month 11 (Gregorian Calendar) Ноябрь
+ru_RU Name of month 12 (Gregorian Calendar) Декабрь
ru_RU Name of month 01 (Islamic Calendar) Мухаррам
ru_RU Name of month 02 (Islamic Calendar) Сафар
ru_RU Name of month 03 (Islamic Calendar) Раби-уль-авваль
@@ -5860,20 +5860,20 @@ ru_RU Name of month 09 (Islamic Calendar) Рамадан
ru_RU Name of month 10 (Islamic Calendar) Шавваль
ru_RU Name of month 11 (Islamic Calendar) Зуль-Каада
ru_RU Name of month 12 (Islamic Calendar) Зуль-Хиджжа
-ru_RU Name of weekday 01 (Gregorian Calendar) понедельник
-ru_RU Name of weekday 02 (Gregorian Calendar) вторник
-ru_RU Name of weekday 03 (Gregorian Calendar) среда
-ru_RU Name of weekday 04 (Gregorian Calendar) четверг
-ru_RU Name of weekday 05 (Gregorian Calendar) пятница
-ru_RU Name of weekday 06 (Gregorian Calendar) суббота
-ru_RU Name of weekday 07 (Gregorian Calendar) воскресенье
-ru_RU Name of weekday 01 (Islamic Calendar) понедельник
-ru_RU Name of weekday 02 (Islamic Calendar) вторник
-ru_RU Name of weekday 03 (Islamic Calendar) среда
-ru_RU Name of weekday 04 (Islamic Calendar) четверг
-ru_RU Name of weekday 05 (Islamic Calendar) пятница
-ru_RU Name of weekday 06 (Islamic Calendar) суббота
-ru_RU Name of weekday 07 (Islamic Calendar) воскресенье
+ru_RU Name of weekday 01 (Gregorian Calendar) Понедельник
+ru_RU Name of weekday 02 (Gregorian Calendar) Вторник
+ru_RU Name of weekday 03 (Gregorian Calendar) Среда
+ru_RU Name of weekday 04 (Gregorian Calendar) Четверг
+ru_RU Name of weekday 05 (Gregorian Calendar) Пятница
+ru_RU Name of weekday 06 (Gregorian Calendar) Суббота
+ru_RU Name of weekday 07 (Gregorian Calendar) Воскресенье
+ru_RU Name of weekday 01 (Islamic Calendar) Понедельник
+ru_RU Name of weekday 02 (Islamic Calendar) Вторник
+ru_RU Name of weekday 03 (Islamic Calendar) Среда
+ru_RU Name of weekday 04 (Islamic Calendar) Четверг
+ru_RU Name of weekday 05 (Islamic Calendar) Пятница
+ru_RU Name of weekday 06 (Islamic Calendar) Суббота
+ru_RU Name of weekday 07 (Islamic Calendar) Воскресенье
ru_UA Language endonym ru
ru_UA Country endonym Украина
ru_UA Floating Point Number -123 456 789,012
@@ -5888,18 +5888,18 @@ ru_UA Date and time short (Islamic Calendar) 18.07.29 12:31
ru_UA Date and time medium (Islamic Calendar) 18 Раджаб 1429 12:31:00
ru_UA Date and time long (Islamic Calendar) 18 Раджаб 1429 12:31:00 GMT+00:00
ru_UA Date and time full (Islamic Calendar) понедельник, 18 Раджаб 1429 г. 12:31:00 GMT+00:00
-ru_UA Name of month 01 (Gregorian Calendar) января
-ru_UA Name of month 02 (Gregorian Calendar) февраля
-ru_UA Name of month 03 (Gregorian Calendar) марта
-ru_UA Name of month 04 (Gregorian Calendar) апреля
-ru_UA Name of month 05 (Gregorian Calendar) мая
-ru_UA Name of month 06 (Gregorian Calendar) июня
-ru_UA Name of month 07 (Gregorian Calendar) июля
-ru_UA Name of month 08 (Gregorian Calendar) августа
-ru_UA Name of month 09 (Gregorian Calendar) сентября
-ru_UA Name of month 10 (Gregorian Calendar) октября
-ru_UA Name of month 11 (Gregorian Calendar) ноября
-ru_UA Name of month 12 (Gregorian Calendar) декабря
+ru_UA Name of month 01 (Gregorian Calendar) Январь
+ru_UA Name of month 02 (Gregorian Calendar) Февраль
+ru_UA Name of month 03 (Gregorian Calendar) Март
+ru_UA Name of month 04 (Gregorian Calendar) Апрель
+ru_UA Name of month 05 (Gregorian Calendar) Май
+ru_UA Name of month 06 (Gregorian Calendar) Июнь
+ru_UA Name of month 07 (Gregorian Calendar) Июль
+ru_UA Name of month 08 (Gregorian Calendar) Август
+ru_UA Name of month 09 (Gregorian Calendar) Сентябрь
+ru_UA Name of month 10 (Gregorian Calendar) Октябрь
+ru_UA Name of month 11 (Gregorian Calendar) Ноябрь
+ru_UA Name of month 12 (Gregorian Calendar) Декабрь
ru_UA Name of month 01 (Islamic Calendar) Мухаррам
ru_UA Name of month 02 (Islamic Calendar) Сафар
ru_UA Name of month 03 (Islamic Calendar) Раби-уль-авваль
@@ -5912,20 +5912,20 @@ ru_UA Name of month 09 (Islamic Calendar) Рамадан
ru_UA Name of month 10 (Islamic Calendar) Шавваль
ru_UA Name of month 11 (Islamic Calendar) Зуль-Каада
ru_UA Name of month 12 (Islamic Calendar) Зуль-Хиджжа
-ru_UA Name of weekday 01 (Gregorian Calendar) понедельник
-ru_UA Name of weekday 02 (Gregorian Calendar) вторник
-ru_UA Name of weekday 03 (Gregorian Calendar) среда
-ru_UA Name of weekday 04 (Gregorian Calendar) четверг
-ru_UA Name of weekday 05 (Gregorian Calendar) пятница
-ru_UA Name of weekday 06 (Gregorian Calendar) суббота
-ru_UA Name of weekday 07 (Gregorian Calendar) воскресенье
-ru_UA Name of weekday 01 (Islamic Calendar) понедельник
-ru_UA Name of weekday 02 (Islamic Calendar) вторник
-ru_UA Name of weekday 03 (Islamic Calendar) среда
-ru_UA Name of weekday 04 (Islamic Calendar) четверг
-ru_UA Name of weekday 05 (Islamic Calendar) пятница
-ru_UA Name of weekday 06 (Islamic Calendar) суббота
-ru_UA Name of weekday 07 (Islamic Calendar) воскресенье
+ru_UA Name of weekday 01 (Gregorian Calendar) Понедельник
+ru_UA Name of weekday 02 (Gregorian Calendar) Вторник
+ru_UA Name of weekday 03 (Gregorian Calendar) Среда
+ru_UA Name of weekday 04 (Gregorian Calendar) Четверг
+ru_UA Name of weekday 05 (Gregorian Calendar) Пятница
+ru_UA Name of weekday 06 (Gregorian Calendar) Суббота
+ru_UA Name of weekday 07 (Gregorian Calendar) Воскресенье
+ru_UA Name of weekday 01 (Islamic Calendar) Понедельник
+ru_UA Name of weekday 02 (Islamic Calendar) Вторник
+ru_UA Name of weekday 03 (Islamic Calendar) Среда
+ru_UA Name of weekday 04 (Islamic Calendar) Четверг
+ru_UA Name of weekday 05 (Islamic Calendar) Пятница
+ru_UA Name of weekday 06 (Islamic Calendar) Суббота
+ru_UA Name of weekday 07 (Islamic Calendar) Воскресенье
sv Language endonym svenska
sv Country endonym
sv Floating Point Number −123 456 789,012
@@ -6304,18 +6304,18 @@ uk Date and time short (Islamic Calendar) 18.07.29 12:31
uk Date and time medium (Islamic Calendar) 18 Раджаб 1429 12:31:00
uk Date and time long (Islamic Calendar) 18 Раджаб 1429 р. 12:31:00 GMT+00:00
uk Date and time full (Islamic Calendar) Понеділок, 18 Раджаб 1429 р. 12:31:00 GMT+00:00
-uk Name of month 01 (Gregorian Calendar) січня
-uk Name of month 02 (Gregorian Calendar) лютого
-uk Name of month 03 (Gregorian Calendar) березня
-uk Name of month 04 (Gregorian Calendar) квітня
-uk Name of month 05 (Gregorian Calendar) травня
-uk Name of month 06 (Gregorian Calendar) червня
-uk Name of month 07 (Gregorian Calendar) липня
-uk Name of month 08 (Gregorian Calendar) серпня
-uk Name of month 09 (Gregorian Calendar) вересня
-uk Name of month 10 (Gregorian Calendar) жовтня
-uk Name of month 11 (Gregorian Calendar) листопада
-uk Name of month 12 (Gregorian Calendar) грудня
+uk Name of month 01 (Gregorian Calendar) Січень
+uk Name of month 02 (Gregorian Calendar) Лютий
+uk Name of month 03 (Gregorian Calendar) Березень
+uk Name of month 04 (Gregorian Calendar) Квітень
+uk Name of month 05 (Gregorian Calendar) Травень
+uk Name of month 06 (Gregorian Calendar) Червень
+uk Name of month 07 (Gregorian Calendar) Липень
+uk Name of month 08 (Gregorian Calendar) Серпень
+uk Name of month 09 (Gregorian Calendar) Вересень
+uk Name of month 10 (Gregorian Calendar) Жовтень
+uk Name of month 11 (Gregorian Calendar) Листопад
+uk Name of month 12 (Gregorian Calendar) Грудень
uk Name of month 01 (Islamic Calendar) Мухаррам
uk Name of month 02 (Islamic Calendar) Сафар
uk Name of month 03 (Islamic Calendar) Рабі I
@@ -6356,18 +6356,18 @@ uk_UA Date and time short (Islamic Calendar) 18.07.29 12:31
uk_UA Date and time medium (Islamic Calendar) 18 Раджаб 1429 12:31:00
uk_UA Date and time long (Islamic Calendar) 18 Раджаб 1429 р. 12:31:00 GMT+00:00
uk_UA Date and time full (Islamic Calendar) Понеділок, 18 Раджаб 1429 р. 12:31:00 GMT+00:00
-uk_UA Name of month 01 (Gregorian Calendar) січня
-uk_UA Name of month 02 (Gregorian Calendar) лютого
-uk_UA Name of month 03 (Gregorian Calendar) березня
-uk_UA Name of month 04 (Gregorian Calendar) квітня
-uk_UA Name of month 05 (Gregorian Calendar) травня
-uk_UA Name of month 06 (Gregorian Calendar) червня
-uk_UA Name of month 07 (Gregorian Calendar) липня
-uk_UA Name of month 08 (Gregorian Calendar) серпня
-uk_UA Name of month 09 (Gregorian Calendar) вересня
-uk_UA Name of month 10 (Gregorian Calendar) жовтня
-uk_UA Name of month 11 (Gregorian Calendar) листопада
-uk_UA Name of month 12 (Gregorian Calendar) грудня
+uk_UA Name of month 01 (Gregorian Calendar) Січень
+uk_UA Name of month 02 (Gregorian Calendar) Лютий
+uk_UA Name of month 03 (Gregorian Calendar) Березень
+uk_UA Name of month 04 (Gregorian Calendar) Квітень
+uk_UA Name of month 05 (Gregorian Calendar) Травень
+uk_UA Name of month 06 (Gregorian Calendar) Червень
+uk_UA Name of month 07 (Gregorian Calendar) Липень
+uk_UA Name of month 08 (Gregorian Calendar) Серпень
+uk_UA Name of month 09 (Gregorian Calendar) Вересень
+uk_UA Name of month 10 (Gregorian Calendar) Жовтень
+uk_UA Name of month 11 (Gregorian Calendar) Листопад
+uk_UA Name of month 12 (Gregorian Calendar) Грудень
uk_UA Name of month 01 (Islamic Calendar) Мухаррам
uk_UA Name of month 02 (Islamic Calendar) Сафар
uk_UA Name of month 03 (Islamic Calendar) Рабі I
@@ -6564,18 +6564,18 @@ zh Date and time short (Islamic Calendar) 29-7-18 PM12:31
zh Date and time medium (Islamic Calendar) 1429-7-18 PM12:31:00
zh Date and time long (Islamic Calendar) 1429年7月18日格林尼治标准时间+0000PM12时31分00秒
zh Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000PM12时31分00秒
-zh Name of month 01 (Gregorian Calendar) 1月
-zh Name of month 02 (Gregorian Calendar) 2月
-zh Name of month 03 (Gregorian Calendar) 3月
-zh Name of month 04 (Gregorian Calendar) 4月
-zh Name of month 05 (Gregorian Calendar) 5月
-zh Name of month 06 (Gregorian Calendar) 6月
-zh Name of month 07 (Gregorian Calendar) 7月
-zh Name of month 08 (Gregorian Calendar) 8月
-zh Name of month 09 (Gregorian Calendar) 9月
-zh Name of month 10 (Gregorian Calendar) 10月
-zh Name of month 11 (Gregorian Calendar) 11月
-zh Name of month 12 (Gregorian Calendar) 12月
+zh Name of month 01 (Gregorian Calendar) 一月
+zh Name of month 02 (Gregorian Calendar) 二月
+zh Name of month 03 (Gregorian Calendar) 三月
+zh Name of month 04 (Gregorian Calendar) 四月
+zh Name of month 05 (Gregorian Calendar) 五月
+zh Name of month 06 (Gregorian Calendar) 六月
+zh Name of month 07 (Gregorian Calendar) 七月
+zh Name of month 08 (Gregorian Calendar) 八月
+zh Name of month 09 (Gregorian Calendar) 九月
+zh Name of month 10 (Gregorian Calendar) 十月
+zh Name of month 11 (Gregorian Calendar) 十一月
+zh Name of month 12 (Gregorian Calendar) 十二月
zh Name of month 01 (Islamic Calendar) Muharram
zh Name of month 02 (Islamic Calendar) Safar
zh Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -6616,18 +6616,18 @@ zh_Hans Date and time short (Islamic Calendar) 29-7-18 PM12:31
zh_Hans Date and time medium (Islamic Calendar) 1429-7-18 PM12:31:00
zh_Hans Date and time long (Islamic Calendar) 1429年7月18日格林尼治标准时间+0000PM12时31分00秒
zh_Hans Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000PM12时31分00秒
-zh_Hans Name of month 01 (Gregorian Calendar) 1月
-zh_Hans Name of month 02 (Gregorian Calendar) 2月
-zh_Hans Name of month 03 (Gregorian Calendar) 3月
-zh_Hans Name of month 04 (Gregorian Calendar) 4月
-zh_Hans Name of month 05 (Gregorian Calendar) 5月
-zh_Hans Name of month 06 (Gregorian Calendar) 6月
-zh_Hans Name of month 07 (Gregorian Calendar) 7月
-zh_Hans Name of month 08 (Gregorian Calendar) 8月
-zh_Hans Name of month 09 (Gregorian Calendar) 9月
-zh_Hans Name of month 10 (Gregorian Calendar) 10月
-zh_Hans Name of month 11 (Gregorian Calendar) 11月
-zh_Hans Name of month 12 (Gregorian Calendar) 12月
+zh_Hans Name of month 01 (Gregorian Calendar) 一月
+zh_Hans Name of month 02 (Gregorian Calendar) 二月
+zh_Hans Name of month 03 (Gregorian Calendar) 三月
+zh_Hans Name of month 04 (Gregorian Calendar) 四月
+zh_Hans Name of month 05 (Gregorian Calendar) 五月
+zh_Hans Name of month 06 (Gregorian Calendar) 六月
+zh_Hans Name of month 07 (Gregorian Calendar) 七月
+zh_Hans Name of month 08 (Gregorian Calendar) 八月
+zh_Hans Name of month 09 (Gregorian Calendar) 九月
+zh_Hans Name of month 10 (Gregorian Calendar) 十月
+zh_Hans Name of month 11 (Gregorian Calendar) 十一月
+zh_Hans Name of month 12 (Gregorian Calendar) 十二月
zh_Hans Name of month 01 (Islamic Calendar) Muharram
zh_Hans Name of month 02 (Islamic Calendar) Safar
zh_Hans Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -6668,18 +6668,18 @@ zh_Hans_CN Date and time short (Islamic Calendar) 29-7-18 PM12:31
zh_Hans_CN Date and time medium (Islamic Calendar) 1429-7-18 PM12:31:00
zh_Hans_CN Date and time long (Islamic Calendar) 1429年7月18日格林尼治标准时间+0000PM12时31分00秒
zh_Hans_CN Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000PM12时31分00秒
-zh_Hans_CN Name of month 01 (Gregorian Calendar) 1月
-zh_Hans_CN Name of month 02 (Gregorian Calendar) 2月
-zh_Hans_CN Name of month 03 (Gregorian Calendar) 3月
-zh_Hans_CN Name of month 04 (Gregorian Calendar) 4月
-zh_Hans_CN Name of month 05 (Gregorian Calendar) 5月
-zh_Hans_CN Name of month 06 (Gregorian Calendar) 6月
-zh_Hans_CN Name of month 07 (Gregorian Calendar) 7月
-zh_Hans_CN Name of month 08 (Gregorian Calendar) 8月
-zh_Hans_CN Name of month 09 (Gregorian Calendar) 9月
-zh_Hans_CN Name of month 10 (Gregorian Calendar) 10月
-zh_Hans_CN Name of month 11 (Gregorian Calendar) 11月
-zh_Hans_CN Name of month 12 (Gregorian Calendar) 12月
+zh_Hans_CN Name of month 01 (Gregorian Calendar) 一月
+zh_Hans_CN Name of month 02 (Gregorian Calendar) 二月
+zh_Hans_CN Name of month 03 (Gregorian Calendar) 三月
+zh_Hans_CN Name of month 04 (Gregorian Calendar) 四月
+zh_Hans_CN Name of month 05 (Gregorian Calendar) 五月
+zh_Hans_CN Name of month 06 (Gregorian Calendar) 六月
+zh_Hans_CN Name of month 07 (Gregorian Calendar) 七月
+zh_Hans_CN Name of month 08 (Gregorian Calendar) 八月
+zh_Hans_CN Name of month 09 (Gregorian Calendar) 九月
+zh_Hans_CN Name of month 10 (Gregorian Calendar) 十月
+zh_Hans_CN Name of month 11 (Gregorian Calendar) 十一月
+zh_Hans_CN Name of month 12 (Gregorian Calendar) 十二月
zh_Hans_CN Name of month 01 (Islamic Calendar) Muharram
zh_Hans_CN Name of month 02 (Islamic Calendar) Safar
zh_Hans_CN Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -6720,18 +6720,18 @@ zh_Hans_HK Date and time short (Islamic Calendar) 29-7-18 PM12:31
zh_Hans_HK Date and time medium (Islamic Calendar) 1429-7-18 PM12:31:00
zh_Hans_HK Date and time long (Islamic Calendar) 1429年7月18日格林尼治标准时间+0000PM12时31分00秒
zh_Hans_HK Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000PM12时31分00秒
-zh_Hans_HK Name of month 01 (Gregorian Calendar) 1月
-zh_Hans_HK Name of month 02 (Gregorian Calendar) 2月
-zh_Hans_HK Name of month 03 (Gregorian Calendar) 3月
-zh_Hans_HK Name of month 04 (Gregorian Calendar) 4月
-zh_Hans_HK Name of month 05 (Gregorian Calendar) 5月
-zh_Hans_HK Name of month 06 (Gregorian Calendar) 6月
-zh_Hans_HK Name of month 07 (Gregorian Calendar) 7月
-zh_Hans_HK Name of month 08 (Gregorian Calendar) 8月
-zh_Hans_HK Name of month 09 (Gregorian Calendar) 9月
-zh_Hans_HK Name of month 10 (Gregorian Calendar) 10月
-zh_Hans_HK Name of month 11 (Gregorian Calendar) 11月
-zh_Hans_HK Name of month 12 (Gregorian Calendar) 12月
+zh_Hans_HK Name of month 01 (Gregorian Calendar) 一月
+zh_Hans_HK Name of month 02 (Gregorian Calendar) 二月
+zh_Hans_HK Name of month 03 (Gregorian Calendar) 三月
+zh_Hans_HK Name of month 04 (Gregorian Calendar) 四月
+zh_Hans_HK Name of month 05 (Gregorian Calendar) 五月
+zh_Hans_HK Name of month 06 (Gregorian Calendar) 六月
+zh_Hans_HK Name of month 07 (Gregorian Calendar) 七月
+zh_Hans_HK Name of month 08 (Gregorian Calendar) 八月
+zh_Hans_HK Name of month 09 (Gregorian Calendar) 九月
+zh_Hans_HK Name of month 10 (Gregorian Calendar) 十月
+zh_Hans_HK Name of month 11 (Gregorian Calendar) 十一月
+zh_Hans_HK Name of month 12 (Gregorian Calendar) 十二月
zh_Hans_HK Name of month 01 (Islamic Calendar) Muharram
zh_Hans_HK Name of month 02 (Islamic Calendar) Safar
zh_Hans_HK Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -6772,18 +6772,18 @@ zh_Hans_MO Date and time short (Islamic Calendar) 29-7-18 PM12:31
zh_Hans_MO Date and time medium (Islamic Calendar) 1429-7-18 PM12:31:00
zh_Hans_MO Date and time long (Islamic Calendar) 1429年7月18日格林尼治标准时间+0000PM12时31分00秒
zh_Hans_MO Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000PM12时31分00秒
-zh_Hans_MO Name of month 01 (Gregorian Calendar) 1月
-zh_Hans_MO Name of month 02 (Gregorian Calendar) 2月
-zh_Hans_MO Name of month 03 (Gregorian Calendar) 3月
-zh_Hans_MO Name of month 04 (Gregorian Calendar) 4月
-zh_Hans_MO Name of month 05 (Gregorian Calendar) 5月
-zh_Hans_MO Name of month 06 (Gregorian Calendar) 6月
-zh_Hans_MO Name of month 07 (Gregorian Calendar) 7月
-zh_Hans_MO Name of month 08 (Gregorian Calendar) 8月
-zh_Hans_MO Name of month 09 (Gregorian Calendar) 9月
-zh_Hans_MO Name of month 10 (Gregorian Calendar) 10月
-zh_Hans_MO Name of month 11 (Gregorian Calendar) 11月
-zh_Hans_MO Name of month 12 (Gregorian Calendar) 12月
+zh_Hans_MO Name of month 01 (Gregorian Calendar) 一月
+zh_Hans_MO Name of month 02 (Gregorian Calendar) 二月
+zh_Hans_MO Name of month 03 (Gregorian Calendar) 三月
+zh_Hans_MO Name of month 04 (Gregorian Calendar) 四月
+zh_Hans_MO Name of month 05 (Gregorian Calendar) 五月
+zh_Hans_MO Name of month 06 (Gregorian Calendar) 六月
+zh_Hans_MO Name of month 07 (Gregorian Calendar) 七月
+zh_Hans_MO Name of month 08 (Gregorian Calendar) 八月
+zh_Hans_MO Name of month 09 (Gregorian Calendar) 九月
+zh_Hans_MO Name of month 10 (Gregorian Calendar) 十月
+zh_Hans_MO Name of month 11 (Gregorian Calendar) 十一月
+zh_Hans_MO Name of month 12 (Gregorian Calendar) 十二月
zh_Hans_MO Name of month 01 (Islamic Calendar) Muharram
zh_Hans_MO Name of month 02 (Islamic Calendar) Safar
zh_Hans_MO Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -6824,18 +6824,18 @@ zh_Hans_SG Date and time short (Islamic Calendar) 18/07/29 PM12:31
zh_Hans_SG Date and time medium (Islamic Calendar) 1429-7-18 PM12:31:00
zh_Hans_SG Date and time long (Islamic Calendar) 1429年7月18日PM12:31:00格林尼治标准时间+0000
zh_Hans_SG Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000PM12时31分00秒
-zh_Hans_SG Name of month 01 (Gregorian Calendar) 1月
-zh_Hans_SG Name of month 02 (Gregorian Calendar) 2月
-zh_Hans_SG Name of month 03 (Gregorian Calendar) 3月
-zh_Hans_SG Name of month 04 (Gregorian Calendar) 4月
-zh_Hans_SG Name of month 05 (Gregorian Calendar) 5月
-zh_Hans_SG Name of month 06 (Gregorian Calendar) 6月
-zh_Hans_SG Name of month 07 (Gregorian Calendar) 7月
-zh_Hans_SG Name of month 08 (Gregorian Calendar) 8月
-zh_Hans_SG Name of month 09 (Gregorian Calendar) 9月
-zh_Hans_SG Name of month 10 (Gregorian Calendar) 10月
-zh_Hans_SG Name of month 11 (Gregorian Calendar) 11月
-zh_Hans_SG Name of month 12 (Gregorian Calendar) 12月
+zh_Hans_SG Name of month 01 (Gregorian Calendar) 一月
+zh_Hans_SG Name of month 02 (Gregorian Calendar) 二月
+zh_Hans_SG Name of month 03 (Gregorian Calendar) 三月
+zh_Hans_SG Name of month 04 (Gregorian Calendar) 四月
+zh_Hans_SG Name of month 05 (Gregorian Calendar) 五月
+zh_Hans_SG Name of month 06 (Gregorian Calendar) 六月
+zh_Hans_SG Name of month 07 (Gregorian Calendar) 七月
+zh_Hans_SG Name of month 08 (Gregorian Calendar) 八月
+zh_Hans_SG Name of month 09 (Gregorian Calendar) 九月
+zh_Hans_SG Name of month 10 (Gregorian Calendar) 十月
+zh_Hans_SG Name of month 11 (Gregorian Calendar) 十一月
+zh_Hans_SG Name of month 12 (Gregorian Calendar) 十二月
zh_Hans_SG Name of month 01 (Islamic Calendar) Muharram
zh_Hans_SG Name of month 02 (Islamic Calendar) Safar
zh_Hans_SG Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -6876,18 +6876,18 @@ zh_Hant Date and time short (Islamic Calendar) 29/7/18 PM12:31
zh_Hant Date and time medium (Islamic Calendar) 1429/7/18 PM12:31:00
zh_Hant Date and time long (Islamic Calendar) 1429年7月18日GMT+00:00PM12時31分00秒
zh_Hant Date and time full (Islamic Calendar) 1429年7月18日星期一GMT+00:00PM12時31分00秒
-zh_Hant Name of month 01 (Gregorian Calendar) 1月
-zh_Hant Name of month 02 (Gregorian Calendar) 2月
-zh_Hant Name of month 03 (Gregorian Calendar) 3月
-zh_Hant Name of month 04 (Gregorian Calendar) 4月
-zh_Hant Name of month 05 (Gregorian Calendar) 5月
-zh_Hant Name of month 06 (Gregorian Calendar) 6月
-zh_Hant Name of month 07 (Gregorian Calendar) 7月
-zh_Hant Name of month 08 (Gregorian Calendar) 8月
-zh_Hant Name of month 09 (Gregorian Calendar) 9月
-zh_Hant Name of month 10 (Gregorian Calendar) 10月
-zh_Hant Name of month 11 (Gregorian Calendar) 11月
-zh_Hant Name of month 12 (Gregorian Calendar) 12月
+zh_Hant Name of month 01 (Gregorian Calendar) 一月
+zh_Hant Name of month 02 (Gregorian Calendar) 二月
+zh_Hant Name of month 03 (Gregorian Calendar) 三月
+zh_Hant Name of month 04 (Gregorian Calendar) 四月
+zh_Hant Name of month 05 (Gregorian Calendar) 五月
+zh_Hant Name of month 06 (Gregorian Calendar) 六月
+zh_Hant Name of month 07 (Gregorian Calendar) 七月
+zh_Hant Name of month 08 (Gregorian Calendar) 八月
+zh_Hant Name of month 09 (Gregorian Calendar) 九月
+zh_Hant Name of month 10 (Gregorian Calendar) 十月
+zh_Hant Name of month 11 (Gregorian Calendar) 十一月
+zh_Hant Name of month 12 (Gregorian Calendar) 十二月
zh_Hant Name of month 01 (Islamic Calendar) Muharram
zh_Hant Name of month 02 (Islamic Calendar) Safar
zh_Hant Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -6928,18 +6928,18 @@ zh_Hant_HK Date and time short (Islamic Calendar) 29年7月18日PM12:31
zh_Hant_HK Date and time medium (Islamic Calendar) 1429年7月18日PM12:31:00
zh_Hant_HK Date and time long (Islamic Calendar) 1429年7月18日GMT+00:00PM12時31分00秒
zh_Hant_HK Date and time full (Islamic Calendar) 1429年7月18日星期一GMT+00:00PM12時31分00秒
-zh_Hant_HK Name of month 01 (Gregorian Calendar) 1月
-zh_Hant_HK Name of month 02 (Gregorian Calendar) 2月
-zh_Hant_HK Name of month 03 (Gregorian Calendar) 3月
-zh_Hant_HK Name of month 04 (Gregorian Calendar) 4月
-zh_Hant_HK Name of month 05 (Gregorian Calendar) 5月
-zh_Hant_HK Name of month 06 (Gregorian Calendar) 6月
-zh_Hant_HK Name of month 07 (Gregorian Calendar) 7月
-zh_Hant_HK Name of month 08 (Gregorian Calendar) 8月
-zh_Hant_HK Name of month 09 (Gregorian Calendar) 9月
-zh_Hant_HK Name of month 10 (Gregorian Calendar) 10月
-zh_Hant_HK Name of month 11 (Gregorian Calendar) 11月
-zh_Hant_HK Name of month 12 (Gregorian Calendar) 12月
+zh_Hant_HK Name of month 01 (Gregorian Calendar) 一月
+zh_Hant_HK Name of month 02 (Gregorian Calendar) 二月
+zh_Hant_HK Name of month 03 (Gregorian Calendar) 三月
+zh_Hant_HK Name of month 04 (Gregorian Calendar) 四月
+zh_Hant_HK Name of month 05 (Gregorian Calendar) 五月
+zh_Hant_HK Name of month 06 (Gregorian Calendar) 六月
+zh_Hant_HK Name of month 07 (Gregorian Calendar) 七月
+zh_Hant_HK Name of month 08 (Gregorian Calendar) 八月
+zh_Hant_HK Name of month 09 (Gregorian Calendar) 九月
+zh_Hant_HK Name of month 10 (Gregorian Calendar) 十月
+zh_Hant_HK Name of month 11 (Gregorian Calendar) 十一月
+zh_Hant_HK Name of month 12 (Gregorian Calendar) 十二月
zh_Hant_HK Name of month 01 (Islamic Calendar) Muharram
zh_Hant_HK Name of month 02 (Islamic Calendar) Safar
zh_Hant_HK Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -6980,18 +6980,18 @@ zh_Hant_MO Date and time short (Islamic Calendar) 29年7月18日 PM12:31
zh_Hant_MO Date and time medium (Islamic Calendar) 1429年7月18日 PM12:31:00
zh_Hant_MO Date and time long (Islamic Calendar) 1429年07月18日GMT+00:00PM12時31分00秒
zh_Hant_MO Date and time full (Islamic Calendar) 1429年07月18日星期一GMT+00:00PM12時31分00秒
-zh_Hant_MO Name of month 01 (Gregorian Calendar) 1月
-zh_Hant_MO Name of month 02 (Gregorian Calendar) 2月
-zh_Hant_MO Name of month 03 (Gregorian Calendar) 3月
-zh_Hant_MO Name of month 04 (Gregorian Calendar) 4月
-zh_Hant_MO Name of month 05 (Gregorian Calendar) 5月
-zh_Hant_MO Name of month 06 (Gregorian Calendar) 6月
-zh_Hant_MO Name of month 07 (Gregorian Calendar) 7月
-zh_Hant_MO Name of month 08 (Gregorian Calendar) 8月
-zh_Hant_MO Name of month 09 (Gregorian Calendar) 9月
-zh_Hant_MO Name of month 10 (Gregorian Calendar) 10月
-zh_Hant_MO Name of month 11 (Gregorian Calendar) 11月
-zh_Hant_MO Name of month 12 (Gregorian Calendar) 12月
+zh_Hant_MO Name of month 01 (Gregorian Calendar) 一月
+zh_Hant_MO Name of month 02 (Gregorian Calendar) 二月
+zh_Hant_MO Name of month 03 (Gregorian Calendar) 三月
+zh_Hant_MO Name of month 04 (Gregorian Calendar) 四月
+zh_Hant_MO Name of month 05 (Gregorian Calendar) 五月
+zh_Hant_MO Name of month 06 (Gregorian Calendar) 六月
+zh_Hant_MO Name of month 07 (Gregorian Calendar) 七月
+zh_Hant_MO Name of month 08 (Gregorian Calendar) 八月
+zh_Hant_MO Name of month 09 (Gregorian Calendar) 九月
+zh_Hant_MO Name of month 10 (Gregorian Calendar) 十月
+zh_Hant_MO Name of month 11 (Gregorian Calendar) 十一月
+zh_Hant_MO Name of month 12 (Gregorian Calendar) 十二月
zh_Hant_MO Name of month 01 (Islamic Calendar) Muharram
zh_Hant_MO Name of month 02 (Islamic Calendar) Safar
zh_Hant_MO Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -7032,18 +7032,18 @@ zh_Hant_TW Date and time short (Islamic Calendar) 29/7/18 PM12:31
zh_Hant_TW Date and time medium (Islamic Calendar) 1429/7/18 PM12:31:00
zh_Hant_TW Date and time long (Islamic Calendar) 1429年7月18日GMT+00:00PM12時31分00秒
zh_Hant_TW Date and time full (Islamic Calendar) 1429年7月18日星期一GMT+00:00PM12時31分00秒
-zh_Hant_TW Name of month 01 (Gregorian Calendar) 1月
-zh_Hant_TW Name of month 02 (Gregorian Calendar) 2月
-zh_Hant_TW Name of month 03 (Gregorian Calendar) 3月
-zh_Hant_TW Name of month 04 (Gregorian Calendar) 4月
-zh_Hant_TW Name of month 05 (Gregorian Calendar) 5月
-zh_Hant_TW Name of month 06 (Gregorian Calendar) 6月
-zh_Hant_TW Name of month 07 (Gregorian Calendar) 7月
-zh_Hant_TW Name of month 08 (Gregorian Calendar) 8月
-zh_Hant_TW Name of month 09 (Gregorian Calendar) 9月
-zh_Hant_TW Name of month 10 (Gregorian Calendar) 10月
-zh_Hant_TW Name of month 11 (Gregorian Calendar) 11月
-zh_Hant_TW Name of month 12 (Gregorian Calendar) 12月
+zh_Hant_TW Name of month 01 (Gregorian Calendar) 一月
+zh_Hant_TW Name of month 02 (Gregorian Calendar) 二月
+zh_Hant_TW Name of month 03 (Gregorian Calendar) 三月
+zh_Hant_TW Name of month 04 (Gregorian Calendar) 四月
+zh_Hant_TW Name of month 05 (Gregorian Calendar) 五月
+zh_Hant_TW Name of month 06 (Gregorian Calendar) 六月
+zh_Hant_TW Name of month 07 (Gregorian Calendar) 七月
+zh_Hant_TW Name of month 08 (Gregorian Calendar) 八月
+zh_Hant_TW Name of month 09 (Gregorian Calendar) 九月
+zh_Hant_TW Name of month 10 (Gregorian Calendar) 十月
+zh_Hant_TW Name of month 11 (Gregorian Calendar) 十一月
+zh_Hant_TW Name of month 12 (Gregorian Calendar) 十二月
zh_Hant_TW Name of month 01 (Islamic Calendar) Muharram
zh_Hant_TW Name of month 02 (Islamic Calendar) Safar
zh_Hant_TW Name of month 03 (Islamic Calendar) Rabiʻ I
diff --git a/tests/ft_locales/ft_locales-test-input-icu-4.4.1.txt b/tests/ft_locales/ft_locales-test-input-icu-4.4.1.txt
index 9279b5b1..b797b970 100644
--- a/tests/ft_locales/ft_locales-test-input-icu-4.4.1.txt
+++ b/tests/ft_locales/ft_locales-test-input-icu-4.4.1.txt
@@ -948,18 +948,18 @@ ca Date and time short (Islamic Calendar) 18/07/29 12:31
ca Date and time medium (Islamic Calendar) 18/07/1429 12:31:00
ca Date and time long (Islamic Calendar) 18 Rajab de 1429 12:31:00 GMT+00:00
ca Date and time full (Islamic Calendar) dilluns 18 Rajab de 1429 12:31:00 GMT+00:00
-ca Name of month 01 (Gregorian Calendar) de gener
-ca Name of month 02 (Gregorian Calendar) de febrer
-ca Name of month 03 (Gregorian Calendar) de març
-ca Name of month 04 (Gregorian Calendar) d’abril
-ca Name of month 05 (Gregorian Calendar) de maig
-ca Name of month 06 (Gregorian Calendar) de juny
-ca Name of month 07 (Gregorian Calendar) de juliol
-ca Name of month 08 (Gregorian Calendar) d’agost
-ca Name of month 09 (Gregorian Calendar) de setembre
-ca Name of month 10 (Gregorian Calendar) d’octubre
-ca Name of month 11 (Gregorian Calendar) de novembre
-ca Name of month 12 (Gregorian Calendar) de desembre
+ca Name of month 01 (Gregorian Calendar) gener
+ca Name of month 02 (Gregorian Calendar) febrer
+ca Name of month 03 (Gregorian Calendar) març
+ca Name of month 04 (Gregorian Calendar) abril
+ca Name of month 05 (Gregorian Calendar) maig
+ca Name of month 06 (Gregorian Calendar) juny
+ca Name of month 07 (Gregorian Calendar) juliol
+ca Name of month 08 (Gregorian Calendar) agost
+ca Name of month 09 (Gregorian Calendar) setembre
+ca Name of month 10 (Gregorian Calendar) octubre
+ca Name of month 11 (Gregorian Calendar) novembre
+ca Name of month 12 (Gregorian Calendar) desembre
ca Name of month 01 (Islamic Calendar) Muharram
ca Name of month 02 (Islamic Calendar) Safar
ca Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -1000,18 +1000,18 @@ ca_ES Date and time short (Islamic Calendar) 18/07/29 12:31
ca_ES Date and time medium (Islamic Calendar) 18/07/1429 12:31:00
ca_ES Date and time long (Islamic Calendar) 18 Rajab de 1429 12:31:00 GMT+00:00
ca_ES Date and time full (Islamic Calendar) dilluns 18 Rajab de 1429 12:31:00 GMT+00:00
-ca_ES Name of month 01 (Gregorian Calendar) de gener
-ca_ES Name of month 02 (Gregorian Calendar) de febrer
-ca_ES Name of month 03 (Gregorian Calendar) de març
-ca_ES Name of month 04 (Gregorian Calendar) d’abril
-ca_ES Name of month 05 (Gregorian Calendar) de maig
-ca_ES Name of month 06 (Gregorian Calendar) de juny
-ca_ES Name of month 07 (Gregorian Calendar) de juliol
-ca_ES Name of month 08 (Gregorian Calendar) d’agost
-ca_ES Name of month 09 (Gregorian Calendar) de setembre
-ca_ES Name of month 10 (Gregorian Calendar) d’octubre
-ca_ES Name of month 11 (Gregorian Calendar) de novembre
-ca_ES Name of month 12 (Gregorian Calendar) de desembre
+ca_ES Name of month 01 (Gregorian Calendar) gener
+ca_ES Name of month 02 (Gregorian Calendar) febrer
+ca_ES Name of month 03 (Gregorian Calendar) març
+ca_ES Name of month 04 (Gregorian Calendar) abril
+ca_ES Name of month 05 (Gregorian Calendar) maig
+ca_ES Name of month 06 (Gregorian Calendar) juny
+ca_ES Name of month 07 (Gregorian Calendar) juliol
+ca_ES Name of month 08 (Gregorian Calendar) agost
+ca_ES Name of month 09 (Gregorian Calendar) setembre
+ca_ES Name of month 10 (Gregorian Calendar) octubre
+ca_ES Name of month 11 (Gregorian Calendar) novembre
+ca_ES Name of month 12 (Gregorian Calendar) desembre
ca_ES Name of month 01 (Islamic Calendar) Muharram
ca_ES Name of month 02 (Islamic Calendar) Safar
ca_ES Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -1298,8 +1298,8 @@ de_BE Name of weekday 04 (Islamic Calendar) Donnerstag
de_BE Name of weekday 05 (Islamic Calendar) Freitag
de_BE Name of weekday 06 (Islamic Calendar) Samstag
de_BE Name of weekday 07 (Islamic Calendar) Sonntag
-de_CH Language endonym de
-de_CH Country endonym CH
+de_CH Language endonym Deutsch
+de_CH Country endonym Schweiz
de_CH Floating Point Number -123'456'789.012
de_CH Percent value -1'234.5679 %
de_CH Currency value € 1'234.56
@@ -1520,18 +1520,18 @@ el Date and time short (Islamic Calendar) 18/7/29 12:31 μ.μ.
el Date and time medium (Islamic Calendar) 18 Raj. 1429 12:31:00 μ.μ.
el Date and time long (Islamic Calendar) 18 Rajab 1429 12:31:00 μ.μ. GMT+00:00
el Date and time full (Islamic Calendar) Δευτέρα, 18 Rajab 1429 12:31:00 μ.μ. GMT+00:00
-el Name of month 01 (Gregorian Calendar) Ιανουαρίου
-el Name of month 02 (Gregorian Calendar) Φεβρουαρίου
-el Name of month 03 (Gregorian Calendar) Μαρτίου
-el Name of month 04 (Gregorian Calendar) Απριλίου
-el Name of month 05 (Gregorian Calendar) Μαΐου
-el Name of month 06 (Gregorian Calendar) Ιουνίου
-el Name of month 07 (Gregorian Calendar) Ιουλίου
-el Name of month 08 (Gregorian Calendar) Αυγούστου
-el Name of month 09 (Gregorian Calendar) Σεπτεμβρίου
-el Name of month 10 (Gregorian Calendar) Οκτωβρίου
-el Name of month 11 (Gregorian Calendar) Νοεμβρίου
-el Name of month 12 (Gregorian Calendar) Δεκεμβρίου
+el Name of month 01 (Gregorian Calendar) Ιανουάριος
+el Name of month 02 (Gregorian Calendar) Φεβρουάριος
+el Name of month 03 (Gregorian Calendar) Μάρτιος
+el Name of month 04 (Gregorian Calendar) Απρίλιος
+el Name of month 05 (Gregorian Calendar) Μάιος
+el Name of month 06 (Gregorian Calendar) Ιούνιος
+el Name of month 07 (Gregorian Calendar) Ιούλιος
+el Name of month 08 (Gregorian Calendar) Αύγουστος
+el Name of month 09 (Gregorian Calendar) Σεπτέμβριος
+el Name of month 10 (Gregorian Calendar) Οκτώβριος
+el Name of month 11 (Gregorian Calendar) Νοέμβριος
+el Name of month 12 (Gregorian Calendar) Δεκέμβριος
el Name of month 01 (Islamic Calendar) Muharram
el Name of month 02 (Islamic Calendar) Safar
el Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -1572,18 +1572,18 @@ el_CY Date and time short (Islamic Calendar) 18/7/29 12:31 μ.μ.
el_CY Date and time medium (Islamic Calendar) 18 Raj. 1429 12:31:00 μ.μ.
el_CY Date and time long (Islamic Calendar) 18 Rajab 1429 12:31:00 μ.μ. GMT+00:00
el_CY Date and time full (Islamic Calendar) Δευτέρα, 18 Rajab 1429 12:31:00 μ.μ. GMT+00:00
-el_CY Name of month 01 (Gregorian Calendar) Ιανουαρίου
-el_CY Name of month 02 (Gregorian Calendar) Φεβρουαρίου
-el_CY Name of month 03 (Gregorian Calendar) Μαρτίου
-el_CY Name of month 04 (Gregorian Calendar) Απριλίου
-el_CY Name of month 05 (Gregorian Calendar) Μαΐου
-el_CY Name of month 06 (Gregorian Calendar) Ιουνίου
-el_CY Name of month 07 (Gregorian Calendar) Ιουλίου
-el_CY Name of month 08 (Gregorian Calendar) Αυγούστου
-el_CY Name of month 09 (Gregorian Calendar) Σεπτεμβρίου
-el_CY Name of month 10 (Gregorian Calendar) Οκτωβρίου
-el_CY Name of month 11 (Gregorian Calendar) Νοεμβρίου
-el_CY Name of month 12 (Gregorian Calendar) Δεκεμβρίου
+el_CY Name of month 01 (Gregorian Calendar) Ιανουάριος
+el_CY Name of month 02 (Gregorian Calendar) Φεβρουάριος
+el_CY Name of month 03 (Gregorian Calendar) Μάρτιος
+el_CY Name of month 04 (Gregorian Calendar) Απρίλιος
+el_CY Name of month 05 (Gregorian Calendar) Μάιος
+el_CY Name of month 06 (Gregorian Calendar) Ιούνιος
+el_CY Name of month 07 (Gregorian Calendar) Ιούλιος
+el_CY Name of month 08 (Gregorian Calendar) Αύγουστος
+el_CY Name of month 09 (Gregorian Calendar) Σεπτέμβριος
+el_CY Name of month 10 (Gregorian Calendar) Οκτώβριος
+el_CY Name of month 11 (Gregorian Calendar) Νοέμβριος
+el_CY Name of month 12 (Gregorian Calendar) Δεκέμβριος
el_CY Name of month 01 (Islamic Calendar) Muharram
el_CY Name of month 02 (Islamic Calendar) Safar
el_CY Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -1624,18 +1624,18 @@ el_GR Date and time short (Islamic Calendar) 18/7/29 12:31 μ.μ.
el_GR Date and time medium (Islamic Calendar) 18 Raj. 1429 12:31:00 μ.μ.
el_GR Date and time long (Islamic Calendar) 18 Rajab 1429 12:31:00 μ.μ. GMT+00:00
el_GR Date and time full (Islamic Calendar) Δευτέρα, 18 Rajab 1429 12:31:00 μ.μ. GMT+00:00
-el_GR Name of month 01 (Gregorian Calendar) Ιανουαρίου
-el_GR Name of month 02 (Gregorian Calendar) Φεβρουαρίου
-el_GR Name of month 03 (Gregorian Calendar) Μαρτίου
-el_GR Name of month 04 (Gregorian Calendar) Απριλίου
-el_GR Name of month 05 (Gregorian Calendar) Μαΐου
-el_GR Name of month 06 (Gregorian Calendar) Ιουνίου
-el_GR Name of month 07 (Gregorian Calendar) Ιουλίου
-el_GR Name of month 08 (Gregorian Calendar) Αυγούστου
-el_GR Name of month 09 (Gregorian Calendar) Σεπτεμβρίου
-el_GR Name of month 10 (Gregorian Calendar) Οκτωβρίου
-el_GR Name of month 11 (Gregorian Calendar) Νοεμβρίου
-el_GR Name of month 12 (Gregorian Calendar) Δεκεμβρίου
+el_GR Name of month 01 (Gregorian Calendar) Ιανουάριος
+el_GR Name of month 02 (Gregorian Calendar) Φεβρουάριος
+el_GR Name of month 03 (Gregorian Calendar) Μάρτιος
+el_GR Name of month 04 (Gregorian Calendar) Απρίλιος
+el_GR Name of month 05 (Gregorian Calendar) Μάιος
+el_GR Name of month 06 (Gregorian Calendar) Ιούνιος
+el_GR Name of month 07 (Gregorian Calendar) Ιούλιος
+el_GR Name of month 08 (Gregorian Calendar) Αύγουστος
+el_GR Name of month 09 (Gregorian Calendar) Σεπτέμβριος
+el_GR Name of month 10 (Gregorian Calendar) Οκτώβριος
+el_GR Name of month 11 (Gregorian Calendar) Νοέμβριος
+el_GR Name of month 12 (Gregorian Calendar) Δεκέμβριος
el_GR Name of month 01 (Islamic Calendar) Muharram
el_GR Name of month 02 (Islamic Calendar) Safar
el_GR Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -4120,14 +4120,14 @@ fa Date and time short (Islamic Calendar) ۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:۳۱
fa Date and time medium (Islamic Calendar) ۱۴۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:۳۱:۰۰
fa Date and time long (Islamic Calendar) ۱۸ رجب ۱۴۲۹ ه‍. ق.، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
fa Date and time full (Islamic Calendar) دوشنبه ۱۸ رجب ۱۴۲۹ هجری قمری، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
-fa Name of month 01 (Gregorian Calendar) ژانویهٔ
-fa Name of month 02 (Gregorian Calendar) فوریهٔ
+fa Name of month 01 (Gregorian Calendar) ژانویه
+fa Name of month 02 (Gregorian Calendar) فوریه
fa Name of month 03 (Gregorian Calendar) مارس
fa Name of month 04 (Gregorian Calendar) آوریل
-fa Name of month 05 (Gregorian Calendar) می
-fa Name of month 06 (Gregorian Calendar) جون
-fa Name of month 07 (Gregorian Calendar) جولای
-fa Name of month 08 (Gregorian Calendar) آگوست
+fa Name of month 05 (Gregorian Calendar) مه
+fa Name of month 06 (Gregorian Calendar) ژوئن
+fa Name of month 07 (Gregorian Calendar) ژوئیه
+fa Name of month 08 (Gregorian Calendar) اوت
fa Name of month 09 (Gregorian Calendar) سپتامبر
fa Name of month 10 (Gregorian Calendar) اکتبر
fa Name of month 11 (Gregorian Calendar) نوامبر
@@ -4172,18 +4172,18 @@ fa_AF Date and time short (Islamic Calendar) ۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:
fa_AF Date and time medium (Islamic Calendar) ۱۴۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:۳۱:۰۰
fa_AF Date and time long (Islamic Calendar) ۱۸ رجب ۱۴۲۹ ه‍. ق.، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
fa_AF Date and time full (Islamic Calendar) دوشنبه ۱۸ رجب ۱۴۲۹ هجری قمری، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
-fa_AF Name of month 01 (Gregorian Calendar) جنوری
-fa_AF Name of month 02 (Gregorian Calendar) فبروری
-fa_AF Name of month 03 (Gregorian Calendar) مارچ
-fa_AF Name of month 04 (Gregorian Calendar) اپریل
-fa_AF Name of month 05 (Gregorian Calendar) می
-fa_AF Name of month 06 (Gregorian Calendar) جون
-fa_AF Name of month 07 (Gregorian Calendar) جولای
-fa_AF Name of month 08 (Gregorian Calendar) اگست
-fa_AF Name of month 09 (Gregorian Calendar) سپتمبر
-fa_AF Name of month 10 (Gregorian Calendar) اکتوبر
-fa_AF Name of month 11 (Gregorian Calendar) نومبر
-fa_AF Name of month 12 (Gregorian Calendar) دسمبر
+fa_AF Name of month 01 (Gregorian Calendar) ژانویه
+fa_AF Name of month 02 (Gregorian Calendar) فوریه
+fa_AF Name of month 03 (Gregorian Calendar) مارس
+fa_AF Name of month 04 (Gregorian Calendar) آوریل
+fa_AF Name of month 05 (Gregorian Calendar) مه
+fa_AF Name of month 06 (Gregorian Calendar) ژوئن
+fa_AF Name of month 07 (Gregorian Calendar) ژوئیه
+fa_AF Name of month 08 (Gregorian Calendar) اوت
+fa_AF Name of month 09 (Gregorian Calendar) سپتامبر
+fa_AF Name of month 10 (Gregorian Calendar) اکتبر
+fa_AF Name of month 11 (Gregorian Calendar) نوامبر
+fa_AF Name of month 12 (Gregorian Calendar) دسامبر
fa_AF Name of month 01 (Islamic Calendar) محرم
fa_AF Name of month 02 (Islamic Calendar) صفر
fa_AF Name of month 03 (Islamic Calendar) ربیع الاول
@@ -4224,14 +4224,14 @@ fa_IR Date and time short (Islamic Calendar) ۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:
fa_IR Date and time medium (Islamic Calendar) ۱۴۲۹/۷/۱۸ ه‍. ق.،‏ ۱۲:۳۱:۰۰
fa_IR Date and time long (Islamic Calendar) ۱۸ رجب ۱۴۲۹ ه‍. ق.، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
fa_IR Date and time full (Islamic Calendar) دوشنبه ۱۸ رجب ۱۴۲۹ هجری قمری، ساعت ۱۲:۳۱:۰۰ (GMT+۰۰:۰۰)
-fa_IR Name of month 01 (Gregorian Calendar) ژانویهٔ
-fa_IR Name of month 02 (Gregorian Calendar) فوریهٔ
+fa_IR Name of month 01 (Gregorian Calendar) ژانویه
+fa_IR Name of month 02 (Gregorian Calendar) فوریه
fa_IR Name of month 03 (Gregorian Calendar) مارس
fa_IR Name of month 04 (Gregorian Calendar) آوریل
-fa_IR Name of month 05 (Gregorian Calendar) می
-fa_IR Name of month 06 (Gregorian Calendar) جون
-fa_IR Name of month 07 (Gregorian Calendar) جولای
-fa_IR Name of month 08 (Gregorian Calendar) آگوست
+fa_IR Name of month 05 (Gregorian Calendar) مه
+fa_IR Name of month 06 (Gregorian Calendar) ژوئن
+fa_IR Name of month 07 (Gregorian Calendar) ژوئیه
+fa_IR Name of month 08 (Gregorian Calendar) اوت
fa_IR Name of month 09 (Gregorian Calendar) سپتامبر
fa_IR Name of month 10 (Gregorian Calendar) اکتبر
fa_IR Name of month 11 (Gregorian Calendar) نوامبر
@@ -4271,23 +4271,23 @@ fi Negative Currency value -1 234,56 €
fi Date and time short (Gregorian Calendar) 21.7.2008 12.31
fi Date and time medium (Gregorian Calendar) 21.7.2008 12.31.00
fi Date and time long (Gregorian Calendar) 21. heinäkuuta 2008 12.31.00 UTC+0.00
-fi Date and time full (Gregorian Calendar) maanantaina 21. heinäkuuta 2008 12.31.00 UTC+0.00
+fi Date and time full (Gregorian Calendar) maanantai 21. heinäkuuta 2008 12.31.00 UTC+0.00
fi Date and time short (Islamic Calendar) 18.7.1429 12.31
fi Date and time medium (Islamic Calendar) 18.7.1429 12.31.00
fi Date and time long (Islamic Calendar) 18. radžab 1429 12.31.00 UTC+0.00
-fi Date and time full (Islamic Calendar) maanantaina 18. radžab 1429 12.31.00 UTC+0.00
-fi Name of month 01 (Gregorian Calendar) tammikuuta
-fi Name of month 02 (Gregorian Calendar) helmikuuta
-fi Name of month 03 (Gregorian Calendar) maaliskuuta
-fi Name of month 04 (Gregorian Calendar) huhtikuuta
-fi Name of month 05 (Gregorian Calendar) toukokuuta
-fi Name of month 06 (Gregorian Calendar) kesäkuuta
-fi Name of month 07 (Gregorian Calendar) heinäkuuta
-fi Name of month 08 (Gregorian Calendar) elokuuta
-fi Name of month 09 (Gregorian Calendar) syyskuuta
-fi Name of month 10 (Gregorian Calendar) lokakuuta
-fi Name of month 11 (Gregorian Calendar) marraskuuta
-fi Name of month 12 (Gregorian Calendar) joulukuuta
+fi Date and time full (Islamic Calendar) maanantai 18. radžab 1429 12.31.00 UTC+0.00
+fi Name of month 01 (Gregorian Calendar) tammikuu
+fi Name of month 02 (Gregorian Calendar) helmikuu
+fi Name of month 03 (Gregorian Calendar) maaliskuu
+fi Name of month 04 (Gregorian Calendar) huhtikuu
+fi Name of month 05 (Gregorian Calendar) toukokuu
+fi Name of month 06 (Gregorian Calendar) kesäkuu
+fi Name of month 07 (Gregorian Calendar) heinäkuu
+fi Name of month 08 (Gregorian Calendar) elokuu
+fi Name of month 09 (Gregorian Calendar) syyskuu
+fi Name of month 10 (Gregorian Calendar) lokakuu
+fi Name of month 11 (Gregorian Calendar) marraskuu
+fi Name of month 12 (Gregorian Calendar) joulukuu
fi Name of month 01 (Islamic Calendar) muharram
fi Name of month 02 (Islamic Calendar) safar
fi Name of month 03 (Islamic Calendar) rabi’ al-awwal
@@ -4300,20 +4300,20 @@ fi Name of month 09 (Islamic Calendar) ramadan
fi Name of month 10 (Islamic Calendar) šawwal
fi Name of month 11 (Islamic Calendar) dhu-l-qa’da
fi Name of month 12 (Islamic Calendar) dhu-l-hiddža
-fi Name of weekday 01 (Gregorian Calendar) maanantaina
-fi Name of weekday 02 (Gregorian Calendar) tiistaina
-fi Name of weekday 03 (Gregorian Calendar) keskiviikkona
-fi Name of weekday 04 (Gregorian Calendar) torstaina
-fi Name of weekday 05 (Gregorian Calendar) perjantaina
-fi Name of weekday 06 (Gregorian Calendar) lauantaina
-fi Name of weekday 07 (Gregorian Calendar) sunnuntaina
-fi Name of weekday 01 (Islamic Calendar) maanantaina
-fi Name of weekday 02 (Islamic Calendar) tiistaina
-fi Name of weekday 03 (Islamic Calendar) keskiviikkona
-fi Name of weekday 04 (Islamic Calendar) torstaina
-fi Name of weekday 05 (Islamic Calendar) perjantaina
-fi Name of weekday 06 (Islamic Calendar) lauantaina
-fi Name of weekday 07 (Islamic Calendar) sunnuntaina
+fi Name of weekday 01 (Gregorian Calendar) maanantai
+fi Name of weekday 02 (Gregorian Calendar) tiistai
+fi Name of weekday 03 (Gregorian Calendar) keskiviikko
+fi Name of weekday 04 (Gregorian Calendar) torstai
+fi Name of weekday 05 (Gregorian Calendar) perjantai
+fi Name of weekday 06 (Gregorian Calendar) lauantai
+fi Name of weekday 07 (Gregorian Calendar) sunnuntai
+fi Name of weekday 01 (Islamic Calendar) maanantai
+fi Name of weekday 02 (Islamic Calendar) tiistai
+fi Name of weekday 03 (Islamic Calendar) keskiviikko
+fi Name of weekday 04 (Islamic Calendar) torstai
+fi Name of weekday 05 (Islamic Calendar) perjantai
+fi Name of weekday 06 (Islamic Calendar) lauantai
+fi Name of weekday 07 (Islamic Calendar) sunnuntai
fi_FI Language endonym suomi
fi_FI Country endonym Suomi
fi_FI Floating Point Number -123 456 789,012
@@ -4323,23 +4323,23 @@ fi_FI Negative Currency value -1 234,56 €
fi_FI Date and time short (Gregorian Calendar) 21.7.2008 12.31
fi_FI Date and time medium (Gregorian Calendar) 21.7.2008 12.31.00
fi_FI Date and time long (Gregorian Calendar) 21. heinäkuuta 2008 12.31.00 UTC+0.00
-fi_FI Date and time full (Gregorian Calendar) maanantaina 21. heinäkuuta 2008 12.31.00 UTC+0.00
+fi_FI Date and time full (Gregorian Calendar) maanantai 21. heinäkuuta 2008 12.31.00 UTC+0.00
fi_FI Date and time short (Islamic Calendar) 18.7.1429 12.31
fi_FI Date and time medium (Islamic Calendar) 18.7.1429 12.31.00
fi_FI Date and time long (Islamic Calendar) 18. radžab 1429 12.31.00 UTC+0.00
-fi_FI Date and time full (Islamic Calendar) maanantaina 18. radžab 1429 12.31.00 UTC+0.00
-fi_FI Name of month 01 (Gregorian Calendar) tammikuuta
-fi_FI Name of month 02 (Gregorian Calendar) helmikuuta
-fi_FI Name of month 03 (Gregorian Calendar) maaliskuuta
-fi_FI Name of month 04 (Gregorian Calendar) huhtikuuta
-fi_FI Name of month 05 (Gregorian Calendar) toukokuuta
-fi_FI Name of month 06 (Gregorian Calendar) kesäkuuta
-fi_FI Name of month 07 (Gregorian Calendar) heinäkuuta
-fi_FI Name of month 08 (Gregorian Calendar) elokuuta
-fi_FI Name of month 09 (Gregorian Calendar) syyskuuta
-fi_FI Name of month 10 (Gregorian Calendar) lokakuuta
-fi_FI Name of month 11 (Gregorian Calendar) marraskuuta
-fi_FI Name of month 12 (Gregorian Calendar) joulukuuta
+fi_FI Date and time full (Islamic Calendar) maanantai 18. radžab 1429 12.31.00 UTC+0.00
+fi_FI Name of month 01 (Gregorian Calendar) tammikuu
+fi_FI Name of month 02 (Gregorian Calendar) helmikuu
+fi_FI Name of month 03 (Gregorian Calendar) maaliskuu
+fi_FI Name of month 04 (Gregorian Calendar) huhtikuu
+fi_FI Name of month 05 (Gregorian Calendar) toukokuu
+fi_FI Name of month 06 (Gregorian Calendar) kesäkuu
+fi_FI Name of month 07 (Gregorian Calendar) heinäkuu
+fi_FI Name of month 08 (Gregorian Calendar) elokuu
+fi_FI Name of month 09 (Gregorian Calendar) syyskuu
+fi_FI Name of month 10 (Gregorian Calendar) lokakuu
+fi_FI Name of month 11 (Gregorian Calendar) marraskuu
+fi_FI Name of month 12 (Gregorian Calendar) joulukuu
fi_FI Name of month 01 (Islamic Calendar) muharram
fi_FI Name of month 02 (Islamic Calendar) safar
fi_FI Name of month 03 (Islamic Calendar) rabi’ al-awwal
@@ -4352,20 +4352,20 @@ fi_FI Name of month 09 (Islamic Calendar) ramadan
fi_FI Name of month 10 (Islamic Calendar) šawwal
fi_FI Name of month 11 (Islamic Calendar) dhu-l-qa’da
fi_FI Name of month 12 (Islamic Calendar) dhu-l-hiddža
-fi_FI Name of weekday 01 (Gregorian Calendar) maanantaina
-fi_FI Name of weekday 02 (Gregorian Calendar) tiistaina
-fi_FI Name of weekday 03 (Gregorian Calendar) keskiviikkona
-fi_FI Name of weekday 04 (Gregorian Calendar) torstaina
-fi_FI Name of weekday 05 (Gregorian Calendar) perjantaina
-fi_FI Name of weekday 06 (Gregorian Calendar) lauantaina
-fi_FI Name of weekday 07 (Gregorian Calendar) sunnuntaina
-fi_FI Name of weekday 01 (Islamic Calendar) maanantaina
-fi_FI Name of weekday 02 (Islamic Calendar) tiistaina
-fi_FI Name of weekday 03 (Islamic Calendar) keskiviikkona
-fi_FI Name of weekday 04 (Islamic Calendar) torstaina
-fi_FI Name of weekday 05 (Islamic Calendar) perjantaina
-fi_FI Name of weekday 06 (Islamic Calendar) lauantaina
-fi_FI Name of weekday 07 (Islamic Calendar) sunnuntaina
+fi_FI Name of weekday 01 (Gregorian Calendar) maanantai
+fi_FI Name of weekday 02 (Gregorian Calendar) tiistai
+fi_FI Name of weekday 03 (Gregorian Calendar) keskiviikko
+fi_FI Name of weekday 04 (Gregorian Calendar) torstai
+fi_FI Name of weekday 05 (Gregorian Calendar) perjantai
+fi_FI Name of weekday 06 (Gregorian Calendar) lauantai
+fi_FI Name of weekday 07 (Gregorian Calendar) sunnuntai
+fi_FI Name of weekday 01 (Islamic Calendar) maanantai
+fi_FI Name of weekday 02 (Islamic Calendar) tiistai
+fi_FI Name of weekday 03 (Islamic Calendar) keskiviikko
+fi_FI Name of weekday 04 (Islamic Calendar) torstai
+fi_FI Name of weekday 05 (Islamic Calendar) perjantai
+fi_FI Name of weekday 06 (Islamic Calendar) lauantai
+fi_FI Name of weekday 07 (Islamic Calendar) sunnuntai
fr Language endonym français
fr Country endonym
fr Floating Point Number -123 456 789,012
@@ -5207,23 +5207,23 @@ it Negative Currency value -€ 1.234,56
it Date and time short (Gregorian Calendar) 21/07/08 12:31
it Date and time medium (Gregorian Calendar) 21/lug/2008 12:31:00
it Date and time long (Gregorian Calendar) 21 luglio 2008 12:31:00 GMT+00:00
-it Date and time full (Gregorian Calendar) lunedì 21 luglio 2008 12:31:00 GMT+00:00
+it Date and time full (Gregorian Calendar) Lunedì 21 Luglio 2008 12:31:00 GMT+00:00
it Date and time short (Islamic Calendar) 18/07/29 12:31
it Date and time medium (Islamic Calendar) 18/Raj./1429 12:31:00
it Date and time long (Islamic Calendar) 18 Rajab 1429 12:31:00 GMT+00:00
-it Date and time full (Islamic Calendar) lunedì 18 Rajab 1429 12:31:00 GMT+00:00
-it Name of month 01 (Gregorian Calendar) gennaio
-it Name of month 02 (Gregorian Calendar) febbraio
-it Name of month 03 (Gregorian Calendar) marzo
-it Name of month 04 (Gregorian Calendar) aprile
-it Name of month 05 (Gregorian Calendar) maggio
-it Name of month 06 (Gregorian Calendar) giugno
-it Name of month 07 (Gregorian Calendar) luglio
-it Name of month 08 (Gregorian Calendar) agosto
-it Name of month 09 (Gregorian Calendar) settembre
-it Name of month 10 (Gregorian Calendar) ottobre
-it Name of month 11 (Gregorian Calendar) novembre
-it Name of month 12 (Gregorian Calendar) dicembre
+it Date and time full (Islamic Calendar) Lunedì 18 Rajab 1429 12:31:00 GMT+00:00
+it Name of month 01 (Gregorian Calendar) Gennaio
+it Name of month 02 (Gregorian Calendar) Febbraio
+it Name of month 03 (Gregorian Calendar) Marzo
+it Name of month 04 (Gregorian Calendar) Aprile
+it Name of month 05 (Gregorian Calendar) Maggio
+it Name of month 06 (Gregorian Calendar) Giugno
+it Name of month 07 (Gregorian Calendar) Luglio
+it Name of month 08 (Gregorian Calendar) Agosto
+it Name of month 09 (Gregorian Calendar) Settembre
+it Name of month 10 (Gregorian Calendar) Ottobre
+it Name of month 11 (Gregorian Calendar) Novembre
+it Name of month 12 (Gregorian Calendar) Dicembre
it Name of month 01 (Islamic Calendar) Muharram
it Name of month 02 (Islamic Calendar) Safar
it Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -5236,20 +5236,20 @@ it Name of month 09 (Islamic Calendar) Ramadan
it Name of month 10 (Islamic Calendar) Shawwal
it Name of month 11 (Islamic Calendar) Dhuʻl-Qiʻdah
it Name of month 12 (Islamic Calendar) Dhuʻl-Hijjah
-it Name of weekday 01 (Gregorian Calendar) lunedì
-it Name of weekday 02 (Gregorian Calendar) martedì
-it Name of weekday 03 (Gregorian Calendar) mercoledì
-it Name of weekday 04 (Gregorian Calendar) giovedì
-it Name of weekday 05 (Gregorian Calendar) venerdì
-it Name of weekday 06 (Gregorian Calendar) sabato
-it Name of weekday 07 (Gregorian Calendar) domenica
-it Name of weekday 01 (Islamic Calendar) lunedì
-it Name of weekday 02 (Islamic Calendar) martedì
-it Name of weekday 03 (Islamic Calendar) mercoledì
-it Name of weekday 04 (Islamic Calendar) giovedì
-it Name of weekday 05 (Islamic Calendar) venerdì
-it Name of weekday 06 (Islamic Calendar) sabato
-it Name of weekday 07 (Islamic Calendar) domenica
+it Name of weekday 01 (Gregorian Calendar) Lunedì
+it Name of weekday 02 (Gregorian Calendar) Martedì
+it Name of weekday 03 (Gregorian Calendar) Mercoledì
+it Name of weekday 04 (Gregorian Calendar) Giovedì
+it Name of weekday 05 (Gregorian Calendar) Venerdì
+it Name of weekday 06 (Gregorian Calendar) Sabato
+it Name of weekday 07 (Gregorian Calendar) Domenica
+it Name of weekday 01 (Islamic Calendar) Lunedì
+it Name of weekday 02 (Islamic Calendar) Martedì
+it Name of weekday 03 (Islamic Calendar) Mercoledì
+it Name of weekday 04 (Islamic Calendar) Giovedì
+it Name of weekday 05 (Islamic Calendar) Venerdì
+it Name of weekday 06 (Islamic Calendar) Sabato
+it Name of weekday 07 (Islamic Calendar) Domenica
it_CH Language endonym italiano
it_CH Country endonym Svizzera
it_CH Floating Point Number -123'456'789.012
@@ -5264,18 +5264,18 @@ it_CH Date and time short (Islamic Calendar) 18.07.29 12:31
it_CH Date and time medium (Islamic Calendar) 18-Raj.-1429 12:31:00
it_CH Date and time long (Islamic Calendar) 18 Rajab 1429 12:31:00 GMT+00:00
it_CH Date and time full (Islamic Calendar) lunedì, 18 Rajab 1429 12.31:00 h GMT+00:00
-it_CH Name of month 01 (Gregorian Calendar) gennaio
-it_CH Name of month 02 (Gregorian Calendar) febbraio
-it_CH Name of month 03 (Gregorian Calendar) marzo
-it_CH Name of month 04 (Gregorian Calendar) aprile
-it_CH Name of month 05 (Gregorian Calendar) maggio
-it_CH Name of month 06 (Gregorian Calendar) giugno
-it_CH Name of month 07 (Gregorian Calendar) luglio
-it_CH Name of month 08 (Gregorian Calendar) agosto
-it_CH Name of month 09 (Gregorian Calendar) settembre
-it_CH Name of month 10 (Gregorian Calendar) ottobre
-it_CH Name of month 11 (Gregorian Calendar) novembre
-it_CH Name of month 12 (Gregorian Calendar) dicembre
+it_CH Name of month 01 (Gregorian Calendar) Gennaio
+it_CH Name of month 02 (Gregorian Calendar) Febbraio
+it_CH Name of month 03 (Gregorian Calendar) Marzo
+it_CH Name of month 04 (Gregorian Calendar) Aprile
+it_CH Name of month 05 (Gregorian Calendar) Maggio
+it_CH Name of month 06 (Gregorian Calendar) Giugno
+it_CH Name of month 07 (Gregorian Calendar) Luglio
+it_CH Name of month 08 (Gregorian Calendar) Agosto
+it_CH Name of month 09 (Gregorian Calendar) Settembre
+it_CH Name of month 10 (Gregorian Calendar) Ottobre
+it_CH Name of month 11 (Gregorian Calendar) Novembre
+it_CH Name of month 12 (Gregorian Calendar) Dicembre
it_CH Name of month 01 (Islamic Calendar) Muharram
it_CH Name of month 02 (Islamic Calendar) Safar
it_CH Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -5288,20 +5288,20 @@ it_CH Name of month 09 (Islamic Calendar) Ramadan
it_CH Name of month 10 (Islamic Calendar) Shawwal
it_CH Name of month 11 (Islamic Calendar) Dhuʻl-Qiʻdah
it_CH Name of month 12 (Islamic Calendar) Dhuʻl-Hijjah
-it_CH Name of weekday 01 (Gregorian Calendar) lunedì
-it_CH Name of weekday 02 (Gregorian Calendar) martedì
-it_CH Name of weekday 03 (Gregorian Calendar) mercoledì
-it_CH Name of weekday 04 (Gregorian Calendar) giovedì
-it_CH Name of weekday 05 (Gregorian Calendar) venerdì
-it_CH Name of weekday 06 (Gregorian Calendar) sabato
-it_CH Name of weekday 07 (Gregorian Calendar) domenica
-it_CH Name of weekday 01 (Islamic Calendar) lunedì
-it_CH Name of weekday 02 (Islamic Calendar) martedì
-it_CH Name of weekday 03 (Islamic Calendar) mercoledì
-it_CH Name of weekday 04 (Islamic Calendar) giovedì
-it_CH Name of weekday 05 (Islamic Calendar) venerdì
-it_CH Name of weekday 06 (Islamic Calendar) sabato
-it_CH Name of weekday 07 (Islamic Calendar) domenica
+it_CH Name of weekday 01 (Gregorian Calendar) Lunedì
+it_CH Name of weekday 02 (Gregorian Calendar) Martedì
+it_CH Name of weekday 03 (Gregorian Calendar) Mercoledì
+it_CH Name of weekday 04 (Gregorian Calendar) Giovedì
+it_CH Name of weekday 05 (Gregorian Calendar) Venerdì
+it_CH Name of weekday 06 (Gregorian Calendar) Sabato
+it_CH Name of weekday 07 (Gregorian Calendar) Domenica
+it_CH Name of weekday 01 (Islamic Calendar) Lunedì
+it_CH Name of weekday 02 (Islamic Calendar) Martedì
+it_CH Name of weekday 03 (Islamic Calendar) Mercoledì
+it_CH Name of weekday 04 (Islamic Calendar) Giovedì
+it_CH Name of weekday 05 (Islamic Calendar) Venerdì
+it_CH Name of weekday 06 (Islamic Calendar) Sabato
+it_CH Name of weekday 07 (Islamic Calendar) Domenica
it_IT Language endonym italiano
it_IT Country endonym Italia
it_IT Floating Point Number -123.456.789,012
@@ -5311,23 +5311,23 @@ it_IT Negative Currency value -€ 1.234,56
it_IT Date and time short (Gregorian Calendar) 21/07/08 12:31
it_IT Date and time medium (Gregorian Calendar) 21/lug/2008 12:31:00
it_IT Date and time long (Gregorian Calendar) 21 luglio 2008 12:31:00 GMT+00:00
-it_IT Date and time full (Gregorian Calendar) lunedì 21 luglio 2008 12:31:00 GMT+00:00
+it_IT Date and time full (Gregorian Calendar) Lunedì 21 Luglio 2008 12:31:00 GMT+00:00
it_IT Date and time short (Islamic Calendar) 18/07/29 12:31
it_IT Date and time medium (Islamic Calendar) 18/Raj./1429 12:31:00
it_IT Date and time long (Islamic Calendar) 18 Rajab 1429 12:31:00 GMT+00:00
-it_IT Date and time full (Islamic Calendar) lunedì 18 Rajab 1429 12:31:00 GMT+00:00
-it_IT Name of month 01 (Gregorian Calendar) gennaio
-it_IT Name of month 02 (Gregorian Calendar) febbraio
-it_IT Name of month 03 (Gregorian Calendar) marzo
-it_IT Name of month 04 (Gregorian Calendar) aprile
-it_IT Name of month 05 (Gregorian Calendar) maggio
-it_IT Name of month 06 (Gregorian Calendar) giugno
-it_IT Name of month 07 (Gregorian Calendar) luglio
-it_IT Name of month 08 (Gregorian Calendar) agosto
-it_IT Name of month 09 (Gregorian Calendar) settembre
-it_IT Name of month 10 (Gregorian Calendar) ottobre
-it_IT Name of month 11 (Gregorian Calendar) novembre
-it_IT Name of month 12 (Gregorian Calendar) dicembre
+it_IT Date and time full (Islamic Calendar) Lunedì 18 Rajab 1429 12:31:00 GMT+00:00
+it_IT Name of month 01 (Gregorian Calendar) Gennaio
+it_IT Name of month 02 (Gregorian Calendar) Febbraio
+it_IT Name of month 03 (Gregorian Calendar) Marzo
+it_IT Name of month 04 (Gregorian Calendar) Aprile
+it_IT Name of month 05 (Gregorian Calendar) Maggio
+it_IT Name of month 06 (Gregorian Calendar) Giugno
+it_IT Name of month 07 (Gregorian Calendar) Luglio
+it_IT Name of month 08 (Gregorian Calendar) Agosto
+it_IT Name of month 09 (Gregorian Calendar) Settembre
+it_IT Name of month 10 (Gregorian Calendar) Ottobre
+it_IT Name of month 11 (Gregorian Calendar) Novembre
+it_IT Name of month 12 (Gregorian Calendar) Dicembre
it_IT Name of month 01 (Islamic Calendar) Muharram
it_IT Name of month 02 (Islamic Calendar) Safar
it_IT Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -5340,20 +5340,20 @@ it_IT Name of month 09 (Islamic Calendar) Ramadan
it_IT Name of month 10 (Islamic Calendar) Shawwal
it_IT Name of month 11 (Islamic Calendar) Dhuʻl-Qiʻdah
it_IT Name of month 12 (Islamic Calendar) Dhuʻl-Hijjah
-it_IT Name of weekday 01 (Gregorian Calendar) lunedì
-it_IT Name of weekday 02 (Gregorian Calendar) martedì
-it_IT Name of weekday 03 (Gregorian Calendar) mercoledì
-it_IT Name of weekday 04 (Gregorian Calendar) giovedì
-it_IT Name of weekday 05 (Gregorian Calendar) venerdì
-it_IT Name of weekday 06 (Gregorian Calendar) sabato
-it_IT Name of weekday 07 (Gregorian Calendar) domenica
-it_IT Name of weekday 01 (Islamic Calendar) lunedì
-it_IT Name of weekday 02 (Islamic Calendar) martedì
-it_IT Name of weekday 03 (Islamic Calendar) mercoledì
-it_IT Name of weekday 04 (Islamic Calendar) giovedì
-it_IT Name of weekday 05 (Islamic Calendar) venerdì
-it_IT Name of weekday 06 (Islamic Calendar) sabato
-it_IT Name of weekday 07 (Islamic Calendar) domenica
+it_IT Name of weekday 01 (Gregorian Calendar) Lunedì
+it_IT Name of weekday 02 (Gregorian Calendar) Martedì
+it_IT Name of weekday 03 (Gregorian Calendar) Mercoledì
+it_IT Name of weekday 04 (Gregorian Calendar) Giovedì
+it_IT Name of weekday 05 (Gregorian Calendar) Venerdì
+it_IT Name of weekday 06 (Gregorian Calendar) Sabato
+it_IT Name of weekday 07 (Gregorian Calendar) Domenica
+it_IT Name of weekday 01 (Islamic Calendar) Lunedì
+it_IT Name of weekday 02 (Islamic Calendar) Martedì
+it_IT Name of weekday 03 (Islamic Calendar) Mercoledì
+it_IT Name of weekday 04 (Islamic Calendar) Giovedì
+it_IT Name of weekday 05 (Islamic Calendar) Venerdì
+it_IT Name of weekday 06 (Islamic Calendar) Sabato
+it_IT Name of weekday 07 (Islamic Calendar) Domenica
ja Language endonym 日本語
ja Country endonym
ja Floating Point Number -123,456,789.012
@@ -6148,18 +6148,18 @@ ru Date and time short (Islamic Calendar) 18.07.29 12:31
ru Date and time medium (Islamic Calendar) 18.07.1429 12:31:00
ru Date and time long (Islamic Calendar) 18 Раджаб 1429 г. 12:31:00 GMT+00:00
ru Date and time full (Islamic Calendar) понедельник, 18 Раджаб 1429 г. 12:31:00 GMT+00:00
-ru Name of month 01 (Gregorian Calendar) января
-ru Name of month 02 (Gregorian Calendar) февраля
-ru Name of month 03 (Gregorian Calendar) марта
-ru Name of month 04 (Gregorian Calendar) апреля
-ru Name of month 05 (Gregorian Calendar) мая
-ru Name of month 06 (Gregorian Calendar) июня
-ru Name of month 07 (Gregorian Calendar) июля
-ru Name of month 08 (Gregorian Calendar) августа
-ru Name of month 09 (Gregorian Calendar) сентября
-ru Name of month 10 (Gregorian Calendar) октября
-ru Name of month 11 (Gregorian Calendar) ноября
-ru Name of month 12 (Gregorian Calendar) декабря
+ru Name of month 01 (Gregorian Calendar) Январь
+ru Name of month 02 (Gregorian Calendar) Февраль
+ru Name of month 03 (Gregorian Calendar) Март
+ru Name of month 04 (Gregorian Calendar) Апрель
+ru Name of month 05 (Gregorian Calendar) Май
+ru Name of month 06 (Gregorian Calendar) Июнь
+ru Name of month 07 (Gregorian Calendar) Июль
+ru Name of month 08 (Gregorian Calendar) Август
+ru Name of month 09 (Gregorian Calendar) Сентябрь
+ru Name of month 10 (Gregorian Calendar) Октябрь
+ru Name of month 11 (Gregorian Calendar) Ноябрь
+ru Name of month 12 (Gregorian Calendar) Декабрь
ru Name of month 01 (Islamic Calendar) Мухаррам
ru Name of month 02 (Islamic Calendar) Сафар
ru Name of month 03 (Islamic Calendar) Раби-уль-авваль
@@ -6172,20 +6172,20 @@ ru Name of month 09 (Islamic Calendar) Рамадан
ru Name of month 10 (Islamic Calendar) Шавваль
ru Name of month 11 (Islamic Calendar) Зуль-Каада
ru Name of month 12 (Islamic Calendar) Зуль-Хиджжа
-ru Name of weekday 01 (Gregorian Calendar) понедельник
-ru Name of weekday 02 (Gregorian Calendar) вторник
-ru Name of weekday 03 (Gregorian Calendar) среда
-ru Name of weekday 04 (Gregorian Calendar) четверг
-ru Name of weekday 05 (Gregorian Calendar) пятница
-ru Name of weekday 06 (Gregorian Calendar) суббота
-ru Name of weekday 07 (Gregorian Calendar) воскресенье
-ru Name of weekday 01 (Islamic Calendar) понедельник
-ru Name of weekday 02 (Islamic Calendar) вторник
-ru Name of weekday 03 (Islamic Calendar) среда
-ru Name of weekday 04 (Islamic Calendar) четверг
-ru Name of weekday 05 (Islamic Calendar) пятница
-ru Name of weekday 06 (Islamic Calendar) суббота
-ru Name of weekday 07 (Islamic Calendar) воскресенье
+ru Name of weekday 01 (Gregorian Calendar) Понедельник
+ru Name of weekday 02 (Gregorian Calendar) Вторник
+ru Name of weekday 03 (Gregorian Calendar) Среда
+ru Name of weekday 04 (Gregorian Calendar) Четверг
+ru Name of weekday 05 (Gregorian Calendar) Пятница
+ru Name of weekday 06 (Gregorian Calendar) Суббота
+ru Name of weekday 07 (Gregorian Calendar) Воскресенье
+ru Name of weekday 01 (Islamic Calendar) Понедельник
+ru Name of weekday 02 (Islamic Calendar) Вторник
+ru Name of weekday 03 (Islamic Calendar) Среда
+ru Name of weekday 04 (Islamic Calendar) Четверг
+ru Name of weekday 05 (Islamic Calendar) Пятница
+ru Name of weekday 06 (Islamic Calendar) Суббота
+ru Name of weekday 07 (Islamic Calendar) Воскресенье
ru_RU Language endonym русский
ru_RU Country endonym Россия
ru_RU Floating Point Number -123 456 789,012
@@ -6200,18 +6200,18 @@ ru_RU Date and time short (Islamic Calendar) 18.07.29 12:31
ru_RU Date and time medium (Islamic Calendar) 18.07.1429 12:31:00
ru_RU Date and time long (Islamic Calendar) 18 Раджаб 1429 г. 12:31:00 GMT+00:00
ru_RU Date and time full (Islamic Calendar) понедельник, 18 Раджаб 1429 г. 12:31:00 GMT+00:00
-ru_RU Name of month 01 (Gregorian Calendar) января
-ru_RU Name of month 02 (Gregorian Calendar) февраля
-ru_RU Name of month 03 (Gregorian Calendar) марта
-ru_RU Name of month 04 (Gregorian Calendar) апреля
-ru_RU Name of month 05 (Gregorian Calendar) мая
-ru_RU Name of month 06 (Gregorian Calendar) июня
-ru_RU Name of month 07 (Gregorian Calendar) июля
-ru_RU Name of month 08 (Gregorian Calendar) августа
-ru_RU Name of month 09 (Gregorian Calendar) сентября
-ru_RU Name of month 10 (Gregorian Calendar) октября
-ru_RU Name of month 11 (Gregorian Calendar) ноября
-ru_RU Name of month 12 (Gregorian Calendar) декабря
+ru_RU Name of month 01 (Gregorian Calendar) Январь
+ru_RU Name of month 02 (Gregorian Calendar) Февраль
+ru_RU Name of month 03 (Gregorian Calendar) Март
+ru_RU Name of month 04 (Gregorian Calendar) Апрель
+ru_RU Name of month 05 (Gregorian Calendar) Май
+ru_RU Name of month 06 (Gregorian Calendar) Июнь
+ru_RU Name of month 07 (Gregorian Calendar) Июль
+ru_RU Name of month 08 (Gregorian Calendar) Август
+ru_RU Name of month 09 (Gregorian Calendar) Сентябрь
+ru_RU Name of month 10 (Gregorian Calendar) Октябрь
+ru_RU Name of month 11 (Gregorian Calendar) Ноябрь
+ru_RU Name of month 12 (Gregorian Calendar) Декабрь
ru_RU Name of month 01 (Islamic Calendar) Мухаррам
ru_RU Name of month 02 (Islamic Calendar) Сафар
ru_RU Name of month 03 (Islamic Calendar) Раби-уль-авваль
@@ -6224,20 +6224,20 @@ ru_RU Name of month 09 (Islamic Calendar) Рамадан
ru_RU Name of month 10 (Islamic Calendar) Шавваль
ru_RU Name of month 11 (Islamic Calendar) Зуль-Каада
ru_RU Name of month 12 (Islamic Calendar) Зуль-Хиджжа
-ru_RU Name of weekday 01 (Gregorian Calendar) понедельник
-ru_RU Name of weekday 02 (Gregorian Calendar) вторник
-ru_RU Name of weekday 03 (Gregorian Calendar) среда
-ru_RU Name of weekday 04 (Gregorian Calendar) четверг
-ru_RU Name of weekday 05 (Gregorian Calendar) пятница
-ru_RU Name of weekday 06 (Gregorian Calendar) суббота
-ru_RU Name of weekday 07 (Gregorian Calendar) воскресенье
-ru_RU Name of weekday 01 (Islamic Calendar) понедельник
-ru_RU Name of weekday 02 (Islamic Calendar) вторник
-ru_RU Name of weekday 03 (Islamic Calendar) среда
-ru_RU Name of weekday 04 (Islamic Calendar) четверг
-ru_RU Name of weekday 05 (Islamic Calendar) пятница
-ru_RU Name of weekday 06 (Islamic Calendar) суббота
-ru_RU Name of weekday 07 (Islamic Calendar) воскресенье
+ru_RU Name of weekday 01 (Gregorian Calendar) Понедельник
+ru_RU Name of weekday 02 (Gregorian Calendar) Вторник
+ru_RU Name of weekday 03 (Gregorian Calendar) Среда
+ru_RU Name of weekday 04 (Gregorian Calendar) Четверг
+ru_RU Name of weekday 05 (Gregorian Calendar) Пятница
+ru_RU Name of weekday 06 (Gregorian Calendar) Суббота
+ru_RU Name of weekday 07 (Gregorian Calendar) Воскресенье
+ru_RU Name of weekday 01 (Islamic Calendar) Понедельник
+ru_RU Name of weekday 02 (Islamic Calendar) Вторник
+ru_RU Name of weekday 03 (Islamic Calendar) Среда
+ru_RU Name of weekday 04 (Islamic Calendar) Четверг
+ru_RU Name of weekday 05 (Islamic Calendar) Пятница
+ru_RU Name of weekday 06 (Islamic Calendar) Суббота
+ru_RU Name of weekday 07 (Islamic Calendar) Воскресенье
ru_UA Language endonym ru
ru_UA Country endonym Украина
ru_UA Floating Point Number -123 456 789,012
@@ -6252,18 +6252,18 @@ ru_UA Date and time short (Islamic Calendar) 18.07.29 12:31
ru_UA Date and time medium (Islamic Calendar) 18 Raj. 1429 12:31:00
ru_UA Date and time long (Islamic Calendar) 18 Раджаб 1429 12:31:00 GMT+00:00
ru_UA Date and time full (Islamic Calendar) понедельник, 18 Раджаб 1429 г. 12:31:00 GMT+00:00
-ru_UA Name of month 01 (Gregorian Calendar) января
-ru_UA Name of month 02 (Gregorian Calendar) февраля
-ru_UA Name of month 03 (Gregorian Calendar) марта
-ru_UA Name of month 04 (Gregorian Calendar) апреля
-ru_UA Name of month 05 (Gregorian Calendar) мая
-ru_UA Name of month 06 (Gregorian Calendar) июня
-ru_UA Name of month 07 (Gregorian Calendar) июля
-ru_UA Name of month 08 (Gregorian Calendar) августа
-ru_UA Name of month 09 (Gregorian Calendar) сентября
-ru_UA Name of month 10 (Gregorian Calendar) октября
-ru_UA Name of month 11 (Gregorian Calendar) ноября
-ru_UA Name of month 12 (Gregorian Calendar) декабря
+ru_UA Name of month 01 (Gregorian Calendar) Январь
+ru_UA Name of month 02 (Gregorian Calendar) Февраль
+ru_UA Name of month 03 (Gregorian Calendar) Март
+ru_UA Name of month 04 (Gregorian Calendar) Апрель
+ru_UA Name of month 05 (Gregorian Calendar) Май
+ru_UA Name of month 06 (Gregorian Calendar) Июнь
+ru_UA Name of month 07 (Gregorian Calendar) Июль
+ru_UA Name of month 08 (Gregorian Calendar) Август
+ru_UA Name of month 09 (Gregorian Calendar) Сентябрь
+ru_UA Name of month 10 (Gregorian Calendar) Октябрь
+ru_UA Name of month 11 (Gregorian Calendar) Ноябрь
+ru_UA Name of month 12 (Gregorian Calendar) Декабрь
ru_UA Name of month 01 (Islamic Calendar) Мухаррам
ru_UA Name of month 02 (Islamic Calendar) Сафар
ru_UA Name of month 03 (Islamic Calendar) Раби-уль-авваль
@@ -6276,20 +6276,20 @@ ru_UA Name of month 09 (Islamic Calendar) Рамадан
ru_UA Name of month 10 (Islamic Calendar) Шавваль
ru_UA Name of month 11 (Islamic Calendar) Зуль-Каада
ru_UA Name of month 12 (Islamic Calendar) Зуль-Хиджжа
-ru_UA Name of weekday 01 (Gregorian Calendar) понедельник
-ru_UA Name of weekday 02 (Gregorian Calendar) вторник
-ru_UA Name of weekday 03 (Gregorian Calendar) среда
-ru_UA Name of weekday 04 (Gregorian Calendar) четверг
-ru_UA Name of weekday 05 (Gregorian Calendar) пятница
-ru_UA Name of weekday 06 (Gregorian Calendar) суббота
-ru_UA Name of weekday 07 (Gregorian Calendar) воскресенье
-ru_UA Name of weekday 01 (Islamic Calendar) понедельник
-ru_UA Name of weekday 02 (Islamic Calendar) вторник
-ru_UA Name of weekday 03 (Islamic Calendar) среда
-ru_UA Name of weekday 04 (Islamic Calendar) четверг
-ru_UA Name of weekday 05 (Islamic Calendar) пятница
-ru_UA Name of weekday 06 (Islamic Calendar) суббота
-ru_UA Name of weekday 07 (Islamic Calendar) воскресенье
+ru_UA Name of weekday 01 (Gregorian Calendar) Понедельник
+ru_UA Name of weekday 02 (Gregorian Calendar) Вторник
+ru_UA Name of weekday 03 (Gregorian Calendar) Среда
+ru_UA Name of weekday 04 (Gregorian Calendar) Четверг
+ru_UA Name of weekday 05 (Gregorian Calendar) Пятница
+ru_UA Name of weekday 06 (Gregorian Calendar) Суббота
+ru_UA Name of weekday 07 (Gregorian Calendar) Воскресенье
+ru_UA Name of weekday 01 (Islamic Calendar) Понедельник
+ru_UA Name of weekday 02 (Islamic Calendar) Вторник
+ru_UA Name of weekday 03 (Islamic Calendar) Среда
+ru_UA Name of weekday 04 (Islamic Calendar) Четверг
+ru_UA Name of weekday 05 (Islamic Calendar) Пятница
+ru_UA Name of weekday 06 (Islamic Calendar) Суббота
+ru_UA Name of weekday 07 (Islamic Calendar) Воскресенье
sv Language endonym svenska
sv Country endonym
sv Floating Point Number −123 456 789,012
@@ -6668,18 +6668,18 @@ uk Date and time short (Islamic Calendar) 18.07.29 12:31
uk Date and time medium (Islamic Calendar) 18 Raj. 1429 12:31:00
uk Date and time long (Islamic Calendar) 18 Раджаб 1429 р. 12:31:00 GMT+00:00
uk Date and time full (Islamic Calendar) Понеділок, 18 Раджаб 1429 р. 12:31:00 GMT+00:00
-uk Name of month 01 (Gregorian Calendar) січня
-uk Name of month 02 (Gregorian Calendar) лютого
-uk Name of month 03 (Gregorian Calendar) березня
-uk Name of month 04 (Gregorian Calendar) квітня
-uk Name of month 05 (Gregorian Calendar) травня
-uk Name of month 06 (Gregorian Calendar) червня
-uk Name of month 07 (Gregorian Calendar) липня
-uk Name of month 08 (Gregorian Calendar) серпня
-uk Name of month 09 (Gregorian Calendar) вересня
-uk Name of month 10 (Gregorian Calendar) жовтня
-uk Name of month 11 (Gregorian Calendar) листопада
-uk Name of month 12 (Gregorian Calendar) грудня
+uk Name of month 01 (Gregorian Calendar) Січень
+uk Name of month 02 (Gregorian Calendar) Лютий
+uk Name of month 03 (Gregorian Calendar) Березень
+uk Name of month 04 (Gregorian Calendar) Квітень
+uk Name of month 05 (Gregorian Calendar) Травень
+uk Name of month 06 (Gregorian Calendar) Червень
+uk Name of month 07 (Gregorian Calendar) Липень
+uk Name of month 08 (Gregorian Calendar) Серпень
+uk Name of month 09 (Gregorian Calendar) Вересень
+uk Name of month 10 (Gregorian Calendar) Жовтень
+uk Name of month 11 (Gregorian Calendar) Листопад
+uk Name of month 12 (Gregorian Calendar) Грудень
uk Name of month 01 (Islamic Calendar) Мухаррам
uk Name of month 02 (Islamic Calendar) Сафар
uk Name of month 03 (Islamic Calendar) Рабі I
@@ -6720,18 +6720,18 @@ uk_UA Date and time short (Islamic Calendar) 18.07.29 12:31
uk_UA Date and time medium (Islamic Calendar) 18 Raj. 1429 12:31:00
uk_UA Date and time long (Islamic Calendar) 18 Раджаб 1429 р. 12:31:00 GMT+00:00
uk_UA Date and time full (Islamic Calendar) Понеділок, 18 Раджаб 1429 р. 12:31:00 GMT+00:00
-uk_UA Name of month 01 (Gregorian Calendar) січня
-uk_UA Name of month 02 (Gregorian Calendar) лютого
-uk_UA Name of month 03 (Gregorian Calendar) березня
-uk_UA Name of month 04 (Gregorian Calendar) квітня
-uk_UA Name of month 05 (Gregorian Calendar) травня
-uk_UA Name of month 06 (Gregorian Calendar) червня
-uk_UA Name of month 07 (Gregorian Calendar) липня
-uk_UA Name of month 08 (Gregorian Calendar) серпня
-uk_UA Name of month 09 (Gregorian Calendar) вересня
-uk_UA Name of month 10 (Gregorian Calendar) жовтня
-uk_UA Name of month 11 (Gregorian Calendar) листопада
-uk_UA Name of month 12 (Gregorian Calendar) грудня
+uk_UA Name of month 01 (Gregorian Calendar) Січень
+uk_UA Name of month 02 (Gregorian Calendar) Лютий
+uk_UA Name of month 03 (Gregorian Calendar) Березень
+uk_UA Name of month 04 (Gregorian Calendar) Квітень
+uk_UA Name of month 05 (Gregorian Calendar) Травень
+uk_UA Name of month 06 (Gregorian Calendar) Червень
+uk_UA Name of month 07 (Gregorian Calendar) Липень
+uk_UA Name of month 08 (Gregorian Calendar) Серпень
+uk_UA Name of month 09 (Gregorian Calendar) Вересень
+uk_UA Name of month 10 (Gregorian Calendar) Жовтень
+uk_UA Name of month 11 (Gregorian Calendar) Листопад
+uk_UA Name of month 12 (Gregorian Calendar) Грудень
uk_UA Name of month 01 (Islamic Calendar) Мухаррам
uk_UA Name of month 02 (Islamic Calendar) Сафар
uk_UA Name of month 03 (Islamic Calendar) Рабі I
@@ -6928,18 +6928,18 @@ zh Date and time short (Islamic Calendar) 29-7-18 下午12:31
zh Date and time medium (Islamic Calendar) 1429-7-18 下午12:31:00
zh Date and time long (Islamic Calendar) 1429年7月18日格林尼治标准时间+0000下午12时31分00秒
zh Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000下午12时31分00秒
-zh Name of month 01 (Gregorian Calendar) 1月
-zh Name of month 02 (Gregorian Calendar) 2月
-zh Name of month 03 (Gregorian Calendar) 3月
-zh Name of month 04 (Gregorian Calendar) 4月
-zh Name of month 05 (Gregorian Calendar) 5月
-zh Name of month 06 (Gregorian Calendar) 6月
-zh Name of month 07 (Gregorian Calendar) 7月
-zh Name of month 08 (Gregorian Calendar) 8月
-zh Name of month 09 (Gregorian Calendar) 9月
-zh Name of month 10 (Gregorian Calendar) 10月
-zh Name of month 11 (Gregorian Calendar) 11月
-zh Name of month 12 (Gregorian Calendar) 12月
+zh Name of month 01 (Gregorian Calendar) 一月
+zh Name of month 02 (Gregorian Calendar) 二月
+zh Name of month 03 (Gregorian Calendar) 三月
+zh Name of month 04 (Gregorian Calendar) 四月
+zh Name of month 05 (Gregorian Calendar) 五月
+zh Name of month 06 (Gregorian Calendar) 六月
+zh Name of month 07 (Gregorian Calendar) 七月
+zh Name of month 08 (Gregorian Calendar) 八月
+zh Name of month 09 (Gregorian Calendar) 九月
+zh Name of month 10 (Gregorian Calendar) 十月
+zh Name of month 11 (Gregorian Calendar) 十一月
+zh Name of month 12 (Gregorian Calendar) 十二月
zh Name of month 01 (Islamic Calendar) Muharram
zh Name of month 02 (Islamic Calendar) Safar
zh Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -6980,18 +6980,18 @@ zh_Hans Date and time short (Islamic Calendar) 29-7-18 下午12:31
zh_Hans Date and time medium (Islamic Calendar) 1429-7-18 下午12:31:00
zh_Hans Date and time long (Islamic Calendar) 1429年7月18日格林尼治标准时间+0000下午12时31分00秒
zh_Hans Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000下午12时31分00秒
-zh_Hans Name of month 01 (Gregorian Calendar) 1月
-zh_Hans Name of month 02 (Gregorian Calendar) 2月
-zh_Hans Name of month 03 (Gregorian Calendar) 3月
-zh_Hans Name of month 04 (Gregorian Calendar) 4月
-zh_Hans Name of month 05 (Gregorian Calendar) 5月
-zh_Hans Name of month 06 (Gregorian Calendar) 6月
-zh_Hans Name of month 07 (Gregorian Calendar) 7月
-zh_Hans Name of month 08 (Gregorian Calendar) 8月
-zh_Hans Name of month 09 (Gregorian Calendar) 9月
-zh_Hans Name of month 10 (Gregorian Calendar) 10月
-zh_Hans Name of month 11 (Gregorian Calendar) 11月
-zh_Hans Name of month 12 (Gregorian Calendar) 12月
+zh_Hans Name of month 01 (Gregorian Calendar) 一月
+zh_Hans Name of month 02 (Gregorian Calendar) 二月
+zh_Hans Name of month 03 (Gregorian Calendar) 三月
+zh_Hans Name of month 04 (Gregorian Calendar) 四月
+zh_Hans Name of month 05 (Gregorian Calendar) 五月
+zh_Hans Name of month 06 (Gregorian Calendar) 六月
+zh_Hans Name of month 07 (Gregorian Calendar) 七月
+zh_Hans Name of month 08 (Gregorian Calendar) 八月
+zh_Hans Name of month 09 (Gregorian Calendar) 九月
+zh_Hans Name of month 10 (Gregorian Calendar) 十月
+zh_Hans Name of month 11 (Gregorian Calendar) 十一月
+zh_Hans Name of month 12 (Gregorian Calendar) 十二月
zh_Hans Name of month 01 (Islamic Calendar) Muharram
zh_Hans Name of month 02 (Islamic Calendar) Safar
zh_Hans Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -7032,18 +7032,18 @@ zh_Hans_CN Date and time short (Islamic Calendar) 29-7-18 下午12:31
zh_Hans_CN Date and time medium (Islamic Calendar) 1429-7-18 下午12:31:00
zh_Hans_CN Date and time long (Islamic Calendar) 1429年7月18日格林尼治标准时间+0000下午12时31分00秒
zh_Hans_CN Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000下午12时31分00秒
-zh_Hans_CN Name of month 01 (Gregorian Calendar) 1月
-zh_Hans_CN Name of month 02 (Gregorian Calendar) 2月
-zh_Hans_CN Name of month 03 (Gregorian Calendar) 3月
-zh_Hans_CN Name of month 04 (Gregorian Calendar) 4月
-zh_Hans_CN Name of month 05 (Gregorian Calendar) 5月
-zh_Hans_CN Name of month 06 (Gregorian Calendar) 6月
-zh_Hans_CN Name of month 07 (Gregorian Calendar) 7月
-zh_Hans_CN Name of month 08 (Gregorian Calendar) 8月
-zh_Hans_CN Name of month 09 (Gregorian Calendar) 9月
-zh_Hans_CN Name of month 10 (Gregorian Calendar) 10月
-zh_Hans_CN Name of month 11 (Gregorian Calendar) 11月
-zh_Hans_CN Name of month 12 (Gregorian Calendar) 12月
+zh_Hans_CN Name of month 01 (Gregorian Calendar) 一月
+zh_Hans_CN Name of month 02 (Gregorian Calendar) 二月
+zh_Hans_CN Name of month 03 (Gregorian Calendar) 三月
+zh_Hans_CN Name of month 04 (Gregorian Calendar) 四月
+zh_Hans_CN Name of month 05 (Gregorian Calendar) 五月
+zh_Hans_CN Name of month 06 (Gregorian Calendar) 六月
+zh_Hans_CN Name of month 07 (Gregorian Calendar) 七月
+zh_Hans_CN Name of month 08 (Gregorian Calendar) 八月
+zh_Hans_CN Name of month 09 (Gregorian Calendar) 九月
+zh_Hans_CN Name of month 10 (Gregorian Calendar) 十月
+zh_Hans_CN Name of month 11 (Gregorian Calendar) 十一月
+zh_Hans_CN Name of month 12 (Gregorian Calendar) 十二月
zh_Hans_CN Name of month 01 (Islamic Calendar) Muharram
zh_Hans_CN Name of month 02 (Islamic Calendar) Safar
zh_Hans_CN Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -7084,18 +7084,18 @@ zh_Hans_HK Date and time short (Islamic Calendar) 29-7-18 下午12:31
zh_Hans_HK Date and time medium (Islamic Calendar) 1429-7-18 下午12:31:00
zh_Hans_HK Date and time long (Islamic Calendar) 1429年7月18日格林尼治标准时间+0000下午12时31分00秒
zh_Hans_HK Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000下午12时31分00秒
-zh_Hans_HK Name of month 01 (Gregorian Calendar) 1月
-zh_Hans_HK Name of month 02 (Gregorian Calendar) 2月
-zh_Hans_HK Name of month 03 (Gregorian Calendar) 3月
-zh_Hans_HK Name of month 04 (Gregorian Calendar) 4月
-zh_Hans_HK Name of month 05 (Gregorian Calendar) 5月
-zh_Hans_HK Name of month 06 (Gregorian Calendar) 6月
-zh_Hans_HK Name of month 07 (Gregorian Calendar) 7月
-zh_Hans_HK Name of month 08 (Gregorian Calendar) 8月
-zh_Hans_HK Name of month 09 (Gregorian Calendar) 9月
-zh_Hans_HK Name of month 10 (Gregorian Calendar) 10月
-zh_Hans_HK Name of month 11 (Gregorian Calendar) 11月
-zh_Hans_HK Name of month 12 (Gregorian Calendar) 12月
+zh_Hans_HK Name of month 01 (Gregorian Calendar) 一月
+zh_Hans_HK Name of month 02 (Gregorian Calendar) 二月
+zh_Hans_HK Name of month 03 (Gregorian Calendar) 三月
+zh_Hans_HK Name of month 04 (Gregorian Calendar) 四月
+zh_Hans_HK Name of month 05 (Gregorian Calendar) 五月
+zh_Hans_HK Name of month 06 (Gregorian Calendar) 六月
+zh_Hans_HK Name of month 07 (Gregorian Calendar) 七月
+zh_Hans_HK Name of month 08 (Gregorian Calendar) 八月
+zh_Hans_HK Name of month 09 (Gregorian Calendar) 九月
+zh_Hans_HK Name of month 10 (Gregorian Calendar) 十月
+zh_Hans_HK Name of month 11 (Gregorian Calendar) 十一月
+zh_Hans_HK Name of month 12 (Gregorian Calendar) 十二月
zh_Hans_HK Name of month 01 (Islamic Calendar) Muharram
zh_Hans_HK Name of month 02 (Islamic Calendar) Safar
zh_Hans_HK Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -7136,18 +7136,18 @@ zh_Hans_MO Date and time short (Islamic Calendar) 29-7-18 下午12:31
zh_Hans_MO Date and time medium (Islamic Calendar) 1429-7-18 下午12:31:00
zh_Hans_MO Date and time long (Islamic Calendar) 1429年7月18日格林尼治标准时间+0000下午12时31分00秒
zh_Hans_MO Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000下午12时31分00秒
-zh_Hans_MO Name of month 01 (Gregorian Calendar) 1月
-zh_Hans_MO Name of month 02 (Gregorian Calendar) 2月
-zh_Hans_MO Name of month 03 (Gregorian Calendar) 3月
-zh_Hans_MO Name of month 04 (Gregorian Calendar) 4月
-zh_Hans_MO Name of month 05 (Gregorian Calendar) 5月
-zh_Hans_MO Name of month 06 (Gregorian Calendar) 6月
-zh_Hans_MO Name of month 07 (Gregorian Calendar) 7月
-zh_Hans_MO Name of month 08 (Gregorian Calendar) 8月
-zh_Hans_MO Name of month 09 (Gregorian Calendar) 9月
-zh_Hans_MO Name of month 10 (Gregorian Calendar) 10月
-zh_Hans_MO Name of month 11 (Gregorian Calendar) 11月
-zh_Hans_MO Name of month 12 (Gregorian Calendar) 12月
+zh_Hans_MO Name of month 01 (Gregorian Calendar) 一月
+zh_Hans_MO Name of month 02 (Gregorian Calendar) 二月
+zh_Hans_MO Name of month 03 (Gregorian Calendar) 三月
+zh_Hans_MO Name of month 04 (Gregorian Calendar) 四月
+zh_Hans_MO Name of month 05 (Gregorian Calendar) 五月
+zh_Hans_MO Name of month 06 (Gregorian Calendar) 六月
+zh_Hans_MO Name of month 07 (Gregorian Calendar) 七月
+zh_Hans_MO Name of month 08 (Gregorian Calendar) 八月
+zh_Hans_MO Name of month 09 (Gregorian Calendar) 九月
+zh_Hans_MO Name of month 10 (Gregorian Calendar) 十月
+zh_Hans_MO Name of month 11 (Gregorian Calendar) 十一月
+zh_Hans_MO Name of month 12 (Gregorian Calendar) 十二月
zh_Hans_MO Name of month 01 (Islamic Calendar) Muharram
zh_Hans_MO Name of month 02 (Islamic Calendar) Safar
zh_Hans_MO Name of month 03 (Islamic Calendar) Rabiʻ I
@@ -7188,18 +7188,18 @@ zh_Hans_SG Date and time short (Islamic Calendar) 18/07/29 下午12:31
zh_Hans_SG Date and time medium (Islamic Calendar) 1429-7-18 下午12:31:00
zh_Hans_SG Date and time long (Islamic Calendar) 1429年7月18日下午12:31:00格林尼治标准时间+0000
zh_Hans_SG Date and time full (Islamic Calendar) 1429年7月18日星期一格林尼治标准时间+0000下午12时31分00秒
-zh_Hans_SG Name of month 01 (Gregorian Calendar) 1月
-zh_Hans_SG Name of month 02 (Gregorian Calendar) 2月
-zh_Hans_SG Name of month 03 (Gregorian Calendar) 3月
-zh_Hans_SG Name of month 04 (Gregorian Calendar) 4月
-zh_Hans_SG Name of month 05 (Gregorian Calendar) 5月
-zh_Hans_SG Name of month 06 (Gregorian Calendar) 6月
-zh_Hans_SG Name of month 07 (Gregorian Calendar) 7月
-zh_Hans_SG Name of month 08 (Gregorian Calendar) 8月
-zh_Hans_SG Name of month 09 (Gregorian Calendar) 9月
-zh_Hans_SG Name of month 10 (Gregorian Calendar) 10月
-zh_Hans_SG Name of month 11 (Gregorian Calendar) 11月
-zh_Hans_SG Name of month 12 (Gregorian Calendar) 12月
+zh_Hans_SG Name of month 01 (Gregorian Calendar) 一月
+zh_Hans_SG Name of month 02 (Gregorian Calendar) 二月
+zh_Hans_SG Name of month 03 (Gregorian Calendar) 三月
+zh_Hans_SG Name of month 04 (Gregorian Calendar) 四月
+zh_Hans_SG Name of month 05 (Gregorian Calendar) 五月
+zh_Hans_SG Name of month 06 (Gregorian Calendar) 六月
+zh_Hans_SG Name of month 07 (Gregorian Calendar) 七月
+zh_Hans_SG Name of month 08 (Gregorian Calendar) 八月
+zh_Hans_SG Name of month 09 (Gregorian Calendar) 九月
+zh_Hans_SG Name of month 10 (Gregorian Calendar) 十月
+zh_Hans_SG Name of month 11 (Gregorian Calendar) 十一月
+zh_Hans_SG Name of month 12 (Gregorian Calendar) 十二月
zh_Hans_SG Name of month 01 (Islamic Calendar) Muharram
zh_Hans_SG Name of month 02 (Islamic Calendar) Safar
zh_Hans_SG Name of month 03 (Islamic Calendar) Rabiʻ I
diff --git a/tests/ft_locales/ft_locales.cpp b/tests/ft_locales/ft_locales.cpp
index 2b3836f2..2f47b8ba 100644
--- a/tests/ft_locales/ft_locales.cpp
+++ b/tests/ft_locales/ft_locales.cpp
@@ -40,6 +40,19 @@ void Ft_Locales::cleanup()
{
}
+void Ft_Locales::testBug169305()
+{
+ MLocale locale1("ar_SA");
+ locale1.installTrCatalog("foo");
+ MLocale::setDefault(locale1);
+ QCOMPARE(qApp->layoutDirection(), Qt::RightToLeft);
+ MLocale locale;
+ locale.installTrCatalog("foo");
+ MLocale::setDefault(locale);
+ QCoreApplication::processEvents();
+ QCOMPARE(qApp->layoutDirection(), Qt::RightToLeft);
+}
+
void Ft_Locales::testMLocaleConstructor()
{
MLocale *z = 0;
@@ -395,17 +408,23 @@ void Ft_Locales::testMLocaleLanguageEndonym_data()
QTest::addColumn<QString>("locale_name");
QTest::addColumn<QString>("endonym_result");
+ QTest::newRow("fi")
+ << QString("fi")
+ << QString("suomi");
QTest::newRow("fi_FI")
<< QString("fi_FI")
<< QString("suomi");
QTest::newRow("de")
<< QString("de")
<< QString("Deutsch");
- // de_CH won’t work! That’s a bug in my opinion,
+#if (U_ICU_VERSION_MAJOR_NUM > 4) || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM >=4)
+ // de_CH needs a special fix because of
// see http://site.icu-project.org/design/resbund/issues
- //QTest::newRow("de_CH")
- // << QString("de_CH")
- // << QString("Deutsch");
+ // make sure that the fix works:
+ QTest::newRow("de_CH")
+ << QString("de_CH")
+ << QString("Deutsch");
+#endif
QTest::newRow("de_AT")
<< QString("de_AT")
<< QString("Deutsch");
@@ -436,11 +455,14 @@ void Ft_Locales::testMLocaleCountryEndonym_data()
QTest::newRow("fi_FI")
<< QString("fi_FI")
<< QString("Suomi");
- // de_CH won’t work! That’s a bug in my opinion,
+#if (U_ICU_VERSION_MAJOR_NUM > 4) || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM >=4)
+ // de_CH needs a special fix because of
// see http://site.icu-project.org/design/resbund/issues
- //QTest::newRow("de_CH")
- // << QString("de_CH")
- // << QString("Deutschland");
+ // make sure that the fix works:
+ QTest::newRow("de_CH")
+ << QString("de_CH")
+ << QString("Schweiz");
+#endif
QTest::newRow("de_AT")
<< QString("de_AT")
<< QString("Österreich");
diff --git a/tests/ft_locales/ft_locales.h b/tests/ft_locales/ft_locales.h
index bac293ed..46c270e4 100644
--- a/tests/ft_locales/ft_locales.h
+++ b/tests/ft_locales/ft_locales.h
@@ -60,8 +60,8 @@ private slots:
void init();
void cleanup();
- // these from ut_misc
- void testSettingsChanged(); // Must be the first test
+ void testBug169305();
+ void testSettingsChanged();
void testMLocaleConstructor();
void testMLocaleConstructorWithParams_data();
diff --git a/tests/stubs/mappletinstancemanager_stub.h b/tests/stubs/mappletinstancemanager_stub.h
index ecd74ca2..1a0aabe5 100644
--- a/tests/stubs/mappletinstancemanager_stub.h
+++ b/tests/stubs/mappletinstancemanager_stub.h
@@ -40,6 +40,7 @@ public:
virtual void operationComplete(const QString &operation, const QString &pkg, const QString &error);
virtual void setAppletTitle(const QString &title);
virtual void receiveOperation(QDBusPendingCallWatcher *watcher);
+ virtual void updateApplet(const MDesktopEntry &appletData);
virtual void init(const QString &mashupCanvasName, MDataStore *dataStore);
virtual bool instantiateApplet(MAppletId appletId);
virtual bool instantiateOutOfProcessApplet(MAppletInstanceData *data, const MAppletMetaData &metadata);
@@ -146,6 +147,13 @@ void MAppletInstanceManagerStub::receiveOperation(QDBusPendingCallWatcher *watch
stubMethodEntered("receiveOperation", params);
}
+void MAppletInstanceManagerStub::updateApplet(const MDesktopEntry &appletData)
+{
+ QList<ParameterBase *> params;
+ params.append(new Parameter<const MDesktopEntry& >(appletData));
+ stubMethodEntered("updateApplet", params);
+}
+
void MAppletInstanceManagerStub::init(const QString &mashupCanvasName, MDataStore *dataStore)
{
QList<ParameterBase *> params;
@@ -402,6 +410,11 @@ void MAppletInstanceManager::receiveOperation(QDBusPendingCallWatcher *watcher)
gMAppletInstanceManagerStub->receiveOperation(watcher);
}
+void MAppletInstanceManager::updateApplet(const MDesktopEntry &appletData)
+{
+ gMAppletInstanceManagerStub->updateApplet(appletData);
+}
+
void MAppletInstanceManager::init(const QString &mashupCanvasName, MDataStore *dataStore)
{
gMAppletInstanceManagerStub->init(mashupCanvasName, dataStore);
diff --git a/tests/stubs/mapplicationextensionmanager_stub.h b/tests/stubs/mapplicationextensionmanager_stub.h
index 463f35e8..5d57fe34 100644
--- a/tests/stubs/mapplicationextensionmanager_stub.h
+++ b/tests/stubs/mapplicationextensionmanager_stub.h
@@ -35,14 +35,17 @@ class MApplicationExtensionManagerStub : public StubBase {
virtual bool init();
virtual QList<MApplicationExtensionInterface *> extensions();
virtual void updateAvailableExtensions(const QString &path);
+ virtual void updateExtension(const MDesktopEntry &extensionData);
virtual QString dataPath() const;
virtual bool isInProcess(const MApplicationExtensionMetaData &metaData);
virtual bool createDataStore();
- virtual bool instantiateExtension(const MApplicationExtensionMetaData &metadata);
- virtual bool instantiateInProcessExtension(const QString &binary);
- virtual bool instantiateOutOfProcessExtension(const MApplicationExtensionMetaData &metadata);
+ virtual QSharedPointer<MDataStore> createSubDataStore(
+ const MApplicationExtensionMetaData &metaData);
+ virtual bool instantiateExtension(QSharedPointer<const MApplicationExtensionMetaData> &metadata);
+ virtual bool instantiateInProcessExtension(QSharedPointer<const MApplicationExtensionMetaData> &metadata);
+ virtual bool instantiateOutOfProcessExtension(QSharedPointer<const MApplicationExtensionMetaData> &metadata);
virtual void removeExtension(const MApplicationExtensionMetaData &metadata);
- virtual void removeInProcessExtension(const QString &library);
+ virtual void removeInProcessExtension(const MApplicationExtensionMetaData &metadata);
virtual void removeOutOfProcessExtension(const MApplicationExtensionMetaData &metadata);
virtual QString createApplicationExtensionDataFileName(const QString &interface) const;
};
@@ -83,6 +86,13 @@ void MApplicationExtensionManagerStub::updateAvailableExtensions(const QString &
stubMethodEntered("updateAvailableExtensions",params);
}
+void MApplicationExtensionManagerStub::updateExtension(const MDesktopEntry &extensionData)
+{
+ QList<ParameterBase*> params;
+ params.append( new Parameter<const MDesktopEntry& >(extensionData));
+ stubMethodEntered("updateExtension",params);
+}
+
QString MApplicationExtensionManagerStub::dataPath() const {
stubMethodEntered("dataPath");
return stubReturnValue<QString>("dataPath");
@@ -100,23 +110,33 @@ bool MApplicationExtensionManagerStub::createDataStore() {
return stubReturnValue<bool>("createDataStore");
}
-bool MApplicationExtensionManagerStub::instantiateExtension(const MApplicationExtensionMetaData &metadata) {
+QSharedPointer<MDataStore>
+MApplicationExtensionManagerStub::createSubDataStore(
+ const MApplicationExtensionMetaData &metadata) {
QList<ParameterBase*> params;
- params.append( new Parameter<const MApplicationExtensionMetaData & >(metadata));
+ params.append(
+ new Parameter<const MApplicationExtensionMetaData & >(metadata));
+ stubMethodEntered("createSubDataStore", params);
+ return stubReturnValue<QSharedPointer<MDataStore> >("createSubDataStore");
+}
+
+bool MApplicationExtensionManagerStub::instantiateExtension(QSharedPointer<const MApplicationExtensionMetaData> &metadata) {
+ QList<ParameterBase*> params;
+ params.append( new Parameter<QSharedPointer<const MApplicationExtensionMetaData> & >(metadata));
stubMethodEntered("instantiateExtension",params);
return stubReturnValue<bool>("instantiateExtension");
}
-bool MApplicationExtensionManagerStub::instantiateInProcessExtension(const QString &binary) {
+bool MApplicationExtensionManagerStub::instantiateInProcessExtension(QSharedPointer<const MApplicationExtensionMetaData> &metadata) {
QList<ParameterBase*> params;
- params.append( new Parameter<QString >(binary));
+ params.append( new Parameter<QSharedPointer<const MApplicationExtensionMetaData> & >(metadata));
stubMethodEntered("instantiateInProcessExtension",params);
return stubReturnValue<bool>("instantiateInProcessExtension");
}
-bool MApplicationExtensionManagerStub::instantiateOutOfProcessExtension(const MApplicationExtensionMetaData &metadata) {
+bool MApplicationExtensionManagerStub::instantiateOutOfProcessExtension(QSharedPointer<const MApplicationExtensionMetaData> &metadata) {
QList<ParameterBase*> params;
- params.append( new Parameter<const MApplicationExtensionMetaData & >(metadata));
+ params.append( new Parameter<QSharedPointer<const MApplicationExtensionMetaData> & >(metadata));
stubMethodEntered("instantiateOutOfProcessExtension",params);
return stubReturnValue<bool>("instantiateOutOfProcessExtension");
}
@@ -127,9 +147,9 @@ void MApplicationExtensionManagerStub::removeExtension(const MApplicationExtensi
stubMethodEntered("removeExtension",params);
}
-void MApplicationExtensionManagerStub::removeInProcessExtension(const QString &library) {
+void MApplicationExtensionManagerStub::removeInProcessExtension(const MApplicationExtensionMetaData &metadata) {
QList<ParameterBase*> params;
- params.append( new Parameter<QString >(library));
+ params.append( new Parameter<const MApplicationExtensionMetaData & >(metadata));
stubMethodEntered("removeInProcessExtension",params);
}
@@ -182,6 +202,10 @@ void MApplicationExtensionManager::updateAvailableExtensions(const QString &path
gMApplicationExtensionManagerStub->updateAvailableExtensions(path);
}
+void MApplicationExtensionManager::updateExtension(const MDesktopEntry &extensionData) {
+ gMApplicationExtensionManagerStub->updateExtension(extensionData);
+}
+
QString MApplicationExtensionManager::dataPath() const {
return gMApplicationExtensionManagerStub->dataPath();
}
@@ -194,15 +218,21 @@ bool MApplicationExtensionManager::createDataStore() {
return gMApplicationExtensionManagerStub->createDataStore();
}
-bool MApplicationExtensionManager::instantiateExtension(const MApplicationExtensionMetaData &metadata) {
+QSharedPointer<MDataStore>
+MApplicationExtensionManager::createSubDataStore(
+ const MApplicationExtensionMetaData &metadata) {
+ return gMApplicationExtensionManagerStub->createSubDataStore(metadata);
+}
+
+bool MApplicationExtensionManager::instantiateExtension(QSharedPointer<const MApplicationExtensionMetaData> &metadata) {
return gMApplicationExtensionManagerStub->instantiateExtension(metadata);
}
-bool MApplicationExtensionManager::instantiateInProcessExtension(const QString &binary) {
- return gMApplicationExtensionManagerStub->instantiateInProcessExtension(binary);
+bool MApplicationExtensionManager::instantiateInProcessExtension(QSharedPointer<const MApplicationExtensionMetaData> &metadata) {
+ return gMApplicationExtensionManagerStub->instantiateInProcessExtension(metadata);
}
-bool MApplicationExtensionManager::instantiateOutOfProcessExtension(const MApplicationExtensionMetaData &metadata) {
+bool MApplicationExtensionManager::instantiateOutOfProcessExtension(QSharedPointer<const MApplicationExtensionMetaData> &metadata) {
return gMApplicationExtensionManagerStub->instantiateOutOfProcessExtension(metadata);
}
@@ -210,8 +240,8 @@ void MApplicationExtensionManager::removeExtension(const MApplicationExtensionMe
gMApplicationExtensionManagerStub->removeExtension(metadata);
}
-void MApplicationExtensionManager::removeInProcessExtension(const QString &library) {
- gMApplicationExtensionManagerStub->removeInProcessExtension(library);
+void MApplicationExtensionManager::removeInProcessExtension(const MApplicationExtensionMetaData &metadata) {
+ gMApplicationExtensionManagerStub->removeInProcessExtension(metadata);
}
void MApplicationExtensionManager::removeOutOfProcessExtension(const MApplicationExtensionMetaData &metadata) {
diff --git a/tests/stubs/mextensionwatcher_stub.h b/tests/stubs/mextensionwatcher_stub.h
new file mode 100644
index 00000000..f11e9384
--- /dev/null
+++ b/tests/stubs/mextensionwatcher_stub.h
@@ -0,0 +1,75 @@
+#ifndef MEXTENSIONWATCHER_STUB
+#define MEXTENSIONWATCHER_STUB
+
+#include "mextensionwatcher.h"
+#include <stubbase.h>
+
+
+// 1. DECLARE STUB
+// FIXME - stubgen is not yet finished
+class MExtensionWatcherStub : public StubBase {
+ public:
+ virtual void MExtensionWatcherConstructor();
+ virtual void MExtensionWatcherDestructor();
+ virtual void addExtension(QSharedPointer<const MDesktopEntry> extension);
+ virtual void removeExtension(const QString &fileName);
+ virtual void notifyDataChanged(const QString &path) const;
+ QFileSystemWatcher watcher ;
+ QHash<QString, QSharedPointer<const MDesktopEntry> > extensionsToWatch ;
+};
+
+// 2. IMPLEMENT STUB
+void MExtensionWatcherStub::MExtensionWatcherConstructor() {
+
+}
+void MExtensionWatcherStub::MExtensionWatcherDestructor() {
+
+}
+void MExtensionWatcherStub::addExtension(QSharedPointer<const MDesktopEntry> extension) {
+ QList<ParameterBase*> params;
+ params.append( new Parameter<QSharedPointer<const MDesktopEntry> >(extension));
+ stubMethodEntered("addExtension",params);
+}
+
+void MExtensionWatcherStub::removeExtension(const QString &fileName) {
+ QList<ParameterBase*> params;
+ params.append( new Parameter<const QString & >(fileName));
+ stubMethodEntered("removeExtension",params);
+}
+
+void MExtensionWatcherStub::notifyDataChanged(const QString &path) const {
+ QList<ParameterBase*> params;
+ params.append( new Parameter<const QString & >(path));
+ stubMethodEntered("notifyDataChanged",params);
+}
+
+
+
+// 3. CREATE A STUB INSTANCE
+MExtensionWatcherStub gDefaultMExtensionWatcherStub;
+MExtensionWatcherStub* gMExtensionWatcherStub = &gDefaultMExtensionWatcherStub;
+
+
+// 4. CREATE A PROXY WHICH CALLS THE STUB
+MExtensionWatcher::MExtensionWatcher() {
+ gMExtensionWatcherStub->MExtensionWatcherConstructor();
+}
+
+MExtensionWatcher::~MExtensionWatcher() {
+ gMExtensionWatcherStub->MExtensionWatcherDestructor();
+}
+
+void MExtensionWatcher::addExtension(QSharedPointer<const MDesktopEntry> extension) {
+ gMExtensionWatcherStub->addExtension(extension);
+}
+
+void MExtensionWatcher::removeExtension(const QString &fileName) {
+ gMExtensionWatcherStub->removeExtension(fileName);
+}
+
+void MExtensionWatcher::notifyDataChanged(const QString &path) const {
+ gMExtensionWatcherStub->notifyDataChanged(path);
+}
+
+
+#endif
diff --git a/tests/tests.pro b/tests/tests.pro
index c0e999d3..a5283ecd 100644
--- a/tests/tests.pro
+++ b/tests/tests.pro
@@ -59,10 +59,11 @@ SUBDIRS = \
ut_mwidget \
ut_mwidgetview \
ut_mwindow \
- ut_mphysics2dpanning \
+# ut_mphysics2dpanning \ Needs refactoring
ut_mlabel \
ut_mlogicalvalues \
ut_mdesktopentry \
+ ut_mextensionwatcher \
ut_mcontainer \
ut_minfobanner \
ut_mwidgetcontroller \
@@ -147,6 +148,7 @@ SUBDIRS = \
ut_mapplicationextensionarea \
ut_mapplicationextensionareaview \
ut_mapplicationextensionmanager \
+ ut_mapplicationextensionmetadata \
ut_mextensionhandle \
ut_mextensionhandleview \
ut_mtapandholdrecognizer \
@@ -154,6 +156,9 @@ SUBDIRS = \
ut_mservicefwgen \
# ut_mstatusbar \ // Unstable. "Randomly" crashes on clean up, when detroying its MApplication instance.
ut_mpanrecognizer \
+ ut_mstatusbarview \
+ ut_mabstractitemmodel \
+ ut_phonenumberformatting \
# enable only when we have icu available
diff --git a/tests/ut_mabstractitemmodel/.gitignore b/tests/ut_mabstractitemmodel/.gitignore
new file mode 100644
index 00000000..8ca87598
--- /dev/null
+++ b/tests/ut_mabstractitemmodel/.gitignore
@@ -0,0 +1 @@
+ut_mabstractitemmodel
diff --git a/tests/ut_mabstractitemmodel/ut_mabstractitemmodel.cpp b/tests/ut_mabstractitemmodel/ut_mabstractitemmodel.cpp
new file mode 100644
index 00000000..cbf75dca
--- /dev/null
+++ b/tests/ut_mabstractitemmodel/ut_mabstractitemmodel.cpp
@@ -0,0 +1,229 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "ut_mabstractitemmodel.h"
+
+#include <MAbstractItemModel>
+
+#include <QtTest/QtTest>
+
+class Ut_TestModel : public MAbstractItemModel
+{
+public:
+ Ut_TestModel()
+ : MAbstractItemModel()
+ {
+ groupTitles << "Group 1";
+ groupTitles << "Group 2";
+ groupTitles << "Group 3";
+ groupTitles << "Group 4";
+ groupTitles << "Group 5";
+
+ items[0] << "Item 1.1";
+ items[0] << "Item 1.2";
+ items[0] << "Item 1.3";
+ items[0] << "Item 1.4";
+
+ items[1] << "Item 2.1";
+ items[1] << "Item 2.2";
+ items[1] << "Item 2.3";
+ items[1] << "Item 2.4";
+ items[1] << "Item 2.5";
+
+ items[2] << "Item 3.1";
+ items[2] << "Item 3.2";
+ items[2] << "Item 3.3";
+
+ items[3] << "Item 4.1";
+ items[3] << "Item 4.2";
+ items[3] << "Item 4.3";
+ items[3] << "Item 4.4";
+ items[3] << "Item 4.5";
+ items[3] << "Item 4.6";
+
+ items[4] << "Item 5.1";
+ items[4] << "Item 5.2";
+ items[4] << "Item 5.3";
+ items[4] << "Item 5.4";
+ }
+
+ virtual ~Ut_TestModel() {}
+
+ int groupCount() const
+ {
+ return groupTitles.count();
+ }
+
+ int rowCountInGroup(int group = -1) const
+ {
+ if (!isGrouped()) {
+ int totalCount = 0;
+ for (int i = 0; i < items.count(); i++) {
+ totalCount += items[i].count();
+ }
+ return totalCount;
+ }
+ return items[group].count();
+ }
+
+ QString groupTitle(int group) const
+ {
+ return groupTitles[group];
+ }
+
+ QVariant itemData(int row, int group, int role = Qt::DisplayRole) const
+ {
+ if (role == Qt::DisplayRole) {
+ if (isGrouped()) {
+ return items[group][row];
+ } else {
+ group = 0;
+ int groupSize = items[0].count();
+ while (row >= groupSize) {
+ group++;
+ row -= groupSize;
+ groupSize = items[group].count();
+ }
+ return items[group].at(row);
+ }
+ }
+
+ return QVariant();
+ }
+
+private:
+ QStringList groupTitles;
+ QMap<int, QStringList> items;
+};
+
+Ut_MAbstractItemModel::Ut_MAbstractItemModel()
+{
+}
+
+void Ut_MAbstractItemModel::initTestCase()
+{
+}
+
+void Ut_MAbstractItemModel::cleanupTestCase()
+{
+}
+
+void Ut_MAbstractItemModel::init()
+{
+ model = new Ut_TestModel;
+}
+
+void Ut_MAbstractItemModel::cleanup()
+{
+ delete model;
+}
+
+void Ut_MAbstractItemModel::testFlatRowCount()
+{
+ QCOMPARE(model->rowCountInGroup(), 22);
+}
+
+void Ut_MAbstractItemModel::testGroupCount()
+{
+ model->setGrouped(true);
+ QCOMPARE(model->groupCount(), 5);
+}
+
+void Ut_MAbstractItemModel::testGroup1Count()
+{
+ model->setGrouped(true);
+ QCOMPARE(model->rowCountInGroup(1), 5);
+}
+
+void Ut_MAbstractItemModel::testGroup3Count()
+{
+ model->setGrouped(true);
+ QCOMPARE(model->rowCountInGroup(3), 6);
+}
+
+void Ut_MAbstractItemModel::testGroup4Count()
+{
+ model->setGrouped(true);
+ QCOMPARE(model->rowCountInGroup(4), 4);
+}
+
+void Ut_MAbstractItemModel::testItemAtFlatRow3()
+{
+ QCOMPARE(model->itemData(3, -1).toString(), QString("Item 1.4"));
+}
+
+void Ut_MAbstractItemModel::testItemAtFlatRow6()
+{
+ QCOMPARE(model->itemData(6, -1).toString(), QString("Item 2.3"));
+}
+
+void Ut_MAbstractItemModel::testItemAtFlatRow9()
+{
+ QCOMPARE(model->itemData(9, -1).toString(), QString("Item 3.1"));
+}
+
+void Ut_MAbstractItemModel::testItemAtFlatRow15()
+{
+ QCOMPARE(model->itemData(15, -1).toString(), QString("Item 4.4"));
+}
+
+void Ut_MAbstractItemModel::testItemAtRow3InGroup0()
+{
+ model->setGrouped(true);
+ QCOMPARE(model->itemData(3, 0).toString(), QString("Item 1.4"));
+}
+
+void Ut_MAbstractItemModel::testItemAtRow2InGroup1()
+{
+ model->setGrouped(true);
+ QCOMPARE(model->itemData(2, 1).toString(), QString("Item 2.3"));
+}
+
+void Ut_MAbstractItemModel::testItemAtRow5InGroup3()
+{
+ model->setGrouped(true);
+ QCOMPARE(model->itemData(5, 3).toString(), QString("Item 4.6"));
+}
+
+void Ut_MAbstractItemModel::testItemAtRow0InGroup4()
+{
+ model->setGrouped(true);
+ QCOMPARE(model->itemData(0, 4).toString(), QString("Item 5.1"));
+}
+
+void Ut_MAbstractItemModel::testGroup0Title()
+{
+ model->setGrouped(true);
+ QCOMPARE(model->groupTitle(0), QString("Group 1"));
+}
+
+void Ut_MAbstractItemModel::testGroup3Title()
+{
+ model->setGrouped(true);
+ QCOMPARE(model->groupTitle(3), QString("Group 4"));
+}
+
+void Ut_MAbstractItemModel::testGroup4Title()
+{
+ model->setGrouped(true);
+ QCOMPARE(model->groupTitle(4), QString("Group 5"));
+}
+
+
+QTEST_APPLESS_MAIN(Ut_MAbstractItemModel);
diff --git a/tests/ut_mabstractitemmodel/ut_mabstractitemmodel.h b/tests/ut_mabstractitemmodel/ut_mabstractitemmodel.h
new file mode 100644
index 00000000..17c70872
--- /dev/null
+++ b/tests/ut_mabstractitemmodel/ut_mabstractitemmodel.h
@@ -0,0 +1,64 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+
+#ifndef UT_MABSTRACTITEMMODEL_H
+#define UT_MABSTRACTITEMMODEL_H
+
+#include <QObject>
+
+class Ut_TestModel;
+
+class Ut_MAbstractItemModel : public QObject
+{
+ Q_OBJECT
+public:
+ Ut_MAbstractItemModel();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testFlatRowCount();
+ void testGroupCount();
+ void testGroup1Count();
+ void testGroup3Count();
+ void testGroup4Count();
+
+ void testItemAtFlatRow3();
+ void testItemAtFlatRow6();
+ void testItemAtFlatRow9();
+ void testItemAtFlatRow15();
+
+ void testItemAtRow3InGroup0();
+ void testItemAtRow2InGroup1();
+ void testItemAtRow5InGroup3();
+ void testItemAtRow0InGroup4();
+
+ void testGroup0Title();
+ void testGroup3Title();
+ void testGroup4Title();
+
+private:
+ Ut_TestModel *model;
+};
+
+#endif // UT_MABSTRACTITEMMODEL_H
diff --git a/tests/ut_mabstractitemmodel/ut_mabstractitemmodel.pro b/tests/ut_mabstractitemmodel/ut_mabstractitemmodel.pro
new file mode 100644
index 00000000..4a078c18
--- /dev/null
+++ b/tests/ut_mabstractitemmodel/ut_mabstractitemmodel.pro
@@ -0,0 +1,11 @@
+include(../common_top.pri)
+
+TARGET = ut_mabstractitemmodel
+
+INCLUDEPATH += ../../src/corelib/widgets \
+
+HEADERS += ut_mabstractitemmodel.h \
+
+SOURCES += ut_mabstractitemmodel.cpp \
+
+include(../common_bot.pri)
diff --git a/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.cpp b/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.cpp
index b08b2376..586288c3 100644
--- a/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.cpp
+++ b/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.cpp
@@ -31,6 +31,8 @@
#include "mappletinstancedata.h"
#include "mappletmessage.h"
#include "mapplethandle_stub.h"
+#include "mextensionhandle_stub.h"
+#include "mextensionwatcher_stub.h"
#include "mbutton.h"
#include "mappletmetadata.h"
#include "ut_mappletinstancemanager.h"
@@ -362,6 +364,7 @@ void Ut_MAppletInstanceManager::init()
defaultDataStore->createValue(QString("5/title"), QVariant("Title 5"));
defaultDataStore->createValue(QString("5/sizeLandscape"), QVariant("105 205"));
defaultDataStore->createValue(QString("5/sizePortrait"), QVariant("105 205"));
+
existingFiles.clear();
existingFiles.append("/tmp/testapplet1.desktop");
existingFiles.append("/tmp/testapplet4.desktop");
@@ -412,6 +415,33 @@ void Ut_MAppletInstanceManager::cleanup()
defaultDataStore = 0;
}
+void Ut_MAppletInstanceManager::testOutOfProcessAppletUpdate()
+{
+ outOfProcess = true;
+
+ // Create AppletInstanceCollection to verify created applet instances
+ AppletInstanceCollection collection;
+ QObject::connect(manager, SIGNAL(appletInstantiated(QGraphicsWidget *, MDataStore &)), &collection, SLOT(addInstance(QGraphicsWidget *, MDataStore &)));
+
+ // Verify that the restoration process does not return an error
+ QVERIFY(manager->restoreApplets());
+
+ // Make sure the two applet instances were created
+ QCOMPARE(collection.count(), 2);
+
+ connect(this, SIGNAL(extensionChanged(const MDesktopEntry &)), manager, SLOT(updateApplet(const MDesktopEntry &)));
+
+ MAppletInstanceData testApplet;
+ QString testFile = "/tmp/testapplet1.desktop";
+ testApplet.desktopFile = testFile;
+ MAppletMetaData testMetaData(testFile);
+ emit extensionChanged(testMetaData);
+
+ // The manager asks the extension to do a reinit == kill+init
+ QList<MethodCall *> reinitCalls = gMExtensionHandleStub->stubCallsTo("reinit");
+ QCOMPARE(reinitCalls.length(), 1);
+}
+
void Ut_MAppletInstanceManager::testInProcessAppletRestoration()
{
@@ -548,6 +578,20 @@ void Ut_MAppletInstanceManager::testAppletInstanceRemoval()
QCOMPARE(gMAppletSettingsStub->stubCallCount("removeInstanceSettingValues"), 1);
QCOMPARE(gMAppletSettingsStub->stubLastCallTo("mAppletSettingsConstructor").parameter<QString>(0), QString("/tmp/testapplet4.desktop"));
QCOMPARE(gMAppletSettingsStub->stubLastCallTo("mAppletSettingsConstructor").parameter<MAppletId>(1).toString(), appletId.toString());
+
+ // verify that applet metadata is removed from the extension watcher
+ // when the last instance is removed, but not before that
+ int removeFromWatcherCallCount = gMExtensionWatcherStub->stubCallCount("removeExtension");
+ MAppletId appletId2("ut_mappletinstancemanager", "testmanager", 2);
+ MAppletId appletId3("ut_mappletinstancemanager", "testmanager", 3);
+ QVERIFY(manager->instantiateApplet("/tmp/testapplet4.desktop"));
+ QVERIFY(manager->instantiateApplet("/tmp/testapplet4.desktop"));
+ QVERIFY(manager->removeApplet(appletId2));
+ QCOMPARE(gMExtensionWatcherStub->stubCallCount("removeExtension"),
+ removeFromWatcherCallCount);
+ QVERIFY(manager->removeApplet(appletId3));
+ QCOMPARE(gMExtensionWatcherStub->stubCallCount("removeExtension"),
+ removeFromWatcherCallCount + 1);
}
void Ut_MAppletInstanceManager::testAppletUninstallation()
diff --git a/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.h b/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.h
index 55c6531d..6d894ed5 100644
--- a/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.h
+++ b/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.h
@@ -79,7 +79,9 @@ signals:
void appletUninstalled(const QString &desktopFile);
void operationComplete(const QString &operation, const QString &pkg, const QString &error);
void receiveOperation(QDBusPendingCallWatcher *watcher);
-
+ // Used by the extesnion watcher
+ void fileChanged(const QString &path);
+ void extensionChanged(const MDesktopEntry &appletData) const;
private slots:
void initTestCase();
void cleanupTestCase();
@@ -87,6 +89,7 @@ private slots:
void init();
void cleanup();
+ void testOutOfProcessAppletUpdate();
void testInProcessAppletRestoration();
void testOutOfProcessAppletRestoration();
void testAppletDataStoring();
diff --git a/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.pro b/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.pro
index a4ee760a..7fc28590 100644
--- a/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.pro
+++ b/tests/ut_mappletinstancemanager/ut_mappletinstancemanager.pro
@@ -3,6 +3,7 @@ include(../common_mextensions.pri)
INCLUDEPATH += \
$$MSRCDIR/events \
+ $$MSRCDIR/extensions
QT += core network gui svg dbus
@@ -26,6 +27,6 @@ HEADERS += \
$$MSRCDIR/extensions/mashup/mashup/mappletinstancemanagerdbusadaptor.h \
$$MSRCDIR/extensions/applicationextension/mextensionhandle.h \
$$MSRCDIR/extensions/applicationextension/mextensionhandlemodel.h \
- $$MSRCDIR/events/morientationtracker.h
+ $$MSRCDIR/extensions/mextensionwatcher.h
include(../common_bot.pri)
diff --git a/tests/ut_mapplicationextensionarea/ut_mapplicationextensionarea.pro b/tests/ut_mapplicationextensionarea/ut_mapplicationextensionarea.pro
index 8ad34612..9d81dcba 100644
--- a/tests/ut_mapplicationextensionarea/ut_mapplicationextensionarea.pro
+++ b/tests/ut_mapplicationextensionarea/ut_mapplicationextensionarea.pro
@@ -5,12 +5,14 @@ INCLUDEPATH += \
$$MSRCDIR/corelib/widgets \
$$MSRCDIR/corelib/style \
$$MSRCDIR/corelib/core \
+ $$MSRCDIR/extensions
# unit test and unit classes
SOURCES += \
ut_mapplicationextensionarea.cpp \
$$MSRCDIR/extensions/applicationextension/mapplicationextensionarea.cpp \
- $$MSRCDIR/extensions/applicationextension/mextensionarea.cpp
+ $$MSRCDIR/extensions/applicationextension/mextensionarea.cpp \
+ $$MSRCDIR/extensions/mextensionwatcher.cpp
# service classes
SOURCES += \
@@ -21,6 +23,7 @@ HEADERS += \
ut_mapplicationextensionarea.h \
$$MSRCDIR/extensions/applicationextension/mapplicationextensionarea.h \
$$MSRCDIR/extensions/applicationextension/mextensionarea.h \
- $$MSRCDIR/extensions/applicationextension/mapplicationextensionmanager.h
+ $$MSRCDIR/extensions/applicationextension/mapplicationextensionmanager.h \
+ $$MSRCDIR/extensions/mextensionwatcher.h
include(../common_bot.pri)
diff --git a/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.cpp b/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.cpp
index e8c42b83..52c2b051 100644
--- a/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.cpp
+++ b/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.cpp
@@ -166,6 +166,12 @@ void Ut_MApplicationExtensionManager::setupTestSubject(const QString &inProcessF
connect(manager, SIGNAL(extensionRemoved(MApplicationExtensionInterface *)), &signalListener, SLOT(extensionRemoved(MApplicationExtensionInterface *)));
connect(manager, SIGNAL(widgetCreated(QGraphicsWidget*, MDataStore&)), &signalListener, SLOT(widgetCreated(QGraphicsWidget*, MDataStore&)));
connect(manager, SIGNAL(widgetRemoved(QGraphicsWidget*)), &signalListener, SLOT(widgetRemoved(QGraphicsWidget*)));
+ connect(this,
+ SIGNAL(extensionChanged(
+ const MDesktopEntry &)),
+ manager,
+ SLOT(updateExtension(
+ const MDesktopEntry &)));
}
void Ut_MApplicationExtensionManager::setupGoodExtension(bool success, QGraphicsWidget* widget, const QString &name)
@@ -234,35 +240,45 @@ void Ut_MApplicationExtensionManager::testMonitorRemoveExtension()
void Ut_MApplicationExtensionManager::testInstantiateInProcessExtensionWhichDoesNotExist()
{
- QCOMPARE(manager->instantiateInProcessExtension("test"), false);
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ QCOMPARE(manager->instantiateInProcessExtension(metaData), false);
QCOMPARE(signalListener.instantiatedExtensions.count(), 0);
}
void Ut_MApplicationExtensionManager::testInstantiateInProcessExtensionWhichDoesNotImplementGivenInterface()
{
gQPluginLoaderInstances.append(new QObject);
- QCOMPARE(manager->instantiateInProcessExtension("test"), false);
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ QCOMPARE(manager->instantiateInProcessExtension(metaData), false);
QCOMPARE(signalListener.instantiatedExtensions.count(), 0);
}
void Ut_MApplicationExtensionManager::testInstantiateInProcessExtensionWhichDoesNotDeriveFromBaseInterface()
{
gQPluginLoaderInstances.append(new BadExtension);
- QCOMPARE(manager->instantiateInProcessExtension("test"), false);
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ QCOMPARE(manager->instantiateInProcessExtension(metaData), false);
QCOMPARE(signalListener.instantiatedExtensions.count(), 0);
}
void Ut_MApplicationExtensionManager::testInstantiateInProcessExtensionWhichFails()
{
setupGoodExtension(false);
- QCOMPARE(manager->instantiateInProcessExtension("test"), false);
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ QCOMPARE(manager->instantiateInProcessExtension(metaData), false);
QCOMPARE(signalListener.instantiatedExtensions.count(), 0);
}
void Ut_MApplicationExtensionManager::testInstantiateInProcessExtensionWhichSucceedsWithoutWidget()
{
setupGoodExtension();
- QCOMPARE(manager->instantiateInProcessExtension("test"), true);
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ QCOMPARE(manager->instantiateInProcessExtension(metaData), true);
QCOMPARE(signalListener.instantiatedExtensions.count(), 1);
QCOMPARE(signalListener.instantiatedExtensions.at(0), extensions.at(0));
QCOMPARE(signalListener.instantiatedExtensions.at(0)->widget(), (QGraphicsWidget *)NULL);
@@ -274,7 +290,9 @@ void Ut_MApplicationExtensionManager::testInstantiateInProcessExtensionWhichSucc
{
QGraphicsWidget extensionWidget;
setupGoodExtension(true, &extensionWidget);
- QCOMPARE(manager->instantiateInProcessExtension("test"), true);
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ QCOMPARE(manager->instantiateInProcessExtension(metaData), true);
QCOMPARE(signalListener.instantiatedExtensions.count(), 1);
QCOMPARE(signalListener.instantiatedExtensions.at(0), extensions.at(0));
QCOMPARE(signalListener.instantiatedExtensions.at(0)->widget(), &extensionWidget);
@@ -284,7 +302,8 @@ void Ut_MApplicationExtensionManager::testInstantiateInProcessExtensionWhichSucc
void Ut_MApplicationExtensionManager::testInstantiateOutOfProcessExtension()
{
- const MApplicationExtensionMetaData metaData("test.desktop");
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
manager->instantiateOutOfProcessExtension(metaData);
QCOMPARE(signalListener.createdWidgets.count(), 1);
}
@@ -293,9 +312,11 @@ void Ut_MApplicationExtensionManager::testRemoveInProcessExtension()
{
QGraphicsWidget extensionWidget;
setupGoodExtension(true, &extensionWidget);
- manager->instantiateInProcessExtension("test");
-
- manager->removeInProcessExtension("test");
+ gMApplicationExtensionMetaDataStub->stubSetReturnValue("extensionBinary", QString("test"));
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ manager->instantiateInProcessExtension(metaData);
+ manager->removeInProcessExtension(*metaData);
QCOMPARE(signalListener.removedExtensions.count(), 1);
QCOMPARE(signalListener.removedExtensions.at(0).first, extensions.at(0));
}
@@ -304,24 +325,54 @@ void Ut_MApplicationExtensionManager::testRemoveNonExistentInProcessExtension()
{
QGraphicsWidget extensionWidget;
setupGoodExtension(true, &extensionWidget);
- manager->instantiateInProcessExtension("test");
-
- manager->removeInProcessExtension("non-existent");
+ const QString TEST_METADATA("test");
+ const QString NONEXISTENT_METADATA("non-existent");
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ gMApplicationExtensionMetaDataStub->stubSetReturnValue(
+ "extensionBinary", QString(TEST_METADATA));
+ manager->instantiateInProcessExtension(metaData);
+ const MApplicationExtensionMetaData
+ nonexistentMetaData(NONEXISTENT_METADATA);
+ gMApplicationExtensionMetaDataStub->stubSetReturnValue(
+ "extensionBinary", QString(NONEXISTENT_METADATA));
+ manager->removeInProcessExtension(nonexistentMetaData);
QCOMPARE(signalListener.removedExtensions.count(), 0);
}
-void Ut_MApplicationExtensionManager::testInProcessExtensionFiltering()
+void Ut_MApplicationExtensionManager::testUpdateInProcessExtension()
{
- const MApplicationExtensionMetaData metaData("test.desktop");
QGraphicsWidget extensionWidget;
setupGoodExtension(true, &extensionWidget);
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ manager->instantiateInProcessExtension(metaData);
+ int createdWidgetCount = 1;
+ int createdExtensionCount = 1;
+ QCOMPARE(signalListener.createdWidgets.count(), createdWidgetCount);
+ QCOMPARE(signalListener.instantiatedExtensions.count(),
+ createdExtensionCount);
+ setupGoodExtension(true, &extensionWidget);
+ gDefaultMApplicationExtensionMetaDataStub.stubSetReturnValue("runnerBinary", QString(""));
+ emit extensionChanged(*metaData);
+ QCOMPARE(signalListener.removedExtensions.count(), 1);
+ QCOMPARE(signalListener.removedWidgets.count(), 1);
+ QCOMPARE(signalListener.createdWidgets.count(), createdWidgetCount + 1);
+ QCOMPARE(signalListener.instantiatedExtensions.count(),
+ createdExtensionCount + 1);
+}
+void Ut_MApplicationExtensionManager::testInProcessExtensionFiltering()
+{
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test.desktop"));
+ QGraphicsWidget extensionWidget;
+ setupGoodExtension(true, &extensionWidget);
// Test that not allowing test.desktop in-process but allowing it out-of-process does nothing
gDefaultMApplicationExtensionMetaDataStub.stubSetReturnValue("runnerBinary", QString(""));
setupTestSubject("$^", "^test.desktop$");
manager->instantiateExtension(metaData);
QCOMPARE(signalListener.instantiatedExtensions.count(), 0);
-
// Test that allowing test.desktop in-process but not allowing it out-of-process instantiates the extension
setupTestSubject("^test.desktop$", "$^");
manager->instantiateExtension(metaData);
@@ -330,7 +381,8 @@ void Ut_MApplicationExtensionManager::testInProcessExtensionFiltering()
void Ut_MApplicationExtensionManager::testOutOfProcessExtensionFiltering()
{
- const MApplicationExtensionMetaData metaData("test.desktop");
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test.desktop"));
// Test that not allowing test.desktop out-of-process but allowing it in-process does nothing
gDefaultMApplicationExtensionMetaDataStub.stubSetReturnValue("runnerBinary", QString("test"));
@@ -348,21 +400,31 @@ void Ut_MApplicationExtensionManager::testRequestForAllInProcessExtensionsReturn
{
QGraphicsWidget extensionWidget1;
setupGoodExtension(true, &extensionWidget1);
- QCOMPARE(manager->instantiateInProcessExtension("test"), true);
+ gDefaultMApplicationExtensionMetaDataStub.stubSetExtensionBinaryMultiple("test");
+ gDefaultMApplicationExtensionMetaDataStub.stubSetExtensionBinaryMultiple("testanother");
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ QCOMPARE(manager->instantiateInProcessExtension(metaData), true);
QGraphicsWidget extensionWidget2;
setupGoodExtension(true, &extensionWidget2);
- QCOMPARE(manager->instantiateInProcessExtension("testanother"), true);
+ QSharedPointer<const MApplicationExtensionMetaData> metaData2(
+ new MApplicationExtensionMetaData("testanother"));
+ QCOMPARE(manager->instantiateInProcessExtension(metaData2), true);
QList<MApplicationExtensionInterface*> listOfExtensions = manager->extensions();
QCOMPARE(listOfExtensions.count(), 2);
- QCOMPARE(signalListener.instantiatedExtensions.at(0), listOfExtensions.at(0));
- QCOMPARE(signalListener.instantiatedExtensions.at(1), listOfExtensions.at(1));
+ QVERIFY(signalListener.instantiatedExtensions.contains(
+ listOfExtensions.at(0)));
+ QVERIFY(signalListener.instantiatedExtensions.contains(
+ listOfExtensions.at(1)));
}
void Ut_MApplicationExtensionManager::testAddWidgetInProcessExtensionWithoutWidget()
{
setupGoodExtension();
- manager->instantiateInProcessExtension("test");
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ manager->instantiateInProcessExtension(metaData);
QCOMPARE(signalListener.createdWidgets.count(), 0);
}
@@ -370,7 +432,9 @@ void Ut_MApplicationExtensionManager::testAddWidgetInProcessExtensionWithWidget(
{
QGraphicsWidget extensionWidget;
setupGoodExtension(true, &extensionWidget);
- manager->instantiateInProcessExtension("test");
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ manager->instantiateInProcessExtension(metaData);
QCOMPARE(signalListener.createdWidgets.count(), 1);
QCOMPARE(signalListener.createdWidgets.at(0), &extensionWidget);
}
@@ -379,18 +443,21 @@ void Ut_MApplicationExtensionManager::testRemoveWidgetInProcessExtension()
{
QGraphicsWidget extensionWidget;
setupGoodExtension(true, &extensionWidget);
- manager->instantiateInProcessExtension("test");
- manager->removeInProcessExtension("test");
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
+ manager->instantiateInProcessExtension(metaData);
+ manager->removeInProcessExtension(*metaData);
QCOMPARE(signalListener.removedWidgets.count(), 1);
QCOMPARE(signalListener.removedWidgets.at(0), &extensionWidget);
}
void Ut_MApplicationExtensionManager::testRemoveOutOfProcessExtension()
{
- MApplicationExtensionMetaData metaData("test.desktop");
+ QSharedPointer<const MApplicationExtensionMetaData> metaData(
+ new MApplicationExtensionMetaData("test"));
manager->instantiateOutOfProcessExtension(metaData);
- MExtensionHandle *handle = manager->outOfProcessHandles.value("test.desktop");
- manager->removeOutOfProcessExtension(metaData.fileName());
+ MExtensionHandle *handle = manager->outOfProcessHandles.value(metaData.data());
+ manager->removeOutOfProcessExtension(*metaData);
QCOMPARE(signalListener.removedWidgets.count(), 1);
QCOMPARE(signalListener.removedWidgets.at(0), handle);
}
diff --git a/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.h b/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.h
index 506b93f3..dc374459 100644
--- a/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.h
+++ b/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.h
@@ -27,7 +27,8 @@
class MApplicationExtensionManager;
class MDataStore;
-
+class MApplicationExtensionMetaData;
+class MDesktopEntry;
/*!
* Class for listening to MApplicationExtensionManager signals
*/
@@ -115,7 +116,7 @@ private:
signals:
void directoryChanged(QString path);
-
+ void extensionChanged(const MDesktopEntry &extensionData) const;
private slots:
// Executed once before every test case
@@ -159,10 +160,10 @@ private slots:
void testRemoveInProcessExtension();
void testRemoveNonExistentInProcessExtension();
-
// Test filtering of in and out of process extensions
void testInProcessExtensionFiltering();
void testOutOfProcessExtensionFiltering();
+ void testUpdateInProcessExtension();
// Test that manager returns list of instantiated in process extensions when requested.
void testRequestForAllInProcessExtensionsReturnsAListOfExtensions();
diff --git a/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.pro b/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.pro
index 900a35d7..3bebda38 100644
--- a/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.pro
+++ b/tests/ut_mapplicationextensionmanager/ut_mapplicationextensionmanager.pro
@@ -13,12 +13,15 @@ win32|macx {
INCLUDEPATH += \
$$MSRCDIR/extensions/applicationextension \
$$MSRCDIR/extensions/mashup/appletcommunication \
- $$MSRCDIR/extensions/mashup/mashup
+ $$MSRCDIR/extensions/mashup/mashup \
+ $$MSRCDIR/extensions
# unit test and unit classes
SOURCES += \
ut_mapplicationextensionmanager.cpp \
- $$MSRCDIR/extensions/applicationextension/mapplicationextensionmanager.cpp
+ $$MSRCDIR/extensions/applicationextension/mapplicationextensionmanager.cpp \
+ $$MSRCDIR/extensions/mextensionwatcher.cpp \
+ $$MSRCDIR/extensions/mashup/mashup/msubdatastore.cpp
# service classes
SOURCES += \
@@ -29,8 +32,10 @@ SOURCES += \
HEADERS += \
ut_mapplicationextensionmanager.h \
$$MSRCDIR/extensions/applicationextension/mapplicationextensionmanager.h \
+ $$MSRCDIR/extensions/mextensionwatcher.h \
$$MSRCDIR/extensions/applicationextension/mextensionhandle.h \
$$MSRCDIR/extensions/applicationextension/mextensionhandlemodel.h \
+ $$MSRCDIR/extensions/mashup/mashup/msubdatastore.h \
$$MSRCDIR/corelib/widgets/mwidgetmodel.h \
$$MSRCDIR/corelib/widgets/core/mwidget.h \
$$MSRCDIR/corelib/widgets/core/mwidgetcontroller.h \
diff --git a/tests/ut_mapplicationextensionmetadata/ut_mapplicationextensionmetadata.cpp b/tests/ut_mapplicationextensionmetadata/ut_mapplicationextensionmetadata.cpp
index 1baa61dd..dced0cb0 100644
--- a/tests/ut_mapplicationextensionmetadata/ut_mapplicationextensionmetadata.cpp
+++ b/tests/ut_mapplicationextensionmetadata/ut_mapplicationextensionmetadata.cpp
@@ -21,6 +21,10 @@
#include <mapplicationextensionmetadata.h>
#include "ut_mapplicationextensionmetadata.h"
+const QString EXTENSION_BINARY_KEY("X-MeeGoApplicationExtension/Extension");
+const QString IDENTIFIER_KEY("X-MeeGoApplicationExtension/Identifier");
+const QString INTERFACE_KEY("X-MeeGoApplicationExtension/Interface");
+
QString gType = "MApplicationExtension";
QString gRunner = "";
QString gExtension = "";
@@ -40,11 +44,11 @@ QString MDesktopEntry::value(const QString &key) const
return QString(gIcon);
} else if (key == "Desktop Entry/Exec") {
return QString(gRunner);
- } else if (key == "X-M/MApplicationExtension-Extension") {
+ } else if (key == EXTENSION_BINARY_KEY) {
return QString(gExtension);
- } else if (key == "X-M/MApplicationExtension-Interface") {
+ } else if (key == INTERFACE_KEY) {
return QString(gInterface);
- } else if (key == "X-M/MApplicationExtension-Identifier") {
+ } else if (key == IDENTIFIER_KEY) {
return QString(gExtraIdentifier);
}
return QString();
@@ -60,11 +64,11 @@ bool MDesktopEntry::contains(const QString &key) const
return gIcon != "";
} else if (key == "Desktop Entry/Exec") {
return gRunner != "";
- } else if (key == "X-M/MApplicationExtension-Extension") {
+ } else if (key == EXTENSION_BINARY_KEY) {
return gExtension != "";
- } else if (key == "X-M/MApplicationExtension-Interface") {
+ } else if (key == INTERFACE_KEY) {
return gInterface != "";
- } else if (key == "X-M/MApplicationExtension-Identifier") {
+ } else if (key == IDENTIFIER_KEY) {
return gExtraIdentifier != "";
}
return false;
@@ -180,9 +184,9 @@ void Ut_MApplicationExtensionMetaData::testNameMissing()
void Ut_MApplicationExtensionMetaData::testExtraIdentifier()
{
gExtraIdentifier = "";
- QVERIFY(!m_subject->contains("X-M/MApplicationExtension-Identifier"));
+ QVERIFY(!m_subject->contains(IDENTIFIER_KEY));
gExtraIdentifier = "foo";
- QVERIFY(m_subject->contains("X-M/MApplicationExtension-Identifier"));
+ QVERIFY(m_subject->contains(IDENTIFIER_KEY));
}
void Ut_MApplicationExtensionMetaData::testResourceIdentifier()
diff --git a/tests/ut_mapplicationextensionmetadata/ut_mapplicationextensionmetadata.pro b/tests/ut_mapplicationextensionmetadata/ut_mapplicationextensionmetadata.pro
index 07fdefe9..0cdf1718 100644
--- a/tests/ut_mapplicationextensionmetadata/ut_mapplicationextensionmetadata.pro
+++ b/tests/ut_mapplicationextensionmetadata/ut_mapplicationextensionmetadata.pro
@@ -4,7 +4,7 @@ INCLUDEPATH += $$MSRCDIR/applicationextension
TARGET = ut_mapplicationextensionmetadata
TEST_SOURCES = \
- $$MSRCDIR/applicationextension/mapplicationextensionmetadata.cpp \
+ $$MSRCDIR/extensions/applicationextension/mapplicationextensionmetadata.cpp \
# unit test and unit
SOURCES += \
@@ -18,7 +18,7 @@ SOURCES += \
# unit test and unit
HEADERS += \
ut_mapplicationextensionmetadata.h \
- $$MSRCDIR/applicationextension/mapplicationextensionmetadata.h \
+ $$MSRCDIR/extensions/applicationextension/mapplicationextensionmetadata.h \
DEFINES += M_INSTALL_LIBS=\\\"\"$$M_INSTALL_LIBS\"\\\"
diff --git a/tests/ut_mapplicationpage/ut_mapplicationpage.cpp b/tests/ut_mapplicationpage/ut_mapplicationpage.cpp
index 92d3cf23..a23e80f6 100644
--- a/tests/ut_mapplicationpage/ut_mapplicationpage.cpp
+++ b/tests/ut_mapplicationpage/ut_mapplicationpage.cpp
@@ -147,6 +147,7 @@ void Ut_MApplicationPage::testPageTitleChanged()
void Ut_MApplicationPage::testRememberPosition()
{
m_subject->setRememberPosition(true);
+ m_subject->d_func()->pannableViewPort->adjustSize();
m_subject->d_func()->pannableViewPort->setPosition(QPointF(0, 10));
appWin->sceneManager()->appearSceneWindowNow(m_subject);
QCOMPARE(m_subject->d_func()->pannableViewPort->position() + QPointF(10, 10), QPointF(10, 20));
@@ -156,6 +157,7 @@ void Ut_MApplicationPage::testRememberPosition()
void Ut_MApplicationPage::testForgetPosition()
{
m_subject->setRememberPosition(false);
+ m_subject->d_func()->pannableViewPort->adjustSize();
m_subject->d_func()->pannableViewPort->setPosition(QPointF(0, 10));
appWin->sceneManager()->appearSceneWindowNow(m_subject);
QCOMPARE(m_subject->d_func()->pannableViewPort->position() + QPointF(10, 10), QPointF(10, 10));
diff --git a/tests/ut_mcalendar/ut_mcalendar.cpp b/tests/ut_mcalendar/ut_mcalendar.cpp
index 789c4364..78b36229 100644
--- a/tests/ut_mcalendar/ut_mcalendar.cpp
+++ b/tests/ut_mcalendar/ut_mcalendar.cpp
@@ -1913,16 +1913,15 @@ void Ut_MCalendar::testWeekdaySymbols_data()
QTest::addColumn<MLocale::CalendarType>("cal");
QTest::addColumn<QStringList>("symbols");
- // FIXME: better translations would be without -na suffix
QStringList fi_FI_Symbols;
fi_FI_Symbols
- << QString("maanantaina")
- << QString("tiistaina")
- << QString("keskiviikkona")
- << QString("torstaina")
- << QString("perjantaina")
- << QString("lauantaina")
- << QString("sunnuntaina");
+ << QString("maanantai")
+ << QString("tiistai")
+ << QString("keskiviikko")
+ << QString("torstai")
+ << QString("perjantai")
+ << QString("lauantai")
+ << QString("sunnuntai");
QTest::newRow("weekday_symbols_fi_FI_Gregorian")
<< QString("fi_FI")
@@ -2003,21 +2002,20 @@ void Ut_MCalendar::testMonthSymbols_data()
QTest::addColumn<MLocale::CalendarType>("cal");
QTest::addColumn<QStringList>("symbols");
- // FIXME: again better translations without -ta
QStringList fi_FI_Symbols;
fi_FI_Symbols
- << QString("tammikuuta")
- << QString("helmikuuta")
- << QString("maaliskuuta")
- << QString("huhtikuuta")
- << QString("toukokuuta")
- << QString("kesäkuuta")
- << QString("heinäkuuta")
- << QString("elokuuta")
- << QString("syyskuuta")
- << QString("lokakuuta")
- << QString("marraskuuta")
- << QString("joulukuuta");
+ << QString("tammikuu")
+ << QString("helmikuu")
+ << QString("maaliskuu")
+ << QString("huhtikuu")
+ << QString("toukokuu")
+ << QString("kesäkuu")
+ << QString("heinäkuu")
+ << QString("elokuu")
+ << QString("syyskuu")
+ << QString("lokakuu")
+ << QString("marraskuu")
+ << QString("joulukuu");
QTest::newRow("month_symbols_fi_FI_Gregorian")
<< QString("fi_FI")
diff --git a/tests/ut_mextensionwatcher/.gitignore b/tests/ut_mextensionwatcher/.gitignore
new file mode 100644
index 00000000..0176279d
--- /dev/null
+++ b/tests/ut_mextensionwatcher/.gitignore
@@ -0,0 +1 @@
+ut_mextensionwatcher
diff --git a/tests/ut_mextensionwatcher/ut_mextensionwatcher.cpp b/tests/ut_mextensionwatcher/ut_mextensionwatcher.cpp
new file mode 100644
index 00000000..d84ecd26
--- /dev/null
+++ b/tests/ut_mextensionwatcher/ut_mextensionwatcher.cpp
@@ -0,0 +1,135 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include <QObject>
+#include <QSignalSpy>
+
+#include "ut_mextensionwatcher.h"
+#include "mextensionwatcher.h"
+#include "mappletinstancedata.h"
+#include "mapplicationextensionmetadata.h"
+#include "mdesktopentry_stub.h"
+
+// QFileSystemWatcher stubs
+static QSet<QString> gWatchedPaths;
+void QFileSystemWatcher::addPath(const QString &path)
+{
+ gWatchedPaths.insert(path);
+}
+
+// QFile stubs
+static bool gFileExists = true;
+bool QFile::exists(const QString& /*fileName*/)
+{
+ return gFileExists;
+}
+
+static const QString EXTENSION_FILE_NAME = "/usr/share/extensions/foo.desktop";
+static const QString NOT_WATCHED_FILE_NAME = "FILE_THAT_IS_NOT_WATCHED";
+
+void Ut_MExtensionWatcher::init()
+{
+ m_subject = new MExtensionWatcher();
+}
+
+void Ut_MExtensionWatcher::cleanup()
+{
+ delete m_subject;
+ m_subject = 0;
+}
+
+void Ut_MExtensionWatcher::initTestCase()
+{
+ gWatchedPaths.clear();
+ gFileExists = true;
+}
+
+void Ut_MExtensionWatcher::cleanupTestCase()
+{
+}
+
+void Ut_MExtensionWatcher::testConstruction()
+{
+ // verify that the constructor did set up the filesystemwatcher signal
+ QCOMPARE(disconnect(&m_subject->watcher,
+ SIGNAL(fileChanged(const QString &)),
+ m_subject, SLOT(notifyDataChanged(const QString &))),
+ true);
+ connect(&m_subject->watcher,
+ SIGNAL(fileChanged(const QString &)),
+ m_subject, SLOT(notifyDataChanged(const QString &)));
+}
+
+void Ut_MExtensionWatcher::testExtensionAddition()
+{
+ gMDesktopEntryStub->stubSetReturnValue("fileName", EXTENSION_FILE_NAME);
+ QSharedPointer<const MApplicationExtensionMetaData> testExtension(new MApplicationExtensionMetaData(EXTENSION_FILE_NAME));
+ m_subject->addExtension(testExtension);
+ QHash<QString, QSharedPointer<const MDesktopEntry> >::iterator extension =
+ m_subject->extensionsToWatch.find(EXTENSION_FILE_NAME);
+ QVERIFY(extension != m_subject->extensionsToWatch.end());
+ QCOMPARE(extension.value().data(), testExtension.data());
+ QCOMPARE(gWatchedPaths.contains(EXTENSION_FILE_NAME), true);
+}
+
+void Ut_MExtensionWatcher::testExtensionRemoval()
+{
+ gMDesktopEntryStub->stubSetReturnValue("fileName", EXTENSION_FILE_NAME);
+ QSharedPointer<const MApplicationExtensionMetaData> testExtension(new MApplicationExtensionMetaData(EXTENSION_FILE_NAME));
+ m_subject->addExtension(testExtension);
+ QCOMPARE(m_subject->extensionsToWatch.count(), 1);
+ m_subject->removeExtension(testExtension->fileName());
+ QCOMPARE(m_subject->extensionsToWatch.count(), 0);
+
+ // Make sure that the signal is not emitted for an extension that is not watched
+ QSignalSpy extensionSpy(m_subject,
+ SIGNAL(extensionChanged(const MDesktopEntry &)));
+ gFileExists = true;
+ emit fileChanged(EXTENSION_FILE_NAME);
+ QCOMPARE(extensionSpy.count(), 0);
+}
+
+void Ut_MExtensionWatcher::testFileWatcherNotifications()
+{
+ connect(this,
+ SIGNAL(fileChanged(const QString &)),
+ m_subject, SLOT(notifyDataChanged(const QString &)));
+ QSignalSpy extensionSpy(m_subject,
+ SIGNAL(extensionChanged(const MDesktopEntry &)));
+ gMDesktopEntryStub->stubSetReturnValue("fileName", EXTENSION_FILE_NAME);
+ QSharedPointer<const MApplicationExtensionMetaData> testExtension(new MApplicationExtensionMetaData(EXTENSION_FILE_NAME));
+ m_subject->addExtension(testExtension);
+
+ gFileExists = false;
+ emit fileChanged(EXTENSION_FILE_NAME);
+ QCOMPARE(extensionSpy.count(), 0);
+
+ gFileExists = true;
+ emit fileChanged(EXTENSION_FILE_NAME);
+ QCOMPARE(extensionSpy.count(), 1);
+
+ emit fileChanged(NOT_WATCHED_FILE_NAME);
+ QCOMPARE(extensionSpy.count(), 1);
+
+ disconnect(this,
+ SIGNAL(fileChanged(const QString &)),
+ m_subject, SLOT(notifyDataChanged(const QString &)));
+}
+
+QTEST_MAIN(Ut_MExtensionWatcher)
diff --git a/tests/ut_mextensionwatcher/ut_mextensionwatcher.h b/tests/ut_mextensionwatcher/ut_mextensionwatcher.h
new file mode 100644
index 00000000..cb0fafa1
--- /dev/null
+++ b/tests/ut_mextensionwatcher/ut_mextensionwatcher.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef UT_MEXTENSIONWATCHER_H
+#define UT_MEXTENSIONWATCHER_H
+
+#include <QtTest/QtTest>
+#include <QObject>
+
+#include "mextensionwatcher.h"
+
+class Ut_MExtensionWatcher : public QObject
+{
+ Q_OBJECT
+
+signals:
+ void fileChanged(const QString &path);
+private slots:
+ void init();
+ void cleanup();
+ void initTestCase();
+ void cleanupTestCase();
+
+ void testConstruction();
+
+ void testExtensionAddition();
+ void testExtensionRemoval();
+
+ void testFileWatcherNotifications();
+
+
+
+private:
+ MExtensionWatcher *m_subject;
+};
+
+#endif
diff --git a/tests/ut_mextensionwatcher/ut_mextensionwatcher.pro b/tests/ut_mextensionwatcher/ut_mextensionwatcher.pro
new file mode 100644
index 00000000..83181f77
--- /dev/null
+++ b/tests/ut_mextensionwatcher/ut_mextensionwatcher.pro
@@ -0,0 +1,30 @@
+include(../common_top.pri)
+
+INCLUDEPATH += $$MSRCDIR/extensions \
+ $$MSRCDIR/extensions/mashup/mashup
+
+TARGET = ut_mextensionwatcher
+
+TEST_SOURCES = \
+ $$MSRCDIR/extensions/mextensionwatcher.cpp \
+ $$MSRCDIR/extensions/mashup/mashup/mappletinstancedata.cpp \
+ $$MSRCDIR/extensions/mashup/mashup/mappletid.cpp \
+ $$MSRCDIR/extensions/applicationextension/mapplicationextensionmetadata.cpp
+
+
+# unit test and unit
+SOURCES += \
+ ut_mextensionwatcher.cpp \
+ $$TEST_SOURCES
+
+# service classes
+SOURCES += \
+ $$STUBSDIR/stubbase.cpp \
+
+# unit test and unit
+HEADERS += \
+ ut_mextensionwatcher.h \
+ $$MSRCDIR/extensions/mextensionwatcher.h
+
+
+include(../common_bot.pri)
diff --git a/tests/ut_mpannableviewport/ut_mpannableviewport.cpp b/tests/ut_mpannableviewport/ut_mpannableviewport.cpp
index 7def9aed..9f79fa22 100644
--- a/tests/ut_mpannableviewport/ut_mpannableviewport.cpp
+++ b/tests/ut_mpannableviewport/ut_mpannableviewport.cpp
@@ -275,4 +275,22 @@ void Ut_MPannableViewport::settingNULLPositionIndicatorShouldNotBeAccepted()
QVERIFY(subject->positionIndicator() != NULL);
}
+void Ut_MPannableViewport::disabledViewportShouldNotAllowWigetToBeBiggerThanViewport()
+{
+ subject->setEnabled(false);
+ QGraphicsWidget *widget = new QGraphicsWidget();
+ widget->setPreferredSize(1000,1000);
+ subject->setWidget(widget);
+
+
+ // Forcing the size of subject to some value
+ subject->setMinimumSize(QSizeF(500, 300));
+ subject->setMaximumSize(QSizeF(500, 300));
+
+ subject->adjustSize();
+
+ QCOMPARE(widget->size(), QSizeF(500,300));
+ subject->setEnabled(true);
+}
+
QTEST_APPLESS_MAIN(Ut_MPannableViewport)
diff --git a/tests/ut_mpannableviewport/ut_mpannableviewport.h b/tests/ut_mpannableviewport/ut_mpannableviewport.h
index 26f776fe..01b32aa9 100644
--- a/tests/ut_mpannableviewport/ut_mpannableviewport.h
+++ b/tests/ut_mpannableviewport/ut_mpannableviewport.h
@@ -49,6 +49,8 @@ private slots:
void settingNewPositionIndicator();
void settingNULLPositionIndicatorShouldNotBeAccepted();
+ void disabledViewportShouldNotAllowWigetToBeBiggerThanViewport();
+
private:
MPannableViewport *subject;
};
diff --git a/tests/ut_mpannablewidget/ut_mpannablewidget.cpp b/tests/ut_mpannablewidget/ut_mpannablewidget.cpp
index dab19dea..ae71e2c3 100644
--- a/tests/ut_mpannablewidget/ut_mpannablewidget.cpp
+++ b/tests/ut_mpannablewidget/ut_mpannablewidget.cpp
@@ -264,7 +264,7 @@ void Ut_MPannableWidget::panGestureMovesPhysicsPointer()
currentPanState = Qt::GestureStarted;
widget->glassPanEvent(&event, &panGesture);
QCOMPARE(physicsState->pointerPressed, true);
- QCOMPARE(physicsState->pointerMoved, false);
+ QCOMPARE(physicsState->pointerMoved, true);
QCOMPARE(physicsState->pointerReleased, false);
physicsState->pointerPressed = false;
@@ -328,7 +328,7 @@ void Ut_MPannableWidget::panGestureCancelsMouseEvents()
currentPanState = Qt::GestureStarted;
widget->glassPanEvent(&event, &panGesture);
QCOMPARE(physicsState->pointerPressed, true);
- QCOMPARE(physicsState->pointerMoved, false);
+ QCOMPARE(physicsState->pointerMoved, true);
QCOMPARE(physicsState->pointerReleased, false);
QCOMPARE(dummyItem->cancelReceived, true);
diff --git a/tests/ut_mstatusbarview/ut_mstatusbarview.cpp b/tests/ut_mstatusbarview/ut_mstatusbarview.cpp
new file mode 100644
index 00000000..87323968
--- /dev/null
+++ b/tests/ut_mstatusbarview/ut_mstatusbarview.cpp
@@ -0,0 +1,55 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include <QObject>
+#include <QGraphicsSceneMouseEvent>
+
+#include <mstatusbar.h>
+
+#include "ut_mstatusbarview.h"
+
+Ut_MStatusBarView::Ut_MStatusBarView():
+ m_subject(0),
+ m_statusbar(0)
+{
+}
+
+void Ut_MStatusBarView::initTestCase()
+{
+ m_statusbar = new MStatusBar();
+ m_subject= new MStatusBarView(m_statusbar);
+}
+
+void Ut_MStatusBarView::cleanupTestCase()
+{
+ delete m_statusbar;
+ m_statusbar = 0;
+}
+#ifdef Q_WS_X11
+void Ut_MStatusBarView::testXDamageWhileTogglingVisibility()
+{
+ m_subject->sharedPixmap = QPixmap(50,50);
+ m_subject->enablePixmapUpdates();
+ QVERIFY(m_subject->pixmapDamage != 0);
+ m_subject->disablePixmapUpdates();
+ QVERIFY(m_subject->pixmapDamage == 0);
+}
+#endif
+
+QTEST_MAIN(Ut_MStatusBarView)
diff --git a/tests/ut_mstatusbarview/ut_mstatusbarview.h b/tests/ut_mstatusbarview/ut_mstatusbarview.h
new file mode 100644
index 00000000..c28156cd
--- /dev/null
+++ b/tests/ut_mstatusbarview/ut_mstatusbarview.h
@@ -0,0 +1,49 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef UT_STATUSBARVIEW_H
+#define UT_STATUSBARVIEW_H
+
+#include <QtTest/QtTest>
+#include <QObject>
+
+// the real unit/MStatusBarView class declaration
+#include <mstatusbarview.h>
+
+Q_DECLARE_METATYPE(MStatusBarView *);
+
+class Ut_MStatusBarView : public QObject
+{
+ Q_OBJECT
+public:
+ Ut_MStatusBarView();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+#ifdef Q_WS_X11
+ void testXDamageWhileTogglingVisibility();
+#endif
+
+private:
+ MStatusBarView *m_subject;
+ MStatusBar *m_statusbar;
+};
+
+#endif
diff --git a/tests/ut_mstatusbarview/ut_mstatusbarview.pro b/tests/ut_mstatusbarview/ut_mstatusbarview.pro
new file mode 100644
index 00000000..e1db5489
--- /dev/null
+++ b/tests/ut_mstatusbarview/ut_mstatusbarview.pro
@@ -0,0 +1,23 @@
+include(../common_top.pri)
+TARGET = ut_mstatusbarview
+
+INCLUDEPATH += $$MSRCDIR/views $$STUBSDIR
+
+TEST_SOURCES = \
+ $$MSRCDIR/views/mstatusbarview.cpp \
+
+# unit test and unit
+SOURCES += \
+ ut_mstatusbarview.cpp \
+ $$TEST_SOURCES \
+
+# service classes
+SOURCES += \
+ $$STUBSDIR/stubbase.cpp \
+
+# unit test and unit
+HEADERS += \
+ ut_mstatusbarview.h \
+ $$MSRCDIR/views/mstatusbarview.h \
+
+include(../common_bot.pri)
diff --git a/tests/ut_mtoolbarview/ut_mtoolbarview.cpp b/tests/ut_mtoolbarview/ut_mtoolbarview.cpp
index 3815babf..5663cb68 100644
--- a/tests/ut_mtoolbarview/ut_mtoolbarview.cpp
+++ b/tests/ut_mtoolbarview/ut_mtoolbarview.cpp
@@ -76,17 +76,168 @@ void Ut_MToolBarView::testDeleteAddAction()
m_toolbar->clearActions();
MWidget *parentWidget = new MWidget();
- m_toolbar->addAction(createTextEditAction(parentWidget));
+ QPointer<MWidgetAction> action = createTextEditAction(parentWidget);
+ m_toolbar->addAction(action);
QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 10);
delete parentWidget;
// toolbar should not crash as action has been deleted
+ QVERIFY(m_toolbar->actions().count() == 0);
+ QVERIFY(action.isNull());
+
+ // Add another action just to sure
m_toolbar->addAction(new MAction("TEXTONLY", m_toolbar));
- QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 10);
QVERIFY(m_toolbar->actions().count() == 1);
}
+void Ut_MToolBarView::testDeleteAction()
+{
+ m_toolbar->clearActions();
+
+ MWidget *parentWidget = new MWidget();
+ QPointer<MWidgetAction> action = createTextEditAction(parentWidget);
+ m_toolbar->addAction(action);
+ QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 10);
+ delete action;
+
+ // toolbar should not crash as action has been deleted
+ QVERIFY(m_toolbar->actions().count() == 0);
+ QVERIFY(action.isNull());
+}
+void Ut_MToolBarView::testDeleteAndAddingTextWidget()
+{
+ //This is testing that we properly delete a text edit action
+ MWidget *parentWidget = new MWidget();
+ QPointer<MWidgetAction> action = createTextEditAction(parentWidget);
+ m_toolbar->addAction(action);
+ QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 10);
+ delete action;
+
+ //We should now be completely empty, and thus we can add a text edit again, and 4 more actions..
+ MWidget *parentWidget2 = new MWidget();
+ QPointer<MWidgetAction> action2 = createTextEditAction(parentWidget2);
+ m_toolbar->addAction(action2);
+ QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 10);
+
+ QVERIFY(m_toolbar->actions().count() == 1);
+ QVERIFY(action2->widget()->isVisible()); //Should be visible
+
+ //Try adding a second text edit. Should not show
+ MWidget *parentWidget3 = new MWidget();
+ QPointer<MWidgetAction> action3 = createTextEditAction(parentWidget3);
+ m_toolbar->addAction(action3);
+ QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 10);
+
+ QVERIFY(m_toolbar->actions().count() == 2);
+ QVERIFY(action2->widget()->isVisible()); //Should still be visible
+ QVERIFY(!action3->widget()->isVisible()); //New one should not be visible
+
+ //Now add four normal widgets
+ MAction *action4 = new MAction("action4", m_toolbar);
+ action4->setLocation(MAction::ToolBarLocation);
+ m_toolbar->addAction(action4);
+
+ MAction *action5 = new MAction("action4", m_toolbar);
+ action5->setLocation(MAction::ToolBarLocation);
+ m_toolbar->addAction(action5);
+
+ MAction *action6 = new MAction("action4", m_toolbar);
+ action6->setLocation(MAction::ToolBarLocation);
+ m_toolbar->addAction(action6);
+
+ MAction *action7 = new MAction("action4", m_toolbar);
+ action7->setLocation(MAction::ToolBarLocation);
+ m_toolbar->addAction(action7);
+
+ QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 10);
+
+ //Two of the normal actions should be visible, and two not
+ MButton* button4 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action4));
+ MButton* button5 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action5));
+ MButton* button6 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action6));
+ MButton* button7 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action7));
+ QVERIFY(button4);
+ QVERIFY(button4->isVisible());
+ QVERIFY(button5);
+ QVERIFY(button5->isVisible());
+ QVERIFY(!button6 || !button6->isVisible());
+ QVERIFY(!button7 || !button7->isVisible());
+
+ //Now delete the showing text edit. The second should become visible
+ delete parentWidget2;
+ QVERIFY(action2.isNull());
+
+ QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 10);
+ QVERIFY(action3->widget()->isVisible()); //New one should now be visible
+
+ button4 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action4));
+ button5 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action5));
+ button6 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action6));
+ button7 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action7));
+ QVERIFY(button4);
+ QVERIFY(button4->isVisible());
+ QVERIFY(button5);
+ QVERIFY(button5->isVisible());
+ QVERIFY(!button6 || !button6->isVisible());
+ QVERIFY(!button7 || !button7->isVisible());
+
+ //Now remove the third text edit
+ m_toolbar->removeAction(action3);
+ QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 10);
+
+ //All the buttons should now be visible again
+ QVERIFY(!action3->widget()->isVisible());
+
+ button4 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action4));
+ button5 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action5));
+ button6 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action6));
+ button7 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action7));
+ QVERIFY(button4);
+ QVERIFY(button4->isVisible());
+ QVERIFY(button5);
+ QVERIFY(button5->isVisible());
+ QVERIFY(button6);
+ QVERIFY(button6->isVisible());
+ QVERIFY(button7);
+ QVERIFY(button7->isVisible());
+
+ //Try inserting the toolbar again before the 4th button visible.
+ //This should fail since there isn't room for it
+ m_toolbar->insertAction(action7, action3);
+ QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 10);
+ QVERIFY(!action3->widget()->isVisible());
+ button4 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action4));
+ button5 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action5));
+ button6 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action6));
+ button7 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action7));
+ QVERIFY(button4);
+ QVERIFY(button4->isVisible());
+ QVERIFY(button5);
+ QVERIFY(button5->isVisible());
+ QVERIFY(button6);
+ QVERIFY(button6->isVisible());
+ QVERIFY(button7);
+ QVERIFY(button7->isVisible());
+
+ //Try inserting the toolbar before the 3rd button visible.
+ //This should now work, pushing off button6 and button7
+ m_toolbar->insertAction(action6, action3);
+ QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 10);
+
+ QVERIFY(action3->widget()->isVisible());
+ button4 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action4));
+ button5 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action5));
+ button6 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action6));
+ button7 = dynamic_cast<MButton *>(m_toolbarview->getWidget(action7));
+ QVERIFY(button4);
+ QVERIFY(button4->isVisible());
+ QVERIFY(button5);
+ QVERIFY(button5->isVisible());
+ QVERIFY(!button6 || !button6->isVisible());
+ QVERIFY(!button7 || !button7->isVisible());
+
+}
void Ut_MToolBarView::testTabView()
{
m_toolbar->clearActions();
@@ -169,21 +320,150 @@ MWidgetAction *Ut_MToolBarView::createTextEditAction(MWidget *parentWidget)
return actionTextEdit;
}
+void Ut_MToolBarView::testInsertingActions()
+{
+ QPointer<MAction> action1 = new MAction("action", m_toolbar);
+ action1->setLocation(MAction::ToolBarLocation);
+ m_toolbar->addAction(action1);
+ QPointer<MButton> button1 = dynamic_cast<MButton*>(m_toolbarview->getWidget(action1));
+
+ QPointer<MAction> action2 = new MAction("action", m_toolbar);
+ action2->setLocation(MAction::ToolBarLocation);
+ m_toolbar->insertAction(action1, action2);
+ QPointer<MButton> button2 = dynamic_cast<MButton*>(m_toolbarview->getWidget(action2));
+
+ qApp->processEvents();
+ QCOMPARE(m_toolbar->actions().count(), 2);
+ QVERIFY(m_toolbar->actions()[0] == action2);
+ QVERIFY(m_toolbar->actions()[1] == action1);
+ QVERIFY(button2->geometry().left() < button1->geometry().left());
+
+ action1->setVisible(false);
+ button1 = dynamic_cast<MButton*>(m_toolbarview->getWidget(action1));
+
+ //Check we can insert before a hidden action
+ QPointer<MAction> action3 = new MAction("action", m_toolbar);
+ action3->setLocation(MAction::ToolBarLocation);
+ m_toolbar->insertAction(action1, action3);
+ QPointer<MButton> button3 = dynamic_cast<MButton*>(m_toolbarview->getWidget(action3));
+
+ qApp->processEvents();
+ QCOMPARE(m_toolbar->actions().count(), 3);
+ QVERIFY(m_toolbar->actions()[0] == action2);
+ QVERIFY(m_toolbar->actions()[1] == action3);
+ QVERIFY(m_toolbar->actions()[2] == action1);
+ QVERIFY(button2->geometry().left() < button3->geometry().left());
+ QCOMPARE(button1 && button1->isVisible(), false);
+
+ //Check if we insert a hidden action then make it visible, it's in the right place
+ QPointer<MAction> action4 = new MAction("action", m_toolbar);
+ action4->setLocation(MAction::ToolBarLocation);
+ action4->setVisible(false);
+ m_toolbar->insertAction(action2, action4);
+ action4->setVisible(true);
+ QPointer<MButton> button4 = dynamic_cast<MButton*>(m_toolbarview->getWidget(action4));
+
+ qApp->processEvents();
+ QCOMPARE(m_toolbar->actions().count(), 4);
+ QVERIFY(m_toolbar->actions()[0] == action4);
+ QVERIFY(m_toolbar->actions()[1] == action2);
+ QVERIFY(m_toolbar->actions()[2] == action3);
+ QVERIFY(m_toolbar->actions()[3] == action1);
+ QVERIFY(button4->geometry().left() < button2->geometry().left());
+ QVERIFY(button2->geometry().left() < button3->geometry().left());
+ QCOMPARE(button1 && button1->isVisible(), false);
+ QCOMPARE(button4->isVisible(), true);
+
+ //Add an action at the end, so we now have 4 visible buttons and 1 hidden button
+ QPointer<MAction> action5 = new MAction("action", m_toolbar);
+ action5->setLocation(MAction::ToolBarLocation);
+ m_toolbar->addAction(action5);
+ QPointer<MButton> button5 = dynamic_cast<MButton*>(m_toolbarview->getWidget(action5));
+
+ qApp->processEvents();
+ QCOMPARE(m_toolbar->actions().count(), 5);
+ QVERIFY(m_toolbar->actions()[0] == action4);
+ QVERIFY(m_toolbar->actions()[1] == action2);
+ QVERIFY(m_toolbar->actions()[2] == action3);
+ QVERIFY(m_toolbar->actions()[3] == action1);
+ QVERIFY(m_toolbar->actions()[4] == action5);
+
+ QVERIFY(button4->geometry().left() < button2->geometry().left());
+ QVERIFY(button2->geometry().left() < button3->geometry().left());
+ QVERIFY(button3->geometry().left() < button5->geometry().left());
+ QCOMPARE(button1 && button1->isVisible(), false);
+
+ //Make action1 visible again. This should push action5 off so that it's hidden
+ action1->setVisible(true);
+ button1 = dynamic_cast<MButton*>(m_toolbarview->getWidget(action1));
+ button5 = dynamic_cast<MButton*>(m_toolbarview->getWidget(action5));
+ QVERIFY(button1);
+ qApp->processEvents();
+
+ QCOMPARE(button1->isVisible(), true);
+ QCOMPARE(button5 && button5->isVisible(), false);
+
+ QCOMPARE(m_toolbar->actions().count(), 5);
+ QVERIFY(m_toolbar->actions()[0] == action4);
+ QVERIFY(m_toolbar->actions()[1] == action2);
+ QVERIFY(m_toolbar->actions()[2] == action3);
+ QVERIFY(m_toolbar->actions()[3] == action1);
+ QVERIFY(m_toolbar->actions()[4] == action5);
+ QVERIFY(button4->geometry().left() < button2->geometry().left());
+ QVERIFY(button2->geometry().left() < button3->geometry().left());
+ QVERIFY(button3->geometry().left() < button1->geometry().left());
+}
+void Ut_MToolBarView::testAddingRemoveActions_data()
+{
+ QTest::addColumn<bool>("deleteAction");
+ QTest::newRow("Adding and removing action") << false;
+ QTest::newRow("Adding and deleting action") << true;
+}
void Ut_MToolBarView::testAddingRemoveActions()
{
+ QFETCH(bool, deleteAction);
QPointer<MAction> action1 = new MAction("action", m_toolbar);
action1->setLocation(MAction::ToolBarLocation);
m_toolbar->addAction(action1);
+ QPointer<MButton> button1 = dynamic_cast<MButton*>(m_toolbarview->getWidget(action1));
QPointer<MAction> action2 = new MAction("action", m_toolbar);
action2->setLocation(MAction::ToolBarLocation);
m_toolbar->addAction(action2);
-
- m_toolbar->removeAction(action1);
- m_toolbar->removeAction(action2);
- QVERIFY(!action1.isNull());
- QVERIFY(!action2.isNull());
-
+ QPointer<MButton> button2 = dynamic_cast<MButton*>(m_toolbarview->getWidget(action2));
+ action2->setVisible(false);
+
+ QPointer<MAction> action3 = new MAction("action", m_toolbar);
+ action3->setLocation(MAction::ToolBarLocation);
+ action3->setVisible(false);
+ m_toolbar->addAction(action3);
+ QPointer<MButton> button3 = dynamic_cast<MButton*>(m_toolbarview->getWidget(action3));
+
+ QVERIFY(!button1.isNull());
+ QVERIFY(!button2.isNull());
+ QVERIFY(button3.isNull());
+
+ if(deleteAction) {
+ delete action3;
+ delete action1;
+ delete action2;
+ } else {
+ m_toolbar->removeAction(action3);
+ m_toolbar->removeAction(action1);
+ m_toolbar->removeAction(action2);
+ QVERIFY(!action1.isNull());
+ QVERIFY(!action2.isNull());
+ QVERIFY(!action3.isNull());
+ }
+ QVERIFY(button1.isNull());
+ QVERIFY(button2.isNull());
+ QVERIFY(button3.isNull());
+ if(!deleteAction) {
+ //Delete now, after they've been removed, just to clean up
+ delete action1;
+ delete action2;
+ delete action3;
+ }
}
void Ut_MToolBarView::testSizeHint_data()
@@ -304,12 +584,22 @@ void Ut_MToolBarView::testButtons()
action->setVisible(false);
WAIT_VERIFY(button.isNull() || !button->isVisible());
+ //This is an implementation specific check. It's nice
+ //if the button is not deleted so that it's available
+ //straight away if we need it again
+ WAIT_VERIFY(!button.isNull());
+ WAIT_VERIFY(!button->isVisible());
+
/* Set the button back to how it was, but disabled */
action->setEnabled(false);
action->setChecked(true);
action->setText("Hello");
/* And now show the button again */
action->setVisible(true);
+
+ /* Another implementation specific check. */
+ QVERIFY(button == dynamic_cast<MButton*>(m_toolbarview->getWidget(action)));
+
button = dynamic_cast<MButton*>(m_toolbarview->getWidget(action));
QVERIFY(button);
QVERIFY(!button->isEnabled());
@@ -355,7 +645,7 @@ void Ut_MToolBarView::testMWidgetAction_data()
QTest::newRow("Testing MWidgetAction with MButton") << "button";
QTest::newRow("Testing MWidgetAction with MTextEdit") << "textedit";
- QTest::newRow("Testing MWidgetAction with MSlider") << "image";
+// QTest::newRow("Testing MWidgetAction with MSlider") << "image";
}
void Ut_MToolBarView::testMWidgetAction()
{
@@ -390,7 +680,22 @@ void Ut_MToolBarView::testMWidgetAction()
QVERIFY(widget);
QVERIFY(widget->isEnabled());
WAIT_VERIFY(widget->isVisible());
-
+}
+
+void Ut_MToolBarView::testAddToLandscapeWhenInPortrait()
+{
+ QVERIFY(m_toolbar->actions().isEmpty());
+
+ appWin->setOrientationAngle(M::Angle90);
+ qApp->processEvents();
+
+ MAction *action = new MAction("Hello", m_toolbar);
+ action->setLocation(MAction::ToolBarLandscapeLocation);
+ m_toolbar->addAction(action);
+
+ //Since we are in landscape mode we should not see this action
+ QPointer<MButton> button = dynamic_cast<MButton*>(m_toolbarview->getWidget(action));
+ WAIT_VERIFY(!button || !button->isVisible());
}
QTEST_APPLESS_MAIN(Ut_MToolBarView)
diff --git a/tests/ut_mtoolbarview/ut_mtoolbarview.h b/tests/ut_mtoolbarview/ut_mtoolbarview.h
index 3b58db27..97dc7580 100644
--- a/tests/ut_mtoolbarview/ut_mtoolbarview.h
+++ b/tests/ut_mtoolbarview/ut_mtoolbarview.h
@@ -40,8 +40,12 @@ private slots:
void init();
void cleanup();
+ void testInsertingActions();
+ void testAddingRemoveActions_data();
void testAddingRemoveActions();
void testDeleteAddAction();
+ void testDeleteAction();
+ void testDeleteAndAddingTextWidget();
void testTabView();
void testTabActionExclusivity();
void testSizeHint_data();
@@ -49,6 +53,7 @@ private slots:
void testButtons();
void testMWidgetAction_data();
void testMWidgetAction();
+ void testAddToLandscapeWhenInPortrait();
private:
MToolBar *m_toolbar;
diff --git a/tests/ut_phonenumberformatting/ut_phonenumberformatting.cpp b/tests/ut_phonenumberformatting/ut_phonenumberformatting.cpp
new file mode 100644
index 00000000..a401fa08
--- /dev/null
+++ b/tests/ut_phonenumberformatting/ut_phonenumberformatting.cpp
@@ -0,0 +1,297 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+#include "ut_phonenumberformatting.h"
+
+#include "mlocale.h"
+
+void Ut_PhoneNumberFormatting::testFormatting_data()
+{
+ QTest::addColumn<QString>("rawPhoneNumber");
+ QTest::addColumn<QString>("formattedPhoneNumber");
+ QTest::addColumn<bool>("doGrouping");
+
+ // test empty string
+ QTest::newRow( "" ) << QString()
+ << QString()
+ << false;
+
+ // test splitting of country code without grouping
+ QTest::newRow( "" ) << QString( "+3581234567" )
+ << QString( "+358 1234567" )
+ << false;
+
+
+ QTest::newRow( "" ) << QString( "+123456789" )
+ << QString( "+1 23456789" )
+ << false;
+
+ QTest::newRow( "" ) << QString( "+9876543210" )
+ << QString( "+98 76543210" )
+ << false;
+
+ QTest::newRow( "" ) << QString( "+3581234567" )
+ << QString( "+358 1234567" )
+ << false;
+
+ QTest::newRow( "" ) << QString( "00123456789" )
+ << QString( "00 1 23456789" )
+ << false;
+
+ QTest::newRow( "" ) << QString( "009876543210" )
+ << QString( "00 98 76543210" )
+ << false;
+
+ QTest::newRow( "" ) << QString( "003581234567" )
+ << QString( "00 358 1234567" )
+ << false;
+
+ QTest::newRow( "" ) << QString( "011123456789" )
+ << QString( "011 1 23456789" )
+ << false;
+
+ QTest::newRow( "" ) << QString( "0119876543210" )
+ << QString( "011 98 76543210" )
+ << false;
+
+ QTest::newRow( "" ) << QString( "0113581234567" )
+ << QString( "011 358 1234567" )
+ << false;
+
+
+ // test american number splitting without country code
+ QTest::newRow( "" ) << QString( "9" )
+ << QString( "9" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "98" )
+ << QString( "98" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "987" )
+ << QString( "987" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "9876" )
+ << QString( "987-6" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "98765" )
+ << QString( "987-65" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "987654" )
+ << QString( "987-654" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "9876543" )
+ << QString( "987-6543" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "98765432" )
+ << QString( "(987) 654-32" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "987654321" )
+ //<< QString( "(987) 654- 321" ) typo ? check...
+ << QString( "(987) 654-321" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "9876543210" )
+ << QString( "(987) 654-3210" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "98765432109" )
+ << QString( "98765432109" )
+ << true;
+
+ // grouping on, numbers starting with 1
+ QTest::newRow( "" ) << QString( "1" )
+ << QString( "1" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "12" )
+ << QString( "1 (2 )" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "123" )
+ << QString( "1 (23 )" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "1234" )
+ << QString( "1 (234)" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "12345" )
+ << QString( "1 (234) 5" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "123456" )
+ << QString( "1 (234) 56" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "1234567" )
+ << QString( "1 (234) 567" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "12345678" )
+ << QString( "1 (234) 567-8" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "123456789" )
+ << QString( "1 (234) 567-89" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "1234567890" )
+ << QString( "1 (234) 567-890" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "12345678901" )
+ << QString( "1 (234) 567-8901" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "123456789012" )
+ << QString( "123456789012" )
+ << true;
+
+ // check that no formatting is done for numbers starting with 11
+ QTest::newRow( "" ) << QString( "11" )
+ << QString( "11" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "113" )
+ << QString( "113" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "1134" )
+ << QString( "1134" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "11345" )
+ << QString( "11345" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "113456" )
+ << QString( "113456" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "1134567" )
+ << QString( "1134567" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "11345678" )
+ << QString( "11345678" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "113456789" )
+ << QString( "113456789" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "1134567890" )
+ << QString( "1134567890" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "11345678901" )
+ << QString( "11345678901" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "113456789012" )
+ << QString( "113456789012" )
+ << true;
+
+ // test that no formatting is done for numbers starting with
+ // *, #, p or w
+ QTest::newRow( "" ) << QString( "*987654" )
+ << QString( "*987654" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "#987654" )
+ << QString( "#987654" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "p987654" )
+ << QString( "p987654" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "w987654" )
+ << QString( "w987654" )
+ << true;
+
+ // test combined effect of grouping of country code
+ // and north american grouping
+ QTest::newRow( "" ) << QString( "+123456789" )
+ << QString( "+1 (234) 567-89" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "+9876543210" )
+ << QString( "+98 (765) 432-10" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "+3581234567" )
+ << QString( "+358 (123) 456-7" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "00123456789" )
+ << QString( "00123456789" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "009876543210" )
+ << QString( "009876543210" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "003581234567" )
+ << QString( "003581234567" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "011123456789" )
+ << QString( "011 1 (234) 567-89" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "0119876543210" )
+ << QString( "011 98 (765) 432-10" )
+ << true;
+
+ QTest::newRow( "" ) << QString( "0113581234567" )
+ << QString( "011 358 (123) 456-7" )
+ << true;
+}
+
+void Ut_PhoneNumberFormatting::testFormatting()
+{
+ QTest::addColumn<QString>("rawPhoneNumber");
+ QTest::addColumn<QString>("formattedPhoneNumber");
+ QTest::addColumn<bool>("doGrouping");
+
+ QFETCH( QString, rawPhoneNumber );
+ QFETCH( QString, formattedPhoneNumber );
+ QFETCH( bool, doGrouping );
+
+ Q_UNUSED(doGrouping);
+
+ MLocale locale;
+
+ QString myGroupedPhoneNumber = locale.formatPhoneNumber(
+ rawPhoneNumber, doGrouping ?
+ MLocale::NorthAmericanGrouping :
+ MLocale::NoGrouping );
+
+ QCOMPARE( myGroupedPhoneNumber, formattedPhoneNumber );
+}
+
+
+QTEST_APPLESS_MAIN(Ut_PhoneNumberFormatting);
diff --git a/tests/ut_phonenumberformatting/ut_phonenumberformatting.h b/tests/ut_phonenumberformatting/ut_phonenumberformatting.h
new file mode 100644
index 00000000..beab3c2d
--- /dev/null
+++ b/tests/ut_phonenumberformatting/ut_phonenumberformatting.h
@@ -0,0 +1,35 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef UT_PHONENUMBERFORMATTING_H
+#define UT_PHONENUMBERFORMATTING_H
+
+#include <QtTest/QtTest>
+#include <QObject>
+
+class Ut_PhoneNumberFormatting : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void testFormatting_data();
+ void testFormatting();
+};
+
+#endif
diff --git a/tests/ut_phonenumberformatting/ut_phonenumberformatting.pro b/tests/ut_phonenumberformatting/ut_phonenumberformatting.pro
new file mode 100644
index 00000000..3fe73536
--- /dev/null
+++ b/tests/ut_phonenumberformatting/ut_phonenumberformatting.pro
@@ -0,0 +1,9 @@
+include(../common_top.pri)
+
+TARGET = ut_phonenumberformatting
+
+# Input
+HEADERS += ut_phonenumberformatting.h
+SOURCES += ut_phonenumberformatting.cpp
+
+include(../common_bot.pri)
diff --git a/tools/messageid-check b/tools/messageid-check
index b672c13e..fce2c8c7 100755
--- a/tools/messageid-check
+++ b/tools/messageid-check
@@ -84,7 +84,7 @@ my @engineeringEnglishPackages = (
"duicontrolpanel-regionformatapplet-l10n-engineering-english",
"duihelp-l10n-engineering-english",
"duihomescreen-l10n-engineering-english",
- "duihomescreen-plugins-weatherapplet-l10n-engineering-english",
+ # ignore, demo only "duihomescreen-plugins-weatherapplet-l10n-engineering-english",
"duistatusind-connectivity-l10n-engineering-english",
"feedreader-l10n-engineering-english",
"gallery-l10n-engineering-english",
@@ -118,8 +118,7 @@ my @engineeringEnglishFiles = (
"/usr/share/l10n/meegotouch/backup.qm",
"/usr/share/l10n/meegotouch/call-history.qm",
"/usr/share/l10n/meegotouch/call-ui.qm",
- # camera-ui is still in the old directory, will move soon
- "/usr/share/l10n/dui/camera-ui.qm",
+ "/usr/share/l10n/meegotouch/camera-ui.qm",
"/usr/share/l10n/meegotouch/celluid.qm",
"/usr/share/l10n/meegotouch/commhistoryd.qm",
"/usr/share/l10n/meegotouch/conn-dui-bluetooth.qm",
@@ -134,7 +133,6 @@ my @engineeringEnglishFiles = (
"/usr/share/l10n/meegotouch/duicontrolpanel-keyboardlanguage.qm",
"/usr/share/l10n/meegotouch/duicontrolpanel-network.qm",
"/usr/share/l10n/meegotouch/duicontrolpanel-regionformat.qm",
- "/usr/share/l10n/meegotouch/duicontrolpanel.qm",
"/usr/share/l10n/meegotouch/duihelp.qm",
"/usr/share/l10n/meegotouch/duihome.qm",
# duistatusindicatormenu-connectivityplugin.qm is still in the old directory
@@ -163,12 +161,13 @@ my @engineeringEnglishFiles = (
"/usr/share/l10n/meegotouch/officetools.qm",
"/usr/share/l10n/meegotouch/oviplugin.qm",
"/usr/share/l10n/meegotouch/package-manager-ui.qm",
+ "/usr/share/l10n/meegotouch/settings.qm",
"/usr/share/l10n/meegotouch/share-ui.qm",
"/usr/share/l10n/meegotouch/signon-ui.qm",
"/usr/share/l10n/meegotouch/systemui-applets.qm",
"/usr/share/l10n/meegotouch/systemui.qm",
"/usr/share/l10n/meegotouch/transfer-ui.qm",
- "/usr/share/l10n/meegotouch/weatherappletres.qm",
+ # "/usr/share/l10n/meegotouch/weatherappletres.qm",
"/usr/share/l10n/meegotouch/webupload-engine.qm",
# demo only "/usr/share/l10n/meegotouch/widgetsgallery.qm",
"/usr/share/l10n/meegotouch/youtubeplugin.qm"
@@ -392,6 +391,9 @@ sub download {
sub readHandoffXmlTrees {
for my $handoffFile (glob ("$OPT_HANDOFF_DIR/*.ts")) {
my $xmlParser = new XML::Parser(Style => 'Tree', ProtocolEncoding => 'UTF-8');
+ if ($OPT_VERBOSITY >= 1) {
+ printf STDOUT "parsing %s\n", $handoffFile;
+ }
$handoffXmlTrees{$handoffFile} = $xmlParser->parsefile($handoffFile);
}
}
@@ -843,8 +845,7 @@ $htmlOutIntroduction .= <<"EOF";
requesting a new ID:
<ul>
<li>component: Specifications</li>
- <li>Keywords: l10n, PO</li>
- <li>CC: <a href=\"mailto:oksan.savasoglu-niemi\@nokia.com\">Oksan Savasoglu-Niemi</a></li>
+ <li>CC: <a href=\"mailto:heidi.hendrell\@nokia.com\">Heidi Hendrell</a></li>
</ul>
EOF
diff --git a/tools/mnotificationtool/mnotificationtool.cpp b/tools/mnotificationtool/mnotificationtool.cpp
index 140f1ac9..c6a4f12f 100644
--- a/tools/mnotificationtool/mnotificationtool.cpp
+++ b/tools/mnotificationtool/mnotificationtool.cpp
@@ -127,6 +127,8 @@ int usage(const char *program)
std::cerr << std::setw(7) << " add - Adds a new notification or notification group." << std::endl;
std::cerr << std::setw(7) << " update - Updates an existing notification or notification group." << std::endl;
std::cerr << std::setw(7) << " remove - Removes an existing notification or notification group." << std::endl;
+ std::cerr << std::setw(7) << " A specific notification or group can be specified with the -i argument." << std::endl;
+ std::cerr << std::setw(7) << " If no id is given, all the notifications will be removed." << std::endl;
std::cerr << std::setw(7) << " -g, --group Whether to operate on notification groups instead of notifications." << std::endl;
std::cerr << std::setw(7) << " -i, --id=ID The notification/notification group ID to use." << std::endl;
std::cerr << std::setw(7) << " -c, --count=NUMBER The number of notifications. This parameter has no effect when the action is 'remove'" << std::endl;
@@ -188,7 +190,7 @@ int parseArguments(int argc, char *argv[])
if (toolAction == Undefined ||
(toolAction == Add && argc < optind + 1) ||
(toolAction == Update && argc < optind + 4) ||
- ((toolAction == Update || toolAction == Remove) && id == 0)) {
+ (toolAction == Update && id == 0)) {
return usage(argv[0]);
}
}
@@ -213,12 +215,14 @@ int main(int argc, char *argv[])
// Calls notificationIdList from NotificationManager. Returns size of the list from main.
if (listMode) {
QList<MNotification *> list = MNotification::notifications();
+ result = list.size();
std::cout << "\n" << applicationName.toUtf8().data() << " has " << list.size() << " notifications." << std::endl;
std::cout << "Notification id(s):" << std::endl;
foreach(MNotification *notification, list) {
std::cout << static_cast<MNotificationToolNotification *>(notification)->id() << std::endl;
+ delete notification;
}
- return list.size();
+ list.clear();
}
// Execute the desired action
@@ -309,12 +313,24 @@ int main(int argc, char *argv[])
break;
}
case Remove:
- if (groupMode) {
- MNotificationToolNotificationGroup group(id);
- group.remove();
+ if (id > 0) {
+ if (groupMode) {
+ MNotificationToolNotificationGroup group(id);
+ group.remove();
+ } else {
+ MNotificationToolNotification notification(id);
+ notification.remove();
+ }
} else {
- MNotificationToolNotification notification(id);
- notification.remove();
+ // Remove all the notifications for this user
+ QList<MNotification *> list = MNotification::notifications();
+ foreach(MNotification *notification, list) {
+ notification->remove();
+ delete notification;
+ }
+ list.clear();
+
+ // There's no way to query the groups of the user, so there's no way to remove all the groups either :(
}
break;
default: