From d5b1db7b7f4cfe3d75a774e9cc5ee2305fca8b41 Mon Sep 17 00:00:00 2001 From: Maximiliano Curia Date: Fri, 2 Feb 2018 11:04:55 +0000 Subject: [PATCH 1/1] Import kdeclarative_5.42.0.orig.tar.xz [dgit import orig kdeclarative_5.42.0.orig.tar.xz] --- .arcconfig | 3 + CMakeLists.txt | 148 +++ COPYING.LIB | 510 ++++++++++ KF5DeclarativeConfig.cmake.in | 9 + README.md | 36 + autotests/CMakeLists.txt | 18 + autotests/columnproxymodeltest.cpp | 90 ++ autotests/columnproxymodeltest.h | 33 + autotests/data/resizemodeitem.qml | 5 + autotests/modeltest.cpp | 564 +++++++++++ autotests/modeltest.h | 94 ++ autotests/quickviewsharedengine.cpp | 213 +++++ autotests/util.cpp | 126 +++ autotests/util.h | 103 ++ cmake/Findepoxy.cmake | 48 + metainfo.yaml | 21 + po/af/kdeclarative5.po | 102 ++ po/ar/kdeclarative5.po | 122 +++ po/as/kdeclarative5.po | 101 ++ po/ast/kdeclarative5.po | 106 ++ po/be/kdeclarative5.po | 117 +++ po/be@latin/kdeclarative5.po | 105 ++ po/bg/kdeclarative5.po | 102 ++ po/bn/kdeclarative5.po | 106 ++ po/bn_IN/kdeclarative5.po | 102 ++ po/br/kdeclarative5.po | 105 ++ po/bs/kdeclarative5.po | 122 +++ po/ca/kdeclarative5.po | 115 +++ po/ca@valencia/kdeclarative5.po | 115 +++ po/crh/kdeclarative5.po | 104 ++ po/cs/kdeclarative5.po | 109 +++ po/csb/kdeclarative5.po | 105 ++ po/cy/kdeclarative5.po | 119 +++ po/da/kdeclarative5.po | 110 +++ po/de/kdeclarative5.po | 115 +++ po/el/kdeclarative5.po | 120 +++ po/en_GB/kdeclarative5.po | 107 +++ po/eo/kdeclarative5.po | 118 +++ po/es/kdeclarative5.po | 116 +++ po/et/kdeclarative5.po | 109 +++ po/eu/kdeclarative5.po | 113 +++ po/fa/kdeclarative5.po | 108 +++ po/fi/kdeclarative5.po | 127 +++ po/fr/kdeclarative5.po | 127 +++ po/fy/kdeclarative5.po | 111 +++ po/ga/kdeclarative5.po | 117 +++ po/gd/kdeclarative5.po | 111 +++ po/gl/kdeclarative5.po | 118 +++ po/gu/kdeclarative5.po | 104 ++ po/ha/kdeclarative5.po | 99 ++ po/he/kdeclarative5.po | 120 +++ po/hi/kdeclarative5.po | 105 ++ po/hne/kdeclarative5.po | 105 ++ po/hr/kdeclarative5.po | 125 +++ po/hsb/kdeclarative5.po | 109 +++ po/hu/kdeclarative5.po | 106 ++ po/hy/kdeclarative5.po | 116 +++ po/ia/kdeclarative5.po | 109 +++ po/id/kdeclarative5.po | 109 +++ po/is/kdeclarative5.po | 127 +++ po/it/kdeclarative5.po | 116 +++ po/ja/kdeclarative5.po | 116 +++ po/ka/kdeclarative5.po | 104 ++ po/kk/kdeclarative5.po | 120 +++ po/km/kdeclarative5.po | 110 +++ po/kn/kdeclarative5.po | 106 ++ po/ko/kdeclarative5.po | 107 +++ po/ku/kdeclarative5.po | 116 +++ po/lb/kdeclarative5.po | 104 ++ po/lt/kdeclarative5.po | 114 +++ po/lv/kdeclarative5.po | 119 +++ po/mai/kdeclarative5.po | 106 ++ po/mk/kdeclarative5.po | 125 +++ po/ml/kdeclarative5.po | 109 +++ po/mr/kdeclarative5.po | 105 ++ po/ms/kdeclarative5.po | 116 +++ po/nb/kdeclarative5.po | 115 +++ po/nds/kdeclarative5.po | 110 +++ po/ne/kdeclarative5.po | 113 +++ po/nl/kdeclarative5.po | 126 +++ po/nn/kdeclarative5.po | 111 +++ po/oc/kdeclarative5.po | 100 ++ po/or/kdeclarative5.po | 106 ++ po/pa/kdeclarative5.po | 113 +++ po/pl/kdeclarative5.po | 202 ++++ po/ps/kdeclarative5.po | 103 ++ po/pt/kdeclarative5.po | 197 ++++ po/pt_BR/kdeclarative5.po | 118 +++ po/ro/kdeclarative5.po | 114 +++ po/ru/kdeclarative5.po | 127 +++ po/se/kdeclarative5.po | 110 +++ po/si/kdeclarative5.po | 103 ++ po/sk/kdeclarative5.po | 115 +++ po/sl/kdeclarative5.po | 119 +++ po/sq/kdeclarative5.po | 101 ++ po/sr/kdeclarative5.po | 111 +++ po/sr@ijekavian/kdeclarative5.po | 110 +++ po/sr@ijekavianlatin/kdeclarative5.po | 110 +++ po/sr@latin/kdeclarative5.po | 110 +++ po/sv/kdeclarative5.po | 118 +++ po/ta/kdeclarative5.po | 113 +++ po/te/kdeclarative5.po | 109 +++ po/tg/kdeclarative5.po | 116 +++ po/th/kdeclarative5.po | 114 +++ po/tr/kdeclarative5.po | 123 +++ po/tt/kdeclarative5.po | 111 +++ po/ug/kdeclarative5.po | 112 +++ po/uk/kdeclarative5.po | 113 +++ po/uz/kdeclarative5.po | 102 ++ po/uz@cyrillic/kdeclarative5.po | 102 ++ po/vi/kdeclarative5.po | 113 +++ po/wa/kdeclarative5.po | 107 +++ po/xh/kdeclarative5.po | 108 +++ po/zh_CN/kdeclarative5.po | 115 +++ po/zh_HK/kdeclarative5.po | 130 +++ po/zh_TW/kdeclarative5.po | 113 +++ src/CMakeLists.txt | 36 + src/Messages.sh | 18 + src/calendarevents/CMakeLists.txt | 33 + .../CalendarEventsConfig.cmake.in | 6 + src/calendarevents/calendareventsplugin.cpp | 35 + src/calendarevents/calendareventsplugin.h | 233 +++++ src/calendarevents/eventdata_p.cpp | 170 ++++ src/kdeclarative/CMakeLists.txt | 68 ++ src/kdeclarative/configpropertymap.cpp | 127 +++ src/kdeclarative/configpropertymap.h | 65 ++ src/kdeclarative/kdeclarative.cpp | 176 ++++ src/kdeclarative/kdeclarative.h | 127 +++ src/kdeclarative/private/kdeclarative_p.h | 45 + src/kdeclarative/private/kiconprovider.cpp | 72 ++ src/kdeclarative/private/kiconprovider_p.h | 35 + .../private/kioaccessmanagerfactory.cpp | 39 + .../private/kioaccessmanagerfactory_p.h | 37 + src/kdeclarative/private/qmlobject_p.h | 89 ++ src/kdeclarative/qmlobject.cpp | 377 ++++++++ src/kdeclarative/qmlobject.h | 250 +++++ src/kdeclarative/qmlobjectsharedengine.cpp | 84 ++ src/kdeclarative/qmlobjectsharedengine.h | 63 ++ src/kpackagelauncherqml/CMakeLists.txt | 21 + src/kpackagelauncherqml/main.cpp | 135 +++ src/qmlcontrols/CMakeLists.txt | 25 + src/qmlcontrols/draganddrop/CMakeLists.txt | 22 + .../draganddrop/DeclarativeDragArea.cpp | 387 ++++++++ .../draganddrop/DeclarativeDragArea.h | 171 ++++ .../draganddrop/DeclarativeDragDropEvent.cpp | 71 ++ .../draganddrop/DeclarativeDragDropEvent.h | 121 +++ .../draganddrop/DeclarativeDropArea.cpp | 167 ++++ .../draganddrop/DeclarativeDropArea.h | 112 +++ .../draganddrop/DeclarativeMimeData.cpp | 165 ++++ .../draganddrop/DeclarativeMimeData.h | 116 +++ src/qmlcontrols/draganddrop/Mainpage.dox | 15 + .../draganddrop/MimeDataWrapper.cpp | 93 ++ src/qmlcontrols/draganddrop/MimeDataWrapper.h | 108 +++ .../draganddrop/draganddropplugin.cpp | 43 + .../draganddrop/draganddropplugin.h | 37 + src/qmlcontrols/draganddrop/qmldir | 3 + src/qmlcontrols/kcmcontrols/CMakeLists.txt | 19 + .../kcmcontrols/kcmcontrolsplugin.cpp | 36 + .../kcmcontrols/kcmcontrolsplugin.h | 37 + .../kcmcontrols/qml/GridDelegate.qml | 191 ++++ src/qmlcontrols/kcmcontrols/qml/GridView.qml | 83 ++ .../kcmcontrols/qml/GridViewKCM.qml | 79 ++ src/qmlcontrols/kcmcontrols/qml/SimpleKCM.qml | 72 ++ src/qmlcontrols/kcmcontrols/qml/qmldir | 7 + src/qmlcontrols/kconfig/CMakeLists.txt | 18 + src/qmlcontrols/kconfig/kauthorizedproxy.cpp | 41 + src/qmlcontrols/kconfig/kauthorizedproxy.h | 42 + src/qmlcontrols/kconfig/kconfigplugin.cpp | 35 + src/qmlcontrols/kconfig/kconfigplugin.h | 31 + src/qmlcontrols/kconfig/qmldir | 2 + src/qmlcontrols/kcoreaddons/CMakeLists.txt | 20 + src/qmlcontrols/kcoreaddons/formats.cpp | 62 ++ src/qmlcontrols/kcoreaddons/formats.h | 116 +++ .../kcoreaddons/kcoreaddonsplugin.cpp | 49 + .../kcoreaddons/kcoreaddonsplugin.h | 35 + src/qmlcontrols/kcoreaddons/kuserproxy.cpp | 137 +++ src/qmlcontrols/kcoreaddons/kuserproxy.h | 130 +++ src/qmlcontrols/kcoreaddons/qmldir | 3 + src/qmlcontrols/kioplugin/CMakeLists.txt | 18 + src/qmlcontrols/kioplugin/kioplugin.cpp | 30 + src/qmlcontrols/kioplugin/kioplugin.h | 33 + src/qmlcontrols/kioplugin/krunproxy.cpp | 60 ++ src/qmlcontrols/kioplugin/krunproxy.h | 45 + src/qmlcontrols/kioplugin/qmldir | 3 + src/qmlcontrols/kquickcontrols/CMakeLists.txt | 8 + .../kquickcontrols/ColorButton.qml | 109 +++ .../kquickcontrols/KeySequenceItem.qml | 70 ++ src/qmlcontrols/kquickcontrols/README | 1 + .../kquickcontrols/private/CMakeLists.txt | 24 + .../private/keysequencehelper.cpp | 531 ++++++++++ .../private/keysequencehelper.h | 147 +++ .../private/kquickcontrolsprivateplugin.cpp | 33 + .../private/kquickcontrolsprivateplugin.h | 34 + src/qmlcontrols/kquickcontrols/private/qmldir | 4 + .../private/translationcontext.cpp | 235 +++++ .../private/translationcontext.h | 57 ++ src/qmlcontrols/kquickcontrols/qmldir | 2 + .../kquickcontrolsaddons/CMakeLists.txt | 39 + .../kquickcontrolsaddons/Mainpage.dox | 14 + .../kquickcontrolsaddons/clipboard.cpp | 128 +++ .../kquickcontrolsaddons/clipboard.h | 73 ++ .../kquickcontrolsaddons/columnproxymodel.cpp | 246 +++++ .../kquickcontrolsaddons/columnproxymodel.h | 75 ++ .../config-kquickcontrolsaddons.h.cmake | 2 + .../kquickcontrolsaddons/eventgenerator.cpp | 148 +++ .../kquickcontrolsaddons/eventgenerator.h | 88 ++ .../kquickcontrolsaddons/icondialog.cpp | 185 ++++ .../kquickcontrolsaddons/icondialog.h | 113 +++ .../kquickcontrolsaddons/kcmshell.cpp | 44 + .../kquickcontrolsaddons/kcmshell.h | 57 ++ .../kquickcontrolsaddonsplugin.cpp | 76 ++ .../kquickcontrolsaddonsplugin.h | 37 + .../kquickcontrolsaddons/mimedatabase.cpp | 55 ++ .../kquickcontrolsaddons/mimedatabase.h | 39 + .../mouseeventlistener.cpp | 410 ++++++++ .../kquickcontrolsaddons/mouseeventlistener.h | 236 +++++ .../kquickcontrolsaddons/plotter.cpp | 903 ++++++++++++++++++ .../kquickcontrolsaddons/plotter.h | 259 +++++ .../kquickcontrolsaddons/qiconitem.cpp | 173 ++++ .../kquickcontrolsaddons/qiconitem.h | 83 ++ .../kquickcontrolsaddons/qimageitem.cpp | 208 ++++ .../kquickcontrolsaddons/qimageitem.h | 97 ++ src/qmlcontrols/kquickcontrolsaddons/qmldir | 5 + .../kquickcontrolsaddons/qpixmapitem.cpp | 212 ++++ .../kquickcontrolsaddons/qpixmapitem.h | 97 ++ .../kwindowsystemplugin/CMakeLists.txt | 17 + .../kwindowsystemplugin.cpp | 30 + .../kwindowsystemplugin/kwindowsystemplugin.h | 33 + .../kwindowsystemproxy.cpp | 151 +++ .../kwindowsystemplugin/kwindowsystemproxy.h | 169 ++++ src/qmlcontrols/kwindowsystemplugin/qmldir | 3 + src/quickaddons/CMakeLists.txt | 81 ++ src/quickaddons/configmodule.cpp | 328 +++++++ src/quickaddons/configmodule.h | 492 ++++++++++ src/quickaddons/imagetexturescache.cpp | 70 ++ src/quickaddons/imagetexturescache.h | 65 ++ src/quickaddons/managedtexturenode.cpp | 29 + src/quickaddons/managedtexturenode.h | 57 ++ src/quickaddons/qtquicksettings.cpp | 47 + src/quickaddons/qtquicksettings.h | 47 + src/quickaddons/quickviewsharedengine.cpp | 274 ++++++ src/quickaddons/quickviewsharedengine.h | 123 +++ src/quickaddons/renderer.kcfg | 18 + src/quickaddons/renderersettings.kcfgc | 4 + tests/CMakeLists.txt | 33 + tests/colorButtonTest.qml | 54 ++ tests/eventgenerator.qml | 69 ++ tests/helloworld/contents/ui/main.qml | 58 ++ tests/helloworld/metadata.desktop | 55 ++ tests/helloworldnowindow/contents/ui/main.qml | 37 + tests/helloworldnowindow/metadata.desktop | 55 ++ tests/icondialog.qml | 141 +++ tests/kdeclarativetest.cpp | 47 + tests/mouseeventlistenertest.qml | 95 ++ tests/plotter.qml | 81 ++ tests/qiconitem_resize.qml | 27 + tests/qiconitem_test.qml | 15 + tests/qimageitemtest.cpp | 50 + tests/qimageitemtest.qml | 62 ++ tests/test.qml | 31 + tests/testimage.png | Bin 0 -> 8850 bytes tests/testimage@2x.png | Bin 0 -> 22915 bytes 262 files changed, 27131 insertions(+) create mode 100644 .arcconfig create mode 100644 CMakeLists.txt create mode 100644 COPYING.LIB create mode 100644 KF5DeclarativeConfig.cmake.in create mode 100644 README.md create mode 100644 autotests/CMakeLists.txt create mode 100644 autotests/columnproxymodeltest.cpp create mode 100644 autotests/columnproxymodeltest.h create mode 100644 autotests/data/resizemodeitem.qml create mode 100644 autotests/modeltest.cpp create mode 100644 autotests/modeltest.h create mode 100644 autotests/quickviewsharedengine.cpp create mode 100644 autotests/util.cpp create mode 100644 autotests/util.h create mode 100644 cmake/Findepoxy.cmake create mode 100644 metainfo.yaml create mode 100644 po/af/kdeclarative5.po create mode 100644 po/ar/kdeclarative5.po create mode 100644 po/as/kdeclarative5.po create mode 100644 po/ast/kdeclarative5.po create mode 100644 po/be/kdeclarative5.po create mode 100644 po/be@latin/kdeclarative5.po create mode 100644 po/bg/kdeclarative5.po create mode 100644 po/bn/kdeclarative5.po create mode 100644 po/bn_IN/kdeclarative5.po create mode 100644 po/br/kdeclarative5.po create mode 100644 po/bs/kdeclarative5.po create mode 100644 po/ca/kdeclarative5.po create mode 100644 po/ca@valencia/kdeclarative5.po create mode 100644 po/crh/kdeclarative5.po create mode 100644 po/cs/kdeclarative5.po create mode 100644 po/csb/kdeclarative5.po create mode 100644 po/cy/kdeclarative5.po create mode 100644 po/da/kdeclarative5.po create mode 100644 po/de/kdeclarative5.po create mode 100644 po/el/kdeclarative5.po create mode 100644 po/en_GB/kdeclarative5.po create mode 100644 po/eo/kdeclarative5.po create mode 100644 po/es/kdeclarative5.po create mode 100644 po/et/kdeclarative5.po create mode 100644 po/eu/kdeclarative5.po create mode 100644 po/fa/kdeclarative5.po create mode 100644 po/fi/kdeclarative5.po create mode 100644 po/fr/kdeclarative5.po create mode 100644 po/fy/kdeclarative5.po create mode 100644 po/ga/kdeclarative5.po create mode 100644 po/gd/kdeclarative5.po create mode 100644 po/gl/kdeclarative5.po create mode 100644 po/gu/kdeclarative5.po create mode 100644 po/ha/kdeclarative5.po create mode 100644 po/he/kdeclarative5.po create mode 100644 po/hi/kdeclarative5.po create mode 100644 po/hne/kdeclarative5.po create mode 100644 po/hr/kdeclarative5.po create mode 100644 po/hsb/kdeclarative5.po create mode 100644 po/hu/kdeclarative5.po create mode 100644 po/hy/kdeclarative5.po create mode 100644 po/ia/kdeclarative5.po create mode 100644 po/id/kdeclarative5.po create mode 100644 po/is/kdeclarative5.po create mode 100644 po/it/kdeclarative5.po create mode 100644 po/ja/kdeclarative5.po create mode 100644 po/ka/kdeclarative5.po create mode 100644 po/kk/kdeclarative5.po create mode 100644 po/km/kdeclarative5.po create mode 100644 po/kn/kdeclarative5.po create mode 100644 po/ko/kdeclarative5.po create mode 100644 po/ku/kdeclarative5.po create mode 100644 po/lb/kdeclarative5.po create mode 100644 po/lt/kdeclarative5.po create mode 100644 po/lv/kdeclarative5.po create mode 100644 po/mai/kdeclarative5.po create mode 100644 po/mk/kdeclarative5.po create mode 100644 po/ml/kdeclarative5.po create mode 100644 po/mr/kdeclarative5.po create mode 100644 po/ms/kdeclarative5.po create mode 100644 po/nb/kdeclarative5.po create mode 100644 po/nds/kdeclarative5.po create mode 100644 po/ne/kdeclarative5.po create mode 100644 po/nl/kdeclarative5.po create mode 100644 po/nn/kdeclarative5.po create mode 100644 po/oc/kdeclarative5.po create mode 100644 po/or/kdeclarative5.po create mode 100644 po/pa/kdeclarative5.po create mode 100644 po/pl/kdeclarative5.po create mode 100644 po/ps/kdeclarative5.po create mode 100644 po/pt/kdeclarative5.po create mode 100644 po/pt_BR/kdeclarative5.po create mode 100644 po/ro/kdeclarative5.po create mode 100644 po/ru/kdeclarative5.po create mode 100644 po/se/kdeclarative5.po create mode 100644 po/si/kdeclarative5.po create mode 100644 po/sk/kdeclarative5.po create mode 100644 po/sl/kdeclarative5.po create mode 100644 po/sq/kdeclarative5.po create mode 100644 po/sr/kdeclarative5.po create mode 100644 po/sr@ijekavian/kdeclarative5.po create mode 100644 po/sr@ijekavianlatin/kdeclarative5.po create mode 100644 po/sr@latin/kdeclarative5.po create mode 100644 po/sv/kdeclarative5.po create mode 100644 po/ta/kdeclarative5.po create mode 100644 po/te/kdeclarative5.po create mode 100644 po/tg/kdeclarative5.po create mode 100644 po/th/kdeclarative5.po create mode 100644 po/tr/kdeclarative5.po create mode 100644 po/tt/kdeclarative5.po create mode 100644 po/ug/kdeclarative5.po create mode 100644 po/uk/kdeclarative5.po create mode 100644 po/uz/kdeclarative5.po create mode 100644 po/uz@cyrillic/kdeclarative5.po create mode 100644 po/vi/kdeclarative5.po create mode 100644 po/wa/kdeclarative5.po create mode 100644 po/xh/kdeclarative5.po create mode 100644 po/zh_CN/kdeclarative5.po create mode 100644 po/zh_HK/kdeclarative5.po create mode 100644 po/zh_TW/kdeclarative5.po create mode 100644 src/CMakeLists.txt create mode 100755 src/Messages.sh create mode 100644 src/calendarevents/CMakeLists.txt create mode 100644 src/calendarevents/CalendarEventsConfig.cmake.in create mode 100644 src/calendarevents/calendareventsplugin.cpp create mode 100644 src/calendarevents/calendareventsplugin.h create mode 100644 src/calendarevents/eventdata_p.cpp create mode 100644 src/kdeclarative/CMakeLists.txt create mode 100644 src/kdeclarative/configpropertymap.cpp create mode 100644 src/kdeclarative/configpropertymap.h create mode 100644 src/kdeclarative/kdeclarative.cpp create mode 100644 src/kdeclarative/kdeclarative.h create mode 100644 src/kdeclarative/private/kdeclarative_p.h create mode 100644 src/kdeclarative/private/kiconprovider.cpp create mode 100644 src/kdeclarative/private/kiconprovider_p.h create mode 100644 src/kdeclarative/private/kioaccessmanagerfactory.cpp create mode 100644 src/kdeclarative/private/kioaccessmanagerfactory_p.h create mode 100644 src/kdeclarative/private/qmlobject_p.h create mode 100644 src/kdeclarative/qmlobject.cpp create mode 100644 src/kdeclarative/qmlobject.h create mode 100644 src/kdeclarative/qmlobjectsharedengine.cpp create mode 100644 src/kdeclarative/qmlobjectsharedengine.h create mode 100644 src/kpackagelauncherqml/CMakeLists.txt create mode 100644 src/kpackagelauncherqml/main.cpp create mode 100644 src/qmlcontrols/CMakeLists.txt create mode 100644 src/qmlcontrols/draganddrop/CMakeLists.txt create mode 100644 src/qmlcontrols/draganddrop/DeclarativeDragArea.cpp create mode 100644 src/qmlcontrols/draganddrop/DeclarativeDragArea.h create mode 100644 src/qmlcontrols/draganddrop/DeclarativeDragDropEvent.cpp create mode 100644 src/qmlcontrols/draganddrop/DeclarativeDragDropEvent.h create mode 100644 src/qmlcontrols/draganddrop/DeclarativeDropArea.cpp create mode 100644 src/qmlcontrols/draganddrop/DeclarativeDropArea.h create mode 100644 src/qmlcontrols/draganddrop/DeclarativeMimeData.cpp create mode 100644 src/qmlcontrols/draganddrop/DeclarativeMimeData.h create mode 100644 src/qmlcontrols/draganddrop/Mainpage.dox create mode 100644 src/qmlcontrols/draganddrop/MimeDataWrapper.cpp create mode 100644 src/qmlcontrols/draganddrop/MimeDataWrapper.h create mode 100644 src/qmlcontrols/draganddrop/draganddropplugin.cpp create mode 100644 src/qmlcontrols/draganddrop/draganddropplugin.h create mode 100644 src/qmlcontrols/draganddrop/qmldir create mode 100644 src/qmlcontrols/kcmcontrols/CMakeLists.txt create mode 100644 src/qmlcontrols/kcmcontrols/kcmcontrolsplugin.cpp create mode 100644 src/qmlcontrols/kcmcontrols/kcmcontrolsplugin.h create mode 100644 src/qmlcontrols/kcmcontrols/qml/GridDelegate.qml create mode 100644 src/qmlcontrols/kcmcontrols/qml/GridView.qml create mode 100644 src/qmlcontrols/kcmcontrols/qml/GridViewKCM.qml create mode 100644 src/qmlcontrols/kcmcontrols/qml/SimpleKCM.qml create mode 100644 src/qmlcontrols/kcmcontrols/qml/qmldir create mode 100644 src/qmlcontrols/kconfig/CMakeLists.txt create mode 100644 src/qmlcontrols/kconfig/kauthorizedproxy.cpp create mode 100644 src/qmlcontrols/kconfig/kauthorizedproxy.h create mode 100644 src/qmlcontrols/kconfig/kconfigplugin.cpp create mode 100644 src/qmlcontrols/kconfig/kconfigplugin.h create mode 100644 src/qmlcontrols/kconfig/qmldir create mode 100644 src/qmlcontrols/kcoreaddons/CMakeLists.txt create mode 100644 src/qmlcontrols/kcoreaddons/formats.cpp create mode 100644 src/qmlcontrols/kcoreaddons/formats.h create mode 100644 src/qmlcontrols/kcoreaddons/kcoreaddonsplugin.cpp create mode 100644 src/qmlcontrols/kcoreaddons/kcoreaddonsplugin.h create mode 100644 src/qmlcontrols/kcoreaddons/kuserproxy.cpp create mode 100644 src/qmlcontrols/kcoreaddons/kuserproxy.h create mode 100644 src/qmlcontrols/kcoreaddons/qmldir create mode 100644 src/qmlcontrols/kioplugin/CMakeLists.txt create mode 100644 src/qmlcontrols/kioplugin/kioplugin.cpp create mode 100644 src/qmlcontrols/kioplugin/kioplugin.h create mode 100644 src/qmlcontrols/kioplugin/krunproxy.cpp create mode 100644 src/qmlcontrols/kioplugin/krunproxy.h create mode 100644 src/qmlcontrols/kioplugin/qmldir create mode 100644 src/qmlcontrols/kquickcontrols/CMakeLists.txt create mode 100644 src/qmlcontrols/kquickcontrols/ColorButton.qml create mode 100644 src/qmlcontrols/kquickcontrols/KeySequenceItem.qml create mode 100644 src/qmlcontrols/kquickcontrols/README create mode 100644 src/qmlcontrols/kquickcontrols/private/CMakeLists.txt create mode 100644 src/qmlcontrols/kquickcontrols/private/keysequencehelper.cpp create mode 100644 src/qmlcontrols/kquickcontrols/private/keysequencehelper.h create mode 100644 src/qmlcontrols/kquickcontrols/private/kquickcontrolsprivateplugin.cpp create mode 100644 src/qmlcontrols/kquickcontrols/private/kquickcontrolsprivateplugin.h create mode 100644 src/qmlcontrols/kquickcontrols/private/qmldir create mode 100644 src/qmlcontrols/kquickcontrols/private/translationcontext.cpp create mode 100644 src/qmlcontrols/kquickcontrols/private/translationcontext.h create mode 100644 src/qmlcontrols/kquickcontrols/qmldir create mode 100644 src/qmlcontrols/kquickcontrolsaddons/CMakeLists.txt create mode 100644 src/qmlcontrols/kquickcontrolsaddons/Mainpage.dox create mode 100644 src/qmlcontrols/kquickcontrolsaddons/clipboard.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/clipboard.h create mode 100644 src/qmlcontrols/kquickcontrolsaddons/columnproxymodel.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/columnproxymodel.h create mode 100644 src/qmlcontrols/kquickcontrolsaddons/config-kquickcontrolsaddons.h.cmake create mode 100644 src/qmlcontrols/kquickcontrolsaddons/eventgenerator.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/eventgenerator.h create mode 100644 src/qmlcontrols/kquickcontrolsaddons/icondialog.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/icondialog.h create mode 100644 src/qmlcontrols/kquickcontrolsaddons/kcmshell.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/kcmshell.h create mode 100644 src/qmlcontrols/kquickcontrolsaddons/kquickcontrolsaddonsplugin.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/kquickcontrolsaddonsplugin.h create mode 100644 src/qmlcontrols/kquickcontrolsaddons/mimedatabase.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/mimedatabase.h create mode 100644 src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.h create mode 100644 src/qmlcontrols/kquickcontrolsaddons/plotter.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/plotter.h create mode 100644 src/qmlcontrols/kquickcontrolsaddons/qiconitem.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/qiconitem.h create mode 100644 src/qmlcontrols/kquickcontrolsaddons/qimageitem.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/qimageitem.h create mode 100644 src/qmlcontrols/kquickcontrolsaddons/qmldir create mode 100644 src/qmlcontrols/kquickcontrolsaddons/qpixmapitem.cpp create mode 100644 src/qmlcontrols/kquickcontrolsaddons/qpixmapitem.h create mode 100644 src/qmlcontrols/kwindowsystemplugin/CMakeLists.txt create mode 100644 src/qmlcontrols/kwindowsystemplugin/kwindowsystemplugin.cpp create mode 100644 src/qmlcontrols/kwindowsystemplugin/kwindowsystemplugin.h create mode 100644 src/qmlcontrols/kwindowsystemplugin/kwindowsystemproxy.cpp create mode 100644 src/qmlcontrols/kwindowsystemplugin/kwindowsystemproxy.h create mode 100644 src/qmlcontrols/kwindowsystemplugin/qmldir create mode 100644 src/quickaddons/CMakeLists.txt create mode 100644 src/quickaddons/configmodule.cpp create mode 100644 src/quickaddons/configmodule.h create mode 100644 src/quickaddons/imagetexturescache.cpp create mode 100644 src/quickaddons/imagetexturescache.h create mode 100644 src/quickaddons/managedtexturenode.cpp create mode 100644 src/quickaddons/managedtexturenode.h create mode 100644 src/quickaddons/qtquicksettings.cpp create mode 100644 src/quickaddons/qtquicksettings.h create mode 100644 src/quickaddons/quickviewsharedengine.cpp create mode 100644 src/quickaddons/quickviewsharedengine.h create mode 100644 src/quickaddons/renderer.kcfg create mode 100644 src/quickaddons/renderersettings.kcfgc create mode 100644 tests/CMakeLists.txt create mode 100644 tests/colorButtonTest.qml create mode 100644 tests/eventgenerator.qml create mode 100644 tests/helloworld/contents/ui/main.qml create mode 100644 tests/helloworld/metadata.desktop create mode 100644 tests/helloworldnowindow/contents/ui/main.qml create mode 100644 tests/helloworldnowindow/metadata.desktop create mode 100644 tests/icondialog.qml create mode 100644 tests/kdeclarativetest.cpp create mode 100644 tests/mouseeventlistenertest.qml create mode 100644 tests/plotter.qml create mode 100644 tests/qiconitem_resize.qml create mode 100644 tests/qiconitem_test.qml create mode 100644 tests/qimageitemtest.cpp create mode 100644 tests/qimageitemtest.qml create mode 100644 tests/test.qml create mode 100644 tests/testimage.png create mode 100644 tests/testimage@2x.png diff --git a/.arcconfig b/.arcconfig new file mode 100644 index 0000000..377c7ec --- /dev/null +++ b/.arcconfig @@ -0,0 +1,3 @@ +{ + "phabricator.uri" : "https://phabricator.kde.org/" +} diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..26ac8b6 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,148 @@ +cmake_minimum_required(VERSION 3.0) + +set(KF5_VERSION "5.42.0") # handled by release scripts +set(KF5_DEP_VERSION "5.42.0") # handled by release scripts +project(KDeclarative VERSION ${KF5_VERSION}) + +# Dependencies +include(FeatureSummary) +find_package(ECM 5.42.0 NO_MODULE) +set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules") +feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) + +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) + +set(REQUIRED_QT_VERSION 5.7.0) + +find_package(Qt5 ${REQUIRED_QT_VERSION} NO_MODULE REQUIRED Qml Quick Gui) +include(KDEInstallDirs) +include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) +include(KDECMakeSettings) + +find_package(KF5Config ${KF5_DEP_VERSION} REQUIRED) +find_package(KF5I18n ${KF5_DEP_VERSION} REQUIRED) +find_package(KF5IconThemes ${KF5_DEP_VERSION} REQUIRED) +find_package(KF5KIO ${KF5_DEP_VERSION} REQUIRED) +find_package(KF5WidgetsAddons ${KF5_DEP_VERSION} REQUIRED) +find_package(KF5WindowSystem ${KF5_DEP_VERSION} REQUIRED) +find_package(KF5GlobalAccel ${KF5_DEP_VERSION} REQUIRED) +find_package(KF5GuiAddons ${KF5_DEP_VERSION} REQUIRED) +find_package(KF5Package ${KF5_DEP_VERSION} REQUIRED) + +######################################################################### + +add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0) + +#add_definitions(-Wno-deprecated) +add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) +add_definitions(-DQT_NO_URL_CAST_FROM_STRING) + +remove_definitions(-DQT_STRICT_ITERATORS -DQT_NO_KEYWORDS) + + + +# Includes + +include(GenerateExportHeader) +include(ECMSetupVersion) +include(ECMGenerateHeaders) +include(CMakePackageConfigHelpers) +include(ECMAddQch) + +option(BUILD_EXAMPLES "Build and install examples." OFF) +option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF) +add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)") + + +# ECM setup +ecm_setup_version( + PROJECT + VARIABLE_PREFIX KDECLARATIVE + VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kdeclarative_version.h" + PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5DeclarativeConfigVersion.cmake" + SOVERSION 5) + +# Subdirectories +add_definitions(-DTRANSLATION_DOMAIN=\"kdeclarative5\") +if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") + ki18n_install(po) +endif() + +find_package(epoxy) +set_package_properties(epoxy PROPERTIES DESCRIPTION "libepoxy" + URL "http://github.com/anholt/libepoxy" + TYPE OPTIONAL + PURPOSE "OpenGL dispatch library" + ) + +set(HAVE_EPOXY 0) +if(epoxy_FOUND) + set(HAVE_EPOXY 1) +endif() + +add_subdirectory(autotests) +add_subdirectory(src) +if(KF5Config_FOUND AND KF5I18n_FOUND AND KF5IconThemes_FOUND AND KF5KIO_FOUND) + add_subdirectory(tests) +endif() + +# Create a Config.cmake and a ConfigVersion.cmake file and install them +set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5Declarative") + +if (BUILD_QCH) + ecm_install_qch_export( + TARGETS KF5Declarative_QCH + FILE KF5DeclarativeQchTargets.cmake + DESTINATION "${CMAKECONFIG_INSTALL_DIR}" + COMPONENT Devel + ) + set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5DeclarativeQchTargets.cmake\")") +endif() + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/KF5DeclarativeConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/KF5DeclarativeConfig.cmake" + INSTALL_DESTINATION "${CMAKECONFIG_INSTALL_DIR}" +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/KF5DeclarativeConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/KF5DeclarativeConfigVersion.cmake" + DESTINATION "${CMAKECONFIG_INSTALL_DIR}" + COMPONENT Devel +) + +install(EXPORT + KF5DeclarativeTargets + DESTINATION "${CMAKECONFIG_INSTALL_DIR}" + FILE KF5DeclarativeTargets.cmake + NAMESPACE KF5:: + COMPONENT Devel +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/kdeclarative_version.h" + DESTINATION "${KDE_INSTALL_INCLUDEDIR_KF5}" + COMPONENT Devel +) + +feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) + +if(KF5Config_FOUND AND KF5I18n_FOUND AND KF5IconThemes_FOUND AND KF5KIO_FOUND) + message("Dependencies for libkdeclarative found: it will be built") +else() + message("In order to build libkdeclarative you need KF5Config, KF5I18n, KF5IconThemes and KF5KIO") +endif() + +if(KF5I18n_FOUND AND KF5WidgetsAddons_FOUND AND KF5WindowSystem_FOUND AND KF5GlobalAccel_FOUND AND KF5KIO_FOUND AND KF5GuiAddons_FOUND) + message("Dependencies for KQuickControls found: it will be built") +else() + message("In order to build KQuickControls you need KF5I18n, KF5WidgetsAddons, KF5WindowSystem, KF5GlobalAccel, KF5KIO and KF5GuiAddons") +endif() + +if(KF5CoreAddons_FOUND) + message("Dependencies for KCoreAddons QML bindings found; it will be built") +else() + message("In order to build KCoreAddons QML bindings you need KCoreAddons") +endif() + diff --git a/COPYING.LIB b/COPYING.LIB new file mode 100644 index 0000000..2d2d780 --- /dev/null +++ b/COPYING.LIB @@ -0,0 +1,510 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs must +be allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should +have at least the "copyright" line and a pointer to where the full +notice is found. + + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/KF5DeclarativeConfig.cmake.in b/KF5DeclarativeConfig.cmake.in new file mode 100644 index 0000000..a155e97 --- /dev/null +++ b/KF5DeclarativeConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) +find_dependency(Qt5Quick "@REQUIRED_QT_VERSION@") +find_dependency(KF5Config "@KF5_DEP_VERSION@") +find_dependency(KF5Package "@KF5_DEP_VERSION@") + +include("${CMAKE_CURRENT_LIST_DIR}/KF5DeclarativeTargets.cmake") +@PACKAGE_INCLUDE_QCHTARGETS@ diff --git a/README.md b/README.md new file mode 100644 index 0000000..6e41467 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# KDeclarative + +Integration of QML and KDE work spaces + +## Introduction + +KDeclarative provides integration of QML and KDE work spaces. +It's comprises two parts: a library used by the C++ part of your application +to intergrate QML with KDE Frameworks specific features, and a series of +QML imports that offer bindings to some of the Frameworks. + +## KDeclarative library + +KDeclarative exposes 3 namespaced classes: KDeclarative::KDeclarative, KDeclarative::QmlObject, KDeclarative::ConfigPropertyMap + +### KDeclarative::KDeclarative + +The KDeclarative class is used to manipulate the QQmlEngine instance used by the application and to get some informations about the platform, that influences the behavior of the QML components. + +In order to use it, create an instance of KDeclarative, and as soon as you have a pointer to your QQmlEngine, call setupBindings: + + KDeclarative::KDeclarative decl; + decl.setupBindings(engine); + +This will add the following things to the engine: +* use a KIOAccessManagerFactory instead of the stock QQmlNetworkAccessManagerFactory +* set a new rootContextObject() that exposes all the i18n() functions from the KI18n framework. + they will be available in the global QML context: just call i18n() from anywhere in your QML code. +* Add a QML icon provider, that makes possible for the Image {} element to load stuff from the scheme "image:/" + +### KDeclarative::QmlObject + + + +### KDeclarative::ConfigPropertyMap + diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt new file mode 100644 index 0000000..2d1fed0 --- /dev/null +++ b/autotests/CMakeLists.txt @@ -0,0 +1,18 @@ +INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/..") + +include(ECMAddTests) + +find_package(Qt5Test REQUIRED) + +ecm_add_test(columnproxymodeltest.cpp + ../src/qmlcontrols/kquickcontrolsaddons/columnproxymodel.cpp + modeltest.cpp + TEST_NAME fullmodelaccesstest + LINK_LIBRARIES Qt5::Gui Qt5::Test) + +ecm_add_test(quickviewsharedengine.cpp + util.cpp + TEST_NAME quickviewsharedengine + LINK_LIBRARIES Qt5::Quick KF5::QuickAddons Qt5::Test) + + diff --git a/autotests/columnproxymodeltest.cpp b/autotests/columnproxymodeltest.cpp new file mode 100644 index 0000000..96fd07e --- /dev/null +++ b/autotests/columnproxymodeltest.cpp @@ -0,0 +1,90 @@ +/* + * Copyright 2012 Aleix Pol Gonzalez + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ +#include "columnproxymodeltest.h" +#include "../src/qmlcontrols/kquickcontrolsaddons/columnproxymodel.h" +#include "modeltest.h" +#include +#include +#include + +QTEST_MAIN(ColumnProxyModelTest) + +void ColumnProxyModelTest::testInit() +{ + qRegisterMetaType("QModelIndex"); + + ColumnProxyModel* listify = new ColumnProxyModel; + QSignalSpy spy(listify, SIGNAL(rowsInserted(QModelIndex, int, int))); + + new ModelTest(listify, listify); + QStandardItemModel* m = new QStandardItemModel(listify); + listify->setRootIndex(QModelIndex()); + listify->setSourceModel(m); + m->appendRow(new QStandardItem(QStringLiteral("lalalal"))); + m->appendRow(new QStandardItem(QStringLiteral("lalalal"))); + m->appendRow(new QStandardItem(QStringLiteral("lalalal"))); + m->appendRow(new QStandardItem(QStringLiteral("lalalal"))); + QStandardItem* item = new QStandardItem(QStringLiteral("lalalal")); + item->appendRow(new QStandardItem(QStringLiteral("lelele"))); + item->appendRow(new QStandardItem(QStringLiteral("lelele"))); + m->appendRow(item); + item->appendRow(new QStandardItem(QStringLiteral("lelele"))); + + QCOMPARE(listify->rowCount(), 5); + QCOMPARE(spy.count(), 5); + + ColumnProxyModel* listifyB = new ColumnProxyModel; + new ModelTest(listifyB, listifyB); + listifyB->setSourceModel(m); + QCOMPARE(listifyB->rowCount(), 5); + + ColumnProxyModel* listifyC = new ColumnProxyModel; + new ModelTest(listifyC, listifyC); + listifyC->setRootIndex(item->index()); + QCOMPARE(listifyC->rowCount(), 3); + + delete listify; + delete listifyB; + delete listifyC; +} + +void ColumnProxyModelTest::testSet() +{ + ColumnProxyModel* listify = new ColumnProxyModel; + QSignalSpy spy(listify, SIGNAL(rowsInserted(QModelIndex, int, int))); + + new ModelTest(listify, listify); + QStandardItemModel* m = new QStandardItemModel(listify); + listify->setRootIndex(QModelIndex()); + listify->setSourceModel(m); + m->appendRow(new QStandardItem(QStringLiteral("lalalal"))); + m->appendRow(new QStandardItem(QStringLiteral("lalalal"))); + m->appendRow(new QStandardItem(QStringLiteral("lalalal"))); + m->appendRow(new QStandardItem(QStringLiteral("lalalal"))); + QStandardItem* item = new QStandardItem(QStringLiteral("lalalal")); + item->appendRow(new QStandardItem(QStringLiteral("lelele"))); + item->appendRow(new QStandardItem(QStringLiteral("lelele"))); + m->appendRow(item); + item->appendRow(new QStandardItem(QStringLiteral("lelele"))); + + const QString newString = QStringLiteral("fu"); + QModelIndex changeIndex = listify->indexAt(0); + listify->setData(changeIndex, QVariant::fromValue(newString), Qt::DisplayRole); + QCOMPARE(changeIndex.data(Qt::DisplayRole).toString(), newString); +} diff --git a/autotests/columnproxymodeltest.h b/autotests/columnproxymodeltest.h new file mode 100644 index 0000000..c7c57cb --- /dev/null +++ b/autotests/columnproxymodeltest.h @@ -0,0 +1,33 @@ +/* + * Copyright 2012 Aleix Pol Gonzalez + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ +#ifndef COLUMNPROXYMODELTEST_H +#define COLUMNPROXYMODELTEST_H + +#include + +class ColumnProxyModelTest : public QObject +{ + Q_OBJECT + + private Q_SLOTS: + void testInit(); + void testSet(); +}; + +#endif diff --git a/autotests/data/resizemodeitem.qml b/autotests/data/resizemodeitem.qml new file mode 100644 index 0000000..ed73009 --- /dev/null +++ b/autotests/data/resizemodeitem.qml @@ -0,0 +1,5 @@ +import QtQuick 2.0 +Item { + width: 200 + height: 200 +} diff --git a/autotests/modeltest.cpp b/autotests/modeltest.cpp new file mode 100644 index 0000000..887171e --- /dev/null +++ b/autotests/modeltest.cpp @@ -0,0 +1,564 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include + +#include "modeltest.h" + +#include +//#undef Q_ASSERT +//#define Q_ASSERT QVERIFY + +Q_DECLARE_METATYPE ( QModelIndex ) + +/*! + Connect to all of the models signals. Whenever anything happens recheck everything. +*/ +ModelTest::ModelTest ( QAbstractItemModel *_model, QObject *parent ) : QObject ( parent ), model ( _model ), fetchingMore ( false ) +{ + Q_ASSERT ( model ); + + connect ( model, SIGNAL (columnsAboutToBeInserted(QModelIndex,int,int)), + this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (columnsAboutToBeRemoved(QModelIndex,int,int)), + this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (columnsInserted(QModelIndex,int,int)), + this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (columnsRemoved(QModelIndex,int,int)), + this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (dataChanged(QModelIndex,QModelIndex)), + this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (headerDataChanged(Qt::Orientation,int,int)), + this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (layoutAboutToBeChanged()), this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (layoutChanged()), this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (modelReset()), this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (rowsAboutToBeInserted(QModelIndex,int,int)), + this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (rowsAboutToBeRemoved(QModelIndex,int,int)), + this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (rowsInserted(QModelIndex,int,int)), + this, SLOT (runAllTests()) ); + connect ( model, SIGNAL (rowsRemoved(QModelIndex,int,int)), + this, SLOT (runAllTests()) ); + + // Special checks for inserting/removing + connect ( model, SIGNAL (layoutAboutToBeChanged()), + this, SLOT (layoutAboutToBeChanged()) ); + connect ( model, SIGNAL (layoutChanged()), + this, SLOT (layoutChanged()) ); + + connect ( model, SIGNAL (rowsAboutToBeInserted(QModelIndex,int,int)), + this, SLOT (rowsAboutToBeInserted(QModelIndex,int,int)) ); + connect ( model, SIGNAL (rowsAboutToBeRemoved(QModelIndex,int,int)), + this, SLOT (rowsAboutToBeRemoved(QModelIndex,int,int)) ); + connect ( model, SIGNAL (rowsInserted(QModelIndex,int,int)), + this, SLOT (rowsInserted(QModelIndex,int,int)) ); + connect ( model, SIGNAL (rowsRemoved(QModelIndex,int,int)), + this, SLOT (rowsRemoved(QModelIndex,int,int)) ); + + runAllTests(); +} + +void ModelTest::runAllTests() +{ + if ( fetchingMore ) + return; + nonDestructiveBasicTest(); + rowCount(); + columnCount(); + hasIndex(); + index(); + parent(); + data(); +} + +/*! + nonDestructiveBasicTest tries to call a number of the basic functions (not all) + to make sure the model doesn't outright segfault, testing the functions that makes sense. +*/ +void ModelTest::nonDestructiveBasicTest() +{ + Q_ASSERT ( model->buddy ( QModelIndex() ) == QModelIndex() ); + model->canFetchMore ( QModelIndex() ); + Q_ASSERT ( model->columnCount ( QModelIndex() ) >= 0 ); + Q_ASSERT ( model->data ( QModelIndex() ) == QVariant() ); + fetchingMore = true; + model->fetchMore ( QModelIndex() ); + fetchingMore = false; + Qt::ItemFlags flags = model->flags ( QModelIndex() ); + Q_ASSERT ( flags == Qt::ItemIsDropEnabled || flags == 0 ); + model->hasChildren ( QModelIndex() ); + model->hasIndex ( 0, 0 ); + model->headerData ( 0, Qt::Horizontal ); + model->index ( 0, 0 ); + model->itemData ( QModelIndex() ); + QVariant cache; + model->match ( QModelIndex(), -1, cache ); + model->mimeTypes(); + Q_ASSERT ( model->parent ( QModelIndex() ) == QModelIndex() ); + Q_ASSERT ( model->rowCount() >= 0 ); + QVariant variant; + model->setData ( QModelIndex(), variant, -1 ); + model->setHeaderData ( -1, Qt::Horizontal, QVariant() ); + model->setHeaderData ( 999999, Qt::Horizontal, QVariant() ); + QMap roles; + model->sibling ( 0, 0, QModelIndex() ); + model->span ( QModelIndex() ); + model->supportedDropActions(); +} + +/*! + Tests model's implementation of QAbstractItemModel::rowCount() and hasChildren() + + Models that are dynamically populated are not as fully tested here. + */ +void ModelTest::rowCount() +{ +// qDebug() << "rc"; + // check top row + QModelIndex topIndex = model->index ( 0, 0, QModelIndex() ); + int rows = model->rowCount ( topIndex ); + Q_ASSERT ( rows >= 0 ); + if ( rows > 0 ) + Q_ASSERT ( model->hasChildren ( topIndex ) == true ); + + QModelIndex secondLevelIndex = model->index ( 0, 0, topIndex ); + if ( secondLevelIndex.isValid() ) { // not the top level + // check a row count where parent is valid + rows = model->rowCount ( secondLevelIndex ); + Q_ASSERT ( rows >= 0 ); + if ( rows > 0 ) + Q_ASSERT ( model->hasChildren ( secondLevelIndex ) == true ); + } + + // The models rowCount() is tested more extensively in checkChildren(), + // but this catches the big mistakes +} + +/*! + Tests model's implementation of QAbstractItemModel::columnCount() and hasChildren() + */ +void ModelTest::columnCount() +{ + // check top row + QModelIndex topIndex = model->index ( 0, 0, QModelIndex() ); + Q_ASSERT ( model->columnCount ( topIndex ) >= 0 ); + + // check a column count where parent is valid + QModelIndex childIndex = model->index ( 0, 0, topIndex ); + if ( childIndex.isValid() ) + Q_ASSERT ( model->columnCount ( childIndex ) >= 0 ); + + // columnCount() is tested more extensively in checkChildren(), + // but this catches the big mistakes +} + +/*! + Tests model's implementation of QAbstractItemModel::hasIndex() + */ +void ModelTest::hasIndex() +{ +// qDebug() << "hi"; + // Make sure that invalid values returns an invalid index + Q_ASSERT ( model->hasIndex ( -2, -2 ) == false ); + Q_ASSERT ( model->hasIndex ( -2, 0 ) == false ); + Q_ASSERT ( model->hasIndex ( 0, -2 ) == false ); + + int rows = model->rowCount(); + int columns = model->columnCount(); + + // check out of bounds + Q_ASSERT ( model->hasIndex ( rows, columns ) == false ); + Q_ASSERT ( model->hasIndex ( rows + 1, columns + 1 ) == false ); + + if ( rows > 0 ) + Q_ASSERT ( model->hasIndex ( 0, 0 ) == true ); + + // hasIndex() is tested more extensively in checkChildren(), + // but this catches the big mistakes +} + +/*! + Tests model's implementation of QAbstractItemModel::index() + */ +void ModelTest::index() +{ +// qDebug() << "i"; + // Make sure that invalid values returns an invalid index + Q_ASSERT ( model->index ( -2, -2 ) == QModelIndex() ); + Q_ASSERT ( model->index ( -2, 0 ) == QModelIndex() ); + Q_ASSERT ( model->index ( 0, -2 ) == QModelIndex() ); + + int rows = model->rowCount(); + int columns = model->columnCount(); + + if ( rows == 0 ) + return; + + // Catch off by one errors + Q_ASSERT ( model->index ( rows, columns ) == QModelIndex() ); + Q_ASSERT ( model->index ( 0, 0 ).isValid() == true ); + + // Make sure that the same index is *always* returned + QModelIndex a = model->index ( 0, 0 ); + QModelIndex b = model->index ( 0, 0 ); + Q_ASSERT ( a == b ); + + // index() is tested more extensively in checkChildren(), + // but this catches the big mistakes +} + +/*! + Tests model's implementation of QAbstractItemModel::parent() + */ +void ModelTest::parent() +{ +// qDebug() << "p"; + // Make sure the model wont crash and will return an invalid QModelIndex + // when asked for the parent of an invalid index. + Q_ASSERT ( model->parent ( QModelIndex() ) == QModelIndex() ); + + if ( model->rowCount() == 0 ) + return; + + // Column 0 | Column 1 | + // QModelIndex() | | + // \- topIndex | topIndex1 | + // \- childIndex | childIndex1 | + + // Common error test #1, make sure that a top level index has a parent + // that is a invalid QModelIndex. + QModelIndex topIndex = model->index ( 0, 0, QModelIndex() ); + Q_ASSERT ( model->parent ( topIndex ) == QModelIndex() ); + + // Common error test #2, make sure that a second level index has a parent + // that is the first level index. + if ( model->rowCount ( topIndex ) > 0 ) { + QModelIndex childIndex = model->index ( 0, 0, topIndex ); + Q_ASSERT ( model->parent ( childIndex ) == topIndex ); + } + + // Common error test #3, the second column should NOT have the same children + // as the first column in a row. + // Usually the second column shouldn't have children. + QModelIndex topIndex1 = model->index ( 0, 1, QModelIndex() ); + if ( model->rowCount ( topIndex1 ) > 0 ) { + QModelIndex childIndex = model->index ( 0, 0, topIndex ); + QModelIndex childIndex1 = model->index ( 0, 0, topIndex1 ); + Q_ASSERT ( childIndex != childIndex1 ); + } + + // Full test, walk n levels deep through the model making sure that all + // parent's children correctly specify their parent. + checkChildren ( QModelIndex() ); +} + +/*! + Called from the parent() test. + + A model that returns an index of parent X should also return X when asking + for the parent of the index. + + This recursive function does pretty extensive testing on the whole model in an + effort to catch edge cases. + + This function assumes that rowCount(), columnCount() and index() already work. + If they have a bug it will point it out, but the above tests should have already + found the basic bugs because it is easier to figure out the problem in + those tests then this one. + */ +void ModelTest::checkChildren ( const QModelIndex &parent, int currentDepth ) +{ + // First just try walking back up the tree. + QModelIndex p = parent; + while ( p.isValid() ) + p = p.parent(); + + // For models that are dynamically populated + if ( model->canFetchMore ( parent ) ) { + fetchingMore = true; + model->fetchMore ( parent ); + fetchingMore = false; + } + + int rows = model->rowCount ( parent ); + int columns = model->columnCount ( parent ); + + if ( rows > 0 ) + Q_ASSERT ( model->hasChildren ( parent ) ); + + // Some further testing against rows(), columns(), and hasChildren() + Q_ASSERT ( rows >= 0 ); + Q_ASSERT ( columns >= 0 ); + if ( rows > 0 ) + Q_ASSERT ( model->hasChildren ( parent ) == true ); + + //qDebug() << "parent:" << model->data(parent).toString() << "rows:" << rows + // << "columns:" << columns << "parent column:" << parent.column(); + + Q_ASSERT ( model->hasIndex ( rows + 1, 0, parent ) == false ); + for ( int r = 0; r < rows; ++r ) { + if ( model->canFetchMore ( parent ) ) { + fetchingMore = true; + model->fetchMore ( parent ); + fetchingMore = false; + } + Q_ASSERT ( model->hasIndex ( r, columns + 1, parent ) == false ); + for ( int c = 0; c < columns; ++c ) { + Q_ASSERT ( model->hasIndex ( r, c, parent ) == true ); + QModelIndex index = model->index ( r, c, parent ); + // rowCount() and columnCount() said that it existed... + Q_ASSERT ( index.isValid() == true ); + + // index() should always return the same index when called twice in a row + QModelIndex modifiedIndex = model->index ( r, c, parent ); + Q_ASSERT ( index == modifiedIndex ); + + // Make sure we get the same index if we request it twice in a row + QModelIndex a = model->index ( r, c, parent ); + QModelIndex b = model->index ( r, c, parent ); + Q_ASSERT ( a == b ); + + // Some basic checking on the index that is returned + Q_ASSERT ( index.model() == model ); + Q_ASSERT ( index.row() == r ); + Q_ASSERT ( index.column() == c ); + // While you can technically return a QVariant usually this is a sign + // of an bug in data() Disable if this really is ok in your model. +// Q_ASSERT ( model->data ( index, Qt::DisplayRole ).isValid() == true ); + + // If the next test fails here is some somewhat useful debug you play with. + + if (model->parent(index) != parent) { + qDebug() << r << c << currentDepth << model->data(index).toString() + << model->data(parent).toString(); + qDebug() << index << parent << model->parent(index); +// And a view that you can even use to show the model. +// QTreeView view; +// view.setModel(model); +// view.show(); + } + + // Check that we can get back our real parent. +// qDebug() << model->parent ( index ) << parent ; + Q_ASSERT ( model->parent ( index ) == parent ); + + // recursively go down the children + if ( model->hasChildren ( index ) && currentDepth < 10 ) { + //qDebug() << r << c << "has children" << model->rowCount(index); + checkChildren ( index, ++currentDepth ); + }/* else { if (currentDepth >= 10) qDebug() << "checked 10 deep"; };*/ + + // make sure that after testing the children that the index doesn't change. + QModelIndex newerIndex = model->index ( r, c, parent ); + Q_ASSERT ( index == newerIndex ); + } + } +} + +/*! + Tests model's implementation of QAbstractItemModel::data() + */ +void ModelTest::data() +{ + // Invalid index should return an invalid qvariant + Q_ASSERT ( !model->data ( QModelIndex() ).isValid() ); + + if ( model->rowCount() == 0 ) + return; + + // A valid index should have a valid QVariant data + Q_ASSERT ( model->index ( 0, 0 ).isValid() ); + + // shouldn't be able to set data on an invalid index + Q_ASSERT ( model->setData ( QModelIndex(), QLatin1String ( "foo" ), Qt::DisplayRole ) == false ); + + // General Purpose roles that should return a QString + QVariant variant = model->data ( model->index ( 0, 0 ), Qt::ToolTipRole ); + if ( variant.isValid() ) { + Q_ASSERT ( qVariantCanConvert ( variant ) ); + } + variant = model->data ( model->index ( 0, 0 ), Qt::StatusTipRole ); + if ( variant.isValid() ) { + Q_ASSERT ( qVariantCanConvert ( variant ) ); + } + variant = model->data ( model->index ( 0, 0 ), Qt::WhatsThisRole ); + if ( variant.isValid() ) { + Q_ASSERT ( qVariantCanConvert ( variant ) ); + } + + // General Purpose roles that should return a QSize + variant = model->data ( model->index ( 0, 0 ), Qt::SizeHintRole ); + if ( variant.isValid() ) { + Q_ASSERT ( qVariantCanConvert ( variant ) ); + } + + // General Purpose roles that should return a QFont + QVariant fontVariant = model->data ( model->index ( 0, 0 ), Qt::FontRole ); + if ( fontVariant.isValid() ) { + Q_ASSERT ( qVariantCanConvert ( fontVariant ) ); + } + + // Check that the alignment is one we know about + QVariant textAlignmentVariant = model->data ( model->index ( 0, 0 ), Qt::TextAlignmentRole ); + if ( textAlignmentVariant.isValid() ) { + int alignment = textAlignmentVariant.toInt(); + Q_ASSERT ( alignment == ( alignment & ( Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask ) ) ); + } + + // General Purpose roles that should return a QColor + QVariant colorVariant = model->data ( model->index ( 0, 0 ), Qt::BackgroundColorRole ); + if ( colorVariant.isValid() ) { + Q_ASSERT ( qVariantCanConvert ( colorVariant ) ); + } + + colorVariant = model->data ( model->index ( 0, 0 ), Qt::TextColorRole ); + if ( colorVariant.isValid() ) { + Q_ASSERT ( qVariantCanConvert ( colorVariant ) ); + } + + // Check that the "check state" is one we know about. + QVariant checkStateVariant = model->data ( model->index ( 0, 0 ), Qt::CheckStateRole ); + if ( checkStateVariant.isValid() ) { + int state = checkStateVariant.toInt(); + Q_ASSERT ( state == Qt::Unchecked || + state == Qt::PartiallyChecked || + state == Qt::Checked ); + } +} + +/*! + Store what is about to be inserted to make sure it actually happens + + \sa rowsInserted() + */ +void ModelTest::rowsAboutToBeInserted ( const QModelIndex &parent, int start, int end ) +{ + Q_UNUSED(end); +// qDebug() << "rowsAboutToBeInserted" << "start=" << start << "end=" << end << "parent=" << model->data ( parent ).toString() +// << "current count of parent=" << model->rowCount ( parent ); // << "display of last=" << model->data( model->index(start-1, 0, parent) ); +// qDebug() << model->index(start-1, 0, parent) << model->data( model->index(start-1, 0, parent) ); + Changing c; + c.parent = parent; + c.oldSize = model->rowCount ( parent ); + c.last = model->data ( model->index ( start - 1, 0, parent ) ); + c.next = model->data ( model->index ( start, 0, parent ) ); + insert.push ( c ); +} + +/*! + Confirm that what was said was going to happen actually did + + \sa rowsAboutToBeInserted() + */ +void ModelTest::rowsInserted ( const QModelIndex & parent, int start, int end ) +{ + Changing c = insert.pop(); + Q_ASSERT ( c.parent == parent ); +// qDebug() << "rowsInserted" << "start=" << start << "end=" << end << "oldsize=" << c.oldSize +// << "parent=" << model->data ( parent ).toString() << "current rowcount of parent=" << model->rowCount ( parent ); + +// for (int ii=start; ii <= end; ii++) +// { +// qDebug() << "itemWasInserted:" << ii << model->data ( model->index ( ii, 0, parent )); +// } +// qDebug(); + + Q_ASSERT ( c.oldSize + ( end - start + 1 ) == model->rowCount ( parent ) ); + Q_ASSERT ( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) ); + + if (c.next != model->data(model->index(end + 1, 0, c.parent))) { + qDebug() << start << end; + for (int i=0; i < model->rowCount(); ++i) + qDebug() << model->index(i, 0).data().toString(); + qDebug() << c.next << model->data(model->index(end + 1, 0, c.parent)); + } + + Q_ASSERT ( c.next == model->data ( model->index ( end + 1, 0, c.parent ) ) ); +} + +void ModelTest::layoutAboutToBeChanged() +{ + for ( int i = 0; i < qBound ( 0, model->rowCount(), 100 ); ++i ) + changing.append ( QPersistentModelIndex ( model->index ( i, 0 ) ) ); +} + +void ModelTest::layoutChanged() +{ + for ( int i = 0; i < changing.count(); ++i ) { + QPersistentModelIndex p = changing[i]; + Q_ASSERT ( p == model->index ( p.row(), p.column(), p.parent() ) ); + } + changing.clear(); +} + +/*! + Store what is about to be inserted to make sure it actually happens + + \sa rowsRemoved() + */ +void ModelTest::rowsAboutToBeRemoved ( const QModelIndex &parent, int start, int end ) +{ +qDebug() << "ratbr" << parent << start << end; + Changing c; + c.parent = parent; + c.oldSize = model->rowCount ( parent ); + c.last = model->data ( model->index ( start - 1, 0, parent ) ); + c.next = model->data ( model->index ( end + 1, 0, parent ) ); + remove.push ( c ); +} + +/*! + Confirm that what was said was going to happen actually did + + \sa rowsAboutToBeRemoved() + */ +void ModelTest::rowsRemoved ( const QModelIndex & parent, int start, int end ) +{ + qDebug() << "rr" << parent << start << end; + Changing c = remove.pop(); + Q_ASSERT ( c.parent == parent ); + Q_ASSERT ( c.oldSize - ( end - start + 1 ) == model->rowCount ( parent ) ); + Q_ASSERT ( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) ); + Q_ASSERT ( c.next == model->data ( model->index ( start, 0, c.parent ) ) ); +} diff --git a/autotests/modeltest.h b/autotests/modeltest.h new file mode 100644 index 0000000..9ff1615 --- /dev/null +++ b/autotests/modeltest.h @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#ifndef MODELTEST_H +#define MODELTEST_H + +#include +#include +#include + +class ModelTest : public QObject +{ + Q_OBJECT + +public: + explicit ModelTest( QAbstractItemModel *model, QObject *parent = nullptr ); + +private Q_SLOTS: + void nonDestructiveBasicTest(); + void rowCount(); + void columnCount(); + void hasIndex(); + void index(); + void parent(); + void data(); + +protected Q_SLOTS: + void runAllTests(); + void layoutAboutToBeChanged(); + void layoutChanged(); + void rowsAboutToBeInserted( const QModelIndex &parent, int start, int end ); + void rowsInserted( const QModelIndex & parent, int start, int end ); + void rowsAboutToBeRemoved( const QModelIndex &parent, int start, int end ); + void rowsRemoved( const QModelIndex & parent, int start, int end ); + +private: + void checkChildren( const QModelIndex &parent, int currentDepth = 0 ); + + QAbstractItemModel *model; + + struct Changing { + QModelIndex parent; + int oldSize; + QVariant last; + QVariant next; + }; + QStack insert; + QStack remove; + + bool fetchingMore; + + QList changing; +}; + +#endif diff --git a/autotests/quickviewsharedengine.cpp b/autotests/quickviewsharedengine.cpp new file mode 100644 index 0000000..18c7f4a --- /dev/null +++ b/autotests/quickviewsharedengine.cpp @@ -0,0 +1,213 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include +#include +#include +#include +#include +#include +#include "util.h" +#include +#include +#include +#include + +class QuickViewSharedEngineTest : public QQmlDataTest +{ + Q_OBJECT +public: + QuickViewSharedEngineTest(); + +private Q_SLOTS: + void resizemodeitem(); + void errors(); + void engine(); +}; + + +QuickViewSharedEngineTest::QuickViewSharedEngineTest() +{ +} + +void QuickViewSharedEngineTest::resizemodeitem() +{ + QWindow window; + window.setGeometry(0, 0, 400, 400); + + KQuickAddons::QuickViewSharedEngine *view = new KQuickAddons::QuickViewSharedEngine(&window); + QVERIFY(view); + view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeRootObjectToView); + QCOMPARE(QSize(0,0), view->initialSize()); + view->setSource(testFileUrl("resizemodeitem.qml")); + QQuickItem* item = qobject_cast(view->rootObject()); + QVERIFY(item); + window.show(); + + view->showNormal(); + + // initial size from root object + QCOMPARE(item->width(), 200.0); + QCOMPARE(item->height(), 200.0); + QCOMPARE(view->size(), QSize(200, 200)); + QCOMPARE(view->size(), view->sizeHint()); + QCOMPARE(view->size(), view->initialSize()); + + // size update from view + view->resize(QSize(80,100)); + + QTRY_COMPARE(item->width(), 80.0); + QCOMPARE(item->height(), 100.0); + QCOMPARE(view->size(), QSize(80, 100)); + QCOMPARE(view->size(), view->sizeHint()); + + view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeViewToRootObject); + + // size update from view disabled + view->resize(QSize(60,80)); + QCOMPARE(item->width(), 80.0); + QCOMPARE(item->height(), 100.0); + QTest::qWait(50); + QCOMPARE(view->size(), QSize(60, 80)); + + // size update from root object + item->setWidth(250); + item->setHeight(350); + QCOMPARE(item->width(), 250.0); + QCOMPARE(item->height(), 350.0); + QTRY_COMPARE(view->size(), QSize(250, 350)); + QCOMPARE(view->size(), QSize(250, 350)); + QCOMPARE(view->size(), view->sizeHint()); + + // reset window + window.hide(); + delete view; + view = new KQuickAddons::QuickViewSharedEngine(&window); + QVERIFY(view); + view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeViewToRootObject); + view->setSource(testFileUrl("resizemodeitem.qml")); + item = qobject_cast(view->rootObject()); + QVERIFY(item); + window.show(); + + view->showNormal(); + + // initial size for root object + QCOMPARE(item->width(), 200.0); + QCOMPARE(item->height(), 200.0); + QCOMPARE(view->size(), view->sizeHint()); + QCOMPARE(view->size(), view->initialSize()); + + // size update from root object + item->setWidth(80); + item->setHeight(100); + QCOMPARE(item->width(), 80.0); + QCOMPARE(item->height(), 100.0); + QTRY_COMPARE(view->size(), QSize(80, 100)); + QCOMPARE(view->size(), QSize(80, 100)); + QCOMPARE(view->size(), view->sizeHint()); + + // size update from root object disabled + view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeRootObjectToView); + item->setWidth(60); + item->setHeight(80); + QCOMPARE(view->width(), 80); + QCOMPARE(view->height(), 100); + QCOMPARE(QSize(item->width(), item->height()), view->sizeHint()); + + // size update from view + view->resize(QSize(200,300)); + QTRY_COMPARE(item->width(), 200.0); + QCOMPARE(item->height(), 300.0); + QCOMPARE(view->size(), QSize(200, 300)); + QCOMPARE(view->size(), view->sizeHint()); + + delete view; + + // if we set a specific size for the view then it should keep that size + // for SizeRootObjectToView mode. + view = new KQuickAddons::QuickViewSharedEngine(&window); + view->resize(300, 300); + view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeRootObjectToView); + QCOMPARE(QSize(0,0), view->initialSize()); + view->setSource(testFileUrl("resizemodeitem.qml"));qWarning()<<"bbb"<size(); + view->resize(300, 300);qWarning()<<"ccc"<size(); + item = qobject_cast(view->rootObject()); + QVERIFY(item); + + view->showNormal(); + QTest::qWait(50); + + // initial size from root object + QCOMPARE(item->width(), 300.0); + QCOMPARE(item->height(), 300.0); + QCOMPARE(view->size(), QSize(300, 300)); + QCOMPARE(view->size(), view->sizeHint()); + QCOMPARE(view->initialSize(), QSize(200, 200)); // initial object size + + delete view; +} + +void QuickViewSharedEngineTest::errors() +{ + KQuickAddons::QuickViewSharedEngine *view = new KQuickAddons::QuickViewSharedEngine; + QVERIFY(view); + QQmlTestMessageHandler messageHandler; + view->setSource(testFileUrl("error1.qml")); + QCOMPARE(view->status(), QQmlComponent::Error); + QCOMPARE(view->errors().count(), 1); + delete view; +} + +void QuickViewSharedEngineTest::engine() +{ + //test if engines are actually shared + //test if the engine gets deleted when the last view dies + KQuickAddons::QuickViewSharedEngine *view = new KQuickAddons::QuickViewSharedEngine(); + QQmlEngine *engine = view->engine(); + + KQuickAddons::QuickViewSharedEngine *view2 = new KQuickAddons::QuickViewSharedEngine(); + QQmlEngine *engine2 = view2->engine(); + + delete view; + delete view2; + + view = new KQuickAddons::QuickViewSharedEngine(); + QQmlEngine *engine3 = view->engine(); + + QCOMPARE(engine, engine2); + QVERIFY(engine != engine3); +} + +QTEST_MAIN(QuickViewSharedEngineTest) + +#include "quickviewsharedengine.moc" diff --git a/autotests/util.cpp b/autotests/util.cpp new file mode 100644 index 0000000..e4d7303 --- /dev/null +++ b/autotests/util.cpp @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "util.h" + +#include +#include +#include +#include +#include +#include +#include + +QQmlDataTest *QQmlDataTest::m_instance = nullptr; + +QQmlDataTest::QQmlDataTest() : + m_dataDirectory(QFINDTESTDATA("data")), + + m_dataDirectoryUrl(QUrl::fromLocalFile(m_dataDirectory + QLatin1Char('/'))) +{ + m_instance = this; +} + +QQmlDataTest::~QQmlDataTest() +{ + m_instance = nullptr; +} + +void QQmlDataTest::initTestCase() +{ + QVERIFY2(!m_dataDirectory.isEmpty(), "'data' directory not found"); + m_directory = QFileInfo(m_dataDirectory).absolutePath(); + QVERIFY2(QDir::setCurrent(m_directory), qPrintable(QLatin1String("Could not chdir to ") + m_directory)); +} + +QString QQmlDataTest::testFile(const QString &fileName) const +{ + if (m_directory.isEmpty()) + qFatal("QQmlDataTest::initTestCase() not called."); + QString result = m_dataDirectory; + result += QLatin1Char('/'); + result += fileName; + return result; +} + +QByteArray QQmlDataTest::msgComponentError(const QQmlComponent &c, + const QQmlEngine *engine /* = 0 */) +{ + QString result; + const QList errors = c.errors(); + QTextStream str(&result); + str << "Component '" << c.url().toString() << "' has " << errors.size() + << " errors: '"; + for (int i = 0; i < errors.size(); ++i) { + if (i) + str << ", '"; + str << errors.at(i).toString() << '\''; + + } + if (!engine) + if (QQmlContext *context = c.creationContext()) + engine = context->engine(); + if (engine) { + str << " Import paths: (" << engine->importPathList().join(QStringLiteral(", ")) + << ") Plugin paths: (" << engine->pluginPathList().join(QStringLiteral(", ")) + << ')'; + } + return result.toLocal8Bit(); +} + +Q_GLOBAL_STATIC(QMutex, qQmlTestMessageHandlerMutex) + +QQmlTestMessageHandler *QQmlTestMessageHandler::m_instance = nullptr; + +void QQmlTestMessageHandler::messageHandler(QtMsgType, const QMessageLogContext &, const QString &message) +{ + QMutexLocker locker(qQmlTestMessageHandlerMutex()); + if (QQmlTestMessageHandler::m_instance) + QQmlTestMessageHandler::m_instance->m_messages.push_back(message); +} + +QQmlTestMessageHandler::QQmlTestMessageHandler() +{ + QMutexLocker locker(qQmlTestMessageHandlerMutex()); + Q_ASSERT(!QQmlTestMessageHandler::m_instance); + QQmlTestMessageHandler::m_instance = this; + m_oldHandler = qInstallMessageHandler(messageHandler); +} + +QQmlTestMessageHandler::~QQmlTestMessageHandler() +{ + QMutexLocker locker(qQmlTestMessageHandlerMutex()); + Q_ASSERT(QQmlTestMessageHandler::m_instance); + qInstallMessageHandler(m_oldHandler); + QQmlTestMessageHandler::m_instance = nullptr; +} diff --git a/autotests/util.h b/autotests/util.h new file mode 100644 index 0000000..fbaa849 --- /dev/null +++ b/autotests/util.h @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQMLTESTUTILS_H +#define QQMLTESTUTILS_H + +#include +#include +#include +#include +#include + +QT_FORWARD_DECLARE_CLASS(QQmlComponent) +QT_FORWARD_DECLARE_CLASS(QQmlEngine) + +/* Base class for tests with data that are located in a "data" subfolder. */ + +class QQmlDataTest : public QObject +{ + Q_OBJECT +public: + QQmlDataTest(); + virtual ~QQmlDataTest(); + + QString testFile(const QString &fileName) const; + inline QString testFile(const char *fileName) const + { return testFile(QLatin1String(fileName)); } + inline QUrl testFileUrl(const QString &fileName) const + { return QUrl::fromLocalFile(testFile(fileName)); } + inline QUrl testFileUrl(const char *fileName) const + { return testFileUrl(QLatin1String(fileName)); } + + inline QString dataDirectory() const { return m_dataDirectory; } + inline QUrl dataDirectoryUrl() const { return m_dataDirectoryUrl; } + inline QString directory() const { return m_directory; } + + static inline QQmlDataTest *instance() { return m_instance; } + + static QByteArray msgComponentError(const QQmlComponent &, + const QQmlEngine *engine = nullptr); + +public Q_SLOTS: + virtual void initTestCase(); + +private: + static QQmlDataTest *m_instance; + + const QString m_dataDirectory; + const QUrl m_dataDirectoryUrl; + QString m_directory; +}; + +class QQmlTestMessageHandler +{ + Q_DISABLE_COPY(QQmlTestMessageHandler) +public: + QQmlTestMessageHandler(); + ~QQmlTestMessageHandler(); + + const QStringList &messages() const { return m_messages; } + const QString messageString() const { return m_messages.join(QLatin1Char('\n')); } + + void clear() { m_messages.clear(); } + +private: + static void messageHandler(QtMsgType, const QMessageLogContext &, const QString &message); + + static QQmlTestMessageHandler *m_instance; + QStringList m_messages; + QtMessageHandler m_oldHandler; +}; + +#endif // QQMLTESTUTILS_H diff --git a/cmake/Findepoxy.cmake b/cmake/Findepoxy.cmake new file mode 100644 index 0000000..6163859 --- /dev/null +++ b/cmake/Findepoxy.cmake @@ -0,0 +1,48 @@ +# - Try to find libepoxy +# Once done this will define +# +# epoxy_FOUND - System has libepoxy +# epoxy_LIBRARY - The libepoxy library +# epoxy_INCLUDE_DIR - The libepoxy include dir +# epoxy_DEFINITIONS - Compiler switches required for using libepoxy + +# Copyright (c) 2014 Fredrik Höglund +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. + +if (NOT WIN32) + find_package(PkgConfig) + pkg_check_modules(PKG_epoxy QUIET epoxy) + + set(epoxy_DEFINITIONS ${PKG_epoxy_CFLAGS}) + + find_path(epoxy_INCLUDE_DIR NAMES epoxy/gl.h HINTS ${PKG_epoxy_INCLUDEDIR} ${PKG_epoxy_INCLUDE_DIRS}) + find_library(epoxy_LIBRARY NAMES epoxy HINTS ${PKG_epoxy_LIBDIR} ${PKG_epoxy_LIBRARY_DIRS}) + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(epoxy DEFAULT_MSG epoxy_LIBRARY epoxy_INCLUDE_DIR) + + mark_as_advanced(epoxy_INCLUDE_DIR epoxy_LIBRARY) +endif() diff --git a/metainfo.yaml b/metainfo.yaml new file mode 100644 index 0000000..96900e0 --- /dev/null +++ b/metainfo.yaml @@ -0,0 +1,21 @@ +maintainer: mart +description: Provides integration of QML and KDE Frameworks +tier: 3 +type: functional +platforms: + - name: Linux + - name: FreeBSD + - name: Windows + - name: MacOSX + note: The supported remote Urls depends from what runtime kio slaves plugins are installed +portingAid: false +deprecated: false +release: true +libraries: + - qmake: KDeclarative + cmake: "KF5::Declarative" +cmakename: KF5Declarative + +public_lib: true +group: Frameworks +subgroup: Tier 3 diff --git a/po/af/kdeclarative5.po b/po/af/kdeclarative5.po new file mode 100644 index 0000000..d0faf4b --- /dev/null +++ b/po/af/kdeclarative5.po @@ -0,0 +1,102 @@ +# UTF-8 test:äëïöü +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4 stable\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2006-01-12 16:33+0200\n" +"Last-Translator: JUANITA FRANZ \n" +"Language-Team: AFRIKAANS \n" +"Language: af\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frikkie Thirion,Juanita Franz " + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "frix@expertron.co.za,juanita.franz@vr-web.de " + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "definieër die program skrif tipe." + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "Kortpad" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflik met Standaard Program Kortpad" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Die '%1' sleutel kombinasie is alreeds toegekan aan die standaard aksie " +"\"%2\" geallokeer.\n" +"Wil jy dit eerder aan die nuwe aksie allokeer?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reassign" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, fuzzy, kde-format +#| msgid "Input file" +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Invoer lêer" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, fuzzy, kde-format +#| msgid "None" +msgctxt "No shortcut defined" +msgid "None" +msgstr "Geen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +#| msgid "Untrusted" +msgid "Unsupported Key" +msgstr "Wantrou" diff --git a/po/ar/kdeclarative5.po b/po/ar/kdeclarative5.po new file mode 100644 index 0000000..4a6783a --- /dev/null +++ b/po/ar/kdeclarative5.po @@ -0,0 +1,122 @@ +# translation of kdelibs4.po to Arabic +# translation of kdelibs4.po to +# Copyright (C) 2001-2003, 2004, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# Isam Bayazidi , 2001,2003. +# Sayed Jaffer Al-Mosawi , 2002. +# Hicham Amaoui , 2002. +# Youcef Rabah Rahal , 2003. +# Ahmad M. Zawawi , 2004. +# Mohammed Gamal , 2004. +# Usamah Ali Al-Maqdad , 2004. +# Munzir Taha , 2004. +# Mohamed SAAD , 2006. +# Khaled Hosny , 2007. +# Youssef Chahibi , 2007. +# zayed , 2008, 2009. +# Zayed Al-Saidi , 2009. +# hanny , 2012. +# Abderrahim Kitouni , 2012. +# Safa Alfulaij , 2013, 2017. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2017-11-30 12:15+0300\n" +"Last-Translator: Safa Alfulaij \n" +"Language-Team: Arabic \n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"X-Generator: Lokalize 2.0\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "زايد السعيدي,محمد هاني صباغ,صفا الفليج" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"zayed.alsaidi@gmail.com,hannysabbagh@hotmail.com,safa1996alfulaij@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "صدفة تطبيقات «خدمتك» لِ‍QML" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "اسم التّطبيق الفريد (إلزاميّ)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"انقر الزّرّ ثمّ أدخل الاختصار الذي تريد في البرنامج.\n" +"فمثلًا ل‍ Ctrl+A: أبقِ مفتاح Ctrl مضغوطًا واضغط A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "اختصار محجوز" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"مفتاح F12 محجوز في «وندوز»، لذا لا يمكن استخدامه كاختصار عموميّ.\n" +"رجاءً اختر غيره." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "تضارب مع اختصار تطبيق قياسيّ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"تجميعة الأزرار ’%1‘ يستخدمها الإجراء القياسيّ ”%2“ أيضًا، والذي تستخدمه بعض " +"التّطبيقات.\n" +"أمتأكّد من استخدامه كاختصار عموميّ أيضًا؟" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "أعد التّعيين" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "الدّخل" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "بلا" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "المفتاح الذي ضغطته لا تدعمه كيوت." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "مفتاح غير مدعوم" diff --git a/po/as/kdeclarative5.po b/po/as/kdeclarative5.po new file mode 100644 index 0000000..a524c44 --- /dev/null +++ b/po/as/kdeclarative5.po @@ -0,0 +1,101 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Amitakhya Phukan , 2008. +# Amitakhya Phukan <অমিতাক্ষ ফুকন>, 2008. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4_as\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2008-12-26 15:19+0530\n" +"Last-Translator: Amitakhya Phukan <অমিতাক্ষ ফুকন>\n" +"Language-Team: Assamese \n" +"Language: as\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 0.2\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "অমিতাক্ষ ফুকন" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "aphukan@fedoraproject.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "অনুপ্ৰয়োগৰ আখৰ নিৰ্ধাৰিত কৰা হয়" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "New Web Shortcut" +msgid "Reserved Shortcut" +msgstr "নতুন ৱেব চমু পথ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "অনুপ্ৰয়োগৰ মানপ্ৰাপ্ত চমু পথৰ সৈতে দ্বন্দ্ব" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "পুনঃ নিৰ্ধাৰণ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "নিবেশ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "শূণ্য" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "অসমৰ্থিত চাবি" diff --git a/po/ast/kdeclarative5.po b/po/ast/kdeclarative5.po new file mode 100644 index 0000000..8043d84 --- /dev/null +++ b/po/ast/kdeclarative5.po @@ -0,0 +1,106 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# enolp , 2016. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2016-12-20 23:02+0100\n" +"Last-Translator: enolp \n" +"Language-Team: Asturian \n" +"Language: ast\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 2.0\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Softastur" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "alministradores@softastur.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Shell d'aplicaciones QML de KPackage " + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "El nome únicu de l'aplicación (obligatorio)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Primi nel menú, depués introduz l'atayu como te prestaría nel programa.\n" +"Exemplu pa Ctrl+A: ten primida la tecla Ctrl y dempués calca la A" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Atayu acutáu" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"La tecla F12 ta acutada en WIndows, asina que nun pue usase pa un atayu " +"global.\n" +"Escueyi otra, por favor." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conlfictu col atayu estándar d'aplicación" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"La combinación de tecles «%1» tamién s'usa pa l'aición estándar «%2» que " +"delles aplicaciones usen.\n" +"¿De xuru que quies usala tamién como atayu global?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reasignar" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Entrada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Nada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "La tecla que tas acabante primi nun la sofita Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tecla ensin sofitu" diff --git a/po/be/kdeclarative5.po b/po/be/kdeclarative5.po new file mode 100644 index 0000000..f2064f1 --- /dev/null +++ b/po/be/kdeclarative5.po @@ -0,0 +1,117 @@ +# translation of kdelibs4.po to Belarusian +# translation of kdelibs4.po to +# +# Eugene Zelenko , 2002-2004. +# Ihar Hrachyshka , 2006. +# Darafei Praliaskouski , 2007. +# Komяpa , 2007. +# Komяpa , 2007. +# Darafei Praliaskoski , 2007. +# Darafei Praliaskouski , 2008, 2009. +# Siarhei Liantsevich , 2008. +# kom , 2008. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2009-09-06 15:21+0300\n" +"Last-Translator: Darafei Praliaskouski \n" +"Language-Team: Belarusian \n" +"Language: be\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Дарафей Праляскоўскі" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "komzpa@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "вызначае шрыфт праграмы" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "Скарот" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Канфліктуе з стандартным скаротам праграмы" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +#| msgid "" +#| "The '%1' key combination has already been allocated to the standard " +#| "action \"%2\" that many applications use.\n" +#| "You cannot use it for global shortcuts for this reason." +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Клавіша '%1' ужо прывязана да стандартнага дзеяння \"%2\", якім карыстаюцца " +"шмат праграмаў.\n" +"Вы не можаце пераназначыць яе." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Пераназначыць" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Увод" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Няма" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +#| msgid "Unsorted" +msgid "Unsupported Key" +msgstr "Несартаваны" diff --git a/po/be@latin/kdeclarative5.po b/po/be@latin/kdeclarative5.po new file mode 100644 index 0000000..2b30a35 --- /dev/null +++ b/po/be@latin/kdeclarative5.po @@ -0,0 +1,105 @@ +# translation of kdelibs4.po to Belarusian Latin +# Copyright (C) 2008 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdelibs4 package. +# +# Ihar Hrachyshka , 2008. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2008-08-30 01:10+0300\n" +"Last-Translator: Ihar Hrachyshka \n" +"Language-Team: Belarusian Latin \n" +"Language: be@latin\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: KBabel 1.11.4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ihar Hračyška" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ihar.hrachyshka@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "aznačaje šryft aplikacyi" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "New Web Shortcut" +msgid "Reserved Shortcut" +msgstr "Novy sieciŭny skarot" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Niazhoda z zvyčajnym klavijaturnym skarotam aplikacyi" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Spałučeńnie klavišaŭ „%1” taksama pryviazanaje da standartnaha dziejańnia " +"„%2”, jakim karystajucca niekatoryja aplikacyi.\n" +"Ci ty sapraŭdy chočaš zrabić hetaje spałučeńnie paŭsiudnym?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Pieraviažy" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Uvod" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Niama" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Niepadtrymanaja klaviša" diff --git a/po/bg/kdeclarative5.po b/po/bg/kdeclarative5.po new file mode 100644 index 0000000..726ac21 --- /dev/null +++ b/po/bg/kdeclarative5.po @@ -0,0 +1,102 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Zlatko Popov , 2006, 2007, 2008, 2009. +# Yasen Pramatarov , 2009, 2010, 2011, 2012, 2013. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2013-07-23 01:52+0300\n" +"Last-Translator: Yasen Pramatarov \n" +"Language-Team: Bulgarian \n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ясен Праматаров,Радостин Раднев,Златко Попов" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yasen@lindeas.com,radnev@yahoo.com,zlatkopopov@fsa-bg.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "задаване на шрифта за програмата" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Запазен бърз клавиш" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Конфликт с програмна клавишна комбинация" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Клавишната комбинация \"%1\" вече е зададена за действието \"%2\".\n" +"Искате ли да я използвате и като глобален бърз клавиш." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Прехвърляне" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Въведени данни" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Без" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Клавишът, който натиснахте, не се поддържа от Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Неподдържан клавиш" diff --git a/po/bn/kdeclarative5.po b/po/bn/kdeclarative5.po new file mode 100644 index 0000000..08f61bc --- /dev/null +++ b/po/bn/kdeclarative5.po @@ -0,0 +1,106 @@ +# Bengali (Bangla) translation of kdelibs4. +# Copyright (C) 2009, Free Software Foundation, Inc. +# translation of kdelibs4.po to Bengali +# Copyright (C) 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc. +# Deepayan Sarkar,,, , 2003. +# Deepayan Sarkar , 2003, 2004, 2005. +# Deepayan Sarkar , 2006, 2008, 2009.. +# Deepayan Sarkar , 2009, 2010, 2012. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2012-07-16 14:27+0530\n" +"Last-Translator: Deepayan Sarkar \n" +"Language-Team: American English \n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "দীপায়ন সরকার" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "deepayan.sarkar@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "অ্যাপলিকেশনে ব্যবহৃত ফন্ট নির্ধারণ করে" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "অন্য কাজের জন্য নির্দিষ্ট শর্টকাট" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "স্ট্যাণ্ডার্ড অ্যাপলিকেশন শর্টকাটের সঙ্গে বিরোধ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +" '%1' মূখ্য সম্মিলন প্রমাণ ক্রিয়া\"%2\"এর জন্য ও ব্যবহার করা হয় যে কিছু অ্যাপলিকেশন " +"ব্যবহার করো।\n" +"আপনি কি ভাল হিসেবে একটি সার্বিক শর্টকাট হিসেবে এইটি ব্যবহার করতে সত্যি চাও?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, fuzzy, kde-format +msgid "Reassign" +msgstr "Reassign" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "ইনপুট" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "কিছু না" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "আপনি যে key-টি চেপেছেন সেটি কিউ-টি (Qt) সমর্থন করে না।" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "অসমর্থিত কী (key)" diff --git a/po/bn_IN/kdeclarative5.po b/po/bn_IN/kdeclarative5.po new file mode 100644 index 0000000..e506663 --- /dev/null +++ b/po/bn_IN/kdeclarative5.po @@ -0,0 +1,102 @@ +# translation of kdelibs4.po to Bengali INDIA +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Runa Bhattacharjee , 2007. +# Runa Bhattacharjee , 2008, 2009. +# Runa Bhattacharjee , 2008. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2009-12-28 14:35+0530\n" +"Last-Translator: Runa Bhattacharjee \n" +"Language-Team: Bengali INDIA \n" +"Language: bn_IN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: KBabel 1.11.4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "রুণা ভট্টাচার্য্য" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "runabh@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "অ্যাপ্লিকেশন ফন্ট নির্ধারিত করা হয়" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "সংরক্ষিত শর্ট-কাট" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "অ্যাপ্লিকেশনের প্রমিত শর্ট-কাটের সাথে দ্বন্দ্ব" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "পুনরায় নির্ধারণ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "ইনপুট" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "শূণ্য" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "টেপা কি-টি Qt-র মধ্যে সমর্থিত হয় না।" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "অসমর্থিত-কি" diff --git a/po/br/kdeclarative5.po b/po/br/kdeclarative5.po new file mode 100644 index 0000000..064d7c4 --- /dev/null +++ b/po/br/kdeclarative5.po @@ -0,0 +1,105 @@ +# KDE breton translation +# Copyright (C) 1998-2001 Free Software Foundation, Inc. +# Jañ-Mai Drapier , 1998 +# Thierry Vignaud , 2001-2005 +# $Id$ +# +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4-1.1\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2007-10-15 22:19+0200\n" +"Last-Translator: Jañ-Mai Drapier \n" +"Language-Team: Brezhoneg \n" +"Language: br\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Thierry Vignaud, Jañ-Mai Drapier" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "tvignaud@mandriva.com, jdrapier@club-internet.fr" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Kas ur bostel da ratreer an arload" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "Berradennoù" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Ar blokad stokelloù %1 zo bet derannet c'hoazh d'an obererezh standard " +"« %2 ».\n" +"Diuzit mar plij ur blokad stokelloù dieil." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, fuzzy, kde-format +msgid "Reassign" +msgstr "Rusianeg" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, fuzzy, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Restr enkas" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, fuzzy, kde-format +#| msgid "None" +msgctxt "No shortcut defined" +msgid "None" +msgstr "Ebet" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +#| msgid "Unsorted" +msgid "Unsupported Key" +msgstr "N'eo ket rummet" diff --git a/po/bs/kdeclarative5.po b/po/bs/kdeclarative5.po new file mode 100644 index 0000000..8a47f6b --- /dev/null +++ b/po/bs/kdeclarative5.po @@ -0,0 +1,122 @@ +# translation of kdelibs4.po to bosanski +# Marko Rosic , 2003. +# Toplica Tanaskovic , 2003, 2004, 2005. +# Chusslove Illich , 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010. +# Dalibor Djuric , 2009, 2010. +# Dalibor Djuric , 2010. +# KDE 4 , 2011. +# Bosnian translation of kdelibs4 +# Initially converted from translation of kdelibs4.po by +# Samir Ribić +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2013-12-21 17:26+0000\n" +"Last-Translator: Ademovic Saudin \n" +"Language-Team: bosanski \n" +"Language: bosnian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Launchpad (build 16872)\n" +"X-Launchpad-Export-Date: 2013-12-22 05:52+0000\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" +"X-Environment: kde\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Samir Ribić,Ademovic Saudin,Vedran Ljubovic" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "samir.ribic@etf.unsa.ba,sademovic1@etf.unsa.ba,vljubovic@smartnet.ba" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "definiše font programa" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Kliknite na dugme, pa unesite prečicu kao što biste u programu.\n" +"Primjer za Ctrl+A: držite taster Ctrl i pritisnite A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Rezervisana prečica" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Taster F12 je rezervisan na Windowsu, pa se ne može koristiti kao globalna " +"prečica.\n" +"Izaberite neku drugu." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Sukob sa standardnom programskom prečicom" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Kombinacija tastera '%1' već je dodijeljena standardnoj radnji „%2“, koju " +"koriste neki programi.\n" +"Želite li zaista da je koristite i kao globalnu prečicu?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Ponovo dodijeli" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Ulaz" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "nijedna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt ne podržava taster koji ste upravo pritisnuli." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nepodržani taster" diff --git a/po/ca/kdeclarative5.po b/po/ca/kdeclarative5.po new file mode 100644 index 0000000..0ddad60 --- /dev/null +++ b/po/ca/kdeclarative5.po @@ -0,0 +1,115 @@ +# Translation of kdeclarative5.po to Catalan +# Copyright (C) 2014-2016 This_file_is_part_of_KDE +# This file is distributed under the license LGPL version 2.1 or +# version 3 or later versions approved by the membership of KDE e.V. +# +# Sebastià Pla i Sanz , 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007. +# Antoni Bella Pérez , 2003, 2006, 2011, 2012, 2013, 2014. +# Albert Astals Cid , 2004, 2005, 2007. +# Josep Ma. Ferrer , 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016. +# Robert Millan , 2009. +# Orestes Mas , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdeclarative5\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2016-06-07 20:30+0200\n" +"Last-Translator: Josep Ma. Ferrer \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Accelerator-Marker: &\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sebastià Pla i Sanz" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "sps@sastia.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Intèrpret d'aplicació QML del KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "El nom únic de l'aplicació (obligatori)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Cliqueu en el botó, llavors introduïu la drecera com ho faríeu en el " +"programa.\n" +"Exemple per Ctrl+A: premeu la tecla Ctrl mentre premeu la «A»." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Drecera reservada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"La tecla F12 està reservada en el Windows, no es pot utilitzar com a drecera " +"global.\n" +"Si us plau, seleccioneu-ne una altra." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflicte amb la drecera estàndard de l'aplicació" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"La combinació de tecla «%1» ja s'ha assignat a l'acció estàndard «%2» que " +"usen algunes aplicacions.\n" +"Esteu segur que també voleu usar-la com a drecera global?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reassigna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Entrada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Cap" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "La tecla que heu premut no està admesa a les Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tecla no admesa" diff --git a/po/ca@valencia/kdeclarative5.po b/po/ca@valencia/kdeclarative5.po new file mode 100644 index 0000000..4d01b25 --- /dev/null +++ b/po/ca@valencia/kdeclarative5.po @@ -0,0 +1,115 @@ +# Translation of kdeclarative5.po to Catalan (Valencian) +# Copyright (C) 2014-2016 This_file_is_part_of_KDE +# This file is distributed under the license LGPL version 2.1 or +# version 3 or later versions approved by the membership of KDE e.V. +# +# Sebastià Pla i Sanz , 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007. +# Antoni Bella Pérez , 2003, 2006, 2011, 2012, 2013, 2014. +# Albert Astals Cid , 2004, 2005, 2007. +# Josep Ma. Ferrer , 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016. +# Robert Millan , 2009. +# Orestes Mas , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdeclarative5\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2016-06-07 20:30+0200\n" +"Last-Translator: Josep Ma. Ferrer \n" +"Language-Team: Catalan \n" +"Language: ca@valencia\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Accelerator-Marker: &\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sebastià Pla i Sanz" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "sps@sastia.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Intèrpret d'aplicació QML del KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "El nom únic de l'aplicació (obligatori)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Cliqueu en el botó, llavors introduïu la drecera com ho faríeu en el " +"programa.\n" +"Exemple per Ctrl+A: premeu la tecla Ctrl mentre premeu la «A»." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Drecera reservada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"La tecla F12 està reservada en el Windows, no es pot utilitzar com a drecera " +"global.\n" +"Per favor, seleccioneu-ne una altra." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflicte amb la drecera estàndard de l'aplicació" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"La combinació de tecla «%1» ja s'ha assignat a l'acció estàndard «%2» que " +"usen algunes aplicacions.\n" +"Esteu segur que també voleu usar-la com a drecera global?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reassigna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Entrada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Cap" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "La tecla que heu premut no està admesa a les Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tecla no admesa" diff --git a/po/crh/kdeclarative5.po b/po/crh/kdeclarative5.po new file mode 100644 index 0000000..ed98388 --- /dev/null +++ b/po/crh/kdeclarative5.po @@ -0,0 +1,104 @@ +# translation of kdelibs4.po to Qırımtatarca (Qırım Türkçesi) +# Copyright (C) 2008 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdelibs package. +# +# Reşat SABIQ , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2009-02-12 23:29-0600\n" +"Last-Translator: Reşat SABIQ \n" +"Language-Team: Qırımtatarca (Qırım Türkçesi)\n" +"Language: crh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: KBabel 1.11.4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Reşat SABIQ" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "tilde.birlik@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "uyğulamanıñ urufatını belgiley" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "New Web Shortcut" +msgid "Reserved Shortcut" +msgstr "Yañı İnternet Qısqa-yolu" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Standart Uyğulama Qısqa-yolunen Çatışma" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"'%1' tuş kombinatsiyası bazı uyğulamalarnıñ qullanğanı standart \"%2\" ameli " +"içün de qullanılır.\n" +"Onı kerçekten de umumiy qısqa-yol olaraq ta qullanmağa isteysiñizmi?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Kene-tayinle" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Kirdi" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "İç biri" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Desteklenmegen Tuş" diff --git a/po/cs/kdeclarative5.po b/po/cs/kdeclarative5.po new file mode 100644 index 0000000..4d68863 --- /dev/null +++ b/po/cs/kdeclarative5.po @@ -0,0 +1,109 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Lukáš Tinkl , 2010, 2011, 2012. +# Vít Pelčák , 2011, 2012, 2013, 2014, 2015. +# Tomáš Chvátal , 2012, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-04-16 09:48+0100\n" +"Last-Translator: Vít Pelčák \n" +"Language-Team: Czech \n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Lokalize 2.0\n" +"X-Language: cs_CZ\n" +"X-Source-Language: en_US\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Vít Pelčák" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "vit@pelcak.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Shell aplikace KPackage QML" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Unikátní název aplikace (povinné)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Klikněte na tlačítko a poté zadejte zkratku, kterou si přejete v programu.\n" +"Příklad pro Ctrl+A: držte klávesu Ctrl a stiskněte A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Rezervovaná klávesová zkratka" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Klávesa F12 je na Windows rezervována a nelze ji tedy použít jako globální.\n" +"Vyberte prosím jinou." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt se standardní zkratkou aplikace" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Klávesová kombinace '%1' již byla přiřazena standardní činnosti \"%2\", " +"kterou mnoho aplikací využívá.\n" +"Opravdu si ji přejete použít jako globální klávesovou zkratku?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Přeřadit" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Vstup" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Žádná" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Právě stisknutá klávesa není podporována v Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nepodporovaná klávesa" diff --git a/po/csb/kdeclarative5.po b/po/csb/kdeclarative5.po new file mode 100644 index 0000000..e48c18e --- /dev/null +++ b/po/csb/kdeclarative5.po @@ -0,0 +1,105 @@ +# translation of kdelibs4.po to Kaszëbsczi +# +# Michôł Òstrowsczi , 2006, 2007, 2008, 2009. +# Mark Kwidzińsczi , 2006, 2007, 2008, 2009. +# Mark Kwidzińśczi , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2009-12-04 22:09+0100\n" +"Last-Translator: Mark Kwidzińśczi \n" +"Language-Team: Kaszëbsczi \n" +"Language: csb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Michôł Òstrowsczi, Mark Kwidzińsczi" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "michol@linuxcsb.org, mark@linuxcsb.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "òpisëwô fònt programë" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "New Web Shortcut" +msgid "Reserved Shortcut" +msgstr "Nowô sécowô skrodzëna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Zwada ze sztandardową skrodzëną programë" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Zestawienié klawiszów '%1' òstałó przëpisóné sztandardowemù dzejaniu \"%2\", " +"jaczégò brëkùje jinszô aplikacëjô.\n" +"Chcesz je pò prôwdze przëpisac do globalnëch skrodzrnów?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Przëpiszë" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Nowô skrodzënô" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Felëjë" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Niezortowóné klucze" diff --git a/po/cy/kdeclarative5.po b/po/cy/kdeclarative5.po new file mode 100644 index 0000000..7ab1a3d --- /dev/null +++ b/po/cy/kdeclarative5.po @@ -0,0 +1,119 @@ +# Cyfieithiad o kdelibs4.po i Cymraeg +# translation of kdelibs4.po to Cymraeg +# Translation of kdelibs4.po to Cymraeg +# Translation of clearfuzzytest.po to Cymraeg +# translation of clearfuzzytest.po to Cymraeg +# translation of clearfuzzy.po to Cymraeg +# KDE yn Gymraeg. +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# www.kyfieithu.co.uk , 2003. +# Kgyfieithu , 2003. +# KGyfieithu , 2003. +# KD at KGyfieithu , 2003, 2004. +# Kyfieithu , 2004. +# Kevin Donnelly , 2005. +# +# +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2005-01-28 17:54+0000\n" +"Last-Translator: Kevin Donnelly \n" +"Language-Team: Cymraeg\n" +"Language: cy\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9\n" +"\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "KD wrth KGyfieithu" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kyfieithu@dotmon.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "diffinio wynebfath y cymhwysiad" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "Byrlwybr" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Croestyniad efo Byrlwybr Cymhwysiad Arferol" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Mae cyfuniad bysell '%1' wedi ei dyrannu yn barod i'r weithred safonol " +"\"%2\".\n" +"Ydych eisiau ei ail-neilltuo o'r weithred yna i'r un gyfredol?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, fuzzy, kde-format +msgid "Reassign" +msgstr "Rwsieg" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, fuzzy, kde-format +#| msgid "Input file" +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Ffeil fewnbwn" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, fuzzy, kde-format +#| msgid "None" +msgctxt "No shortcut defined" +msgid "None" +msgstr "Dim" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +#| msgid "Untrusted" +msgid "Unsupported Key" +msgstr "Ni ymddiriedir" diff --git a/po/da/kdeclarative5.po b/po/da/kdeclarative5.po new file mode 100644 index 0000000..b681d5d --- /dev/null +++ b/po/da/kdeclarative5.po @@ -0,0 +1,110 @@ +# translation of kdelibs4.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Martin Schlander, 2008. +# Martin Schlander , 2008. +# Martin Schlander , 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015. +# Keld Simonsen , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-04-25 15:05+0200\n" +"Last-Translator: Martin Schlander \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Erik Kjær Pedersen,Martin Schlander,Keld Simonsen" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "erik@binghamton.edu,mschlander@opensuse.org,keld@keldix.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage skal til QML-programmer" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Programmets unikke navn (obligatorisk)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Tryk på knappen, angiv så genvejen ligesom du vil gøre i programmet.\n" +"Eksempel med Ctrl+A, hold Ctrl-tasten nede og tryk A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Reserveret genvej" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12-tasten er reserveret på Windows, og kan derfor ikke bruges som en global " +"genvej.\n" +"Vælg venligst en anden." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt med programmets standardgenvejstast" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Tastekombinationen \"%1\" bruges allerede til standardhandlingen \"%2\" som " +"mange programmer benytter.\n" +"Vil du bruge den som en global genvej også?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Tilknyt igen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Input" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Ingen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Tasten du netop trykkede på, understøttes ikke af Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Ikke understøttet tast" diff --git a/po/de/kdeclarative5.po b/po/de/kdeclarative5.po new file mode 100644 index 0000000..e15b7f4 --- /dev/null +++ b/po/de/kdeclarative5.po @@ -0,0 +1,115 @@ +# Thomas Diehl , 2002, 2003, 2004, 2005. +# Stefan Winter , 2004. +# Thomas Fischer , 2004. +# Stephan Johach , 2004, 2005, 2006, 2007. +# Georg Schuster , 2005. +# Thomas Reitelbach , 2005, 2006, 2007, 2008, 2009. +# Burkhard Lück , 2006, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015. +# Frederik Schwarzer , 2007, 2008, 2009, 2010, 2011, 2012, 2013. +# Johannes Obermayr , 2010. +# Panagiotis Papadopoulos , 2010. +# Rolf Eike Beer , 2012. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-07-01 20:17+0200\n" +"Last-Translator: Burkhard Lück \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Thomas Reitelbach, Stephan Johach, Thomas Diehl" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "tr@erdfunkstelle.de, hunsum@gmx.de, thd@kde.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage-QML-Anwendungs-Shell" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Der eindeutige Name der Anwendung (erforderlich)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Klicken Sie auf den Knopf und drücken Sie dann die Tasten für den Kurzbefehl " +"auf der Tastatur.\n" +"Beispielsweise für Strg+A: Halten Sie die Strg-Taste gedrückt und drücken " +"Sie dann „A“." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Reservierter Kurzbefehl" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Die Taste „F12“ ist unter Windows reserviert, kann also nicht als globaler " +"Kurzbefehl verwendet werden.\n" +"Bitte wählen Sie eine andere Taste." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt mit Standard-Kurzbefehl des Programms" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Die Tastenkombination „%1“ ist bereits der Standard-Aktion „%2“ zugeordnet, " +"die von einigen Anwendungen benutzt wird.\n" +"Möchten Sie sie wirklich als globales Tastenkürzel verwenden?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Neu zuordnen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Eingabe" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Keiner" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Die gerade gedrückte Taste wird von Qt nicht unterstützt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nicht unterstützte Taste" diff --git a/po/el/kdeclarative5.po b/po/el/kdeclarative5.po new file mode 100644 index 0000000..a3e3dcb --- /dev/null +++ b/po/el/kdeclarative5.po @@ -0,0 +1,120 @@ +# translation of kdelibs4.po to Greek +# translation of kdelibs4.po to +# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# Last MAJOR revision (whole file) (29-03-2003 - Stergios Dramis). +# +# Dimitris Kamenopoulos , 2000-2002. +# Stergios Dramis , 2002-2004. +# Κώστας Μπουκουβάλας , 2005. +# Spiros Georgaras , 2005, 2006, 2007, 2008. +# Toussis Manolis , 2006, 2007, 2008, 2009. +# Spiros Georgaras , 2007, 2008. +# Σπύρος Γεωργαράς , 2008. +# Petros , 2009. +# Petros Vidalis , 2010, 2011. +# Dimitrios Glentadakis , 2010, 2011, 2012, 2013, 2014. +# nikos, 2011. +# Stelios , 2012, 2013, 2015. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-10-27 00:12+0100\n" +"Last-Translator: Stelios \n" +"Language-Team: Greek \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Σπύρος Γεωργαράς, Τούσης Μανώλης, Πέτρος Βιδάλης" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "sng@hellug.gr, manolis@koppermind.homelinux.org, p_vidalis@hotmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage QML κέλυφος εφαρμογής" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Το μοναδικό όνομα της εφαρμογής (υποχρεωτικό)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Πατήστε το κουμπί, έπειτα εισάγετε την συντόμευση που επιθυμείτε στο " +"πρόγραμμα.\n" +"Παράδειγμα για Ctrl+A: κρατήστε πατημένο το Ctrl και πιέστε το A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Δεσμευμένη συντόμευση" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Το πλήκτρο F12 είναι δεσμευμένο στα Windows και δεν μπορεί χρησιμοποιηθεί " +"για καθολική συντόμευση.\n" +"Παρακαλώ επιλέξτε μία άλλη." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Σύγκρουση με πρότυπη συντόμευση εφαρμογής" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Ο συνδυασμός πλήκτρων « %1 » χρησιμοποιείται ήδη για την τυπική ενέργεια « " +"%2 » η οποία είναι σε χρήση από διάφορες εφαρμογές.\n" +"Επιθυμείτε πραγματικά τη χρήση της ως καθολική συντόμευση επίσης;" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Επανάθεση" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Είσοδος" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Καμία" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Το πλήκτρο που μόλις πιέσατε δεν υποστηρίζεται από την Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Μη υποστηριζόμενο πλήκτρο" diff --git a/po/en_GB/kdeclarative5.po b/po/en_GB/kdeclarative5.po new file mode 100644 index 0000000..768d90c --- /dev/null +++ b/po/en_GB/kdeclarative5.po @@ -0,0 +1,107 @@ +# translation of kdelibs4.po to British English +# Malcolm Hunter , 2002,2003,2004, 2005, 2006, 2007, 2008, 2009. +# Jonathan Riddell , 2003. +# Andrew Coles , 2004, 2005, 2009, 2010. +# Steve Allewell , 2014, 2015. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-03-14 14:49+0000\n" +"Last-Translator: \n" +"Language-Team: British English \n" +"Language: en_GB\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrew Coles" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrew_coles@yahoo.co.uk" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage QML application shell" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "The unique name of the application (mandatory)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Reserved Shortcut" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflict with Standard Application Shortcut" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reassign" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Input" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "None" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "The key you just pressed is not supported by Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Unsupported Key" diff --git a/po/eo/kdeclarative5.po b/po/eo/kdeclarative5.po new file mode 100644 index 0000000..aad2ab1 --- /dev/null +++ b/po/eo/kdeclarative5.po @@ -0,0 +1,118 @@ +# translation of kdelibs4.po to Esperanto +# Esperantaj mesaĝoj por "kdelibs" +# Copyright (C) 1998,2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# +# Minuskloj: ĉ ĝ ĵ ĥ ŝ ŭ Majuskloj: Ĉ Ĝ Ĵ Ĥ Ŝ Ŭ +# +# Wolfram Diestel , 1998. +# Heiko Evermann , 2002, 2003. +# Matthias Peick , 2004, 2005. +# Oliver Kellogg ,2007. +# Cindy McKee , 2007, 2008. +# Axel Rousseau , 2009. +# Michael Moroni , 2012. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2012-05-22 12:30+0200\n" +"Last-Translator: Michael Moroni \n" +"Language-Team: Esperanto \n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"Matthias Peick, Oliver Kellogg, Cindy McKee, Axel Rousseau, Michael Moroni" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"matthias@peick.de, okellogg@users.sourceforge.net, cfmckee@gmail.com, " +"axel@esperanto-jeunes.org, michael.moroni@mailoo.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "difinas la tiparon de la aplikaĵo" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Rezervita Klavkombino" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikto kun defaŭlta aplikaĵa klavokombino" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +#| msgid "" +#| "The '%1' key combination has already been allocated to the standard " +#| "action \"%2\" that many applications use.\n" +#| "You cannot use it for global shortcuts for this reason." +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"La klavkombino '%1' jam estas ligita al la norma ago \"%2\" kiun uzas multaj " +"aplikaĵoj.\n" +"Tial vi ne rajtas uzi ĝin por ĉieaj mallongigoj." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reatribui" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Enigo" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Nenio" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Ne subtenata ŝlosilo" diff --git a/po/es/kdeclarative5.po b/po/es/kdeclarative5.po new file mode 100644 index 0000000..ec5a089 --- /dev/null +++ b/po/es/kdeclarative5.po @@ -0,0 +1,116 @@ +# translation of kdelibs4.po to Spanish +# Translation of kdelibs4 to Spanish +# Copyright (C) 2000-2007 +# +# Pablo de Vicente , 2000-2002,2003, 2004. +# Pablo de Vicente , 2003. +# Pablo de Vicente , 2004, 2005. +# Eloy Cuadra , 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015. +# Pablo de Vicente , 2005, 2006, 2007. +# Enrique Matias Sanchez (aka Quique) , 2007. +# Jaime Robles , 2007. +# Javier Viñal , 2013. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-03-06 22:15+0100\n" +"Last-Translator: Eloy Cuadra \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"First-Translator: Boris Wesslowski \n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eloy Cuadra" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ecuadra@eloihr.net" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Entorno de aplicación QML de KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "El nombre único de la aplicación (obligatorio)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Pulse sobre el botón e introduzca a continuación el acceso rápido que desee " +"para el programa.\n" +"Ejemplo para «Ctrl+A»: mantenga pulsada la tecla «Ctrl» y luego pulse «A»." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Acceso rápido reservado" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"La tecla F12 está reservada en Windows y no se puede usar como acceso rápido " +"global.\n" +"Seleccione otra tecla." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflicto con el acceso rápido de la aplicación estándar" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"La combinación de teclas «%1» ya está asignada a la acción estándar «%2», " +"que es usada por algunas aplicaciones.\n" +"¿Realmente quiere usarla también como acceso rápido global?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reasignar" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Entrada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Ninguna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "La tecla que acaba de pulsar no está contemplada por Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tecla no funcional" diff --git a/po/et/kdeclarative5.po b/po/et/kdeclarative5.po new file mode 100644 index 0000000..c40745a --- /dev/null +++ b/po/et/kdeclarative5.po @@ -0,0 +1,109 @@ +# translation of kdelibs4.po to Estonian +# Copyright (C) 1999-2004, 2005, 2006, 2009 Free Software Foundation, Inc. +# +# Hasso Tepper , 1999-2004, 2005, 2006. +# Marek Laane , 2003-2009. +# Peeter Russak , 2005. +# Marek Laane , 2009, 2010, 2011, 2012, 2014, 2016. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2016-09-09 00:55+0300\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"Language: et\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marek Laane" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bald@smail.ee" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage'i QML rakenduse kest" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Rakenduse unikaalne nimi (kohustuslik)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Klõpsa nupule ja sisesta meelepärane kiirklahv.\n" +"Näide Ctrl+A kohta: hoia all Ctrl-klahvi ja vajuta klahvi A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Reserveeritud kiirklahv" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Klahv F12 on reserveeritud Windowsile ja seda ei saa kasutada globaalse " +"kiirklahvina.\n" +"Palun vali mõni muu klahv." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt rakenduse standardse kiirklahviga" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Klahvikombinatsioon '%1' on juba kasutusel standardseks toiminguks \"%2\", " +"mida kasutavad mitmed rakendused.\n" +"Kas soovid seda kasutada ka globaalse kiirklahvina?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Asenda" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Sisend" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Puudub" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt ei toeta klahvi, mida sa praegu vajutasid." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Toetamata klahv" diff --git a/po/eu/kdeclarative5.po b/po/eu/kdeclarative5.po new file mode 100644 index 0000000..271a3af --- /dev/null +++ b/po/eu/kdeclarative5.po @@ -0,0 +1,113 @@ +# Translation of kdeclarative5.po to Euskara/Basque (eu). +# Copyright (C) 1999-2017, Free Software Foundation, Inc. +# This file is distributed under the same license as the frameworks package. +# KDE Euskaratzeko proiektuaren arduraduna . +# +# Translators: +# Marcos , 2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010. +# Ion Gaztañaga , 2005. +# Iñaki Larrañaga Murgoitio , 2009. +# Iñigo Salvador Azurmendi , 2010, 2011, 2012, 2013, 2014, 2017. +msgid "" +msgstr "" +"Project-Id-Version: kdeclarative5\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2017-08-30 23:21+0100\n" +"Last-Translator: Iñigo Salvador Azurmendi \n" +"Language-Team: Basque \n" +"Language: eu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marcos,Ion Gaztañaga,Iñigo Salvador Azurmendi" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "marcos@euskalgnu.org,igaztanaga@gmail.com,xalba@euskalnet.net" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage QML aplikazioaren shell" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Aplikazioaren izen esklusiboa (nahitaezkoa)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Klik egin botoian, ondoren sartu lasterbidea programan egingo zenukeen " +"moduan.\n" +"Adibidez Ktrl+A: sakatuta mantendu Ktrl tekla eta sakatu A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Lasterbide erreserbatua" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 tekla erreserbatuta dago Windows-en, beraz ezin da erabili lasterbide " +"orokor gisa.\n" +"Mesedez hautatu beste bat." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Aplikazioaren lasterbide estandarrekin gatazkan" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"'%1' tekla-konbinazioa \"%2\" ekintza estandarrekin erabiltzen da. Aplikazio " +"askok erabiltzen dute tekla-konbinazio hau.\n" +"Benetan erabili nahi duzu laster-tekla orokor gisa?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Lotu" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Egin tekla konbinazioa" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Bat ere ez" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt-ek ez du onartzen sakatu duzun tekla." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tekla ez da onartzen" diff --git a/po/fa/kdeclarative5.po b/po/fa/kdeclarative5.po new file mode 100644 index 0000000..e57da7c --- /dev/null +++ b/po/fa/kdeclarative5.po @@ -0,0 +1,108 @@ +# translation of kdelibs4.po to Persian +# Nazanin Kazemi , 2006, 2007. +# Mahdi Foladgar , 2006. +# Nasim Daniarzadeh , 2006, 2007. +# Tahereh Dadkhahfar , 2006. +# MaryamSadat Razavi , 2007. +# Nooshin Asiaie , 2007. +# Mohamad Reza Mirdamadi , 2009, 2010, 2011, 2012. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2012-06-28 16:40+0430\n" +"Last-Translator: Mohammad Reza Mirdamadi \n" +"Language-Team: Farsi (Persian) \n" +"Language: fa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.4\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "محمدرضا میردامادی , نازنین کاظمی , محمد ابراهیم محمدی پناه , سعید تقوی" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"mohi@linuxshop.ir , kazemi@itland.ir , mebrahim@gmail.com , s.taghavi@gmail." +"com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "قلم کاربرد را تعریف می‌کند" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "میان‌بر رزرو شده" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "ناسازگاری با میان‌بر کاربرد استاندارد" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"کلید ترکیبی »%1« قبلاً به کنش استاندارد »%2« که کاربردهای بسیاری استفاده " +"می‌کنند، اختصاص یافته است.\n" +"نمی‌توانید آن را برای میان‌برهای سراسری برای این نشست استفاده کنید." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "انتساب مجدد" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "ورودی" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "هیچ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "کلیدی که هم‌اکنون فشرده شد به‌وسیله Qt پشتیبانی نمیشود." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "کلید پشتیبانی نشده" diff --git a/po/fi/kdeclarative5.po b/po/fi/kdeclarative5.po new file mode 100644 index 0000000..9c99170 --- /dev/null +++ b/po/fi/kdeclarative5.po @@ -0,0 +1,127 @@ +# Finnish messages for kdelibs4. +# Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdelibs package. +# Kim Enkovaara , 2002,2003, 2005, 2006, 2007. +# Tapio Kautto , 2003, 2004. +# Mikko Ikola , 2003. +# Teemu Rytilahti , 2003, 2008. +# Mikko Ikola , 2003. +# Teemu Rytilahti , 2003, 2004, 2008. +# Niklas Laxström , 2006, 2007. +# Joonas Niilola , 2006. +# Mikko Piippo , 2007. +# Teemu Rytilahti , 2008. +# Tommi Nieminen , 2009, 2010, 2011. +# Tommi Nieminen , 2009. +# Jorma Karvonen , 2010. +# Lasse Liehu , 2006, 2010, 2011, 2012, 2013, 2014, 2015. +# +# KDE Finnish translation sprint participants: +# Author: Artnay +# Author: Jl +# Author: Lliehu +# Author: Niklas Laxström +# Author: Suhviksi +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-03-06 22:45+0200\n" +"Last-Translator: Lasse Liehu \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 2.0\n" +"X-POT-Import-Date: 2013-01-13 20:43:21+0000\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Lasse Liehu" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "lasse.liehu@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackagen QML-sovelluskuori" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Sovelluksen yksilöllinen nimi (pakollinen)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Napsauta painiketta ja paina sen jälkeen haluamasi pikanäppäin.\n" +"Esim. Ctrl+A:lle: paina Ctrl-näppäintä, sitten paina A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Varattu pikanäppäin" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12-näppäin on Windowsissa varattu, joten sitä ei voi käyttää " +"työpöydänlaajuisena pikanäppäimenä.\n" +"Valitse toinen pikanäppäin." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Ristiriita sovelluksen vakiopikanäppäimen kanssa" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Näppäinyhdistelmä %1 on jo käytössä vakiotoiminnolle %2.\n" +"Haluatko varmasti käyttää näppäinyhdistelmää myös työpöydänlaajuisena " +"pikanäppäimenä?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Sijoita uudelleen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Yhdistelmä" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Ei asetettu" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt ei tue painamaasi näppäintä." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Ei-tuettu näppäin" diff --git a/po/fr/kdeclarative5.po b/po/fr/kdeclarative5.po new file mode 100644 index 0000000..cf2e63a --- /dev/null +++ b/po/fr/kdeclarative5.po @@ -0,0 +1,127 @@ +# translation of kdelibs4.po to Français +# translation of kdelibs4.po to +# Matthieu Robin , 2002,2003, 2004. +# Robert Jacolin , 2003,2004. +# Gilles Caulier , 2003. +# Gérard Delafond , 2003, 2004. +# Matthieu Robin , 2004, 2005, 2006. +# Cedric Pasteur , 2004. +# Nicolas Ternisien , 2004, 2005, 2006, 2007, 2008. +# Matthieu Robin , 2005. +# Éric Bischoff , 2005. +# Sébastien Renard , 2006, 2007, 2008. +# Anne-Marie Mahfouf , 2007, 2008, 2012. +# Ludovic Grossard , 2008. +# Mickael Sibelle , 2008. +# Nicolas Lécureuil , 2010. +# Joëlle Cornavin , 2007, 2008, 2009, 2010, 2011, 2012, 2013. +# Sebastien Renard , 2013, 2014. +# Vincent Pinon , 2016. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2016-11-27 23:12+0100\n" +"Last-Translator: Vincent Pinon \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Lokalize 2.0\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Vincent Pinon" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "vpinon@kde.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Navigateur d'applications QML KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Le nom unique de l'application (obligatoire)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Cliquez sur le bouton puis saisissez le raccourci comme vous le feriez dans " +"le programme.\n" +"Exemple pour Ctrl+A : maintenez enfoncée la touche Ctrl et appuyez sur la " +"touche « A »." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Raccourci réservé" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"La touche F12 étant réservée sous Windows, il n'est pas possible de " +"l'utiliser pour un raccourci global.\n" +"Veuillez en choisir une autre." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflit avec un raccourci d'application standard" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"La combinaison de touches « %1 » est aussi employée pour l'action standard " +"« %2 » que certaines applications utilisent.\n" +"Voulez-vous vraiment l'employer comme raccourci global également ?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Réaffecter" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Saisie" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Aucun" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" +"La touche sur laquelle vous venez d'appuyer n'est pas prise en charge par Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Touche non prise en charge" diff --git a/po/fy/kdeclarative5.po b/po/fy/kdeclarative5.po new file mode 100644 index 0000000..7bfd59b --- /dev/null +++ b/po/fy/kdeclarative5.po @@ -0,0 +1,111 @@ +# translation of kdelibs4.po to Nederlands +# translation of kdelibs4.po to +# KTranslator Generated File +# Fryske oersetting fan kdelibs. +# Copyright (C) 2000,2001,2002,2003 KDE e.v.. +# let op! het bestand bevat ter hoogte van string 2470 +# een gesplitste zinnen die mbv. %1 of %2 weer worden samengevoegd!! +# Bauke Nicolai , 2002. +# KDE-oersetgroep Frysk , 2000, 2001, 2002,2003. +# Rinse de Vries , 2004, 2005, 2006, 2007. +# Berend ytsma , 2004. +# Rinse de Vries , 2006, 2008. +# Berend Ytsma , 2008. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2010-07-22 09:48+0100\n" +"Last-Translator: Berend Ytsma \n" +"Language-Team: nl \n" +"Language: fy\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KAider 0.1\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Berend Ytsma" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "Berendy@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "definiearret it lettertype foar de applikaasjes" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Reservearre fluchtoets" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt mei standert applikaasje-fluchtoets" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"De toetskombinaasje '%1' wurdt ek brûkt foar de standert aksje \"%2\" hokker " +"troch guon applikaasje brûkt wurdt.\n" +"Wolle jo it wier ek brûke as in globale fluchtoets?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Opnij tawize" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Ynfier" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Gjint" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Net stipe toets" diff --git a/po/ga/kdeclarative5.po b/po/ga/kdeclarative5.po new file mode 100644 index 0000000..ba391b3 --- /dev/null +++ b/po/ga/kdeclarative5.po @@ -0,0 +1,117 @@ +# translation of kdelibs4.po to Irish +# Translation of kdelibs4.po to Irish +# Copyright (C) 1999,2003,2004 Free Software Foundation, Inc. +# Sean V. Kelley , 1999 +# Séamus Ó Ciardhuáin , 2003,2004 +# Kevin Scannell , 2004-2009 +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2004-12-14 09:11-0600\n" +"Last-Translator: Kevin Scannell \n" +"Language-Team: Irish \n" +"Language: ga\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" +"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n < 11 ? " +"3 : 4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Séamus Ó Ciardhuáin,Kevin Scannell,Sean V. Kelley" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "seoc@iolfree.ie,kscanne@gmail.com,s_oceallaigh@yahoo.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "socraíonn cló an fheidhmchláir" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Cliceáil an cnaipe, ansin cuir isteach an t-aicearra ba mhaith leat sa " +"ríomhchlár.\n" +"Mar shampla, le haghaidh Ctrl+a: coinnigh an eochair Ctrl síos agus brúigh " +"'a'." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Aicearra In Áirithe" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Tá an eochair F12 in áirithe ar chóras Windows, agus mar sin ní féidir é a " +"úsáid mar aicearra comhchoiteann.\n" +"Roghnaigh ceann eile." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Coimhlint le hAicearra Feidhmchláir Chaighdeánaithe" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Tá '%1' comhcheangailte leis an ngníomh caighdeánach \"%2\" cheana, gníomh a " +"úsáideann roinnt feidhmchlár.\n" +"An bhfuil tú cinnte gur mian leat é a úsáid mar aicearra comhchoiteann " +"freisin?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Athshann" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Ionchur" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Gan aicearra" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Ní thacaíonn Qt leis an eochair a bhrúigh tú anois beag." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Eochair nach dtacaítear léi" diff --git a/po/gd/kdeclarative5.po b/po/gd/kdeclarative5.po new file mode 100644 index 0000000..38ca520 --- /dev/null +++ b/po/gd/kdeclarative5.po @@ -0,0 +1,111 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# GunChleoc , 2014, 2015, 2016. +msgid "" +msgstr "" +"Project-Id-Version: kdeclarative5\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2016-04-30 12:50+0100\n" +"Last-Translator: GunChleoc \n" +"Language-Team: Fòram na Gàidhlig\n" +"Language: gd\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" +"X-Generator: Virtaal 0.7.1\n" +"X-Project-Style: kde\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "GunChleoc" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "fios@foramnagaidhlig.net" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Shell aplacaid KPackage QML" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Ainm sònraichte na h-aplacaid (riatanach)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Briog air a' phutan agus cuir a-steach an ath-ghoirid an uairsin mar a " +"dhèanadh tu sa phrògram.\n" +"Ball-eisimpleir airson \"Ctrl+A\": cum an iuchair \"Ctrl\" sìos agus brùth " +"air \"A\"." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Ath-ghoirid ghlèidhte" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Tha an iuchair F12 glèidhte air Windows agus cha ghabh a cleachdadh 'na h-" +"ath-ghoirid uile-choitcheann ri linn seo.\n" +"Feuch an tagh thu tè eile." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Còmhstri le ath-ghoirid thùsail na h-aplacaid" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Thèid na co-iuchraichean \"%1\" a chleachdadh cuideachd airson a' ghnìomha " +"thùsail \"%2\" a chleachdas cuid a dh'aplacaidean.\n" +"A bheil thu cinnteach gu bheil thu airson a chleachdadh na ath-ghoirid uile-" +"choitcheann cuideachd?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Sònraich às ùr" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Ion-chur" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Chan eil gin" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Cha chuir Qt taic ris an iuchair a tha thu air a bhrùthadh." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Iuchair ris nach eil taic" diff --git a/po/gl/kdeclarative5.po b/po/gl/kdeclarative5.po new file mode 100644 index 0000000..8e6b585 --- /dev/null +++ b/po/gl/kdeclarative5.po @@ -0,0 +1,118 @@ +# translation of kdelibs4.po to galician +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# mvillarino , 2007, 2008, 2009. +# Marce Villarino , 2008, 2009. +# marce villarino , 2009. +# marce villarino , 2009. +# Marce Villarino , 2009, 2010, 2011, 2012. +# Xosé , 2010. +# Marce Villarino , 2011, 2012, 2013, 2014. +# Adrián Chaves Fernández , 2015. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-03-14 06:28+0100\n" +"Last-Translator: Adrián Chaves Fernández \n" +"Language-Team: Galician \n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.5\n" +"X-Environment: kde, development\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Xabier García Feal, marce villarino, Xosé Calvo" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "xosecalvo@gmail.com, mvillarino@gmail.com, proxecto@trasno.gal" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Shell de aplicativos en QML de KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Nome único para o aplicativo (obrigatorio)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Prema o botón, logo insira o atallo que desexe ter no programa.\n" +"Exemplo para Ctrl+A: manteña premida a tecla Ctrl e prema A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Atallo reservado" + +# skip-rule: PT-2010-window +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"A tecla F12 está reservada en Windows polo que non se pode empregar como " +"atallo global.\n" +"Escolla outro." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflito cun atallo estándar de aplicativo" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"A combinación de teclas «%1» tamén está asignada á acción estándar «%2», que " +"é usada por algúns aplicativos.\n" +"Seguro que quere empregala tamén como atallo global?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reasignar" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Entrada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Ningún" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "A tecla que acaba de premer non é admitida por Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tecla non admitida" diff --git a/po/gu/kdeclarative5.po b/po/gu/kdeclarative5.po new file mode 100644 index 0000000..f20e353 --- /dev/null +++ b/po/gu/kdeclarative5.po @@ -0,0 +1,104 @@ +# translation of kdelibs4.po to Gujarati +# Copyright (C) 2008 This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Kartik Mistry , 2008. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2009-11-22 00:01+0530\n" +"Last-Translator: Kartik Mistry \n" +"Language-Team: Gujarati \n" +"Language: gu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: KBabel 1.11.4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Kartik Mistry" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kartik.mistry@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "કાર્યક્રમ ફોન્ટ વ્યાખ્યાયિત કરે છે" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "New Web Shortcut" +msgid "Reserved Shortcut" +msgstr "નવો વેબ ટુંકાણ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "પ્રમાણભૂત કાર્યક્રમ ટૂંકાણ સાથે તકરાર થાય છે" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"'%1' કળ જોડાણ પ્રમાણભૂત ક્રિયા \"%2\" માટે પણ વપરાય છે જે કેટલાક કાર્યક્રમો ઉપયોગ કરે " +"છે.\n" +"તમે તેને ખરેખર વૈશ્વિક ટૂંકાણો તરીકે પણ વાપરવા માંગો છો?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "પુનઃસોંપણી" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "ઈનપુટ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "કંઇ નહી" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "તમે હમણાં દબાવેલ કળ Qt વડે આધાર આપવામાં આવતી નથી." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "આધાર ન અપાતી કળ" diff --git a/po/ha/kdeclarative5.po b/po/ha/kdeclarative5.po new file mode 100644 index 0000000..338a6d7 --- /dev/null +++ b/po/ha/kdeclarative5.po @@ -0,0 +1,99 @@ +# Hausa translation for kdelibs strings. +# Copyright 2009 Adriaan de Groot, Mustapha Abubakar, Ibrahim Dasuna +# This file is distributed under the same license as the kdelibs package. +# +# Adriaan de Groot , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2009-03-17 11:22+0100\n" +"Last-Translator: Adriaan de Groot \n" +"Language-Team: Hausa \n" +"Language: ha\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 0.2\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Mustapha Abubakar,Adriaan de Groot,Ibrahim Dasuna" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr ",groot@kde.org," + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "" diff --git a/po/he/kdeclarative5.po b/po/he/kdeclarative5.po new file mode 100644 index 0000000..616ed82 --- /dev/null +++ b/po/he/kdeclarative5.po @@ -0,0 +1,120 @@ +# translation of kdelibs4.po to hebrew +# Translation of kdelibs4.po to Hebrew +# translation of kdelibs4.po to +# KDE Hebrew Localization Project +# +# In addition to the copyright owners of the program +# which this translation accompanies, this translation is +# Copyright (C) 1998 Erez Nir +# Copyright (C) 1999-2003 Meni Livne +# +# This translation is subject to the same Open Source +# license as the program which it accompanies. +# +# Diego Iastrubni , 2003. +# Diego Iastrubni , 2003, 2004. +# Diego Iastrubni , 2005, 2006, 2007, 2008, 2009, 2012, 2014. +# Meni Livne , 2007. +# tahmar1900 , 2008, 2009. +# Elkana Bardugo , 2017. #zanata +msgid "" +msgstr "" +"Project-Id-Version: kdeclarative5\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2017-05-16 06:49-0400\n" +"Last-Translator: Copied by Zanata \n" +"Language-Team: Hebrew \n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Zanata 3.9.6\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "צוות התרגום של KDE ישראל" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kde-l10n-he@kde.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "מגדיר את הגופן של התכנית" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"לחץ על הכפתור, ואז תוכל ליצור קיצור מקשים לשימוש בתוכנית.\n" +"דוגמא: לקיצור Ctrl+a: לחץ על המקש Ctrl ועל המקש a" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "קיצורי מקשים שמורים" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"מקש ה-F12 הוא מקש שמור בWindows, ולכן אינו יכול לשמש כמקש קיצור גלובלי.אנא " +"לבחור מקש אחר." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "התנגשות עם קיצור סטנדרטי של ישומים" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"שילוב המקשים \"%1\" כבר הוקצה לפעולה הסטנדרטית \"%2\", בה משתמשות תוכניות " +"רבות.\n" +"מסיבה זו אין באפשרותך להשתמש בו עבור קיצורים גלובליים." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "שייך מחדש" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "קלט" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "ללא" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "המקש שלחצת אינו נתמך על ידי Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "מקש לא נתמך" diff --git a/po/hi/kdeclarative5.po b/po/hi/kdeclarative5.po new file mode 100644 index 0000000..ce9c7ce --- /dev/null +++ b/po/hi/kdeclarative5.po @@ -0,0 +1,105 @@ +# translation of kdelibs4.po to Hindi +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Ravishankar Shrivastava , 2007. +# Ravishankar Shrivastava , 2008. +# G Karunakar , 2009, 2010, 2012. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2012-06-25 15:27+0530\n" +"Last-Translator: G Karunakar \n" +"Language-Team: Hindi \n" +"Language: hi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: Lokalize 1.2\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "करुणाकर गुंटुपल्ली" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "karunakar@indlinux.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "अनुप्रयोग फ़ॉन्ट पारिभाषित करता है" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "आरक्षित शॉर्टकट" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "प्रामाणिक अनुप्रयोग शॉर्टकट के परस्पर विरोध में है" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"कुंजी '%1' संयोजन पहले से ही \"%2\" मानक क्रिया के लिए सम्बद्ध है जो कुछ अनुप्रयोगों में " +"इस्तेमाल किया जाता है.\n" +"क्या आप इसे वैश्विक शॉर्टकट के रूप में भी सम्बद्ध करना चाहते हैं?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "फिर से आबंटित करें" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "इनपुट" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "कुछ नहीं" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "जो कुँजी आपने दबाई वह Qt द्वारा समर्थित नहीं है" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "असमर्थित कुँजी" diff --git a/po/hne/kdeclarative5.po b/po/hne/kdeclarative5.po new file mode 100644 index 0000000..5c83114 --- /dev/null +++ b/po/hne/kdeclarative5.po @@ -0,0 +1,105 @@ +# translation of kdelibs4.po to Hindi +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Ravishankar Shrivastava , 2007. +# Ravishankar Shrivastava , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2009-02-10 20:44+0530\n" +"Last-Translator: Ravishankar Shrivastava \n" +"Language-Team: Hindi \n" +"Language: hi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: Lokalize 0.2\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "रविसंकर सिरीवास्तव, जी. करूनाकर" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "raviratlami@aol.in," + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "अनुपरयोग फोंट परिभासित करथे " + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "New Web Shortcut" +msgid "Reserved Shortcut" +msgstr "नवा वेब सार्टकट" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "प्रामानिक अनुपरयोग सार्टकट के आपसी विरोध मं हे" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"कुंजी '%1' संयोजन पहिली से ही \"%2\" मानक काम बर सम्बद्ध हे जऊन कुछ अनुपरयोग मन मं " +"उपयोग होथे.\n" +"का आप मन एला वैस्विक सार्टकट के रूप मं घलोक सम्बद्ध करना चाहथो ?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "फिर से आबंटित करव" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "इनपुट" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "कुछ नइ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, fuzzy, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "जऊन कुंजी आप मन दबाय हो वो हर क्यूटी द्वारा समर्थित नइ हे." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "असमर्थित कुंजी" diff --git a/po/hr/kdeclarative5.po b/po/hr/kdeclarative5.po new file mode 100644 index 0000000..d66f165 --- /dev/null +++ b/po/hr/kdeclarative5.po @@ -0,0 +1,125 @@ +# Translation of kdelibs4 to Croatian +# +# Renato Pavicic , 2006. +# Zarko Pintar , 2009. +# Marko Dimjasevic , 2009, 2010, 2011. +# Andrej Dundović , 2009, 2010. +# DoDo , 2009. +# Andrej Dundovic , 2009, 2010, 2011. +# Marko Dimjašević , 2011. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2011-07-22 16:08+0200\n" +"Last-Translator: Marko Dimjašević \n" +"Language-Team: Croatian \n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Lokalize 1.2\n" +"X-Poedit-Language: Croatian\n" +"X-Poedit-Country: CROATIA\n" +"X-Poedit-Bookmarks: 1601,-1,-1,-1,-1,-1,-1,-1,-1,-1\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Renato Pavičić, Žarko Pintar, Marko Dimjašević, Andrej Dundović" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"renato@translator-shop.org, zarko.pintar@gmail.com, marko@dimjasevic.net, " +"adundovi@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "definira pismo aplikacije." + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Pritisnite gumb, zatim unesite prečac kao što bi napravili u samom programu." +"\\ Primjer za Ctrl+a: držite tipku Ctrl i pritisnite a." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Rezervirani prečaci" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Tipka F12 rezervirana je na Windowsima i ne može biti korištena kao globalni " +"prečac.\n" +"Molim da izaberete drugu tipku." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Sukob sa zadanim prečacem aplikacije" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Kombinacija tipki '%1' već je dodijeljena standardnoj aktivnosti \"%2\" " +"koju neka aplikacija koristi.\n" +"Želite li je zaista koristiti kao opći prečac? " + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Prenamjeni" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Ulaz" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Bez" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt ne podržava tipku koju ste upravo pritisnuli." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nepodržana tipka" diff --git a/po/hsb/kdeclarative5.po b/po/hsb/kdeclarative5.po new file mode 100644 index 0000000..2b551c1 --- /dev/null +++ b/po/hsb/kdeclarative5.po @@ -0,0 +1,109 @@ +# translation of kdelibs4.po to Upper Sorbian +# translation of kdelibs4.po to +# Copyright (C) 2003,2004, 2005, 2007 Free Software Foundation, Inc. +# Eduard Werner , 2003. +# Prof. Dr. Eduard Werner , 2003,2004. +# Eduard Werner , 2005. +# Eduard Werner/Edward Wornar , 2007, 2008. +# Bianka Šwejdźic , 2007, 2008. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2008-12-19 22:49+0100\n" +"Last-Translator: Eduard Werner \n" +"Language-Team: en_US \n" +"Language: hsb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3;\n" +"X-Generator: KAider 0.1\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Edward Wornar" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "edi.werner@gmx.de" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "definuje pismo programa." + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "New Web Shortcut" +msgid "Reserved Shortcut" +msgstr "Nowa skrótšenka za web" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt ze standardowym outputom programa" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Kombinacija '%1' je so tež za standardnu akciju '%2' wužiwa, kiž je w " +"někotrych aplikacijach definowana.\n" +" Chceće ju woprawdźe tež jako globalnu skrótšenku wužiwać?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Zwjazanje změnić" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Input" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Žane" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, fuzzy, kde-format +#| msgid "The key you just pressed isn't supported by Qt." +msgid "The key you just pressed is not supported by Qt." +msgstr "Tasta, kotruž sće runje stłóčili, so wot Qt njepodpěruje." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Njepodpěrana tasta" diff --git a/po/hu/kdeclarative5.po b/po/hu/kdeclarative5.po new file mode 100644 index 0000000..ef7ce67 --- /dev/null +++ b/po/hu/kdeclarative5.po @@ -0,0 +1,106 @@ +# Kiszel Kristóf , 2010. +# Kristóf Kiszel , 2010, 2011, 2012, 2014. +# Balázs Úr , 2012, 2013. +msgid "" +msgstr "" +"Project-Id-Version: KDE 4.4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2014-04-22 14:52+0200\n" +"Last-Translator: Kristóf Kiszel \n" +"Language-Team: Hungarian \n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Kiszel Kristóf,Szántó Tamás" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ulysses@kubuntu.org,taszanto@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "beállítja az alkalmazás betűtípusát" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Kattintson a gombra, majd adja meg a kívánt billentyűkombinációt.\n" +"Példa Ctrl+A-ra: a Ctrl lenyomva tartása mellett nyomja le az A-t." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Foglalt keresőazonosító" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Az F12 foglalt billentyű a Windowsban, ezért nem használható globális " +"billentyűparancsban.\n" +"Válasszon más billentyűt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Ütközés egy alkalmazásbeli billentyűkombinációval" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"A(z) „%1” billentyűkombináció már hozzá van rendelve a standard „%2” " +"művelethez.\n" +"Azt szeretné, hogy ez globális billentyűparancs is legyen?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Igen, az új" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Bemenet" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Nincs" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "A most lenyomott billentyűt a Qt nem támogatja." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nem támogatott billentyű" diff --git a/po/hy/kdeclarative5.po b/po/hy/kdeclarative5.po new file mode 100644 index 0000000..ab85d8b --- /dev/null +++ b/po/hy/kdeclarative5.po @@ -0,0 +1,116 @@ +# KDE - kdelibs/kdelibs4.po Armenian translation. +# Copyright (C) 2005, KDE Armenian translation team. +# +# Davit Nikoghosyan , 2013 +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2013-01-31 01:08+0400\n" +"Last-Translator: Davit \n" +"Language-Team: Armenian Language: hy\n" +"Language: hy\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Դավիթ Նիկողոսյան" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "nikdavnik@mail.ru" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "որոշում է ծրագրի տառաձևը" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Սեղմեք կոճակի վրա և մուտքագրեք կոմբինացիան:\n" +"Օրինակ ` Ctrl+A կոճակների կոմբինացիայի համար սեղմած պահեք Ctrl կոճակը և " +"սեղմեք A։" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Պահեստավորված կոճակների համադրություն" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Windows F12 կոճակը պաշտպանված է, այդ պատճառով այն չի կարելի օգտագործել " +"կոճակների գլոբալ կոմբինացիաներում:\n" +"Ընտրեք կոճակների այլ կոմբինացիա:" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Կոնֆլիկտ ծրագրի ստանդարտ կոճակի հետ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +" %1 ստեղների կոմբինացիան արդեն կապված է «%2» ստանդարտ գործողության հետ, որն " +"օգտագործվում է մի շարք ծրագրերում։\n" +"Ուզու՞մ եք օգտագործել այս կոմբինացիան որպես գլոբալ։" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Կապել նորի հետ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Հիմա" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Ընտրված չէ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Սեղմված կոճակը չի համապատասխանում Qt հետ։" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Կոճակը չի համապատասխանում" diff --git a/po/ia/kdeclarative5.po b/po/ia/kdeclarative5.po new file mode 100644 index 0000000..535ee92 --- /dev/null +++ b/po/ia/kdeclarative5.po @@ -0,0 +1,109 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# g.sora , 2010, 2011, 2012, 2013, 2014, 2017. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2017-01-15 19:41+0100\n" +"Last-Translator: giovanni \n" +"Language-Team: Interlingua \n" +"Language: ia\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 2.0\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Giovanni Sora" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "g.sora@tiscali.it" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Shell de application QML de KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Il define le nomine unic del application (obligatori)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Tu pressa sur le button, postea inserta le via breve como tu facerea in le " +"programma\n" +"Exemplo per CTRL+A: tu pressa le clave CTRL e pressa A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Via breve reservate" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Le clave F12 es reservate sur Windows, assi non pote usar se como via breve " +"global.\n" +"Pro favor tu selectiona un altere." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "" +"Conflicto con Standard Application Shortcut (Via Breve de application " +"standard)" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Le combination de clave '%1' es etiam usate per le action standard \"%2\" " +"que alicun applicationes usa.\n" +"Etiam tu vole realmente usar lo como via breve global?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reassigna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Ingresso" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Nulle" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Le clave que tu tosto pressava non es supportate per Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Clave non supportate" diff --git a/po/id/kdeclarative5.po b/po/id/kdeclarative5.po new file mode 100644 index 0000000..956ba36 --- /dev/null +++ b/po/id/kdeclarative5.po @@ -0,0 +1,109 @@ +# Indonesian translations for kdelibs4 package. +# Copyright (C) 2010 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdelibs4 package. +# Andhika Padmawan , 2010-2014. +# Wantoyo , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2017-12-11 22:03+0700\n" +"Last-Translator: Wantoyo \n" +"Language-Team: Indonesian \n" +"Language: id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andhika Padmawan" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andhika.padmawan@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "menjelaskan fonta aplikasi" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Klik pada tombol, lalu masukkan pintasan seperti yang anda inginkan di " +"program.\n" +"Misalnya untuk Ctrl+A: tahan tombol Ctrl lalu tekan A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Pintasan Dipesan" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Tombol F12 dipesan di Windows, sehingga tidak dapat digunakan untuk pintasan " +"global.\n" +"Silakan pilih yang lain" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflik dengan Pintasan Aplikasi Standar" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Kombinasi tombol '%1' digunakan pula untuk aksi standar \"%2\" yang " +"digunakan oleh beberapa aplikasi.\n" +"Anda yakin ingin menggunakannya sebagai pintasan global juga?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Tugaskan Ulang" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Masukan" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Tak Ada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Tombol yang baru anda tekan tidak didukung oleh Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tombol Tak Didukung" diff --git a/po/is/kdeclarative5.po b/po/is/kdeclarative5.po new file mode 100644 index 0000000..d7ae7a7 --- /dev/null +++ b/po/is/kdeclarative5.po @@ -0,0 +1,127 @@ +# translation of kdelibs4.po to Icelandic +# íslensk þýðing á kdelibs4.po +# Copyright (C) 1998,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. +# +# Logi Ragnarsson , 1998-2003. +# Richard Allen , 1998-2004. +# Pjetur G. Hjaltason , 2003. +# Arnar Leósson , 2003, 2005. +# Sveinn í Felli , 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2016. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2016-04-08 22:57+0000\n" +"Last-Translator: Sveinn í Felli \n" +"Language-Team: Icelandic \n" +"Language: is\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: Plural-Forms: nplurals=2; plural=n != 1;\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"Richard Allen, Logi Ragnarsson, Pjetur G. Hjaltason, Arnar Leósson, Svanur " +"Pálsson, Sveinn í Felli" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"ra@ra.is, logi@logi.org, pjetur@pjetur.net, leosson@frisurf.no, svanur@tern." +"is, sv1@fellsnet.is" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "skilgreinir letur forritsins" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Smelltu á hnappinn, settu síðan inn flýtilykilinn sem þú vilt nota í " +"forritinu.\n" +"Til dæmis Ctrl+a: halda niðri 'Ctrl' lyklinum og ýta á 'a'." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Frátekinn flýtilykill" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 lykillinn er frátekinn í Windows og er ekki hægt að nota sem víðværan " +"flýtilykil.\n" +"Veldu einhvern annan." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Árekstur við staðlaða fýtilykla forrita" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Lyklasamsetningin '%1' er nú þegar í notkun fyrir stöðluðu aðgerðina \"%2\" " +"sem mörg forrit nota.\n" +"Vilt þú í alvörunni nota hana jafnframt sem víðværan flýtilykil?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Endurúthluta" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Inntak" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Engin" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Lykillinn sem þú varst að ýta á er ekki studdur í Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Óstuddur lykill" diff --git a/po/it/kdeclarative5.po b/po/it/kdeclarative5.po new file mode 100644 index 0000000..e6babbe --- /dev/null +++ b/po/it/kdeclarative5.po @@ -0,0 +1,116 @@ +# translation of kdelibs4.po to Italian +# Andrea Rizzi , 2003, 2004, 2005. +# Federico Cozzi , 2004. +# Federico Zenith , 2004, 2008, 2009, 2010, 2011. +# Andrea Rizzi , 2004. +# Nicola Ruggero , 2005, 2006. +# Nicola Ruggero , 2006, 2007, 2010. +# Luciano Montanaro , 2007. +# Dario Panico , 2008. +# Pino Toscano , 2008. +# Federico Zenith , 2008, 2012, 2013, 2014, 2015. +# Innocenzo Ventre , 2012. +# Vincenzo Reale , 2014, 2015. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-03-15 13:50+0100\n" +"Last-Translator: Vincenzo Reale \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Vincenzo Reale" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "smart2128@baslug.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Shell applicazione KPackage QML" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Il nome univoco dell'applicazione (obbligatorio)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Fai clic sul pulsante, quindi digita la scorciatoia come la vorresti nel " +"programma.\n" +"Esempio per Ctrl+A: tieni premuto il tasto Ctrl e premi A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Scorciatoia riservata" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Il tasto F12 è riservato sotto Windows, quindi non può essere usato per una " +"scorciatoia globale.\n" +"Scegline un altro." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflitto con una scorciatoia standard delle applicazioni" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"La combinazione di tasti «%1» è anche usata per l'azione standard «%2» che " +"alcune applicazioni usano.\n" +"Vuoi veramente usarla anche come scorciatoia globale?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Riassegna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Immissione" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Nessuna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Il tasto che hai appena premuto non è supportato da Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tasto non supportato" diff --git a/po/ja/kdeclarative5.po b/po/ja/kdeclarative5.po new file mode 100644 index 0000000..ebe869a --- /dev/null +++ b/po/ja/kdeclarative5.po @@ -0,0 +1,116 @@ +# Translation of kdelibs4 into Japanese. +# This file is distributed under the same license as the kdelibs package. +# Taiki Komoda , 2002, 2004, 2006, 2010. +# Noboru Sinohara , 2004. +# Toyohiro Asukai , 2004. +# Kurose Shushi , 2004. +# AWASHIRO Ikuya , 2004. +# Shinichi Tsunoda , 2005. +# Yukiko Bando , 2006, 2007, 2008, 2009, 2010. +# Fumiaki Okushi , 2006, 2007, 2008, 2010, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2011-08-27 14:05-0700\n" +"Last-Translator: Fumiaki Okushi \n" +"Language-Team: Japanese \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" +"X-Generator: Lokalize 1.1\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "予約済みのショートカット" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 は Windows で予約済みになっているため、グローバルショートカットには使えま" +"せん。\n" +"他のキーを選択してください。" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "標準アプリケーションショートカットと競合します" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"キーの組み合わせ %1 は、複数のアプリケーションが使用する標準アクション「%2」" +"に割り当てられています。\n" +"本当にこれをグローバルショートカットとしても使いますか?|/|キーの組み合わせ " +"%1 は、複数のアプリケーションが使用する標準アクション「$[~stripAccel " +"$[~getForm %2 ~full]]」に割り当てられています。\n" +"本当にこれをグローバルショートカットとしても使いますか?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "割り当て直す" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "入力" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "なし" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "あなたが押したキーは Qt でサポートされていません。" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "サポートされていないキー" diff --git a/po/ka/kdeclarative5.po b/po/ka/kdeclarative5.po new file mode 100644 index 0000000..1e4eae6 --- /dev/null +++ b/po/ka/kdeclarative5.po @@ -0,0 +1,104 @@ +# KDE3 - Georgian translation of kdelibs4.po +# Gia Shervashidze , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2009-12-17 02:11+0400\n" +"Last-Translator: George Machitidze \n" +"Language-Team: Georgian \n" +"Language: ka\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "გია შერვაშიძე" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "giasher@telenet.ge" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "მიუთითებს პროგრამის შრიფტს" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "მალმხმობი" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "კონფლიქტი პროგრამის სტანდარტულ მალმხმობთან" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"კლავიშების ბმული %1 უკვე გამოიყენება \"%2\" სტანდარტული ქმედებისთვის.\n" +"გადმოვამისამართო იგი ახალ ქმედებაზე?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "გადამისამართება" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, fuzzy, kde-format +#| msgid "Input file" +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "შეტანის ფაილი" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, fuzzy, kde-format +#| msgid "None" +msgctxt "No shortcut defined" +msgid "None" +msgstr "არა" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +#| msgid "Untrusted" +msgid "Unsupported Key" +msgstr "შეუმოწმებელი" diff --git a/po/kk/kdeclarative5.po b/po/kk/kdeclarative5.po new file mode 100644 index 0000000..6f8025e --- /dev/null +++ b/po/kk/kdeclarative5.po @@ -0,0 +1,120 @@ +# translation of kdelibs4.po to Karakh +# +# Sairan Kikkarin , 2005, 2006, 2007, 2008, 2009. +# Sairan Kikkarin , 2010, 2011, 2012. +# Sairan Kikkarin , 2010, 2013. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2013-11-08 01:24+0600\n" +"Last-Translator: Sairan Kikkarin \n" +"Language-Team: Kazakh \n" +"Language: kk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.2\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"\n" +"\n" +"\n" +"\n" +"\n" + +# +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Сайран Киккарин" + +# +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "sairan@computer.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "қолданбаның қаріпін анықтайды" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Осы батырманы басыңыз да, қалаған тіркесімді келтіріңіз.\n" +"Мысалы, Ctrl+a: дегенді келтіру үшін 'Ctrl' пернені басып тұрып \n" +"'a' пернесін басыңыз." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Арналған тіркесімі" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 пернесі Windows-қа арналған, сондықтан жалпы жүйелік тіркесімге " +"жарамайды.\n" +"Басқа пернені таңдаңыз." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Қолданбаның стандартты перне тіркесімімен қайшылық" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"'%1' деген перне тіркесімі әлден \"%2\" деген стандартты әрекетпен " +"байланысқан.\n" +"Оны жалпы жүйелік тіркесімі ретінде пайдаланбақсыз ба?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Ауыстыру" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Енгізу" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Жоқ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Жаңа ғана басқан пернені Qt танымайды." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Танымайтын перне" diff --git a/po/km/kdeclarative5.po b/po/km/kdeclarative5.po new file mode 100644 index 0000000..47f73f3 --- /dev/null +++ b/po/km/kdeclarative5.po @@ -0,0 +1,110 @@ +# translation of kdelibs4.po to Khmer +# Khoem Sokhem , 2008, 2009, 2010, 2011, 2012. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2012-06-27 10:04+0700\n" +"Last-Translator: Khoem Sokhem \n" +"Language-Team: Khmer\n" +"Language: km\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: KBabel 1.11.4\n" +"X-Language: km-KH\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr " ខឹម សុខែម, ម៉ន ម៉េត, សេង សុត្ថា​​, ចាន់ សម្បត្តិរតនៈ, សុខ សុភា" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"khoemsokhem@khmeros.info,​​mornmet@khmeros.info,sutha@khmeros.info," +"ratanak@khmeros.info,sophea@khmeros.info" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "កំណត់​ពុម្ពអក្សរ​របស់​កម្មវិធី" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"ចុច​ប៊ូតុង បន្ទាប់មក​បញ្ចូលផ្លូវកាត់​​តាម​ដែល​អ្នក​ចង់​បាន​នៅ​ក្នុង​កម្មវិធី ។\n" +"ឧទាហរណ៍ បញ្ជា(Ctrl)+a ៖ ចុច​គ្រាប់ចុច​បញ្ជា(Ctrl) ហើយ​ចុច​ a ។" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "ផ្លូវកាត់​ដែល​បានបម្រុង​ទុក" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"គ្រាប់​ចុច F12 ត្រូវ​បាន​បម្រុង​ទុក​នៅ​លើ​វីនដូ ដូច្នេះ​មិនអាច​ត្រូវ​បានប្រើ​សម្រាប់​គ្រាប់​ចុច​ផ្លូវកាត់​សកល​ទេ ។\n" +"សូម​ជ្រើស​គ្រាប់ចុច​ផ្លូវកាត់​ផ្សេង ។" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "ប៉ះទង្គិច​ជាមួយ​នឹង​ផ្លូវកាត់​កម្មវិធី​ស្តង់ដា" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"បន្សំ​គ្រាប់​ចុច '%1' ក៏​ត្រូវ​កំពុង​ត្រូវ​បាន​ប្រើ​សម្រាប់​សកម្មភាព​ស្តង់ដារ \"%2\" ដែល​កម្មវិធី​មួយ​ចំនួន​ប្រើ ។\n" +"តើ​អ្នក​ពិត​ជា​ចង់​ប្រើ​វា​ជា​ផ្លូវកាត់​សកល​ដែរ​ឬ ?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "ផ្ដល់ឡើង​វិញ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "បញ្ចូល" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "គ្មាន" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "គ្រាប់ចុច​ដែល​អ្នក​ទើបតែ​បាន​ចុច​មិន​ត្រូវ​បានគាំទ្រ​ដោយ Qt ទេ ។" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "គ្រាប់ចុច​មិនបានគាំទ្រ" diff --git a/po/kn/kdeclarative5.po b/po/kn/kdeclarative5.po new file mode 100644 index 0000000..62c47ed --- /dev/null +++ b/po/kn/kdeclarative5.po @@ -0,0 +1,106 @@ +# translation of kdelibs4.po to Kannada +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Umesh Rudrapatna , 2007. +# Umesh Rudrapatna , 2007, 2008, 2009. +# Shankar Prasad , 2008, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2010-06-24 18:32+0530\n" +"Last-Translator: Shankar Prasad \n" +"Language-Team: kn_IN \n" +"Language: kn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"\n" +"X-Generator: Lokalize 1.0\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "ಉಮೇಶ್ ರುದ್ರಪಟ್ಟಣ, ಸಿದ್ಧಾರೂಢ ಪಿ ಟಿ, ಶಂಕರ ಪ್ರಸಾದ್ ಎಂ ವಿ" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "umeshrs@gmail.com, siddharudh@gmail.com, svenkate@redhat.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "ಅನ್ವಯದ ಲಿಪಿಶೈಲಿಯನ್ನು ನಿರೂಪಿಸುತ್ತದೆ" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "ಕಾದಿರಿಸಲಾದ ಸಮೀಪಮಾರ್ಗ (ಶಾರ್ಟ್ ಕಟ್)" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "ಮಾನಕ (standard) ಅನ್ವಯಿಕ ಸಮೀಪಮಾರ್ಗಗಳೊಡನೆ ಕಲಹ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"'%1' ಕೀಲಿಕೈ ಹೊಂದಾಣಿಕೆಯು ಅನೇಕ ಅನ್ವಯಿಕಗಳು ಬಳಸುವ ಮಾನಕ (standard) ಕ್ರಿಯೆ \"%2\" ಗೆ " +"ಈಗಾಗಲೇ ನಿಗದಿಗೊಳಿಸಲಾಗೆದೆ.\n" +"ನೀವು ನಿಜಕ್ಕೂ ಇದನ್ನು ಸಾರ್ವತ್ರಿಕ ಸಮೀಪಮಾರ್ಗವಾಗಿ ಬಳಸಲಿಚ್ಛಿಸುವಿರೇನು?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "ಮರುನಿಗದಿಗೊಳಿಸು" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "ಆದಾನ (ಇನ್ ಪುಟ್)" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "ಯಾವುದೂ ಇಲ್ಲ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "ನೀವು ಈಗ ಒತ್ತಿದ ಕೀಲಿಕೈಗೆ Qt ಯ ಬೆಂಬಲವಿಲ್ಲ." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "ಬೆಂಬಲವಿಲ್ಲದೆ ಇರುವ ಕೀಲಿ" diff --git a/po/ko/kdeclarative5.po b/po/ko/kdeclarative5.po new file mode 100644 index 0000000..72b099d --- /dev/null +++ b/po/ko/kdeclarative5.po @@ -0,0 +1,107 @@ +# Korean messages for kdelibs. +# Copyright (C) Free Software Foundation, Inc. +# Cho Sung Jae , 2007. +# Shinjo Park , 2007, 2008, 2009, 2010, 2011. +# Shinjo Park , 2011, 2012, 2013, 2014, 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-04-26 17:51+0200\n" +"Last-Translator: Shinjo Park \n" +"Language-Team: Korean \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Shinjo Park" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kde@peremen.name" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage QML 프로그램 셸" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "프로그램의 식별 가능한 이름(필수)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"단추를 누른 다음 프로그램에 사용할 단축 키를 누르십시오.\n" +"Ctrl+A를 사용하려면 Ctrl 키를 누르고 A를 누르십시오." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "예약된 바로 가기" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 키는 Windows에서 예약되어 있으므로 전역 단축키로 사용할 수 없습니다.\n" +"다른 키를 선택하십시오" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "표준 프로그램 단축키와 충돌" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"'%1' 키 조합은 많은 프로그램이 사용하는 \"%2\" 표준 동작에 할당되어 있습니" +"다.\n" +"그래도 전역 단축키로 사용하시겠습니까?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "재할당" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "입력" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "없음" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt에서 방금 누른 키를 지원하지 않습니다." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "지원하지 않는 키" diff --git a/po/ku/kdeclarative5.po b/po/ku/kdeclarative5.po new file mode 100644 index 0000000..5ab364c --- /dev/null +++ b/po/ku/kdeclarative5.po @@ -0,0 +1,116 @@ +# translation of kdelibs4.po to Kurdish +# Kurdish translation for kdelibs +# Copyright (c) (c) 2006 Canonical Ltd, and Rosetta Contributors 2006 +# This file is distributed under the same license as the kdelibs package. +# FIRST AUTHOR , 2006. +# Erdal Ronahi , 2006, 2008. +# Erdal Ronahi , 2007, 2008, 2009. +# Amed Çeko Jiyan , 2008. +# Erdal Ronahî , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2010-08-13 15:45+0200\n" +"Last-Translator: Erdal Ronahî \n" +"Language-Team: Kurdish Team http://pckurd.net\n" +"Language: ku\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Virtaal 0.6.1\n" +"X-Launchpad-Export-Date: 2007-11-26 09:44+0000\n" +"X-Poedit-Language: Kurdish\n" +"X-Poedit-Country: Kurdistan\n" +"X-Poedit-SourceCharset: utf-8\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Erdal Ronahi" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "erdal.ronahi@nospam.gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "curetîpê sepandinê diyar dike" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Pêl bişkojkê bikin, paşê jî kurterê têkevnê wek we di bernamê de dikin.\n" +"Mînak ji bo Ctrl+a: Ctrl pêlêkirî bigirin û pêl a bikin." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Kurteriya Veqetandî" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 di Windowsê de heye, ji ber vê ji bo kurteriyên giştî nayê bikaranîn.\n" +"Ji kerema xwe yekî din hilbijêrin." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Lihevnekirina Bi Kurteriya Sepana Standard" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Tayînkirina ji nû ve" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Ketan" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Ti yek" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Bişkojka te pêlêkirî ji aliyê Qt ve nayê naskirin." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Mifteya Bêpiştgir" diff --git a/po/lb/kdeclarative5.po b/po/lb/kdeclarative5.po new file mode 100644 index 0000000..3738731 --- /dev/null +++ b/po/lb/kdeclarative5.po @@ -0,0 +1,104 @@ +# translation of kdelibs4.po to Luxembourgish +# kevin claude everard , 2005. +# Michel Ludwig , 2005, 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2006-06-22 16:29+0200\n" +"Last-Translator: Michel Ludwig \n" +"Language-Team: Luxembourgish \n" +"Language: lb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.2\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Kevin Claude Everard,Michel Ludwig" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kevin@math.uni-sb.de,miclud@studcs.uni-sb.de" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "Definéiert d'Schrëft vun der Uwendung" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "Tastekombinatioun" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt mat der Standardkombinatioun vum Programm" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"D'Tastekombinatioun \"%1\" ass scho mat der Standardaktioun \"%2\" verbonn.\n" +"Wëllt dir trotzdem déi nei Zouuerdnung auswielen?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Nei zouuerdnen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, fuzzy, kde-format +#| msgid "Input file" +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Quelldatei" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, fuzzy, kde-format +#| msgid "None" +msgctxt "No shortcut defined" +msgid "None" +msgstr "Keng" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +#| msgid "Untrusted" +msgid "Unsupported Key" +msgstr "Net als sëcher agestuft" diff --git a/po/lt/kdeclarative5.po b/po/lt/kdeclarative5.po new file mode 100644 index 0000000..0ae6322 --- /dev/null +++ b/po/lt/kdeclarative5.po @@ -0,0 +1,114 @@ +# translation of kdelibs4.po to Lithuanian +# Ričardas Čepas , 2002-2004. +# Donatas Glodenis , 2004-2009. +# Gintautas Miselis , 2008. +# Andrius Štikonas , 2009. +# Tomas Straupis , 2011. +# Remigijus Jarmalavičius , 2011. +# Liudas Ališauskas , 2011, 2012, 2013, 2014. +# Liudas Alisauskas , 2013, 2015. +# Mindaugas Baranauskas , 2015. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-12-30 18:08+0200\n" +"Last-Translator: Mindaugas Baranauskas \n" +"Language-Team: lt \n" +"Language: lt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10>=2 && (n%100<10 || n" +"%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3);\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Spauskite mygtuką, tada įveskite klavišų derinį taip, tarsi būtumėte " +"programoje.\n" +"Pavyzdžiui kombinacijai Vald+A: laikykite Vald ir spauskite A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Rezervuotas klavišų derinys" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 klavišas yra rezervuotas Windows sistemoje, taigi negali būti naudojamas " +"trumpuoju klavišų deriniu.\n" +"Prašome pasirinkti kitą." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konfliktas su standartiniu programos iššaukimo klavišų deriniu" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Klavišų derinys „%1“ jau priskirtas standartiniam veiksmui „%2“, kurį " +"naudoja kai kurios programos.\n" +"Ar tikrai norite jį naudoti ir kaip globalųjį spartųjį klavišų derinį?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Priskirti iš naujo" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Įvestis" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Jokio" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Klavišas, kurį nuspaudėte, nepalaikomas Qt sistemoje." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nepalaikomas klavišas" diff --git a/po/lv/kdeclarative5.po b/po/lv/kdeclarative5.po new file mode 100644 index 0000000..88c5f2c --- /dev/null +++ b/po/lv/kdeclarative5.po @@ -0,0 +1,119 @@ +# translation of kdelibs4.po to Latvian +# kdelibs.po tulkojums uz Latviešu valodu +# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# +# Maris Nartiss , 2005. +# Maris Nartiss , 2006, 2007, 2008, 2009, 2010, 2011. +# Linux localization project , 2007. +# Viesturs Zarins , 2007, 2008, 2010. +# Viesturs Zariņš , 2009. +# Einars Sprugis , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2011-07-06 12:57+0300\n" +"Last-Translator: Maris Nartiss \n" +"Language-Team: Latvian\n" +"Language: lv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" +"X-Launchpad-Export-Date: 2007-11-22 17:44+0000\n" +"X-Generator: KBabel 1.11.4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Viesturs Zariņš, Māris Nartišs" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "viesturs.zarins@mi.lu.lv, maris.kde@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "definē programmas fontu" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Nospiediet pogu, tad ievadiet īsceļu, kuru vēlaties lietot programmā.\n" +"Piemēram, priekš Ctrl+a: turiet Ctrl taustiņu un tad nospiediet a." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Rezervērts īsceļš" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 taustiņš ir rezervēts Windows operētājsistēmā, tāpēc to nevar izmantot " +"kā globālu īsceļu.\n" +"Lūdzu izvēlieties citu taustiņu." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikts ar standarta programmu īsceļu" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Taustiņu kombinācija '%1' jau ir piešķirta standarta darbībai \"%2\", ko " +"lieto daudzas programmas.\n" +"Vai jūs tiešām vēlaties to izmantot arī kā globālo īsceļu?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Piešķirt" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Ievade" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Nav" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt neatbalsta jūsu nospiesto taustiņu." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Neatbalstīts taustiņš" diff --git a/po/mai/kdeclarative5.po b/po/mai/kdeclarative5.po new file mode 100644 index 0000000..88e62f9 --- /dev/null +++ b/po/mai/kdeclarative5.po @@ -0,0 +1,106 @@ +# translation of kdelibs4.po to Hindi +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Sangeeta Kumari , 2008. +# Rajesh Ranjan , 2010. +# Rajesh Ranjan , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2010-09-24 15:44+0530\n" +"Last-Translator: Rajesh Ranjan \n" +"Language-Team: Hindi \n" +"Language: hi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: KBabel 1.11.4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "संगीता कुमारी" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "sangeeta09@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "अनुप्रयोग फोन्ट पारिभाषित करैत अछि" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "शार्टकट" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "प्रामाणिक अनुप्रयोग शार्टकट केर परस्पर विरोध मे अछि" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"कुंजी '%1' संयोजन पहिने सँ \"%2\" मानक काज क' लेल सम्बद्ध अछि जे किछु अनुप्रयोगसभ मे " +"इस्तेमाल कएल जाइत अछि.\n" +"की अहाँ एकरा वैश्विक शार्टकट केर रूपेँ सम्बद्ध कएनाइ चाहैत छी?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "फिनु सँ आबंटित करू" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "इनपुट" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "किछु नहि" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "असमर्थित कुंजी" diff --git a/po/mk/kdeclarative5.po b/po/mk/kdeclarative5.po new file mode 100644 index 0000000..0c82506 --- /dev/null +++ b/po/mk/kdeclarative5.po @@ -0,0 +1,125 @@ +# translation of kdelibs4.po to Macedonian +# +# Copyright (C) 2000,2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# Dimitar Indovski +# Damjan Janevski +# Dragan Sekulovski +# +# Maratonec , 2002. +# Dragan Bocevski , 2002. +# Danko Ilik , 2002,2003. +# Bozidar Proevski , 2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010. +# Danko Ilik , 2003. +# Darko Nikolovski , 2003. +# Ivan Dimitrov , 2003. +# Magdica Shambevska , 2004. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2010-01-27 10:39+0100\n" +"Last-Translator: Bozidar Proevski \n" +"Language-Team: Macedonian \n" +"Language: mk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: Plural-Forms: nplurals=3; plural=n%10==1 ? 0 : n%10==2 ? 1 : " +"2;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Божидар Проевски" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bobibobi@freemail.com.mk" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "го дефинира фонтот на апликацијата" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Кликнете на копчето, потоа внесете ја кратенката како што би ја активирале " +"во некоја програма.\n" +"На пример за „Ctrl+a“: задржете го притиснато копчето „Ctrl“ и притиснете " +"„a“." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Резервирана кратенка" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Копчето F12 е резервирано на „Windows“, па не може да се користи како " +"глобална кратенка.\n" +"Молам изберете друга." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Конфликт со стандардна кратенка на апликација" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Комбинацијата на копчиња „%1“ исто така се користи за стандардното дејство " +"“%2“ што го користат некои апликации.\n" +"Дали навистина сакате да ја користите и како глобална кратенка?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Преповрзи" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Внес" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Нема" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Тастерот што го притиснавте не е поддржан од Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Неподдржан тастер" diff --git a/po/ml/kdeclarative5.po b/po/ml/kdeclarative5.po new file mode 100644 index 0000000..d3813a3 --- /dev/null +++ b/po/ml/kdeclarative5.po @@ -0,0 +1,109 @@ +# translation of kdelibs4.po to +# Malayalam translation of kdelibs4. +# Copyright (C) 2007-2010 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdelibs package. +# Anoop | അനൂപ് Panavalappil | പനവളപ്പില്‍ , 2008. +# ANI PETER|അനി പീറ്റര്‍ , 2008. +# Maxin B. John , 2007. +# Manu S Madhav | മനു എസ് മാധവ് , 2008. +# Praveen Arimbrathodiyil , 2007, 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2010-12-29 15:32+0530\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: ml\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: KBabel 1.11.4\n" +"X-Poedit-Country: INDIA\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "പ്രവീണ്‍ അരിമ്പ്രത്തൊടിയില്‍, അനി പീറ്റര്‍, മാക്സിന്‍ ജോണ്‍, അനൂപ് പനവളപ്പില്‍, മനു എസ് മാധവ്" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"pravi.a@gmail.com, peter.ani@gmail.com, maxinbjohn@gmail.com, gnuanu@gmail." +"com, manusmad@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "പ്രയോഗത്തിനുള്ള അക്ഷരസഞ്ചയം നിര്‍വ്വചിക്കുന്നു " + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "പറഞ്ഞുവച്ച കുറുക്കുവഴി" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 കീ വിന്‍ഡോസില്‍ പറഞ്ഞുവച്ചിട്ടുള്ളതായതിനാല്‍ ആഗോള കുറുക്കുവഴിയായി ഉപയോഗിയ്ക്കാന്‍ സാധ്യമല്ല.\n" +"ദയവായി മറ്റൊരെണ്ണം തെരഞ്ഞെടുക്കൂ." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "നിലവാരത്തിലുള്ള പ്രയോഗ കുറുക്കുവഴിയുമായി പ്രശ്നം" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "വീണ്ടും ഏല്‍പ്പിക്കുക" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "ഇന്‍പുട്ട്" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "ഒന്നുമല്ല" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "നിങ്ങള്‍ അമര്‍ത്തിയ കീ ക്യൂട്ടി പിന്തുണയ്ക്കുന്നതല്ല." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "പിന്തുണയില്ലാത്ത കീ" diff --git a/po/mr/kdeclarative5.po b/po/mr/kdeclarative5.po new file mode 100644 index 0000000..f72a40c --- /dev/null +++ b/po/mr/kdeclarative5.po @@ -0,0 +1,105 @@ +# translation of kdelibs4.po to marathi +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Sandeep Shedmake , 2008, 2009. +# Chetan Khona , 2012, 2013. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2013-03-29 16:14+0530\n" +"Last-Translator: Chetan Khona \n" +"Language-Team: Marathi \n" +"Language: mr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"संदिप शेडमाके, \n" +"चेतन खोना" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"sandeep.shedmake@gmail.com, \n" +"chetan@kompkin.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "अनुप्रयोग फॉन्टचे वर्णन करतो" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "आरक्षित शॉर्टकट" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "प्रमाणित अनुप्रयोग शॉर्टकट सह मतभेद" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "पुन्हा नेमणे" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "माहिती" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "काहीच नाही" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "तुम्ही जी कळ दाबली ती Qt मध्ये समर्थीत नाही." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "असमर्थीत कि" diff --git a/po/ms/kdeclarative5.po b/po/ms/kdeclarative5.po new file mode 100644 index 0000000..6f5bf0f --- /dev/null +++ b/po/ms/kdeclarative5.po @@ -0,0 +1,116 @@ +# kdelibs4 Bahasa Melayu (Malay) (ms) +# Hasbullah bin Pit , 2003. +# Muhammad Najmi Ahmad Zabidi , 2003. +# Mohd Nasir bin Che Embee , 2003. +# Muhammad Najmi bin Ahmad Zabidi , 2006. +# Sharuzzaman Ahmat Raslan , 2006, 2007, 2008, 2009, 2010. +# Sharuzzaman Ahmat Raslan , 2010, 2011. +# Copyright (C) 2008, 2009 K Desktop Environment +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2011-07-16 00:57+0800\n" +"Last-Translator: Sharuzzaman Ahmat Raslan \n" +"Language-Team: Malay \n" +"Language: ms\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sharuzzaman Ahmat Raslan" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "sharuzzaman@myrealbox.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "mentakrifkan font aplikasi" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Klik pada butang, kemudian masukkan pintasan yang anda mahukan dalam " +"program.\n" +"Contoh untuk Ctrl+a: pegang kekunci Ctrl dan tekan a." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Pintasan Dikhaskan" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Kekunci F12 adalah dikhaskan pada Windows, jadi tidak boleh digunakan untuk " +"pintasan global.\n" +"Sila pilih yang lain." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflik dengan Piawaian Kekunci Pintas Aplikasi" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Kombinasi kekunci '%1' juga telah digunakan untuk tindakan standard \"%2\" " +"yang digunakan oleh kebanyakan aplikasi.\n" +"Adakah anda betul-betul hendak menggunakannya sebagai pintasan global juga?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Ulangtugas" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Masukan" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Tiada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Kekunci yang anda baru tekan tidak disokong oleh Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Kekunci Tidak Disokong" diff --git a/po/nb/kdeclarative5.po b/po/nb/kdeclarative5.po new file mode 100644 index 0000000..7194971 --- /dev/null +++ b/po/nb/kdeclarative5.po @@ -0,0 +1,115 @@ +# Translation of kdeclarative5 to Norwegian Bokmål +# +# Knut Yrvin , 2002, 2003, 2004, 2005. +# Bjørn Steensrud , 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015. +# Eskild Hustvedt , 2004, 2005. +# Gaute Hvoslef Kvalnes , 2004, 2005. +# Axel Bojer , 2005, 2006. +# Nils Kristian Tomren , 2005, 2007. +# Øyvind A. Holm , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-06-30 03:05+0200\n" +"PO-Revision-Date: 2015-04-28 08:55+0200\n" +"Last-Translator: Bjørn Steensrud \n" +"Language-Team: Norwegian Bokmål \n" +"Language: nb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Bjørn Steensrud" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bjornst@skogkatt.homelinux.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage QML programskall" + +#: kpackagelauncherqml/main.cpp:51 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Det entydige navnet på programmet (obligatorisk)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Trykk på knappen, og tast inn snarveien slik du ville gjort det i " +"programmet.\n" +"Eksempel for CTRL+A: Hold CTRL-tasten og trykk A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Reservert snarvei" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12-tasten er reservert under Windows, så den kan ikke brukes som global " +"snarvei.\n" +"Velg en annen tast." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt med en standard programsnarvei" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Tastekombinasjonen «%1» er allerede i bruk for standardhandlinga «%2» som " +"mange programmer bruker.\n" +"Er du sikker på at du vil bruke den som en global snarvei også?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Tilordne på nytt" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Inndata" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Ingen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt støtter ikke den tasten du nettopp trykket." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Ustøttet tast" diff --git a/po/nds/kdeclarative5.po b/po/nds/kdeclarative5.po new file mode 100644 index 0000000..af77960 --- /dev/null +++ b/po/nds/kdeclarative5.po @@ -0,0 +1,110 @@ +# Translation of kdelibs4.po to Low Saxon +# Heiko Evermann , 2004. +# Heiko Evermann , 2004, 2005. +# Volker Jockheck , 2004. +# Sönke Dibbern , 2004, 2005, 2006, 2007, 2008, 2009, 2014. +# Manfred Wiese , 2008, 2009, 2010, 2011, 2012. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2014-05-11 00:55+0200\n" +"Last-Translator: Sönke Dibbern \n" +"Language-Team: Low Saxon \n" +"Language: nds\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Sönke Dibbern, Manfred Wiese" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "s_dibbern@web.de, m.j.wiese@web.de" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "stellt de Schriftoort för't Programm in" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Klick op den Knoop un giff denn de Tastkombinatschoon so in, as Du dat ok " +"in't Programm deest.\n" +"Bispill för Strg+A: Holl de Strg-Tast daal un drück denn de A-Tast." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Reserveert Tastkombinatschoon" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"De F12-Tast is op Windows reserveert un lett sik nich as globaal " +"Tastkombinatschoon bruken.\n" +"Söök bitte en anner ut." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Problem mit'n Standard-Programmkombinatschoon" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"De Kombinatschoon „%1“ höört al de Standardakschoon „%2“ to, de en Reeg " +"Programmen bruukt.\n" +"Wullt Du ehr redig as en globaal Tastkombinatschoon bruken?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Nieg toornen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Ingaav" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Keen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt ünnerstütt de Tast nich, de Du jüst drückt hest." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nich ünnerstütt Tast" diff --git a/po/ne/kdeclarative5.po b/po/ne/kdeclarative5.po new file mode 100644 index 0000000..8c15c3e --- /dev/null +++ b/po/ne/kdeclarative5.po @@ -0,0 +1,113 @@ +# translation of kdelibs4.po to Nepali +# Mahesh Subedi , 2006, 2007. +# Shiva Prasad Pokharel , 2006, 2007. +# shyam krishna ball , 2006. +# shyam krishna bal , 2006, 2007. +# Shiva Pokharel , 2007. +# Nabin Gautam , 2007. +# Shiva Prasad Pokharel , 2007. +# Shyam Krishna Bal , 2007. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2007-11-05 15:41+0545\n" +"Last-Translator: Shyam Krishna Bal \n" +"Language-Team: Nepali \n" +"Language: ne\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n !=1\n" +"X-Generator: KBabel 1.11.4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Mahesh Subedi, श्यामकृष्ण बल, Nabin Gautam" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "submanesh@gmail.com, shyamkrishna_bal@yahoo.com, Nabin@mpp.org.np" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "अनुप्रयोग फन्ट परिभाषित गर्दछ" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "सर्टकट" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "मानक अनुप्रयोग सर्टकटसँग द्वन्द्व" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +#| msgid "" +#| "The '%1' key combination has already been allocated to the standard " +#| "action \"%2\" that many applications use.\n" +#| "You cannot use it for global shortcuts for this reason." +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"'%1' कुञ्जी संयोजन \"%2\" मानक कार्यमा पहिल्यै बाँडफाँट गरिएको छ ।\n" +"तपाईँ हालको कार्यबाट यसलाई फेरि मानाङ्कन गर्न चाहनुहुन्छ ?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "फेरि मानाङ्कन गर्नुहोस्" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "आगत" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, fuzzy, kde-format +#| msgid "None" +msgctxt "No shortcut defined" +msgid "None" +msgstr "कुनै पनि होइन" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +#| msgid "Unsorted" +msgid "Unsupported Key" +msgstr "क्रमबद्ध नगरिएका" diff --git a/po/nl/kdeclarative5.po b/po/nl/kdeclarative5.po new file mode 100644 index 0000000..09e3c78 --- /dev/null +++ b/po/nl/kdeclarative5.po @@ -0,0 +1,126 @@ +# translation of kdelibs4.po to Dutch +# Copyright (C) 2000,2001,2002,2003, 2004 KDE e.v.. +# KTranslator Generated File +# Nederlandse vertaling van kdelibs. +# KDE-vertaalgroep Nederlands , 2000, 2001, 2002. +# Rinse de Vries ,2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009. +# Wilbert Berendsen , 2003, 2004. +# Bram Schoenmakers , 2004, 2005, 2006, 2007. +# Tom Albers , 2004. +# Sander Koning , 2005. +# Tijmen Baarda , 2005. +# Freek de Kruijf , 2008, 2009. +# Kristof Bal , 2008, 2009. +# Freek de Kruijf , 2009, 2010. +# Freek de Kruijf , 2010, 2011, 2012. +# Freek de Kruijf , 2010, 2011, 2013, 2014, 2015. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-03-05 14:54+0100\n" +"Last-Translator: Freek de Kruijf \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Files: kfarch.cpp kfdird.cpp kfind.cpp kfindtop.cpp kfoptions.cpp kfsave.cpp " +"kftabdlg.cpp kftypes.cpp kfwin.cpp main.cpp mkfdird.cpp mkfind.cpp\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"Rinse de Vries - 2000 t/m 2008,Wilbert Berendsen - 2003; 2004,Bram " +"Schoenmakers - 2004 t/m 2007,Tom Albers - 2004,Tijmen Baarda - 2005,Sander " +"Koning - 2005, Freek de Kruijf - 2009 t/m 2012" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"rinsedevries@kde.nl,wbsoft@xs4all.nl,bramschoenmakers@kde.nl,tomalbers@kde." +"nl,tijmenbaarda@kde.nl,,freekdekruijf@kde.nl" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage QML toepassingsshell" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "De unieke naam van de toepassingen" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Klik op de knop, voer dan de sneltoets in zoals u zou doen in het " +"programma.\n" +"Voorbeeld voor Ctrl+A: houdt de Ctrl-toets in en druk op A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Gereserveerde snelkoppeling" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"De F12-toets is gereserveerd in Windows, en kan dus niet gebruikt worden " +"voor een globale sneltoets.\n" +"Graag een andere kiezen." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflict met standaard-sneltoets" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"De toetscombinatie '%1' is reeds toegewezen aan de standaardactie \"%2\". " +"Deze actie wordt door enkele programma's gebruikt.\n" +"Wilt u de combinatie ook gebruiken als globale toetsencombinatie?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Opnieuw toewijzen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Invoer" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Geen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "De toets die u net indrukte wordt niet door Qt ondersteund." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Niet ondersteunde sleutel" diff --git a/po/nn/kdeclarative5.po b/po/nn/kdeclarative5.po new file mode 100644 index 0000000..91a51f8 --- /dev/null +++ b/po/nn/kdeclarative5.po @@ -0,0 +1,111 @@ +# Translation of kdeclarative5 to Norwegian Nynorsk +# +# Gaute Hvoslef Kvalnes , 2003, 2004, 2005, 2006. +# Håvard Korsvoll , 2003, 2005. +# Karl Ove Hufthammer , 2004, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016. +# Eirik U. Birkeland , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-06-30 03:05+0200\n" +"PO-Revision-Date: 2016-10-30 17:23+0100\n" +"Last-Translator: Karl Ove Hufthammer \n" +"Language-Team: Norwegian Nynorsk \n" +"Language: nn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Karl Ove Hufthammer" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "karl@huftis.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Skal for KPackage-QML-program" + +#: kpackagelauncherqml/main.cpp:51 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Eintydig namn på programmet (obligatorisk)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Trykk på knappen, og skriv så inn snarvegen du ønskjer å bruka.\n" +"For eksempel for «Ctrl + A»: Hald inne «Ctrl»-tasten og trykk «A»." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Reservert snarveg" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"«F12»-tasten er reservert på Windows, og kan derfor ikkje brukast som ein " +"global snarveg.\n" +"Vel ein annan snarvegtast." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt med standardprogramsnarveg" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Tastekombinasjonen «%1» er alt i bruk for standardhandlinga «%2», som nokre " +"program brukar.\n" +"Er du sikker på at du likevel vil bruka han som ein global snarveg?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Tilordna på nytt" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Inndata" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Ingen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Tasten du trykte er ikkje støtta av Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Ustøtta tast" diff --git a/po/oc/kdeclarative5.po b/po/oc/kdeclarative5.po new file mode 100644 index 0000000..1019622 --- /dev/null +++ b/po/oc/kdeclarative5.po @@ -0,0 +1,100 @@ +# translation of kdelibs4.po to Occitan +# Copyright (C) 2008 This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Yannig Marchegay (Kokoyaya) , 2007, 2008. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2008-08-06 00:07+0200\n" +"Last-Translator: \n" +"Language-Team: Occitan \n" +"Language: oc\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: KBabel 1.11.4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Yannig Marchegay (Kokoyaya)" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yannig@marchegay.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "Acorchi" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflicte amb un acorchi clavièr d'aplicacion estandarda" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reatribuir" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Entrada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Pas cap" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "" diff --git a/po/or/kdeclarative5.po b/po/or/kdeclarative5.po new file mode 100644 index 0000000..d042467 --- /dev/null +++ b/po/or/kdeclarative5.po @@ -0,0 +1,106 @@ +# translation of kdelibs4.po to Oriya +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Manoj Kumar Giri , 2008. +# Manoj Kumar Giri , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2009-01-02 17:37+0530\n" +"Last-Translator: Manoj Kumar Giri \n" +"Language-Team: Oriya \n" +"Language: or\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"\n" +"\n" +"\n" +"\n" +"X-Generator: KBabel 1.11.4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "ମନୋଜ କୁମାର ଗିରି" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "mgiri@redhat.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "ପ୍ରୟୋଗ ଅକ୍ଷରରୂପକୁ ବ୍ୟାଖ୍ୟା କରିଥାଏ" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "New Web Shortcut" +msgid "Reserved Shortcut" +msgstr "ନୂତନ ୱେବ ସଂକ୍ଷିପ୍ତ ପଥ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "ମାନକ ପ୍ରୟୋଗ ସଂକ୍ଷିପ୍ତ ପଥ ସହିତ ଦ୍ୱନ୍ଦ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "ପୁନଃ ନିରୂପଣ କରିବା" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "ନିବେଶ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "କେହିନୁହଁ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "ଅସମର୍ଥିତ କି" diff --git a/po/pa/kdeclarative5.po b/po/pa/kdeclarative5.po new file mode 100644 index 0000000..ba9b98e --- /dev/null +++ b/po/pa/kdeclarative5.po @@ -0,0 +1,113 @@ +# translation of kdelibs4.po to Punjabi +# Punjabi translation of kdelibs. +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. +# +# Amanpreet Singh Alam , 2004. +# Amanpreet Singh Alam , 2004. +# A S Alam , 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012. +# ASB , 2007. +# Amanpreet Singh Alam , 2008. +# Amanpreet Singh , 2008. +# Amanpreet Singh Alam , 2008, 2009, 2013, 2014. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2014-03-16 23:21-0500\n" +"Last-Translator: A S Alam \n" +"Language-Team: Punjabi/Panjabi \n" +"Language: pa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"ਅ.ਸ.ਆਲਮ. ੨੦੦੪-੨੦੧੪\n" +"http://code.google.com/p/gurmukhi/" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "aalam@users.sf.net" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "ਐਪਲੀਕੇਸ਼ਨ ਫੋਂਟ ਪਰਭਾਸ਼ਿਤ ਕਰੋ" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "ਰਾਖਵਾਂ ਸ਼ਾਰਟਕੱਟ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 ਨੂੰ ਵਿੰਡੋਜ਼ ਲਈ ਰਾਖਵਾਂ ਰੱਖਿਆ ਗਿਆ ਹੈ, ਇਸਕਰਕੇ ਇਸਨੂੰ ਗਲੋਬਲ ਸ਼ਾਰਟਕੱਟ ਵਜੋਂ ਨਹੀਂ ਵਰਤਿਆ ਜਾ ਸਕਦਾ।\n" +"ਹੋਰ ਚੁਣੋ ਜੀ।" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "ਸਟੈਂਡਰਡ ਐਪਲੀਕੇਸ਼ਨ ਸ਼ਾਰਟਕੱਟਾਂ ਨਾਲ ਟਕਰਾਅ ਹੋ ਰਿਹਾ ਹੈ।" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"ਸਵਿੱਚ ਕੰਬੀਨੇਸ਼ਨ '%1' ਪਹਿਲਾਂ ਹੀ ਇੱਕ ਸਟੈਂਡਰਡ ਐਕਸ਼ਨ \"%2\" ਲਈ ਜਾਰੀ ਕੀਤਾ ਜਾ ਚੁੱਕਾ ਹੈ, ਜੋ ਕਿ " +"ਕੁਝ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਰਤਦੀਆਂ ਹਨ।\n" +"ਕੀ ਤੁਸੀਂ ਇਸ ਨੂੰ ਗਲੋਬਲ ਸ਼ਾਰਟਕੱਟ ਲਈ ਇਹ ਵਰਤਣਾ ਚਾਹੁੰਦੇ ਹੋ?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "ਮੁੜ-ਜਾਰੀ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "ਇੰਪੁੱਟ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "ਕੋਈ ਨਹੀਂ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "ਸਵਿੱਚ, ਜੋ ਦੱਬੀ ਹੈ, Qt ਵਲੋਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "ਗ਼ੈਰ-ਸਹਾਇਕ ਸਵਿੱਚ" diff --git a/po/pl/kdeclarative5.po b/po/pl/kdeclarative5.po new file mode 100644 index 0000000..2c9f1a1 --- /dev/null +++ b/po/pl/kdeclarative5.po @@ -0,0 +1,202 @@ +# translation of kdelibs4.po to Polish +# translation of kdelibs4.po to +# Version: $Revision: 685926 $ +# Ostatnie poprawki przed 2.0 Jacek Stolarczyk +# Jacek Stolarczyk , 2001. +# Piotr Roszatycki , 1997-2000. +# Artur Górniak , 2000. +# Michał Rudolf , 2002. +# Michal Rudolf , 2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010. +# Krzysztof Lichota , 2005, 2006. +# Marta Rybczyńska , 2007, 2008, 2009, 2010, 2011, 2012, 2013. +# Michal Rudolf , 2010. +# Artur Chłond , 2010. +# Łukasz Wojniłowicz , 2011, 2012, 2013, 2014, 2015, 2016. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2016-08-20 08:31+0100\n" +"Last-Translator: Łukasz Wojniłowicz \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +">\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Michał Rudolf, Artur Chłond, Łukasz Wojniłowicz" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "mrudolf@kdewebdev.org, eugenewolfe@o2.pl, lukasz.wojnilowicz@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Powłoka aplikacji QML KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Niepowtarzalna nazwa aplikacji (obowiązkowo)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Naciśnij przycisk, a potem wciśnij kombinację, której chcesz użyć w " +"programie.\n" +"Na przykład, żeby użyć skrótu Ctrl+A, przytrzymaj klawisz Ctrl i wciśnij A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Skrót zarezerwowany" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Skrót F12 jest zarezerwowany w Windows, więc nie można go użyć jako skrótu " +"globalnego.\n" +"Wybierz inny." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt ze standardowym skrótem programu" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Kombinacja klawiszy '%1' została przypisana standardowemu działaniu \"%2\" " +"używanemu przez wiele programów.\n" +"Użyć jej także jako skrótu globalnego?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Przypisz ponownie" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Nowy skrót" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Brak" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Klawisz, który wcisnąłeś, nie jest obsługiwany przez Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nieobsługiwany klawisz" diff --git a/po/ps/kdeclarative5.po b/po/ps/kdeclarative5.po new file mode 100644 index 0000000..af505cb --- /dev/null +++ b/po/ps/kdeclarative5.po @@ -0,0 +1,103 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the Kde package. +# Zabeeh Khan , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2008-08-16 16:01-0800\n" +"Last-Translator: Zabeeh Khan \n" +"Language-Team: Pashto \n" +"Language: ps\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Language: Pashto, Pushto\n" +"X-Poedit-Country: AFGHANISTAN\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "ستاسو نومونه" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zabeehkhan@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "د کاريال ليکبڼه ټاکي" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "لنډلار" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "د کره کاريال لنډلارې سره ټکر" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "بياټاکل" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "ننوتۍ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "هېڅ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +#| msgid "Unsorted" +msgid "Unsupported Key" +msgstr "نا اڼلي" diff --git a/po/pt/kdeclarative5.po b/po/pt/kdeclarative5.po new file mode 100644 index 0000000..addc4d7 --- /dev/null +++ b/po/pt/kdeclarative5.po @@ -0,0 +1,197 @@ +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-03-05 11:22+0000\n" +"Last-Translator: José Nuno Pires \n" +"Language-Team: pt \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-IgnoreConsistency: &Discard\n" +"X-POFile-IgnoreConsistency: Enter\n" +"X-POFile-IgnoreConsistency: Author\n" +"X-POFile-IgnoreConsistency: Open &File\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-POFile-Allow: 2\n" +"X-POFile-IgnoreConsistency: Far\n" +"X-POFile-SpellExtra: Hspell Koenig KHTML Thaana Telugu KScript Sycoca\n" +"X-POFile-SpellExtra: artsmessage KDEInit SOCKS kcmkresources\n" +"X-POFile-SpellExtra: ChavePrivadaFalhou KIOTest Han Thaani Jumaada Hangul\n" +"X-POFile-SpellExtra: Cherokee Meh KSpell chaveSessao TestWritevCard\n" +"X-POFile-SpellExtra: Thulatha Javascript Tagbanwa End Tagalog LTR Oriya\n" +"X-POFile-IgnoreConsistency: H:\n" +"X-POFile-IgnoreConsistency: Untrusted\n" +"X-POFile-IgnoreConsistency: Export\n" +"X-POFile-SpellExtra: Hiragana Backspace Print PgUp Ins\n" +"X-POFile-SpellExtra: ModificadoresEspaço Yi Lao Return gpg Caps Lock kab\n" +"X-POFile-SpellExtra: aRts tags Buhid Insert Gurmukhi Malayalam Scroll\n" +"X-POFile-SpellExtra: Delete Ogham PgDn Kannada Tab Home Katakana SysReq\n" +"X-POFile-SpellExtra: KConvertTest Khmer OutraOpção Bopomofo\n" +"X-POFile-SpellExtra: MarcasCombinatórias Enter UmaOpção Devanagari\n" +"X-POFile-SpellExtra: Hanunoo Sinhala JanelaAutoExemplo Lars Ian help\n" +"X-POFile-IgnoreConsistency: Try Different\n" +"X-POFile-IgnoreConsistency: Delete\n" +"X-POFile-IgnoreConsistency: Comment\n" +"X-POFile-IgnoreConsistency: &Restore\n" +"X-POFile-IgnoreConsistency: Reset\n" +"X-POFile-IgnoreConsistency: 0.1\n" +"X-POFile-IgnoreConsistency: Forward\n" +"X-POFile-SpellExtra: Kanbun CTRL Klash Syloti JS Jan TETest QObject\n" +"X-POFile-SpellExtra: Sebastian Geiser Far kdeinit Weis Mordad Yau Hausmann\n" +"X-POFile-SpellExtra: execprefix autostart Dirk Nov Elul shanbe Farvardin\n" +"X-POFile-SpellExtra: KApplication bin tagcloudtest displayname IFrame yo\n" +"X-POFile-SpellExtra: Aza Adar Sáb dah XIM Sha Sonnet testregression Jamo\n" +"X-POFile-SpellExtra: Shawwal Bah KConf IPA Hijri Sab Testkhtml Jeroen\n" +"X-POFile-SpellExtra: QWidget dumps KJSEmbed Arb qttest stderr Kho ban Kha\n" +"X-POFile-SpellExtra: PathLengthExceeded Tai shn Ago KrossTest Ithnain\n" +"X-POFile-SpellExtra: klauncher tempfile Aban frame ThreadWeaver Kun yeyo\n" +"X-POFile-SpellExtra: Buginese Lue Kislev Khamees home Jumma XDG Khordad\n" +"X-POFile-SpellExtra: Zemberek KAboutData Wijnhout Sivan Saami Method Qua\n" +"X-POFile-SpellExtra: Molkentin PTY Koivisto onthespot Ord Shvat Jom\n" +"X-POFile-SpellExtra: KMultiPart Ahad CJK Aspell Tifinagh NoCARoot Tishrey\n" +"X-POFile-SpellExtra: Up KDXSView ModRunner subtexto aifamily Panj path\n" +"X-POFile-SpellExtra: NumLock keramik GHNS TestRegressionGui Yek Iyar Ahd\n" +"X-POFile-SpellExtra: khtmltests Torben QApplication overthespot caption\n" +"X-POFile-SpellExtra: khtml desktop Ispell QWS create Faure Object Limbu\n" +"X-POFile-SpellExtra: KLauncher Sauer Hijjah Myanmar NEC BCC Fev Kelly\n" +"X-POFile-SpellExtra: Jumee Stephan TestRegression Knoll frames HOME Jum\n" +"X-POFile-SpellExtra: DISPLAY KNewStuff Awal Rajab pt plastik InvalidHost\n" +"X-POFile-SpellExtra: kdemain STDOUT Jun Jul Kulow Yaum pa Chahar widgets\n" +"X-POFile-SpellExtra: man KUnitTest pm KDEPIM TAB Waldo CL CC Balinês\n" +"X-POFile-SpellExtra: Nagri Kangxi QLayout qtplugininstance regression\n" +"X-POFile-SpellExtra: multipart Jalali Phags Set servname nograb\n" +"X-POFile-SpellExtra: International Frame CGIs Stylesheet Library Sex Seg\n" +"X-POFile-SpellExtra: KDontChangeTheHostName SO toner Yijing Peter Out\n" +"X-POFile-SpellExtra: InvalidCA Le Khmeres Tevet Ordibehesht Anton am al\n" +"X-POFile-SpellExtra: Tir Tuebingen Esf Abr ini KLocale KiB WMNET Dingbats\n" +"X-POFile-SpellExtra: InvalidPurpose kdehelp id Glagolitic factory Esfand\n" +"X-POFile-SpellExtra: Nisan kjs ErrorReadingRoot MiB Copta Shanbe Xvfb\n" +"X-POFile-SpellExtra: client Mai Bastian document config TiB Jones AC\n" +"X-POFile-SpellExtra: KBuildSycoca Bahman offthespot Mueller Tang ye Thu\n" +"X-POFile-SpellExtra: Sabt NKo aisocktype mixed Carriage Thl aiflags\n" +"X-POFile-SpellExtra: Muharram Reinhart Kontact Cantonês Page icon\n" +"X-POFile-SpellExtra: makekdewidgets ManyColor Heshvan Kross Ith bind Antti\n" +"X-POFile-SpellExtra: DXS Tamuz Shahrivar sessionId sh KJSCmd Av KLibLoader\n" +"X-POFile-SpellExtra: Mehr GiB Arbi dograb AssinaturaFalhou prefix\n" +"X-POFile-SpellExtra: Hexagramas ize AutoAssinado NãoConfiável Qi Down\n" +"X-POFile-SpellExtra: directory Índicas ise Oxygen info shared share usr\n" +"X-POFile-IgnoreConsistency: Separate Folders\n" +"X-POFile-SpellExtra: XDGDATADIRS KTTS Control PrtScr Hyper Sys Win Screen\n" +"X-POFile-SpellExtra: Req Break AltGr ReadOnly SHM EOF Re abc ABC QPL Kate\n" +"X-POFile-SpellExtra: Serif Sans KFormula URIs raster opengl favicons Solid\n" +"X-POFile-SpellExtra: Harald Fernengel KTTSD baseline Resource writeall\n" +"X-POFile-SpellExtra: Trüg YiB PiB YB ZB EB PB EiB ZiB GB TB KIdleTest\n" +"X-POFile-SpellExtra: Freddi KIdleTime Cha Āshwin Budhavãra Suk Paush\n" +"X-POFile-SpellExtra: Shrāvana Somavãra Phālgun Raviãra Phā Māg\n" +"X-POFile-SpellExtra: Bhādrapad Chaitra Māgh Sukravãra Āshādha\n" +"X-POFile-SpellExtra: Agrahayana Bud Shr Guruvãra Mañ Gur Vaishākh Jya\n" +"X-POFile-SpellExtra: Kārtik Agr Jyaishtha Kār Āsh Bhā Rav milisegundo\n" +"X-POFile-SpellExtra: Āsw Mañgalvã Sanivãra Mayek Ol Saurashtra\n" +"X-POFile-SpellExtra: Sundanês Viet Lisu Kayah Chiki Lepcha Meetei Cham\n" +"X-POFile-SpellExtra: Rejang Tham Bamum Pshoment Pas Ptiou Neh Genbot Hamus\n" +"X-POFile-SpellExtra: Pag Paope Pesnau Pes Hed Magabit Ehu Tahsas Yak Mag\n" +"X-POFile-SpellExtra: Tob Pef Kou Pam Pao Tequemt Paremhotep Psh nabot\n" +"X-POFile-SpellExtra: Hathor Pso Kiahk Hat Meo Psa Sene Psabbaton Miy\n" +"X-POFile-SpellExtra: Pashons Mes LarguraxAltura Kia Qedame Ham Gen Hedar\n" +"X-POFile-SpellExtra: Parmoute Teq Mesore Nehase Kouji Yakatit Maksegno\n" +"X-POFile-SpellExtra: Paone Sen Meshir Pagumen Thoout Hamle Epe Mak\n" +"X-POFile-SpellExtra: Tkyriakē Ehud Tho Qed Pti Psoou Segno Tah Rob\n" +"X-POFile-SpellExtra: Miyazya Meskerem Tobe Peftoou Epep Tky pastabase Fã\n" +"X-POFile-SpellExtra: KVTML USD Colaborativos Hunspell Jovie AM PM mails\n" +"X-POFile-SpellExtra: mbuttonGroup Blog blog np cp nc UTC Mandaico Batak\n" +"X-POFile-SpellExtra: DQTDECLARATIVEDEBUG QML slot pedro mantê Pocinhas\n" +"X-POFile-SpellExtra: Reconstrói ii Del iii querê KPackage\n" +"X-POFile-IgnoreConsistency: Update\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "José Nuno Pires" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zepires@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Consola de aplicações QML do KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "O nome único da aplicação (obrigatório)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Carregue no botão, depois introduza a combinação de teclas que deseja no " +"programa.\n" +"Exemplo para o Ctrl+A: mantenha carregada a tecla Ctrl e depois carregue em " +"A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Atalho Reservado" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"A tecla F12 está reservada no Windows e não pode ser usada como atalho " +"global.\n" +"Por favor, escolha outra qualquer." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflito com o Atalho-Padrão da Aplicação" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"A combinação de teclas '%1' já foi atribuída à acção global \"%2\", que é " +"usada por algumas aplicações.\n" +"Deseja mesmo usá-la também como um atalho global?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Atribuir de Novo" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Entrada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Nenhum" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "A tecla que acabou de pressionar não é suportada pelo Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tecla Não Suportada" diff --git a/po/pt_BR/kdeclarative5.po b/po/pt_BR/kdeclarative5.po new file mode 100644 index 0000000..cc5f4ae --- /dev/null +++ b/po/pt_BR/kdeclarative5.po @@ -0,0 +1,118 @@ +# Translation of kdeclarative5.po to Brazilian Portuguese +# Copyright (C) 2002-2015 This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Lisiane Sztoltz , 2002, 2003, 2004. +# Lisiane Sztoltz Teixeira , 2003, 2004, 2005. +# Henrique Pinto , 2003. +# Marcus Gama , 2006. +# Diniz Bortolotto , 2007, 2008. +# André Marcelo Alvarenga , 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015. +# Luiz Fernando Ranghetti , 2008, 2009, 2010, 2012. +# Fernando Boaglio , 2009. +# Doutor Zero , 2007, 2009. +# Marcus Vinícius de Andrade Gama , 2010, 2012. +# Aracele Torres , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdeclarative5\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-10-19 10:05-0200\n" +"Last-Translator: André Marcelo Alvarenga \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "André Marcelo Alvarenga" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "alvarenga@kde.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Console de aplicativos QML do KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "O único nome do aplicativo (obrigatório)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Clique no botão e depois informe o atalho como faria no programa.\n" +"Exemplo para o Ctrl+A: Mantenha pressionada a tecla Ctrl e pressione a tecla " +"A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Atalho reservado" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"A tecla F12 está reservada no Windows e, por isso, não pode ser usada como " +"atalho global.\n" +"Escolha outra tecla." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflito com o atalho padrão do aplicativo" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"A combinação de teclas '%1' está atribuída para a ação padrão \"%2\", usada " +"por alguns aplicativos.\n" +"Deseja realmente usá-la como um atalho global?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reatribuir" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Entrada" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Nenhum" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "A tecla que você pressionou não é suportada pelo Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tecla não suportada" diff --git a/po/ro/kdeclarative5.po b/po/ro/kdeclarative5.po new file mode 100644 index 0000000..72655d1 --- /dev/null +++ b/po/ro/kdeclarative5.po @@ -0,0 +1,114 @@ +# Traducerea kdelibs4.po în Română +# Laurenţiu Buzdugan , 2008, 2009. +# Sergiu Bivol , 2008, 2009, 2010. +# Sergiu Bivol , 2010, 2012, 2013, 2014. +# Cristian Oneț , 2010, 2011, 2012, 2013. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2014-03-26 19:20+0200\n" +"Last-Translator: Sergiu Bivol \n" +"Language-Team: Romanian \n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Claudiu Costin,Sergiu Bivol,Laurențiu Buzdugan,Cristian Oneț" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr ",sergiu@ase.md,lbuz@rolix.org,onet.cristian@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "Definește fontul aplicației" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Apăsați butonul apoi introduceți scurtătura la fel cum ați face în " +"aplicație.\n" +"De exemplu pentru un Ctrl+a: tineți tasta Ctrl apăsată și tastați a." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Scurtătură rezervată" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Tasta F12 este rezervată în Windows și nu poate fi utilizată ca accelerator " +"global.\n" +"Alegeți alta." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Conflict cu un accelerator standard de aplicație" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Combinația de taste „%1” a fost deja alocată pentru acțiunea globală „%2” pe " +"care o folosesc unele aplicații.\n" +"Sigur doriți să o utilizați și pe aceasta ca globală?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Reatribuie" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Introduceți" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Niciuna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Tasta pe care tocmai ați apăsat-o nu este susținută de Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tastă nesuportată" diff --git a/po/ru/kdeclarative5.po b/po/ru/kdeclarative5.po new file mode 100644 index 0000000..a1e4292 --- /dev/null +++ b/po/ru/kdeclarative5.po @@ -0,0 +1,127 @@ +# KDE - kdelibs/kdelibs4.po Russian translation. +# Copyright (C) 2005, KDE Russian translation team. +# +# Denis Perchine , 2000. +# Gregory Mokhin , 2000, 2004, 2005. +# Albert R. Valiev , 2002, 2008. +# Leonid Kanter , 2002-2004, 2005, 2008. +# Andrey Cherepanov , 2005-2007, 2008, 2009, 2011. +# Nick Shaforostoff , 2004, 2006, 2007, 2008, 2009. +# Nick Shaforostoff , 2009. +# Alexander Potashev , 2009, 2010, 2011, 2014, 2015. +# Yury G. Kudryashov , 2011. +# Yuri Efremov , 2012. +# Inga Barinova , 2012. +# Julia Dronova , 2012. +# Alexander Lakhin , 2013. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-03-15 00:13+0300\n" +"Last-Translator: Alexander Potashev \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"Григорий Мохин,Николай Шафоростов,Андрей Черепанов,Леонид Кантер,Альберт " +"Валиев" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"mok@kde.ru,shaforostoff@kde.ru,skull@kde.ru,leon@asplinux.ru," +"darkstar@altlinux.ru" + +# BUGME: can we translate KPackage somehow? --aspotashev +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Оболочка для запуска приложений на KPackage QML" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Уникальное имя приложения (обязательно)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Нажмите на кнопке и введите комбинацию клавиш.\n" +"Например, для комбинации клавиш Ctrl+A зажмите клавишу Ctrl и нажмите A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Зарезервированная комбинация клавиш" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"В Windows клавиша F12 зарезервирована, поэтому её нельзя использовать в " +"глобальных комбинациях клавиш.\n" +"Выберите другую комбинацию клавиш." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Конфликт со стандартной клавишей приложения" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Комбинация клавиш %1 уже связана со стандартным действием «%2», используемым " +"во многих программах.\n" +"Вы действительно хотите использовать эту комбинацию как глобальную?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Связать с новым" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Сейчас" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Не определена" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Нажатая клавиша не поддерживается в Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Клавиша не поддерживается" diff --git a/po/se/kdeclarative5.po b/po/se/kdeclarative5.po new file mode 100644 index 0000000..25705a3 --- /dev/null +++ b/po/se/kdeclarative5.po @@ -0,0 +1,110 @@ +# Translation of kdeclarative5 to Northern Sami +# +# Børre Gaup , 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-06-30 03:05+0200\n" +"PO-Revision-Date: 2012-05-30 23:19+0200\n" +"Last-Translator: Børre Gaup \n" +"Language-Team: Northern Sami \n" +"Language: se\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:51 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Coahkkal boalu, de deaddil njuolggobálgá nugo áiggut geavahit dan " +"prográmmas.\n" +"Ovdamearka dihte Ctrl+a: Doala Ctrl-boalu ja deaddil a." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Várrejuvvon njuolggobálggis" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12-boalus lea erenoamáš mearkkašupmi Windowsis, nu ahte dan ii sáhte " +"geavahit globálalaš njuolggobálggisin.\n" +"Válljes eará njuolggobálgá." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikta standardprográmma njuolggobálgáin" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"«%1» boallokombinašuvdna geavahuvvo juo standárdan «%2»-doibmii . Máŋga " +"prográmma geavahit dan juo.\n" +"Háliidatgo duođas geavahit dán globála njuolggobálggisin?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Bija ođđasit" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Mearrit njuolggobálgá" + +# unreviewed-context +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Ii mihkkige" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt ii doarjjo boalu maid easka deaddilit." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Doarjjokeahtes boallu" diff --git a/po/si/kdeclarative5.po b/po/si/kdeclarative5.po new file mode 100644 index 0000000..ccf4f30 --- /dev/null +++ b/po/si/kdeclarative5.po @@ -0,0 +1,103 @@ +# This file is distributed under the same license as the PACKAGE package. +# +# Danishka Navin , 2008, 2009, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2011-07-25 07:45+0530\n" +"Last-Translator: Danishka Navin \n" +"Language-Team: Sinhala \n" +"Language: si\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +" \n" +" \n" +"X-Generator: Lokalize 1.2\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "ඩනිෂ්ක නවින්" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "danishka@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "යෙදුම් අක්‍ෂර දක්වන්න කරන්න" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "වෙන් කළ කෙටි මාර්‍ගය" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "සම්මත වැඩසටහන් කෙටි මඟ සමඟ ගැටේ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"'%1' යතුරු සංයෝජනය සමහර වැඩසටහන් භාවිතා කරන \"%2\" සම්මත ක්‍රියාව සඳහාද භාවිතා කරයි.\n" +"ඔබට ඇත්ත වශයෙන්ම එය ලෝකව්‍යාප්ත කෙටි මඟක් වශයෙනුත් භාවිතා කිරීමට අවශ්‍යද?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "යළි පැවරීම" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "ප්‍රධානය" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "කිසිවක් නැත" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, fuzzy, kde-format +#| msgid "The key you just pressed isn't supported by Qt." +msgid "The key you just pressed is not supported by Qt." +msgstr "ඔබ දැන් එබූ යතුර Qt මඟින් සහය දක්වන්නේ නැත." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "සහාය නොදන්නා යතුරු" diff --git a/po/sk/kdeclarative5.po b/po/sk/kdeclarative5.po new file mode 100644 index 0000000..dee8fca --- /dev/null +++ b/po/sk/kdeclarative5.po @@ -0,0 +1,115 @@ +# translation of kdelibs4.po to Slovak +# Stanislav Visnovsky , 2002. +# Stanislav Visnovsky , 2003, 2004, 2005. +# Richard Fric , 2006, 2007, 2010. +# Michal Gaspar , 2006. +# Jakub , 2009. +# Michal Sulek , 2009, 2010, 2011. +# Richard Frič , 2011. +# Roman Paholík , 2012, 2013, 2014, 2015. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-03-05 19:19+0100\n" +"Last-Translator: Roman Paholik \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"Stanislav Višňovský,Richard Frič,Michal Gašpar,Jakub Vatrt,Michal Šulek" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"visnovsky@kde.org,Richard.Fric@kdemail.net,miguel@portugal.sk,vatrtj@gmail." +"com,misurel@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Shell KPackage QML aplikácie" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Jedinečný názov pre aplikáciu (povinné)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Kliknite na tlačidlo a potom zadajte skratku, ktorú chcete použiť v " +"programe.\n" +"Príklad pre Ctrl+A: držte klávesu Ctrl a stlačte A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Rezervovaná skratka" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Klávesa F12 je vo Windows rezervovaná, takže nemôže byť použitá pre globálnu " +"skratku.\n" +"Prosím vyberte inú." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt so štandardnou skratkou aplikácie" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Klávesová kombinácia '%1' je už používaná pre štandardnú akciu \"%2\", ktorú " +"používa viacero aplikácií.\n" +"Naozaj ju chcete použiť ako globálnu klávesovú skratku?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Znovu priradiť" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Vstup" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Žiadna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Práve stlačená klávesa nie je podporovaná v Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nepodporovaná klávesa" diff --git a/po/sl/kdeclarative5.po b/po/sl/kdeclarative5.po new file mode 100644 index 0000000..a83e27e --- /dev/null +++ b/po/sl/kdeclarative5.po @@ -0,0 +1,119 @@ +# translation of kdelibs4.po to Slovenian +# Translation of kdelibs4.po to Slovenian +# KDELIBS translation to Slovenian language +# $Id: kdelibs4.po 685926 2007-07-10 04:25:11Z scripty $ +# $Source$ +# +# Copyright (C) 2002,2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +# Roman Maurer , 2002. +# Gregor Rakar , 2002,2003. +# Gregor Rakar , 2003, 2004, 2005. +# Andrej Vernekar , 2005, 2007, 2008, 2009, 2010. +# Jure Repinc , 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013. +# Andrej Vernekar , 2008, 2011, 2012. +# Andrej Mernik , 2012, 2013, 2014, 2015. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-04-03 10:02+0200\n" +"Last-Translator: Andrej Mernik \n" +"Language-Team: Slovenian \n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" +"%100==4 ? 3 : 0);\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Roman Maurer,Gregor Rakar,Andrej Vernekar,Jure Repinc,Andrej Mernik" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"roman.maurer@amis.net,gregor.rakar@kiss.si,andrej.vernekar@gmail.com," +"jlp@holodeck1.com,andrejm@ubuntu.si" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "Programska lupina KPackage QML" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Edinstveno ime programa (obvezno)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Kliknite gumb in nato vnesite bližnjico, kot bi jo v programu.\n" +"Primer za Ctrl+A: držite pritisnjeno tipko Ctrl in pritisnite tipko A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Rezervirana bližnjica" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Tipka F12 je rezervirana v Windows, zato ne more biti uporabljena za splošno " +"bližnjico.\n" +"Izberite drugo." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Spor z običajnimi bližnjicami programov" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Zaporedje tipk »%1« se uporablja tudi pri standardnemu dejanju »%2«, ki \n" +"ga uporabljajo nekateri programi.\n" +"Ali ga res želite uporabiti tudi za splošno bližnjico?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Prestavi" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Vhod" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Brez" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt ne podpira tipke, ki ste jo ravnokar pritisnili." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nepodprta tipka" diff --git a/po/sq/kdeclarative5.po b/po/sq/kdeclarative5.po new file mode 100644 index 0000000..c63195a --- /dev/null +++ b/po/sq/kdeclarative5.po @@ -0,0 +1,101 @@ +# Agron Selimaj , 2012. +msgid "" +msgstr "" +"Project-Id-Version: kde4libs\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2012-01-19 00:20-0500\n" +"Last-Translator: Agron Selimaj \n" +"Language-Team: Albanian \n" +"Language: sq\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Launchpad-Export-Date: 2010-11-24 03:19+0000\n" +"X-Generator: Lokalize 1.2\n" + +#, fuzzy, kde-format +#| msgid "without name" +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "pa emër" + +#, fuzzy, kde-format +#| msgid "without name" +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "pa emër" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "përkufizon gërmat e programit" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Create Web Shortcut" +msgid "Reserved Shortcut" +msgstr "Krijo Shkurtore Web-i" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflike me Shkurtoren e Programit Standart" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Ricakto" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Hyrja" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Asnjë" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, fuzzy, kde-format +#| msgid "The socket operation is not supported" +msgid "The key you just pressed is not supported by Qt." +msgstr "Veprimi i socket nuk suportohet" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "" diff --git a/po/sr/kdeclarative5.po b/po/sr/kdeclarative5.po new file mode 100644 index 0000000..97f972d --- /dev/null +++ b/po/sr/kdeclarative5.po @@ -0,0 +1,111 @@ +# Translation of kdeclarative5.po into Serbian. +# Marko Rosic , 2003. +# Toplica Tanaskovic , 2003, 2004, 2005. +# Chusslove Illich , 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017. +# Dalibor Djuric , 2009, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: kdeclarative5\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2017-09-28 17:57+0200\n" +"Last-Translator: Chusslove Illich \n" +"Language-Team: Serbian \n" +"Language: sr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" +"X-Environment: kde\n" +"X-Wrapping: fine\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Часлав Илић" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "caslav.ilic@gmx.net" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "КуМЛ програмска шкољка за KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Јединствено име програма (обавезно)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Кликните на дугме, па унесите пречицу као што бисте у програму.\n" +"Пример за Ctrl+A: држите тастер Ctrl и притисните A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Резервисана пречица" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Тастер F12 је резервисан на Виндоузу, па се не може користити као глобална " +"пречица.\n" +"Изаберите неку другу." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Сукоб са стандардном програмском пречицом" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Комбинација тастера %1 већ је додељена стандардној радњи „%2“, коју користе " +"неки програми.\n" +"Желите ли заиста да је користите и као глобалну пречицу?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Поново додели" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "унесите..." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "ниједна" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "КуТ не подржава тастер који сте управо притиснули." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Неподржани тастер" diff --git a/po/sr@ijekavian/kdeclarative5.po b/po/sr@ijekavian/kdeclarative5.po new file mode 100644 index 0000000..6e4a634 --- /dev/null +++ b/po/sr@ijekavian/kdeclarative5.po @@ -0,0 +1,110 @@ +# Translation of kdeclarative5.po into Serbian. +# Marko Rosic , 2003. +# Toplica Tanaskovic , 2003, 2004, 2005. +# Chusslove Illich , 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017. +# Dalibor Djuric , 2009, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: kdeclarative5\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2017-09-28 17:57+0200\n" +"Last-Translator: Chusslove Illich \n" +"Language-Team: Serbian \n" +"Language: sr@ijekavian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" +"X-Environment: kde\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Часлав Илић" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "caslav.ilic@gmx.net" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "КуМЛ програмска шкољка за KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Јединствено име програма (обавезно)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Кликните на дугме, па унесите пречицу као што бисте у програму.\n" +"Примјер за Ctrl+A: држите тастер Ctrl и притисните A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Резервисана пречица" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Тастер F12 је резервисан на Виндоузу, па се не може користити као глобална " +"пречица.\n" +"Изаберите неку другу." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Сукоб са стандардном програмском пречицом" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Комбинација тастера %1 већ је додијељена стандардној радњи „%2“, коју " +"користе неки програми.\n" +"Желите ли заиста да је користите и као глобалну пречицу?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Поново додијели" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "унесите..." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "ниједна" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "КуТ не подржава тастер који сте управо притиснули." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Неподржани тастер" diff --git a/po/sr@ijekavianlatin/kdeclarative5.po b/po/sr@ijekavianlatin/kdeclarative5.po new file mode 100644 index 0000000..2fec8b1 --- /dev/null +++ b/po/sr@ijekavianlatin/kdeclarative5.po @@ -0,0 +1,110 @@ +# Translation of kdeclarative5.po into Serbian. +# Marko Rosic , 2003. +# Toplica Tanaskovic , 2003, 2004, 2005. +# Chusslove Illich , 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017. +# Dalibor Djuric , 2009, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: kdeclarative5\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2017-09-28 17:57+0200\n" +"Last-Translator: Chusslove Illich \n" +"Language-Team: Serbian \n" +"Language: sr@ijekavianlatin\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" +"X-Environment: kde\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Časlav Ilić" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "caslav.ilic@gmx.net" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "QML programska školjka za KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Jedinstveno ime programa (obavezno)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Kliknite na dugme, pa unesite prečicu kao što biste u programu.\n" +"Primjer za Ctrl+A: držite taster Ctrl i pritisnite A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Rezervisana prečica" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Taster F12 je rezervisan na Windowsu, pa se ne može koristiti kao globalna " +"prečica.\n" +"Izaberite neku drugu." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Sukob sa standardnom programskom prečicom" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Kombinacija tastera %1 već je dodijeljena standardnoj radnji „%2“, koju " +"koriste neki programi.\n" +"Želite li zaista da je koristite i kao globalnu prečicu?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Ponovo dodijeli" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "unesite..." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "nijedna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt ne podržava taster koji ste upravo pritisnuli." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nepodržani taster" diff --git a/po/sr@latin/kdeclarative5.po b/po/sr@latin/kdeclarative5.po new file mode 100644 index 0000000..6f4143b --- /dev/null +++ b/po/sr@latin/kdeclarative5.po @@ -0,0 +1,110 @@ +# Translation of kdeclarative5.po into Serbian. +# Marko Rosic , 2003. +# Toplica Tanaskovic , 2003, 2004, 2005. +# Chusslove Illich , 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017. +# Dalibor Djuric , 2009, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: kdeclarative5\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2017-09-28 17:57+0200\n" +"Last-Translator: Chusslove Illich \n" +"Language-Team: Serbian \n" +"Language: sr@latin\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" +"X-Environment: kde\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Časlav Ilić" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "caslav.ilic@gmx.net" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "QML programska školjka za KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Jedinstveno ime programa (obavezno)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Kliknite na dugme, pa unesite prečicu kao što biste u programu.\n" +"Primer za Ctrl+A: držite taster Ctrl i pritisnite A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Rezervisana prečica" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Taster F12 je rezervisan na Windowsu, pa se ne može koristiti kao globalna " +"prečica.\n" +"Izaberite neku drugu." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Sukob sa standardnom programskom prečicom" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Kombinacija tastera %1 već je dodeljena standardnoj radnji „%2“, koju " +"koriste neki programi.\n" +"Želite li zaista da je koristite i kao globalnu prečicu?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Ponovo dodeli" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "unesite..." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "nijedna" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt ne podržava taster koji ste upravo pritisnuli." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Nepodržani taster" diff --git a/po/sv/kdeclarative5.po b/po/sv/kdeclarative5.po new file mode 100644 index 0000000..ee26b88 --- /dev/null +++ b/po/sv/kdeclarative5.po @@ -0,0 +1,118 @@ +# translation of kdelibs4.po to Swedish +# Översättning kdelibs4.po till Svenska +# +# Copyright (C) 1997,2002,2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# Magnus Reftel , 1997. +# Anders Widell , 1998-2000. +# Per Lindström , 2000. +# Mattias Newzella , 2000, 2001, 2002,2003, 2004, 2005. +# Stefan Asserhäll , 2002. +# Stefan Asserhäll , 2004, 2005, 2006, 2007, 2008, 2009, 2010. +# Stefan Asserhall , 2010, 2011, 2012, 2013, 2014, 2015. +# Arve Eriksson <031299870@telia.com>, 2011. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-03-05 21:29+0100\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"Magnus Reftel,Anders Widell,Per Lindström,Mattias Newzella,Stefan Asserhäll" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"d96reftl@dtek.chalmers.se,awl@hem.passagen.se,pelinstr@algonet.se," +"newzella@linux.nu,stefan.asserhall@telia.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage QML-programskal" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Programmets unika namn (krävs)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Klicka på knappen, och skriv därefter in genvägen som du skulle göra i " +"programmet.\n" +"Exempel för Ctrl+A: Håll nere Ctrl-tangenten och tryck på A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Reserverad genväg" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Tangenten F12 är reserverad på Windows, och kan inte användas som global " +"snabbtangent.\n" +"Välj en annan tangent." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Konflikt med standardsnabbtangenter för program" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Tangentkombinationen '%1' används också för standardåtgärden \"%2\" som " +"vissa program använder.\n" +"Vill du verkligen också använda den som global snabbtangent?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Ändra tilldelning" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Inmatning" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Ingen" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Tangenten du just tryckte ner stöds inte av Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tangent som inte stöds" diff --git a/po/ta/kdeclarative5.po b/po/ta/kdeclarative5.po new file mode 100644 index 0000000..4182741 --- /dev/null +++ b/po/ta/kdeclarative5.po @@ -0,0 +1,113 @@ +# translation of kdelibs4.po to தமிழ் +# Copyright (C) 2000,2002, 2004, 2007, 2008 Free Software Foundation, Inc. +# +# Sivakumar Shanmugasundaram , 2000. +# Thuraiappah Vaseeharan , 2000-2001. +# ம. ஸ்ரீ ராமதாஸ் | Sri Ramadoss M , 2007-2012 +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2012-03-25 21:39+0530\n" +"Last-Translator: Sri Ramadoss M \n" +"Language-Team: Tamil \n" +"Language: ta\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.2\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "ம. ஸ்ரீ ராமதாஸ்" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "amachu@yavarkkum.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "நிரலின் மின்னெழுத்தை வரையறையும்" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"பொத்தனைச் சொடுக்கி, நிரலில் நீங்கள் விரும்பும் சுருக்கு வழியை இடவும்.\n" +"Ctrl+a க்கான உதாரணம்: Ctrl விசையை அழுத்தியபடிய a தட்டவும்" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "ஒதுக்கப்பட்ட சுருக்குவழி" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 விண்டோஸ்க்காக ஒதுக்கப்பட்டுள்ளதுஇ ஆகையால் பொதுவான சுருக்கு வழியாக பயன்படுத்த " +"முடியாது.\n" +"எனவே வோறொன்றை தேர்வு செய்யவும்." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "வழக்கமான பயன்பாட்டு சுருக்கு வழியுடன் முரண்" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"'%1' விசைக் கூட்டு ஏற்கனவே சில பயன்பாடுகளில் பயன்படுத்தப் படும் \"%2\" செயலுக்காக " +"பணிக்கப்பட்டுள்ளது. \n" +"இருப்பினும் இதனைத் தாங்கள் பொது சுருக்குவழியாகவும் பயன்படுத்த விழைகிறீர்களா?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "மீளமர்த்துக" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "உள்ளீடு" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "ஏதுமற்ற" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "நீங்கள் இப்போடு தட்டிய விசை Qt யால் ஆதரிக்கப்படவில்லை." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "ஆதரிக்கப்படாத துப்பு" diff --git a/po/te/kdeclarative5.po b/po/te/kdeclarative5.po new file mode 100644 index 0000000..5dbf86f --- /dev/null +++ b/po/te/kdeclarative5.po @@ -0,0 +1,109 @@ +# translation of kdelibs4.po to Telugu +# +# +# Purushottam Boyanapalli , 2005. +# విజయ్ కిరణ్ కముజు , 2007. +# pavithran , 2007. +# Krishna Babu K , 2008, 2009. +# sreekalyanbapatla , 2013. +# GVS.Giri , 2013. +# Bhuvan Krishna ,2013. +# Naveen Kandimalla ,2013. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2013-11-04 23:55+0630\n" +"Last-Translator: Bhuvan Krishna \n" +"Language-Team: Telugu \n" +"Language: te\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "విజయ్ కిరణ్ కముజు,కృష్ణబాబు కె, భువన్ కృష్ణ, జి వి యస్ గిరి, శ్రీ కళ్యన్న్, ననిన్" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"infyquest@gmail.com,kkrothap@redhat.com,bhuvan@swecha.org,gvs.giri@swecha." +"net,sreekalyan3@gmail.com,naveen@swecha.net" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "అనువర్తనము అక్షరరూపమును నిర్వచిస్తుంది" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "నిలిపిఉంచి శీఘ్ర మార్గము" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "ప్రామాణిక కార్యక్రమ శీఘ్రమార్గంతొ ఘర్షణ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "మళ్లి నియమించు" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "ఇన్పుట్" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "ఏదీ వద్దు" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "మీరు వాడిన మీట qt సహాయము తీసుకోలేదు" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "మద్దతు చేయని కీ" diff --git a/po/tg/kdeclarative5.po b/po/tg/kdeclarative5.po new file mode 100644 index 0000000..55ee61d --- /dev/null +++ b/po/tg/kdeclarative5.po @@ -0,0 +1,116 @@ +# translation of kdelibs4.po to Tajik Language +# 2004, 2005, 2006, 2007 infoDev, a World Bank organization. +# 2004, 2005, 2006, 2007 Khujand Computer Technologies, Inc. +# 2004, 2005, 2006, 2007 Youth Opportunities, NGO, 2005. +# Roger Kovacs , 2003. +# Thomas Diehl , 2003. +# Akmal Vatanshoev , 2004. +# Victor Ibragimov , 2003, 2004, 2005, 2006, 2007, 2008. +# Copyright (C) 2004, 2002, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2013-06-04 17:36+0500\n" +"Last-Translator: Victor Ibragimov \n" +"Language-Team: Tajik Language\n" +"Language: tg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Victor Ibragimov" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "victor.ibragimov@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "Харфи барномаро таъриф мекунад" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Нажмите на кнопке и введите комбинацию клавиш.\n" +"Например, для комбинации клавиш Ctrl+A зажмите клавишу Ctrl и нажмите A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Зарезервированная комбинация клавиш" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"В Windows клавиша F12 зарезервирована, поэтому её нельзя использовать в " +"глобальных комбинациях клавиш.\n" +"Выберите другую комбинацию клавиш." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Мухолифат бо тугмаи якҷояшудаи стандартӣ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Тугмаи '%1' аллакай бо амали стандартии \"%2\" якҷоя карда шуд. Ин " +"якҷояшавии тугмаҳо бо бисёр барномаҳо истифода мешавад.\n" +"Ин тавр шумо наметавонед ин тугмаҳоро бо амали ҷорӣ якҷоя кунед." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Якҷояи нав" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Вуруд" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Холӣ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Нажатая клавиша не поддерживается в Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Неподдерживаемый ключ" diff --git a/po/th/kdeclarative5.po b/po/th/kdeclarative5.po new file mode 100644 index 0000000..d1d0329 --- /dev/null +++ b/po/th/kdeclarative5.po @@ -0,0 +1,114 @@ +# translation of kdelibs4.po to Thai +# Copyright (C) 2003,2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# Thanomsub Noppaburana , 2003,2004, 2005. +# Thanomsub Noppaburana , 2005, 2008, 2010. +# Sahachart Anukulkitch , 2006, 2007. +# Narachai Sakorn , 2008. +# Phuwanat Sakornsakolpat , 2010. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2010-12-31 22:47+0700\n" +"Last-Translator: Phuwanat Sakornsakolpat \n" +"Language-Team: Thai \n" +"Language: th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "ถนอมทรัพย์ นพบูรณ์, สหชาติ อนุกูลกิจ" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "donga.nb@gmail.com, drrider@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "กำหนดแบบอักษรของโปรแกรม" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"คลิกบนปุ่ม จากนั้นป้อนปุ่มพิมพ์ลัดที่คุณต้องการจะใช้ในโปรแกรม\n" +"ตัวอย่างเช่น Ctrl+a: กดปุ่มพิมพ์ Ctrl ค้างเอาไว้ ตามด้วยการกดปุมพิมพ์ a" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "ปุ่มพิมพ์ลัดที่ถูกสงวนไว้" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"ปุ่มพิมพ์ F12 นั้นถูกสงวนไว้บนระบบวินโดวส์ " +"ดังนั้นจึงไม่สามารถนำมาใช้งานเป็นปุ่มพิมพ์ลัดใช้งานส่วนรวมได้\n" +"โปรดเลือกปุ่มพิมพ์อื่น ๆ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "เกิดความขัดแย้งกับปุ่มพิมพ์ลัดมาตรฐานของโปรแกรม" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"ปุ่มพิมพ์ลัด '%1' นี้ ถูกจองไว้ใช้งานกับการกระทำมาตรฐาน \"%2\" ซึ่งมีบางโปรแกรมใช้อยู่\n" +"คุณต้องการจะใช้มันเป็นปุ่มพิมพ์ลัดใช้งานส่วนรวมของมันเช่นกันหรือไม่ ?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "กำหนดใหม่" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "กดปุ่มพิมพ์" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "ไม่มี" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "ปุ่มพิมพ์ที่คุณเพิ่งกด ยังไม่ถูกรองรับโดย Qt" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "ปุ่มพิมพ์ที่ยังไม่รองรับ" diff --git a/po/tr/kdeclarative5.po b/po/tr/kdeclarative5.po new file mode 100644 index 0000000..0cc2068 --- /dev/null +++ b/po/tr/kdeclarative5.po @@ -0,0 +1,123 @@ +# translation of kdelibs4.po to Turkish +# translation of kdelibs4.po to +# Kdelibs Turkish translation file +# Copyright (C) 2000,2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# +# Ömer Fadıl USTA ,1999-2002. +# Görkem Çetin , 2002,2003, 2004. +# Tuncay YENİAY ,2002. +# Ayşe Genç , 2005. +# Görkem Çetin , 2005. +# Görkem Çetin , 2005. +# Bekir SONAT , 2005. +# Serdar Soytetir , 2007. +# Serdar Soytetir , 2007, 2008, 2009, 2011. +# H. İbrahim Güngör , 2010, 2011. +# Ozan Çağlayan , 2010, 2011. +# Serdar SOYTETİR , 2010, 2012. +# Volkan Gezer , 2013, 2014. +# Kaan Ozdincer , 2014. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-05-19 10:02+0000\n" +"Last-Translator: Necdet \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Lokalize 1.4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Serdar Soytetir, Görkem Çetin, H. İbrahim Güngör, Volkan Gezer" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"tulliana@gmail.com, gorkem@kde.org, ibrahim@pardus.org.tr, volkangezer@gmail." +"com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage QML uygulama kabuğu" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Uygulamanın benzersiz ismi (zorunlu)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Düğmeye tıklayın, ardından kısayol tuşlarına basın.\n" +"Ctrl+A örneği için: Ctrl tuşuna basılı tutun ve A tuşuna basın." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Ayrılmış Kısayol" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 kısayolu Windows üzerinde önceden atanmış olduğundan genel kısayol " +"olarak kullanılamaz.\n" +"Lütfen başka bir tuş seçin." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Standart Uygulama Kısayolu ile Çakışma" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"'%1' tuş kombinasyonu zaten başka bir uygulamanın \"%2\" eylemine " +"ayrılmıştı.\n" +"Bu kombinasyonu şu anki eylem için yeniden atamak ister misiniz?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Yeniden Ata" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Girdi" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Hiçbiri" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Şimdi bastığınız tuş Qt tarafından desteklenmiyor." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Desteklenmeyen Tuş" diff --git a/po/tt/kdeclarative5.po b/po/tt/kdeclarative5.po new file mode 100644 index 0000000..3a3017d --- /dev/null +++ b/po/tt/kdeclarative5.po @@ -0,0 +1,111 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Ainur Shakirov , 2011. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2011-11-26 15:12+0400\n" +"Last-Translator: Ainur Shakirov \n" +"Language-Team: Tatar <>\n" +"Language: tt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.2\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ainur Shakirov" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ainur.shakirov.tt@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "кушымтаның хәрефен билгели" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Нажмите на кнопке и введите комбинацию клавиш.\n" +"Например, для комбинации клавиш Ctrl+A зажмите клавишу Ctrl и нажмите A." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Зарезервированная комбинация клавиш" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"В Windows клавиша F12 зарезервирована, поэтому её нельзя использовать в " +"глобальных комбинациях клавиш.\n" +"Выберите другую комбинацию клавиш." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Стандартлы төймә функциясе белән конфликт" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Комбинация клавиш %1 уже связана со стандартным действием «%2», используемым " +"во многих программах.\n" +"Вы действительно хотите использовать эту комбинацию как глобальную?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Яңа белән бәйләү" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Кертү" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Юк" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Басылган төймә Qt коралы белән тотылмый." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Төймә тотылмый" diff --git a/po/ug/kdeclarative5.po b/po/ug/kdeclarative5.po new file mode 100644 index 0000000..00f4a77 --- /dev/null +++ b/po/ug/kdeclarative5.po @@ -0,0 +1,112 @@ +# Uyghur translation for kdelibs4. +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# Sahran , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2013-09-08 07:05+0900\n" +"Last-Translator: Gheyret Kenji \n" +"Language-Team: Uyghur Computer Science Association \n" +"Language: ug\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.5.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "ئابدۇقادىر ئابلىز, غەيرەت كەنجى" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "sahran.ug@gmail.com, gheyret@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "پروگرامما خەت نۇسخا بەلگىلەش" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"بۇ توپچىنى چېكىپ، ئاندىن بۇ پروگراممىغا تېزلەتمە كىرگۈزۈڭ.\n" +"مەسىلەن، Ctrl+a يەنى Ctrl كۇنۇپكىسىنى بېسىپ تۇرۇپ ئاندىن a كۇنۇپكا بېسىلىدۇ." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "بەلگىلىنىپ بولغان تېزلەتمە" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 بولسا Windows دا بەلگىلىنىپ بولغان، شۇڭا ئومۇمىيەت تېزلەتمىدە ئىشلەتكىلى " +"بولمايدۇ\n" +"باشقا كۇنۇپكا تاللاڭ." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "پروگراممىنىڭ ئۆلچەملىك تېزلەتمىسى بىلەن توقۇنۇشۇپ قالدى" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"بىرىكمە كۇنۇپكا '%1' بىر قانچە پروگراممىلاردا ئۆلچەملىك مەشغۇلات \"%2\" " +"ئۈچۈن بېكىتىلگەن\n" +"بۇنى راستلا ئومۇمىيەت تېزلەتمە سۈپىتىدە ئىشلىتەمسىز؟" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "قايتا تەقسىملە" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "كىرگۈز" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "يوق" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "باسقان كۇنۇپكىنى Qt دا ئىشلەتكىلى بولمايدۇ." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "ئىشلەتكىلى بولمايدىغان كۇنۇپكا" diff --git a/po/uk/kdeclarative5.po b/po/uk/kdeclarative5.po new file mode 100644 index 0000000..b1a8fb9 --- /dev/null +++ b/po/uk/kdeclarative5.po @@ -0,0 +1,113 @@ +# Translation of kdeclarative5.po to Ukrainian +# Copyright (C) 2014-2015 This_file_is_part_of_KDE +# This file is distributed under the license LGPL version 2.1 or +# version 3 or later versions approved by the membership of KDE e.V. +# +# Eugene Onischenko , 2002, 2003, 2004, 2005, 2006. +# Andriy Rysin , 2002, 2003, 2006, 2007. +# Ivan Petrouchtchak , 2005, 2006, 2007, 2008. +# Yuri Chornoivan , 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015. +msgid "" +msgstr "" +"Project-Id-Version: kdeclarative5\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-03-05 19:48+0200\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Юрій Чорноіван" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yurchor@ukr.net" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "QML-оболонка програм KPackage" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "Унікальна назва програми (обов’язкова)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Натисніть кнопку, а потім введіть клавіатурне скорочення, яке ви бажаєте " +"використовувати у програмі.\n" +"Наприклад, для Ctrl+A: натисніть клавішу Ctrl, а потім клавішу «A»." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Зарезервоване скорочення" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Клавішу F12 у Windows зарезервовано. Її не можна використовувати для " +"створення загального клавіатурного скорочення.\n" +"Будь ласка, оберіть іншу клавішу." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Конфлікт зі скороченнями стандартних програм" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Комбінація клавіш «%1» вже прив'язана до стандартної дії «%2», яку " +"використовують багато інших програм.\n" +"Ви дійсно хочете використовувати її також як загальне скорочення?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Перепризначити" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Ввід" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Немає" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Клавіша, яку ви тільки-но використали, не підтримується Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Непідтримувана клавіша" diff --git a/po/uz/kdeclarative5.po b/po/uz/kdeclarative5.po new file mode 100644 index 0000000..004da65 --- /dev/null +++ b/po/uz/kdeclarative5.po @@ -0,0 +1,102 @@ +# translation of kdelibs4.po to Uzbek +# Mashrab Kuvatov , 2003, 2004, 2005, 2006, 2008. +# translation of kdelibs4.po to +# Copyright (C) 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2008-05-30 17:29+0200\n" +"Last-Translator: Mashrab Kuvatov \n" +"Language-Team: Uzbek \n" +"Language: uz\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Mashrab Quvatov" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kmashrab@uni-bremen.de" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "dastur uchun shriftni aniqlaydi" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "Tugmalar birikmasi" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Dasturning andoza tugmalar birikmasi bilan muammo" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"\"%1\" tugma birikmasi allaqachon \"%2\" andoza amali bilan bogʻlangan.\n" +"Uni joriy amal bilan bogʻlashni istaysizmi?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, fuzzy, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Kiritish fayli" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, fuzzy, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Yoʻq" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +msgid "Unsupported Key" +msgstr "Ishonchsiz" diff --git a/po/uz@cyrillic/kdeclarative5.po b/po/uz@cyrillic/kdeclarative5.po new file mode 100644 index 0000000..49c712c --- /dev/null +++ b/po/uz@cyrillic/kdeclarative5.po @@ -0,0 +1,102 @@ +# translation of kdelibs4.po to Uzbek +# translation of kdelibs4.po to +# Copyright (C) 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc. +# Mashrab Kuvatov , 2003, 2004, 2005, 2006, 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2009-10-17 00:34+0200\n" +"Last-Translator: Mashrab Kuvatov \n" +"Language-Team: Uzbek \n" +"Language: uz\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Машраб Қуватов" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kmashrab@uni-bremen.de" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "дастур учун шрифтни аниқлайди" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "Тугмалар бирикмаси" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Дастурнинг андоза тугмалар бирикмаси билан муаммо" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"\"%1\" тугма бирикмаси аллақачон \"%2\" андоза амали билан боғланган.\n" +"Уни жорий амал билан боғлашни истайсизми?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, fuzzy, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Киритиш файли" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, fuzzy, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Йўқ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +msgid "Unsupported Key" +msgstr "Ишончсиз" diff --git a/po/vi/kdeclarative5.po b/po/vi/kdeclarative5.po new file mode 100644 index 0000000..21ddac7 --- /dev/null +++ b/po/vi/kdeclarative5.po @@ -0,0 +1,113 @@ +# Vietnamese translation for kdelibs. +# Copyright © 2007 KDE i18n Project for Vietnamese. +# +# Clytie Siddall , 2006-2007. +# Hoàng Đức Hiếu , 2008, 2011. +# Lê Hoàng Phương , 2011, 2012. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2012-09-23 18:43+0800\n" +"Last-Translator: Lê Hoàng Phương \n" +"Language-Team: American English \n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Nhóm Việt hoá KDE" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kde-l10n-vi@kde.org" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "định nghĩa phông chữ cho ứng dụng đó" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, fuzzy, kde-format +#| msgid "" +#| "Click on the button, then enter the shortcut like you would in the " +#| "program.\n" +#| "Example for Ctrl+a: hold the Ctrl key and press a." +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"Nhấn vào nút, sau đó nhập phím tắt bạn muốn dùng.\n" +"Ví dụ cho Ctrl + a: nhấn phím Ctrl và nhấn a." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Phím tắt dự trữ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"Phím F12 được dự trữ cho cửa sổ, vì vậy không thể dùng làm phím tắt toàn hệ " +"thống.\n" +"Hãy chọn phím khác." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Xung đột với phím tắt ứng dụng chuẩn" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Tổ hợp phím '%1' cũng được dùng cho hành động chuẩn \"%2\" do nhiều ứng dụng " +"sử dụng.\n" +"Bạn có muốn sử dụng nó như một phím tắt toàn hệ thống không?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Gán lại" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Gõ" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Không" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Phím bạn vừa nhấn không được hỗ trợ bởi Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Phím không hỗ trợ" diff --git a/po/wa/kdeclarative5.po b/po/wa/kdeclarative5.po new file mode 100644 index 0000000..8097579 --- /dev/null +++ b/po/wa/kdeclarative5.po @@ -0,0 +1,107 @@ +# translation of kdelibs4.po to Walloon +# Ratournaedje e walon des messaedjes di KDE. +# +# Lorint Hendschel , 2002. +# Pablo Saratxaga , 2002-2004, 2007. +# Jean Cayron , 2007, 2008, 2009, 2010, 2011. +# Jean Cayron , 2007. +# Jean Cayron , 2011, 2012. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2012-07-04 17:33+0200\n" +"Last-Translator: Jean Cayron \n" +"Language-Team: Walloon \n" +"Language: wa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.2\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Poedit-Language: Walloon\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Lorint Hendschel,Pablo Saratxaga,Djan Cayron" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "laurent.hendschel@skynet.be,pablo@walon.org,jean.cayron@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "definixh li fonte do programe" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "Rascourti rizervé" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Gn a fortcherwaedje avou les rascourtis standårds di l' aplicåcion" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"L' atelêye di tapes « %1 » sieve ossu po l' accion standård « %2 » ki " +"sacwants programes s' endè siervèt.\n" +"El voloz vormint eployî po on rascourti globå eto?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "Raroyî" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "Intrêye" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "Nolu" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Li tape ki vos vnoz d' tchôkî n' est nén sopoirtêye pa Qt." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "Tape nén sopoirtêye" diff --git a/po/xh/kdeclarative5.po b/po/xh/kdeclarative5.po new file mode 100644 index 0000000..0a3b516 --- /dev/null +++ b/po/xh/kdeclarative5.po @@ -0,0 +1,108 @@ +# translation of kdelibs4.po to +# translation of kdelibs4.po to +# translation of kdelibs4.po to +# translation of kdelibs4.po to Xhosa +# K Desktop Environment - kdelibs +# Copyright (C) 2001 translate.org.za +# Antoinette Dekeni , 2001. +# Lwandle Mgidlana , 2002 +# Thelma Lungcuzo , 2002 +# +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2002-12-13 17:20SAST\n" +"Last-Translator: Lwandle Mgidlana \n" +"Language-Team: Xhosa \n" +"Language: xh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0beta2\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, fuzzy, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Igama elitsha lenginginya." + +#, fuzzy, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "Igama elitsha lenginginya." + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "ichaza isicelo sohlobo lwamagama." + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "Indlela emfutshane" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "Ungqubano Nesicelo Esisezantsi Sendlela emfutshane" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"Indibaniselwano '%1' yesitshixo sele inikezelwe kwi \"%2\"ntshukumo.\n" +"Nceda khetha indibaniselwano yesinye isitshixo." + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, fuzzy, kde-format +msgid "Reassign" +msgstr "Isirashiya" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, fuzzy, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "&Igalelo Elisuka" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, fuzzy, kde-format +#| msgid "None" +msgctxt "No shortcut defined" +msgid "None" +msgstr "Akukho nanye" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +msgid "Unsupported Key" +msgstr "Engenasihloko" diff --git a/po/zh_CN/kdeclarative5.po b/po/zh_CN/kdeclarative5.po new file mode 100644 index 0000000..224c812 --- /dev/null +++ b/po/zh_CN/kdeclarative5.po @@ -0,0 +1,115 @@ +# translation of kdelibs4.po to Chinese Simplified +# Copyright (C) 2007 Free Software Foundation, Inc. +# +# Lie Ex 2007-2011. +# Wang Jian , 1998. +# Sarah Smith , 2002. +# Xiong Jiang , 2002,2003,2004. +# Funda Wang , 2002,2003,2004. +# Liang Qi , 2007. +# Feng Chao , 2010, 2012, 2014. +# Ni Hui , 2010, 2011, 2012. +# Weng Xuetian , 2011, 2012, 2013, 2015. +msgid "" +msgstr "" +"Project-Id-Version: kdeorg\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2018-01-05 06:38-0500\n" +"Last-Translator: guoyunhebrave \n" +"Language-Team: Chinese Simplified\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: kdeorg\n" +"X-Crowdin-Language: zh-CN\n" +"X-Crowdin-File: /kf5-trunk/messages/frameworks/kdeclarative5.pot\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "KDE 中国, Feng Chao" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kde-china@kde.org, chaofeng111@gmail.com" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage QML 应用程序外壳" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "应用程序唯一名称(必须)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"单击此按钮,然后输入您要为此程序设定的快捷方式。\n" +"比如 Ctrl+A 就是按住 Ctrl 键再按下 A。" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "保留快捷方式" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 在 Windows 系统中是一个保留键,无法被用于全局快捷键。\n" +"请另选一个。" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "和标准程序快捷键冲突" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"组合键“%1”已被其它一些程序使用的标准动作“%2”占用。\n" +"您真的想要将它也作为全局快捷键使用吗?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "重新指派" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "输入" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "无" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "Qt 尚不支持您刚才按下的键。" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "不支持的键" diff --git a/po/zh_HK/kdeclarative5.po b/po/zh_HK/kdeclarative5.po new file mode 100644 index 0000000..e80a9f3 --- /dev/null +++ b/po/zh_HK/kdeclarative5.po @@ -0,0 +1,130 @@ +# translation of kdelibs4.po to Chinese (Hong Kong) +# Chinese (traditional) translation for kdeutils +# Copyright (C) 2001, 02, 04, 05 Free Software Foundation, Inc. +# +# Eric Cheng , unknown. +# +# with reference from zh_CN translation (as of 2002-11-08): +# Chih-Wei Huang , 2001. +# Kenduest Lee , 2001. +# Jouston Huang (Huang, Jiun-Jeng) , 2002. +# Kenduest Lee , 2002. +# Wang Jian , 2002. +# Anthony Fok , 2002. +# Yuan-Chen Cheng , 2002. +# Wang Jian , 1998. +# Funda Wang , 2002. +# Sarah Smith , 2002. +# Xiong Jiang , 2002. +# Chia-Lin, Kao , 2004. +# Stanley Wong , 2005. +# Abel Cheung , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2006-01-04 13:32+0800\n" +"Last-Translator: Abel Cheung \n" +"Language-Team: Chinese (Hong Kong) \n" +"Language: zh_HK\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.3\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" +"Chih-Wei Huang,Kenduest Lee,Jouston Huang (Jiun-Jeng Huang),Kenduest Lee," +"Wang Jian,Anthony Fok,Yuan-Chen Cheng,Wang Jian,Funda Wang,Sarah Smith,Xiong " +"Jiang,Kao Chia-Lin,Stanley Wong" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"cwhuang@linux.org.tw,kenduest@i18n.linux.org.tw,jouston@housediy.com," +"kenduest@i18n.linux.org.tw,lark@linux.net.cn,anthony@thizlinux.com," +"ycheng@slat.org,lark@linux.ustc.edu.cn,fundawang@en2china.com,sarahs@redhat." +"com,jxiong@offtopic.org,acelan@linux.org.tw,stanley18fan0k@yahoo.com.hk" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "" + +#: kpackagelauncherqml/main.cpp:50 +#, fuzzy, kde-format +#| msgid "defines the application font" +msgid "The unique name of the application (mandatory)" +msgstr "定義應用程式字型。" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, fuzzy, kde-format +#| msgid "Shortcut" +msgid "Reserved Shortcut" +msgstr "快速鍵" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "與標準的應用程式快速鍵定義衝突" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, fuzzy, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"'%1' 按鍵組合已配置給標準 \"%2\" 動作。\n" +"你確定要重新設定此組合鍵給此動作?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "重新指定" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, fuzzy, kde-format +#| msgid "Input file" +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "輸入檔案" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, fuzzy, kde-format +#| msgid "None" +msgctxt "No shortcut defined" +msgid "None" +msgstr "無" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, fuzzy, kde-format +#| msgid "Untrusted" +msgid "Unsupported Key" +msgstr "不可信的" diff --git a/po/zh_TW/kdeclarative5.po b/po/zh_TW/kdeclarative5.po new file mode 100644 index 0000000..14d62d8 --- /dev/null +++ b/po/zh_TW/kdeclarative5.po @@ -0,0 +1,113 @@ +# translation of kdelibs4.po to Chinese Traditional +# Copyright (C) 2001, 2002, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# Eric Cheng , unknown. +# This file referenced zh_CN translations at 2002. +# Chih-Wei Huang , 2001. +# Kenduest Lee , 2001, 2002. +# Jouston Huang (Huang, Jiun-Jeng) , 2002. +# Chia-Lin, Kao , 2004. +# Yuan-Chen Cheng , 2002. +# Goodhorse , 2008. +# Frank Weng (a.k.a. Franklin) , 2006-2009, 2010. +# Franklin Weng , 2010, 2011, 2012. +# Franklin Weng , 2010, 2011, 2012, 2013, 2014, 2015. +msgid "" +msgstr "" +"Project-Id-Version: kdelibs4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2017-11-30 03:07+0100\n" +"PO-Revision-Date: 2015-05-13 16:47+0800\n" +"Last-Translator: Franklin\n" +"Language-Team: Chinese Traditional \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Franklin Weng" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "franklin@goodhorse.idv.tw" + +#: kpackagelauncherqml/main.cpp:43 +#, kde-format +msgid "KPackage QML application shell" +msgstr "KPackage QML 應用程式 shell" + +#: kpackagelauncherqml/main.cpp:50 +#, kde-format +msgid "The unique name of the application (mandatory)" +msgstr "應用程式的名稱(主要)" + +#: qmlcontrols/kquickcontrols/KeySequenceItem.qml:38 +#, kde-format +msgid "" +"Click on the button, then enter the shortcut like you would in the program.\n" +"Example for Ctrl+A: hold the Ctrl key and press A." +msgstr "" +"點擊此按鍵,並輸入您要在程式裡做的動作。\n" +"例如 Ctrl+A:按住 Ctrl 鍵並按 A。" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:276 +#, kde-format +msgid "Reserved Shortcut" +msgstr "保留的捷徑" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:277 +#, kde-format +msgid "" +"The F12 key is reserved on Windows, so cannot be used for a global " +"shortcut.\n" +"Please choose another one." +msgstr "" +"F12 鍵是 Windows 的保留鍵,無法做為全域捷徑。\n" +"請另外選一個鍵。" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:333 +#, kde-format +msgid "Conflict with Standard Application Shortcut" +msgstr "與標準的應用程式快捷鍵定義衝突" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:334 +#, kde-format +msgid "" +"The '%1' key combination is also used for the standard action \"%2\" that " +"some applications use.\n" +"Do you really want to use it as a global shortcut as well?" +msgstr "" +"%1 組合鍵已經用於許多應用程式會用到的標準動作「%2」了。您確定要使用它做為全域" +"的快捷鍵嗎?" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:339 +#, kde-format +msgid "Reassign" +msgstr "重新指定" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:381 +#, kde-format +msgctxt "What the user inputs now will be taken as the new shortcut" +msgid "Input" +msgstr "輸入" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:388 +#, kde-format +msgctxt "No shortcut defined" +msgid "None" +msgstr "無" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:409 +#, kde-format +msgid "The key you just pressed is not supported by Qt." +msgstr "您剛才按的鍵並未被 Qt 所支援。" + +#: qmlcontrols/kquickcontrols/private/keysequencehelper.cpp:410 +#, kde-format +msgid "Unsupported Key" +msgstr "不支援的按鍵。" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..13aef05 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,36 @@ +if(KF5Config_FOUND AND KF5I18n_FOUND AND KF5IconThemes_FOUND AND KF5KIO_FOUND) + add_subdirectory(kdeclarative) +endif() + +add_subdirectory(quickaddons) +add_subdirectory(qmlcontrols) +add_subdirectory(kpackagelauncherqml) +add_subdirectory(calendarevents) + +if(BUILD_QCH) + ecm_add_qch( + KF5Declarative_QCH + NAME KDeclarative + BASE_NAME KF5Declarative + VERSION ${KF5_VERSION} + ORG_DOMAIN org.kde + SOURCES # using only public headers, to cover only public API + ${KQuickAddons_QCH_SOURCES} + ${KDeclarative_QCH_SOURCES} + MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md" + LINK_QCHS + Qt5Qml_QCH + KF5ConfigCore_QCH + KF5Package_QCH + BLANK_MACROS + KDECLARATIVE_EXPORT + KDECLARATIVE_DEPRECATED + KDECLARATIVE_DEPRECATED_EXPORT + QUICKADDONS_EXPORT + QUICKADDONS_DEPRECATED + QUICKADDONS_DEPRECATED_EXPORT + TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} + QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} + COMPONENT Devel + ) +endif() diff --git a/src/Messages.sh b/src/Messages.sh new file mode 100755 index 0000000..86690ed --- /dev/null +++ b/src/Messages.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +# Invoke the extractrc script on all .ui, .rc, and .kcfg files in the sources. +# The results are stored in a pseudo .cpp file to be picked up by xgettext. +lst=`find . -name \*.rc -o -name \*.ui -o -name \*.kcfg` +if [ -n "$lst" ] ; then + $EXTRACTRC $lst >> rc.cpp +fi + +# If your framework contains tips-of-the-day, call preparetips as well. +if [ -f "data/tips" ] ; then + ( cd data && $PREPARETIPS > ../tips.cpp ) +fi + +# Extract strings from all source files. +# If your framework depends on KI18n, use $XGETTEXT. If it uses Qt translation +# system, use $EXTRACT_TR_STRINGS. +$XGETTEXT `find . -name \*.cpp -o -name \*.h -o -name \*.qml` -o $podir/kdeclarative5.pot diff --git a/src/calendarevents/CMakeLists.txt b/src/calendarevents/CMakeLists.txt new file mode 100644 index 0000000..a4ce72a --- /dev/null +++ b/src/calendarevents/CMakeLists.txt @@ -0,0 +1,33 @@ +set(calendar-integration_SRCS + calendareventsplugin.cpp + eventdata_p.cpp +) + +add_library(KF5CalendarEvents SHARED ${calendar-integration_SRCS}) +generate_export_header(KF5CalendarEvents BASE_NAME CalendarEvents) +add_library(KF5::CalendarEvents ALIAS KF5CalendarEvents) + +target_link_libraries(KF5CalendarEvents PUBLIC Qt5::Core) + +target_include_directories(KF5CalendarEvents INTERFACE "$") +set_target_properties(KF5CalendarEvents PROPERTIES VERSION ${KDECLARATIVE_VERSION_STRING} + SOVERSION ${KDECLARATIVE_SOVERSION} + EXPORT_NAME CalendarEvents +) + +install(TARGETS KF5CalendarEvents EXPORT KF5DeclarativeTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) + +ecm_generate_headers(CalendarEvents_CamelCase_HEADERS + HEADER_NAMES + CalendarEventsPlugin + + PREFIX CalendarEvents + REQUIRED_HEADERS calendareventsplugin.h +) +install(FILES ${CalendarEvents_CamelCase_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KDeclarative/CalendarEvents COMPONENT Devel) + +install (FILES + calendareventsplugin.h + ${CMAKE_CURRENT_BINARY_DIR}/calendarevents_export.h + DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KDeclarative/calendarevents COMPONENT Devel +) diff --git a/src/calendarevents/CalendarEventsConfig.cmake.in b/src/calendarevents/CalendarEventsConfig.cmake.in new file mode 100644 index 0000000..351e0a6 --- /dev/null +++ b/src/calendarevents/CalendarEventsConfig.cmake.in @@ -0,0 +1,6 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) +find_dependency(Qt5Core @REQUIRED_QT_VERSION@) + +include("${CMAKE_CURRENT_LIST_DIR}/CalendarEventsTargets.cmake") diff --git a/src/calendarevents/calendareventsplugin.cpp b/src/calendarevents/calendareventsplugin.cpp new file mode 100644 index 0000000..6342fde --- /dev/null +++ b/src/calendarevents/calendareventsplugin.cpp @@ -0,0 +1,35 @@ +/* + * Copyright 2015 Martin Klapetek + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "calendareventsplugin.h" + +namespace CalendarEvents { + +CalendarEventsPlugin::CalendarEventsPlugin(QObject *parent) + : QObject(parent) +{ + +} + +CalendarEventsPlugin::~CalendarEventsPlugin() +{ + +} + +} diff --git a/src/calendarevents/calendareventsplugin.h b/src/calendarevents/calendareventsplugin.h new file mode 100644 index 0000000..b0866aa --- /dev/null +++ b/src/calendarevents/calendareventsplugin.h @@ -0,0 +1,233 @@ +/* + * Copyright 2015 Martin Klapetek + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef CALENDAREVENTSPLUGIN_H +#define CALENDAREVENTSPLUGIN_H + +#include +#include +#include +#include + +#include "calendarevents_export.h" + +namespace CalendarEvents { + +class CALENDAREVENTS_EXPORT EventData +{ +public: + enum EventType { + Holiday, // Any holiday + Event, // General event + Todo // A Todo item + }; + + EventData(); + EventData(const EventData &other); + ~EventData(); + + EventData &operator=(const EventData &other); + + /** + * The start date and time of this event + */ + QDateTime startDateTime() const; + + /** + * Set the start date-time of this event + * + * @param startDateTime the date-time of when the event is starting + */ + void setStartDateTime(const QDateTime &startDateTime); + + /** + * The end date and time of this event + */ + QDateTime endDateTime() const; + + /** + * Set the end date-time of this event + * + * @param endDateTime the date-time of when the event is ending + */ + void setEndDateTime(const QDateTime &endDateTime); + + /** + * If true, this event goes on the whole day (eg. a holiday) + */ + bool isAllDay() const; + + /** + * If set to true, it will be displayed in the Calendar agenda + * without any time besides it, marked as "going on all day" + * + * This is useful for single-day events only, for multiple-day + * events, leave to false (default) + * + * @param isAllDay set to true if the event takes all day, false otherwise + * (defaults to false) + */ + void setIsAllDay(bool isAllDay); + + /** + * If true, this event won't mark the day in the calendar grid + * The main purpose for this flag is to support + * namedays, where in some countries the calendars have + * different name in them every day. This is just a minor holiday + * and as such should not mark the calendar grid, otherwise + * the whole grid would be in a different color. + */ + bool isMinor() const; + + /** + * If set to true, it won't be marked in the calendar grid + * + * @param isMinor true if it's a minor event (like a nameday holiday), + * false otherwise (defaults to false) + */ + void setIsMinor(bool isMinor); + + /** + * Event title + */ + QString title() const; + + /** + * Sets the title of the event + * + * @param title The event title + */ + void setTitle(const QString &title); + + /** + * Event description, can provide more details about the event + */ + QString description() const; + + /** + * Sets the event description, which allows to add more details + * about this event + * + * @param description The description + */ + void setDescription(const QString &description); + + /** + * Type of the current event, eg. a holiday, an event or a todo item + */ + EventType type() const; + + /** + * Sets the event type, eg. a holiday, an event or a todo item + * + * @param type The event type, + */ + void setEventType(EventType type); + + /** + * The color that should be used to mark this event with + * It comes in the HTML hex format, eg. #AARRGGBB or #RRGGBB + */ + QString eventColor() const; + + /** + * This is to support various calendar colors the user might + * have configured elsewhere + * + * @param color The color for this event in the HTML hex format + * eg. #AARRGGBB or #RRGGBB (this is passed directly + * to QML) + */ + void setEventColor(const QString &color); + + /** + * Unique ID of the event + */ + QString uid() const; + + /** + * Sets the uid of the event + * + * This is a mandatory field only if you want to use + * the eventModified/eventRemoved signals, otherwise + * setting it is optional + * + * @param uid A unique id, recommended is to use the plugin name as prefix (to keep it unique) + */ + void setUid(const QString &uid); + +private: + class Private; + QSharedDataPointer d; +}; + +class CALENDAREVENTS_EXPORT CalendarEventsPlugin : public QObject +{ + Q_OBJECT + +public: + explicit CalendarEventsPlugin(QObject *parent = nullptr); + virtual ~CalendarEventsPlugin(); + + /** + * When this is called, the plugin should load all events data + * between those two date ranges. Once the data are ready, it should + * just emit the dataReady() signal. The range is usually one month + * + * @param startDate the start of the range + * @param endDate the end of the range + */ + virtual void loadEventsForDateRange(const QDate &startDate, const QDate &endDate) = 0; + +Q_SIGNALS: + /** + * Emitted when the plugin has loaded the events data + * + * @param data A hash containing a QDate key for the event + * in the value, CalendarEvents::EventData, which holds all + * the details for the given event + * It's a multihash as there can be multiple events + * in the same day + * For multi-day events, insert just one with the key + * being the startdate of the event + */ + void dataReady(const QMultiHash &data); + + /** + * Should be emitted when there is a modification of an event + * that was previously returned via the dataReady() signal + * + * @param event The modified event data + */ + void eventModified(const CalendarEvents::EventData &modifiedEvent); + + /** + * Should be emitted when the plugin removes some event + * from its collection + * + * @param uid The uid of the event that was removed + */ + void eventRemoved(const QString &uid); +}; + +} + +Q_DECLARE_INTERFACE(CalendarEvents::CalendarEventsPlugin, "org.kde.CalendarEventsPlugin") + +#endif diff --git a/src/calendarevents/eventdata_p.cpp b/src/calendarevents/eventdata_p.cpp new file mode 100644 index 0000000..d998959 --- /dev/null +++ b/src/calendarevents/eventdata_p.cpp @@ -0,0 +1,170 @@ +/* + * Copyright 2015 Martin Klapetek + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "calendareventsplugin.h" + +#include + +class CalendarEvents::EventData::Private : public QSharedData { +public: + Private() : isAllDay(false), isMinor(false) {}; + Private(const Private &other) + : QSharedData(other) + { + startDateTime = other.startDateTime; + endDateTime = other.endDateTime; + title = other.title; + description = other.description; + uid = other.uid; + eventColor = other.eventColor; + type = other.type; + isAllDay = other.isAllDay; + isMinor = other.isMinor; + }; + ~Private() {}; + QDateTime startDateTime; // Start of the event + QDateTime endDateTime; // End of the event + QString title; // Title of the event + QString description; // Additional info of the event + QString uid; // An internal event id, useful mostly just for the eventModified/Removed signals + QString eventColor; // Optional color of the event in the HTML hex format, eg. #AARRGGBB or #RRGGBB + EventType type; // Type of the event + bool isAllDay; // True if the event takes all day, then it won't be displayed with any time + bool isMinor; // A minor holiday that will not create a colored entry in the calendar +}; + +//--------------------------------------------------- + +namespace CalendarEvents { + +EventData::EventData() + : d(new Private()) +{ +} + +EventData::EventData(const EventData &other) + : d(other.d) +{ +} + +EventData::~EventData() +{ +} + +EventData& EventData::operator=(const EventData &other) +{ + if (this == &other) { + return *this; + } + + d = other.d; + return *this; +} + +QDateTime EventData::startDateTime() const +{ + return d->startDateTime; +} + +void EventData::setStartDateTime(const QDateTime &startDateTime) +{ + d->startDateTime = startDateTime; +} + +QDateTime EventData::endDateTime() const +{ + return d->endDateTime; +} + +void EventData::setEndDateTime(const QDateTime &endDateTime) +{ + d->endDateTime = endDateTime; +} + +bool EventData::isAllDay() const +{ + return d->isAllDay; +} + +void EventData::setIsAllDay(bool isAllDay) +{ + d->isAllDay = isAllDay; +} + +bool EventData::isMinor() const +{ + return d->isMinor; +} + +void EventData::setIsMinor(bool isMinor) +{ + d->isMinor = isMinor; +} + +QString EventData::title() const +{ + return d->title; +} + +void EventData::setTitle(const QString &title) +{ + d->title = title; +} + +QString EventData::description() const +{ + return d->description; +} + +void EventData::setDescription(const QString &description) +{ + d->description = description; +} + +QString EventData::uid() const +{ + return d->uid; +} + +void EventData::setUid(const QString &uid) +{ + d->uid = uid; +} + +EventData::EventType EventData::type() const +{ + return d->type; +} + +void EventData::setEventType(EventData::EventType type) +{ + d->type = type; +} + +QString EventData::eventColor() const +{ + return d->eventColor; +} + +void EventData::setEventColor(const QString &color) +{ + d->eventColor = color; +} + +} diff --git a/src/kdeclarative/CMakeLists.txt b/src/kdeclarative/CMakeLists.txt new file mode 100644 index 0000000..da2e673 --- /dev/null +++ b/src/kdeclarative/CMakeLists.txt @@ -0,0 +1,68 @@ + +set(kdeclarative_SRCS + configpropertymap.cpp + qmlobject.cpp + qmlobjectsharedengine.cpp + kdeclarative.cpp + private/kiconprovider.cpp + private/kioaccessmanagerfactory.cpp + private/qmlobject_p.h +) + +add_library(KF5Declarative ${kdeclarative_SRCS}) +generate_export_header(KF5Declarative EXPORT_FILE_NAME ${KDeclarative_BINARY_DIR}/kdeclarative/kdeclarative_export.h BASE_NAME KDeclarative) +add_library(KF5::Declarative ALIAS KF5Declarative) + +# Apps must include or +target_include_directories(KF5Declarative INTERFACE "$") + +target_link_libraries(KF5Declarative + PUBLIC + KF5::ConfigCore # KCoreConfigSkeleton, in ConfigPropertyMap + Qt5::Qml + KF5::Package + PRIVATE + Qt5::Quick #QQuickImageProvider + KF5::I18n #i18n bindings + KF5::KIOWidgets #KIO::AccessManager + KF5::IconThemes #KIconProvider +) +target_include_directories(KF5Declarative PUBLIC "$") + +set_target_properties(KF5Declarative + PROPERTIES VERSION ${KDECLARATIVE_VERSION_STRING} + SOVERSION ${KDECLARATIVE_SOVERSION} + EXPORT_NAME Declarative +) + +# Install files +ecm_generate_headers(KDeclarative_CamelCase_HEADERS + HEADER_NAMES + KDeclarative + QmlObject + QmlObjectSharedEngine + ConfigPropertyMap + + PREFIX KDeclarative + REQUIRED_HEADERS KDeclarative_HEADERS +) +install(FILES ${KDeclarative_CamelCase_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KDeclarative/KDeclarative COMPONENT Devel) + +install(TARGETS KF5Declarative + EXPORT KF5DeclarativeTargets + ${KF5_INSTALL_TARGETS_DEFAULT_ARGS} +) + +install(FILES + ${KDeclarative_BINARY_DIR}/kdeclarative/kdeclarative_export.h + ${KDeclarative_HEADERS} + DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KDeclarative/kdeclarative + COMPONENT Devel +) + +# make available to ecm_add_qch in parent folder +set(KDeclarative_QCH_SOURCES ${KDeclarative_HEADERS} PARENT_SCOPE) + +include(ECMGeneratePriFile) +ecm_generate_pri_file(BASE_NAME KDeclarative LIB_NAME KF5Declarative DEPS "qml" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/KDeclarative) +install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) diff --git a/src/kdeclarative/configpropertymap.cpp b/src/kdeclarative/configpropertymap.cpp new file mode 100644 index 0000000..5491045 --- /dev/null +++ b/src/kdeclarative/configpropertymap.cpp @@ -0,0 +1,127 @@ +/* + * Copyright 2013 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "configpropertymap.h" + +#include +#include + +#include + +namespace KDeclarative { + +class ConfigPropertyMapPrivate { +public: + ConfigPropertyMapPrivate(ConfigPropertyMap *map) + : q(map) + { + } + + void loadConfig(); + void writeConfig(); + void writeConfigValue(const QString &key, const QVariant &value); + + ConfigPropertyMap *q; + QPointer config; +}; + +ConfigPropertyMap::ConfigPropertyMap(KCoreConfigSkeleton *config, QObject *parent) + : QQmlPropertyMap(this, parent), + d(new ConfigPropertyMapPrivate(this)) +{ + d->config = config; + + //FIXME: find a prettier way to connect without lambdas + connect(config, &KCoreConfigSkeleton::configChanged, + [=](){d->loadConfig();}); + connect(this, &ConfigPropertyMap::valueChanged, + [=](const QString &key, const QVariant &value){d->writeConfigValue(key, value);}); + + d->loadConfig(); +} + +ConfigPropertyMap::~ConfigPropertyMap() +{ + d->writeConfig(); + delete d; +} + +QVariant ConfigPropertyMap::updateValue(const QString &key, const QVariant &input) +{ + Q_UNUSED(key); + if (input.userType() == qMetaTypeId()) { + return input.value().toVariant(); + } + return input; +} + +bool ConfigPropertyMap::isImmutable(const QString &key) const +{ + KConfigSkeletonItem *item = d->config.data()->findItem(key); + if (item) { + return item->isImmutable(); + } + + return false; +} + +void ConfigPropertyMapPrivate::loadConfig() +{ + if (!config) { + return; + } + + foreach (KConfigSkeletonItem *item, config.data()->items()) { + q->insert(item->key(), item->property()); + emit q->valueChanged(item->key(), item->property()); + } +} + +void ConfigPropertyMapPrivate::writeConfig() +{ + if (!config) { + return; + } + + foreach (KConfigSkeletonItem *item, config.data()->items()) { + item->setProperty(q->value(item->key())); + } + + config.data()->blockSignals(true); + config.data()->save(); + config.data()->blockSignals(false); +} + +void ConfigPropertyMapPrivate::writeConfigValue(const QString &key, const QVariant &value) +{ + KConfigSkeletonItem *item = config.data()->findItem(key); + if (item) { + item->setProperty(value); + config.data()->blockSignals(true); + config.data()->save(); + //why read? read will update KConfigSkeletonItem::mLoadedValue, + //allowing a write operation to be performed next time + config.data()->read(); + config.data()->blockSignals(false); + } +} + +} + +#include "moc_configpropertymap.cpp" diff --git a/src/kdeclarative/configpropertymap.h b/src/kdeclarative/configpropertymap.h new file mode 100644 index 0000000..5ec97ac --- /dev/null +++ b/src/kdeclarative/configpropertymap.h @@ -0,0 +1,65 @@ +/* + * Copyright 2013 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef CONFIGPROPERTYMAP_P +#define CONFIGPROPERTYMAP_P + +#include +#include + +class KCoreConfigSkeleton; + +#include + +namespace KDeclarative { + +class ConfigPropertyMapPrivate; + +/** + * @class KDeclarative::ConfigPropertyMap configpropertymap.h KDeclarative/ConfigPropertyMap + * + * TODO + */ +class KDECLARATIVE_EXPORT ConfigPropertyMap : public QQmlPropertyMap +{ + Q_OBJECT + +public: + ConfigPropertyMap(KCoreConfigSkeleton *config, QObject *parent = nullptr); + ~ConfigPropertyMap(); + + /** + * @brief Whether the value at the given key is immutable + * + * @return true if the value is immutable, false if it isn't or it doesn't exist + */ + Q_INVOKABLE bool isImmutable(const QString &key) const; + +protected: + QVariant updateValue(const QString &key, const QVariant &input) Q_DECL_OVERRIDE; +private: + ConfigPropertyMapPrivate *const d; + + Q_PRIVATE_SLOT(d, void loadConfig()) + Q_PRIVATE_SLOT(d, void writeConfigValue(const QString &key, const QVariant &value)) +}; + +} + +#endif diff --git a/src/kdeclarative/kdeclarative.cpp b/src/kdeclarative/kdeclarative.cpp new file mode 100644 index 0000000..6609716 --- /dev/null +++ b/src/kdeclarative/kdeclarative.cpp @@ -0,0 +1,176 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kdeclarative.h" +#include "private/kdeclarative_p.h" +#include "private/kiconprovider_p.h" +#include "private/kioaccessmanagerfactory_p.h" +#include "qmlobject.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace KDeclarative { + +QStringList KDeclarativePrivate::s_runtimePlatform; + +KDeclarativePrivate::KDeclarativePrivate() + : contextObj(nullptr) +{ +} + +KDeclarative::KDeclarative() + : d(new KDeclarativePrivate) +{ +} + +KDeclarative::~KDeclarative() +{ + delete d; +} + +void KDeclarative::setDeclarativeEngine(QQmlEngine *engine) +{ + if (d->declarativeEngine.data() == engine) { + return; + } + d->declarativeEngine = engine; +} + +QQmlEngine *KDeclarative::declarativeEngine() const +{ + return d->declarativeEngine.data(); +} + +#ifndef KDECLARATIVE_NO_DEPRECATED +void KDeclarative::initialize() +{ +} +#endif + +void KDeclarative::setupBindings() +{ + //get rid of stock network access manager factory + QQmlNetworkAccessManagerFactory *factory = d->declarativeEngine.data()->networkAccessManagerFactory(); + d->declarativeEngine.data()->setNetworkAccessManagerFactory(nullptr); + delete factory; + d->declarativeEngine.data()->setNetworkAccessManagerFactory(new KIOAccessManagerFactory()); + + /*Create a context object for the root qml context. + in this way we can register global functions, in this case the i18n() family*/ + if (!d->contextObj) { + d->contextObj = new KLocalizedContext(d->declarativeEngine.data()); + } + + //If the engine is in a qmlObject take the qmlObject rootContext instead of the engine one. + if (d->qmlObj) { + d->qmlObj->rootContext()->setContextObject(d->contextObj); + } else { + d->declarativeEngine.data()->rootContext()->setContextObject(d->contextObj); + } + + if (!d->translationDomain.isNull()) { + d->contextObj->setTranslationDomain(d->translationDomain); + } + + /* Tell the engine to search for platform-specific imports first + (so it will "win" in import name resolution). + addImportPath adds the path at the beginning, so to honour user's + paths we need to traverse the list in reverse order */ + const QStringList pluginPathList = d->declarativeEngine.data()->importPathList(); + + const QString target = componentsTarget(); + if (target != defaultComponentsTarget()) { + const QStringList paths = pluginPathList; + QStringListIterator it(paths); + it.toBack(); + while (it.hasPrevious()) { + QString path = it.previous(); + path = path.left(path.lastIndexOf(QLatin1Char('/'))); + d->declarativeEngine.data()->addImportPath(path + QStringLiteral("/platformqml/") + target); + } + } + + // setup ImageProvider for KDE icons + d->declarativeEngine.data()->addImageProvider(QStringLiteral("icon"), new KIconProvider); +} + +void KDeclarative::setTranslationDomain(const QString &translationDomain) +{ + d->translationDomain = translationDomain; + if (d->contextObj) { + d->contextObj->setTranslationDomain(d->translationDomain); + } +} + +QString KDeclarative::translationDomain() const +{ + return d->translationDomain; +} + +void KDeclarative::setupQmlJsDebugger() +{ + if (QCoreApplication::arguments().contains(QLatin1String("-qmljsdebugger"))) { + QQmlDebuggingEnabler enabler; + } +} + +QString KDeclarative::defaultComponentsTarget() +{ + return QLatin1String("desktop"); +} + +QString KDeclarative::componentsTarget() +{ + const QStringList platform = runtimePlatform(); + if (platform.isEmpty()) { + return defaultComponentsTarget(); + } + + return platform.last(); +} + +QStringList KDeclarative::runtimePlatform() +{ + if (KDeclarativePrivate::s_runtimePlatform.isEmpty()) { + const QString env = QString::fromLocal8Bit(getenv("PLASMA_PLATFORM")); + KDeclarativePrivate::s_runtimePlatform = QStringList(env.split(QLatin1Char(':'), QString::SkipEmptyParts)); + if (KDeclarativePrivate::s_runtimePlatform.isEmpty()) { + KConfigGroup cg(KSharedConfig::openConfig(), "General"); + KDeclarativePrivate::s_runtimePlatform = cg.readEntry(QStringLiteral("runtimePlatform"), KDeclarativePrivate::s_runtimePlatform); + } + } + + return KDeclarativePrivate::s_runtimePlatform; +} + +void KDeclarative::setRuntimePlatform(const QStringList &platform) +{ + KDeclarativePrivate::s_runtimePlatform = platform; +} + +} diff --git a/src/kdeclarative/kdeclarative.h b/src/kdeclarative/kdeclarative.h new file mode 100644 index 0000000..9ab1ed8 --- /dev/null +++ b/src/kdeclarative/kdeclarative.h @@ -0,0 +1,127 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef KDECLARATIVE_H +#define KDECLARATIVE_H + +#include + +#include + +#include + +class QQmlEngine; + +namespace KDeclarative { + +class KDeclarativePrivate; + +/** + * @class KDeclarative::KDeclarative kdeclarative.h + * + * TODO + */ +class KDECLARATIVE_EXPORT KDeclarative +{ +public: + explicit KDeclarative(); + ~KDeclarative(); + +#ifndef KDECLARATIVE_NO_DEPRECATE + /** + * @deprecated + */ + KDECLARATIVE_DEPRECATED void initialize(); +#endif + + /** + * Call this after setDeclarativeEngine to set the i18n global functions, the runtime platform, etc + */ + void setupBindings(); + + void setDeclarativeEngine(QQmlEngine *engine); + QQmlEngine *declarativeEngine() const; + + /** + * Call this method before calling setupBindings to install a translation domain for all + * i18n global functions. If a translation domain is set all i18n calls delegate to the + * matching i18nd calls with the provided translation domain. + * + * The translationDomain affects all i18n calls including those from imports. Because of + * that modules intended to be used as imports should prefer the i18nd variants and set + * the translation domain explicitly in each call. + * + * This method is only required if your declarative usage is inside a library. If it's + * in an application there is no need to set the translation domain as the application's + * domain can be used. + * + * @param translationDomain The translation domain to be used for i18n calls. + * @since 5.0 + */ + void setTranslationDomain(const QString &translationDomain); + + /** + * @return the translation domain for the i18n calls done in this QML engine + * @since 5.0 + */ + QString translationDomain() const; + + /** + * This method must be called very early at startup time to ensure the + * QQuickDebugger is enabled. Ideally it should be called in main(), + * after command-line options are defined. + */ + static void setupQmlJsDebugger(); + + /** + * @return the runtime platform, e.g. "desktop" or "tablet, touch". The first entry/ies in + * the list relate to the platform formfactor and the last is the input method + * specialization. If the string is empty, there is no specified runtime platform + * and a traditional desktop environment may be assumed + * @since 4.10 + */ + static QStringList runtimePlatform(); + + /** + * Sets the runtime platform from now on, globally to the process. + * Already loaded QML components won't be affected + */ + static void setRuntimePlatform(const QStringList &platform); + + /** + * @return the QML components target, based on the runtime platform. e.g. touch or desktop + * @since 4.10 + */ + static QString componentsTarget(); + + /** + * @return the default components target; can be used to compare against the returned value + * from @see componentsTarget() + * @since 4.10 + */ + static QString defaultComponentsTarget(); + +private: + KDeclarativePrivate *const d; + friend class QmlObject; +}; + +} + +#endif diff --git a/src/kdeclarative/private/kdeclarative_p.h b/src/kdeclarative/private/kdeclarative_p.h new file mode 100644 index 0000000..be9472c --- /dev/null +++ b/src/kdeclarative/private/kdeclarative_p.h @@ -0,0 +1,45 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef KDECLARATIVE_P_H +#define KDECLARATIVE_P_H + +#include "kdeclarative.h" +#include "qmlobject.h" + +#include +#include + +namespace KDeclarative { + +class KDeclarativePrivate +{ +public: + KDeclarativePrivate(); + + QPointer declarativeEngine; + QString translationDomain; + static QStringList s_runtimePlatform; + QPointer contextObj; + QPointer qmlObj; +}; + +} + +#endif diff --git a/src/kdeclarative/private/kiconprovider.cpp b/src/kdeclarative/private/kiconprovider.cpp new file mode 100644 index 0000000..b10afa3 --- /dev/null +++ b/src/kdeclarative/private/kiconprovider.cpp @@ -0,0 +1,72 @@ +/*************************************************************************** + Copyright 2011 Artur Duque de Souza + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see . + ***************************************************************************/ + +#include "kiconprovider_p.h" + +#include +#include +#include +#include +#include + +namespace KDeclarative { + +KIconProvider::KIconProvider() + : QQuickImageProvider(QQuickImageProvider::Pixmap) +{ +} + +QPixmap KIconProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) +{ + // We need to handle QIcon::state + const QStringList source = id.split(QLatin1Char('/')); + + QPixmap pixmap; + if (requestedSize.isValid()) { + pixmap = QIcon::fromTheme(source.at(0)).pixmap(requestedSize); + } else if (size->isValid()) { + pixmap = QIcon::fromTheme(source.at(0)).pixmap(*size); + } else { + pixmap = QIcon::fromTheme(source.at(0)).pixmap(IconSize(KIconLoader::Desktop)); + } + + if (source.size() == 2) { + KIconEffect *effect = KIconLoader::global()->iconEffect(); + const QString state(source.at(1)); + int finalState = KIconLoader::DefaultState; + + if (state == QStringLiteral("active")) { + finalState = KIconLoader::ActiveState; + } else if (state == QStringLiteral("disabled")) { + finalState = KIconLoader::DisabledState; + } else if (state == QStringLiteral("last")) { + finalState = KIconLoader::LastState; + } + + // apply the effect for state + pixmap = effect->apply(pixmap, KIconLoader::Desktop, finalState); + } + + if (!pixmap.isNull() && size) { + *size = pixmap.size(); + } + + return pixmap; +} + +} + diff --git a/src/kdeclarative/private/kiconprovider_p.h b/src/kdeclarative/private/kiconprovider_p.h new file mode 100644 index 0000000..2bd4aca --- /dev/null +++ b/src/kdeclarative/private/kiconprovider_p.h @@ -0,0 +1,35 @@ +/*************************************************************************** + Copyright 2011 Artur Duque de Souza + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see . + ***************************************************************************/ + +#ifndef ICON_PROVIDER_H +#define ICON_PROVIDER_H + +#include + +namespace KDeclarative { + +class KIconProvider : public QQuickImageProvider +{ + +public: + KIconProvider(); + QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) Q_DECL_OVERRIDE; +}; + +} + +#endif diff --git a/src/kdeclarative/private/kioaccessmanagerfactory.cpp b/src/kdeclarative/private/kioaccessmanagerfactory.cpp new file mode 100644 index 0000000..e36df3c --- /dev/null +++ b/src/kdeclarative/private/kioaccessmanagerfactory.cpp @@ -0,0 +1,39 @@ +/* + * Copyright 2010 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kioaccessmanagerfactory_p.h" +#include + +namespace KDeclarative { + +KIOAccessManagerFactory::KIOAccessManagerFactory() + : QQmlNetworkAccessManagerFactory() +{ +} + +KIOAccessManagerFactory::~KIOAccessManagerFactory() +{ +} + +QNetworkAccessManager *KIOAccessManagerFactory::create(QObject *parent) +{ + return new KIO::AccessManager(parent); +} + +} diff --git a/src/kdeclarative/private/kioaccessmanagerfactory_p.h b/src/kdeclarative/private/kioaccessmanagerfactory_p.h new file mode 100644 index 0000000..288c82f --- /dev/null +++ b/src/kdeclarative/private/kioaccessmanagerfactory_p.h @@ -0,0 +1,37 @@ +/* + * Copyright 2010 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef KIOACCESSMANAGERFACTORY_H +#define KIOACCESSMANAGERFACTORY_H + +#include + +namespace KDeclarative { + +class KIOAccessManagerFactory : public QQmlNetworkAccessManagerFactory +{ +public: + KIOAccessManagerFactory(); + ~KIOAccessManagerFactory(); + QNetworkAccessManager *create(QObject *parent) Q_DECL_OVERRIDE; +}; + +} + +#endif diff --git a/src/kdeclarative/private/qmlobject_p.h b/src/kdeclarative/private/qmlobject_p.h new file mode 100644 index 0000000..74c51d0 --- /dev/null +++ b/src/kdeclarative/private/qmlobject_p.h @@ -0,0 +1,89 @@ +/* + * Copyright 2013 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef QMLOBJECT_P_H +#define QMLOBJECT_P_H + +#include +#include + +#include +#include +#include +#include + +class QQmlEngine; +class QQmlComponent; + +namespace KDeclarative { + +class QmlObjectIncubationController : public QObject, public QQmlIncubationController +{ + Q_OBJECT + +public: + QmlObjectIncubationController(QObject *parent) + : QObject(parent), + QQmlIncubationController() + { + // Allow incubation for 1/3 of a frame. + m_incubation_time = qMax(1, int(1000 / QGuiApplication::primaryScreen()->refreshRate()) / 3); + } + +protected: + bool event(QEvent *e) Q_DECL_OVERRIDE + { + if (e->type() == QEvent::User) { + incubate(); + return true; + } + return QObject::event(e); + } + +public Q_SLOTS: + void incubate() + { + if (incubatingObjectCount()) { + incubateFor(m_incubation_time * 2); + if (incubatingObjectCount()) { + QCoreApplication::postEvent(this, new QEvent(QEvent::User)); + } + } + } + + void animationStopped() + { + incubate(); + } + +protected: + void incubatingObjectCountChanged(int count) Q_DECL_OVERRIDE + { + if (count) { + incubate(); + } + QQmlIncubationController::incubatingObjectCountChanged(count); + } +private: + int m_incubation_time; +}; + +} + +#endif // multiple inclusion guard diff --git a/src/kdeclarative/qmlobject.cpp b/src/kdeclarative/qmlobject.cpp new file mode 100644 index 0000000..4bf24ed --- /dev/null +++ b/src/kdeclarative/qmlobject.cpp @@ -0,0 +1,377 @@ +/* + * Copyright 2013 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qmlobject.h" +#include "private/qmlobject_p.h" +#include "private/kdeclarative_p.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +//#include "packageaccessmanagerfactory.h" +//#include "private/declarative/dataenginebindings_p.h" + +namespace KDeclarative { + +class QmlObjectIncubator : public QQmlIncubator +{ +public: + QVariantHash m_initialProperties; +protected: + void setInitialState(QObject *object) Q_DECL_OVERRIDE + { + QHashIterator i(m_initialProperties); + while (i.hasNext()) { + i.next(); + object->setProperty(i.key().toLatin1().data(), i.value()); + } + } +}; + +class QmlObjectPrivate +{ +public: + QmlObjectPrivate(QmlObject *parent) + : q(parent), + engine(nullptr), + component(nullptr), + delay(false) + { + executionEndTimer = new QTimer(q); + executionEndTimer->setInterval(0); + executionEndTimer->setSingleShot(true); + QObject::connect(executionEndTimer, SIGNAL(timeout()), q, SLOT(scheduleExecutionEnd())); + } + + ~QmlObjectPrivate() + { + delete incubator.object(); + } + + void errorPrint(QQmlComponent *component); + void execute(const QUrl &source); + void scheduleExecutionEnd(); + void minimumWidthChanged(); + void minimumHeightChanged(); + void maximumWidthChanged(); + void maximumHeightChanged(); + void preferredWidthChanged(); + void preferredHeightChanged(); + void checkInitializationCompleted(); + + QmlObject *q; + + QUrl source; + QQmlEngine *engine; + QmlObjectIncubator incubator; + QQmlComponent *component; + QTimer *executionEndTimer; + KDeclarative kdeclarative; + KPackage::Package package; + QQmlContext *rootContext; + bool delay : 1; +}; + +void QmlObjectPrivate::errorPrint(QQmlComponent *component) +{ + QString errorStr = QStringLiteral("Error loading QML file.\n"); + if (component->isError()) { + QList errors = component->errors(); + foreach (const QQmlError &error, errors) { + errorStr += (error.line() > 0 ? QString(QString::number(error.line()) + QLatin1String(": ")) : QLatin1String("")) + + error.description() + QLatin1Char('\n'); + } + } + qWarning() << component->url().toString() << '\n' << errorStr; +} + +void QmlObjectPrivate::execute(const QUrl &source) +{ + if (source.isEmpty()) { + qWarning() << "File name empty!"; + return; + } + + delete component; + component = new QQmlComponent(engine, q); + QObject::connect(component, &QQmlComponent::statusChanged, + q, &QmlObject::statusChanged, Qt::QueuedConnection); + delete incubator.object(); + + component->loadUrl(source); + + if (delay) { + executionEndTimer->start(0); + } else { + scheduleExecutionEnd(); + } +} + +void QmlObjectPrivate::scheduleExecutionEnd() +{ + if (component->isReady() || component->isError()) { + q->completeInitialization(); + } else { + QObject::connect(component, SIGNAL(statusChanged(QQmlComponent::Status)), q, SLOT(completeInitialization())); + } +} + +QmlObject::QmlObject(QObject *parent) + : QObject(parent), + d(new QmlObjectPrivate(this)) +{ + d->engine = new QQmlEngine(this); + d->rootContext = d->engine->rootContext(); + d->kdeclarative.setDeclarativeEngine(d->engine); + d->kdeclarative.d->qmlObj = this; + //binds things like kconfig and icons + d->kdeclarative.setupBindings(); + d->engine->setIncubationController(new QmlObjectIncubationController(this)); +} + +QmlObject::QmlObject(QQmlEngine *engine, QObject *parent) + : QObject(parent), + d(new QmlObjectPrivate(this)) +{ + if (engine) { + d->engine = engine; + } else { + d->engine = new QQmlEngine(this); + d->engine->setIncubationController(new QmlObjectIncubationController(this)); + } + d->rootContext = d->engine->rootContext(); + d->kdeclarative.setDeclarativeEngine(d->engine); + d->kdeclarative.d->qmlObj = this; + //binds things like kconfig and icons + d->kdeclarative.setupBindings(); +} + +QmlObject::QmlObject(QQmlEngine *engine, QQmlContext *rootContext, QObject *parent) + : QObject(parent), + d(new QmlObjectPrivate(this)) +{ + if (engine) { + d->engine = engine; + } else { + d->engine = new QQmlEngine(this); + d->engine->setIncubationController(new QmlObjectIncubationController(0)); + } + + if (rootContext) { + d->rootContext = rootContext; + } else { + d->rootContext = d->engine->rootContext(); + } + d->kdeclarative.setDeclarativeEngine(d->engine); + d->kdeclarative.d->qmlObj = this; + //binds things like kconfig and icons + d->kdeclarative.setupBindings(); +} + +QmlObject::~QmlObject() +{ +// QDeclarativeNetworkAccessManagerFactory *factory = d->engine->networkAccessManagerFactory(); +// d->engine->setNetworkAccessManagerFactory(0); +// delete factory; + delete d; +} + +void QmlObject::setTranslationDomain(const QString &translationDomain) +{ + d->kdeclarative.setTranslationDomain(translationDomain); +} + +QString QmlObject::translationDomain() const +{ + return d->kdeclarative.translationDomain(); +} + +void QmlObject::setSource(const QUrl &source) +{ + d->source = source; + d->execute(source); +} + +QUrl QmlObject::source() const +{ + return d->source; +} + +void QmlObject::loadPackage(const QString &packageName) +{ + d->package = KPackage::PackageLoader::self()->loadPackage(QStringLiteral("KPackage/GenericQML")); + d->package.setPath(packageName); + setSource(QUrl::fromLocalFile(d->package.filePath("mainscript"))); +} + +void QmlObject::setPackage(const KPackage::Package &package) +{ + d->package = package; + setSource(QUrl::fromLocalFile(package.filePath("mainscript"))); +} + +KPackage::Package QmlObject::package() const +{ + return d->package; +} + +void QmlObject::setInitializationDelayed(const bool delay) +{ + d->delay = delay; +} + +bool QmlObject::isInitializationDelayed() const +{ + return d->delay; +} + +QQmlEngine *QmlObject::engine() +{ + return d->engine; +} + +QObject *QmlObject::rootObject() const +{ + if (d->incubator.status() == QQmlIncubator::Loading) { + qWarning() << "Trying to use rootObject before initialization is completed, whilst using setInitializationDelayed. Forcing completion"; + d->incubator.forceCompletion(); + } + return d->incubator.object(); +} + +QQmlComponent *QmlObject::mainComponent() const +{ + return d->component; +} + +QQmlContext *QmlObject::rootContext() const +{ + return d->rootContext; +} + +QQmlComponent::Status QmlObject::status() const +{ + if (!d->engine) { + return QQmlComponent::Error; + } + + if (!d->component) { + return QQmlComponent::Null; + } + + return QQmlComponent::Status(d->component->status()); +} + +void QmlObjectPrivate::checkInitializationCompleted() +{ + if (!incubator.isReady() && incubator.status() != QQmlIncubator::Error) { + QTimer::singleShot(0, q, SLOT(checkInitializationCompleted())); + return; + } + + if (!incubator.object()) { + errorPrint(component); + } + + emit q->finished(); +} + +void QmlObject::completeInitialization(const QVariantHash &initialProperties) +{ + d->executionEndTimer->stop(); + if (d->incubator.object()) { + return; + } + + if (!d->component) { + qWarning() << "No component for" << source(); + return; + } + + + if (d->component->status() != QQmlComponent::Ready || d->component->isError()) { + d->errorPrint(d->component); + return; + } + + d->incubator.m_initialProperties = initialProperties; + d->component->create(d->incubator, d->rootContext); + + if (d->delay) { + d->checkInitializationCompleted(); + } else { + d->incubator.forceCompletion(); + + if (!d->incubator.object()) { + d->errorPrint(d->component); + } + emit finished(); + } +} + +QObject *QmlObject::createObjectFromSource(const QUrl &source, QQmlContext *context, const QVariantHash &initialProperties) +{ + QQmlComponent *component = new QQmlComponent(d->engine, this); + component->loadUrl(source); + + return createObjectFromComponent(component, context, initialProperties); +} + +QObject *QmlObject::createObjectFromComponent(QQmlComponent *component, QQmlContext *context, const QVariantHash &initialProperties) +{ + QmlObjectIncubator incubator; + incubator.m_initialProperties = initialProperties; + component->create(incubator, context ? context : d->rootContext); + incubator.forceCompletion(); + + QObject *object = incubator.object(); + + if (!component->isError() && object) { + //memory management + component->setParent(object); + //reparent to root object if wasn't specified otherwise by initialProperties + if (!initialProperties.contains(QStringLiteral("parent"))) { + if (qobject_cast(rootObject())) { + object->setProperty("parent", QVariant::fromValue(rootObject())); + } else { + object->setParent(rootObject()); + } + } + + return object; + + } else { + d->errorPrint(component); + delete object; + return nullptr; + } +} + +} + +#include "moc_qmlobject.cpp" diff --git a/src/kdeclarative/qmlobject.h b/src/kdeclarative/qmlobject.h new file mode 100644 index 0000000..0f10972 --- /dev/null +++ b/src/kdeclarative/qmlobject.h @@ -0,0 +1,250 @@ +/* + * Copyright 2013 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef QMLOBJECT_H +#define QMLOBJECT_H + +#include + +#include +#include +#include +#include +#include + +#include +#include + +class QQmlEngine; +class QQmlComponent; +class QQmlContext; + +namespace KDeclarative { + +class QmlObjectPrivate; + +/** + * @class KDeclarative::QmlObject qmlobject.h KDeclarative/QmlObject + * + * @author Marco Martin + * + * @short An object that instantiates an entire QML context, with its own declarative engine + * + * KDeclarative::QmlObject provides a class for conveniently use QML based + * declarative user interfaces inside Plasma widgets. + * To one QmlObject corresponds one QML file (that can eventually include others) + * tere will be its own QQmlEngine with a single root object, + * described in the QML file. + */ +class KDECLARATIVE_EXPORT QmlObject : public QObject +{ + Q_OBJECT + + Q_PROPERTY(QUrl source READ source WRITE setSource) + Q_PROPERTY(QString translationDomain READ translationDomain WRITE setTranslationDomain) + Q_PROPERTY(bool initializationDelayed READ isInitializationDelayed WRITE setInitializationDelayed) + Q_PROPERTY(QObject *rootObject READ rootObject) + Q_PROPERTY(QQmlComponent::Status status READ status NOTIFY statusChanged) + +public: + + /** + * Constructs a new QmlObject + * + * @param parent the parent of this object + */ + explicit QmlObject(QObject *parent = nullptr); + + /** + * Constructs a new QmlObject + * + * @param engine a QQmlEngine we want to use + * @param parent the parent of this object + */ + explicit QmlObject(QQmlEngine *engine, QObject *parent = nullptr); + + /** + * Constructs a new QmlObject + * + * @param engine a QQmlEngine we want to use + * @param rootContext the root context we want to use for objects creation + * @param parent the parent of this object + */ + explicit QmlObject(QQmlEngine *engine, QQmlContext *rootContext, QObject *parent = nullptr); + ~QmlObject(); + + /** + * Call this method before calling setupBindings to install a translation domain for all + * i18n global functions. If a translation domain is set all i18n calls delegate to the + * matching i18nd calls with the provided translation domain. + * + * The translationDomain affects all i18n calls including those from imports. Because of + * that modules intended to be used as imports should prefer the i18nd variants and set + * the translation domain explicitly in each call. + * + * This method is only required if your declarative usage is inside a library. If it's + * in an application there is no need to set the translation domain as the application's + * domain can be used. + * + * @param translationDomain The translation domain to be used for i18n calls. + * @since 5.0 + */ + void setTranslationDomain(const QString &translationDomain); + + /** + * @return the translation domain for the i18n calls done in this QML engine + * @since 5.0 + */ + QString translationDomain() const; + + /** + * Sets the path of the QML file to parse and execute + * + * @param path the absolute path of a QML file + */ + void setSource(const QUrl &source); + + /** + * @return the absolute path of the current QML file + */ + QUrl source() const; + + /** + * Load the package called packageName, then loads the + * mainscript file for that package + * + * @param packageName the plugin name of the package + */ + void loadPackage(const QString &packageName); + + /** + * Sets a package, then loads the + * mainscript file for that package + * + * @param package the package we want to use to provide QML + * files to this QML object + */ + void setPackage(const KPackage::Package &package); + + /** + * @return the optional package, if any + */ + KPackage::Package package() const; + + /** + * Sets whether the execution of the QML file has to be delayed later in the event loop. It has to be called before setQmlPath(). + * In this case will be possible to assign new objects in the main engine context + * before the main component gets initialized. + * So it will be possible to access it immediately from the QML code. + * The initialization will either be completed automatically asyncronously + * or explicitly by calling completeInitialization() + * + * @param delay if true the initialization of the QML file will be delayed + * at the end of the event loop + */ + void setInitializationDelayed(const bool delay); + + /** + * @return true if the initialization of the QML file will be delayed + * at the end of the event loop + */ + bool isInitializationDelayed() const; + + /** + * @return the declarative engine that runs the qml file assigned to this widget. + */ + QQmlEngine *engine(); + + /** + * @return the root object of the declarative object tree + */ + QObject *rootObject() const; + + /** + * @return the main QQmlComponent of the engine + */ + QQmlComponent *mainComponent() const; + + /** + * The components's creation context. + * @since 5.11 + */ + QQmlContext *rootContext() const; + + /** + * The component's current status. + * @since 5.11 + */ + QQmlComponent::Status status() const; + + /** + * Creates and returns an object based on the provided url to a Qml file + * with the same QQmlEngine and the same root context as the amin object, + * that will be the parent of the newly created object + * @param source url where the QML file is located + * @param context The QQmlContext in which we will create the object, + * if 0 it will use the engine's root context + * @param initialProperties optional properties that will be set on + * the object when created (and before Component.onCompleted + * gets emitted + */ + QObject *createObjectFromSource(const QUrl &source, QQmlContext *context = nullptr, const QVariantHash &initialProperties = QVariantHash()); + + /** + * Creates and returns an object based on the provided QQmlComponent + * with the same QQmlEngine and the same root context as the amin object, + * that will be the parent of the newly created object + * @param component the component we want to instantiate + * @param context The QQmlContext in which we will create the object, + * if 0 it will use the engine's root context + * @param initialProperties optional properties that will be set on + * the object when created (and before Component.onCompleted + * gets emitted + */ + QObject *createObjectFromComponent(QQmlComponent *component, QQmlContext *context = nullptr, const QVariantHash &initialProperties = QVariantHash()); + +public Q_SLOTS: + /** + * Finishes the process of initialization. + * If isInitializationDelayed() is false, calling this will have no effect. + * @param initialProperties optional properties that will be set on + * the object when created (and before Component.onCompleted + * gets emitted + */ + void completeInitialization(const QVariantHash &initialProperties = QVariantHash()); + +Q_SIGNALS: + /** + * Emitted when the parsing and execution of the QML file is terminated + */ + void finished(); + + void statusChanged(QQmlComponent::Status); + +private: + friend class QmlObjectPrivate; + QmlObjectPrivate *const d; + + Q_PRIVATE_SLOT(d, void scheduleExecutionEnd()) + Q_PRIVATE_SLOT(d, void checkInitializationCompleted()) +}; + +} + +#endif // multiple inclusion guard diff --git a/src/kdeclarative/qmlobjectsharedengine.cpp b/src/kdeclarative/qmlobjectsharedengine.cpp new file mode 100644 index 0000000..0c8a184 --- /dev/null +++ b/src/kdeclarative/qmlobjectsharedengine.cpp @@ -0,0 +1,84 @@ +/* + * Copyright 2015 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qmlobjectsharedengine.h" +#include "private/qmlobject_p.h" + +#include +#include +#include +#include + +#include +#include + +namespace KDeclarative { + +class QmlObjectSharedEnginePrivate +{ +public: + QmlObjectSharedEnginePrivate() + { + //ensure the engine is present, then ref it + engine(); + engineRef = s_engine; + } + + ~QmlObjectSharedEnginePrivate() + { + //when the only remaining are out two refs, reset the pointers, causing deletion + //when the refcount is 2, we are sure that the only refs are s_engine and our copy + //of engineRef + if (engineRef.use_count() == 2) { + s_engine.reset(); + } + } + + static QQmlEngine *engine() + { + if (!s_engine) { + s_engine = std::make_shared(); + s_engine->setIncubationController(new QmlObjectIncubationController(0)); + } + return s_engine.get(); + } + + //used to delete it + std::shared_ptr engineRef; + + static std::shared_ptr s_engine; +}; + +std::shared_ptr QmlObjectSharedEnginePrivate::s_engine = std::shared_ptr(); + +QmlObjectSharedEngine::QmlObjectSharedEngine(QObject *parent) + : QmlObject(QmlObjectSharedEnginePrivate::engine(), new QQmlContext(QmlObjectSharedEnginePrivate::engine()), parent), + d(new QmlObjectSharedEnginePrivate()) +{ +} + +QmlObjectSharedEngine::~QmlObjectSharedEngine() +{ + rootContext()->deleteLater(); +} + + +} + +#include "moc_qmlobjectsharedengine.cpp" diff --git a/src/kdeclarative/qmlobjectsharedengine.h b/src/kdeclarative/qmlobjectsharedengine.h new file mode 100644 index 0000000..8ec3884 --- /dev/null +++ b/src/kdeclarative/qmlobjectsharedengine.h @@ -0,0 +1,63 @@ +/* + * Copyright 2015 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef QMLOBJECTSHAREDENGINE_H +#define QMLOBJECTSHAREDENGINE_H + +#include +#include +#include + +namespace KDeclarative { + +class QmlObjectSharedEnginePrivate; + +/** + * @class KDeclarative::QmlObjectSharedEngine qmlobjectsharedengine.h KDeclarative/QmlObjectSharedEngine + * + * @author Marco Martin + * + * @short An object that instantiates an entire QML context, with its own declarative engine + * + * KDeclarative::QmlObjectSharedEngine is a version of QmlObject that ensures only one + * QQmlEngine instance exists for the whole application. Objects created by different + * instances of QmlObjectSharedEngine will be insulated by having different creation + * contexts, accessible by QmlObject::rootContext() + */ +class KDECLARATIVE_EXPORT QmlObjectSharedEngine : public QmlObject +{ + Q_OBJECT + +public: + /** + * Constructs a new QmlObjectSharedEngine + * + * @param parent the parent of this object + */ + explicit QmlObjectSharedEngine(QObject *parent = nullptr); + ~QmlObjectSharedEngine(); + +private: + friend class QmlObjectSharedEnginePrivate; + const std::unique_ptr d; +}; + +} + +#endif // multiple inclusion guard diff --git a/src/kpackagelauncherqml/CMakeLists.txt b/src/kpackagelauncherqml/CMakeLists.txt new file mode 100644 index 0000000..7744b77 --- /dev/null +++ b/src/kpackagelauncherqml/CMakeLists.txt @@ -0,0 +1,21 @@ + + +set(kpackagelauncherqml_SRCS + main.cpp +) + +add_executable(kpackagelauncherqml ${kpackagelauncherqml_SRCS}) + +#find_package(ActiveApp REQUIRED) + +target_link_libraries(kpackagelauncherqml + Qt5::Gui + Qt5::Quick + Qt5::Widgets #needs a qapplication for the Desktop QtControlsStyle + KF5::Declarative + KF5::I18n + KF5::Package + KF5::QuickAddons +) + +install(TARGETS kpackagelauncherqml ${INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/src/kpackagelauncherqml/main.cpp b/src/kpackagelauncherqml/main.cpp new file mode 100644 index 0000000..03e6987 --- /dev/null +++ b/src/kpackagelauncherqml/main.cpp @@ -0,0 +1,135 @@ +/* + * Copyright 2015 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + QCommandLineParser parser; + QApplication app(argc, argv); + + const QString description = i18n("KPackage QML application shell"); + + app.setApplicationVersion(QStringLiteral("0.1")); + parser.addVersionOption(); + parser.addHelpOption(); + parser.setApplicationDescription(description); + + QCommandLineOption appPluginOption(QCommandLineOption(QStringList() << QStringLiteral("a") << QStringLiteral("app"), i18n("The unique name of the application (mandatory)"), QStringLiteral("app"))); + + parser.addOption(appPluginOption); + + parser.process(app); + + QString packagePath; + if (parser.isSet(appPluginOption)) { + packagePath = parser.value(appPluginOption); + } else { + parser.showHelp(1); + } + + //usually we have an ApplicationWindow here, so we do not need to create a window by ourselves + KDeclarative::QmlObject obj; + obj.setTranslationDomain(packagePath); + obj.setInitializationDelayed(true); + obj.loadPackage(packagePath); + if (!obj.package().isValid()) { + qWarning() << "The specified Application package is not valid."; + return 1; + } + obj.engine()->rootContext()->setContextProperty(QStringLiteral("commandlineArguments"), parser.positionalArguments()); + QVariantMap paths; + paths[QStringLiteral("desktop")] = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); + paths[QStringLiteral("documents")] = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); + paths[QStringLiteral("music")] = QStandardPaths::writableLocation(QStandardPaths::MusicLocation); + paths[QStringLiteral("movies")] = QStandardPaths::writableLocation(QStandardPaths::MoviesLocation); + paths[QStringLiteral("pictures")] = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); + paths[QStringLiteral("home")] = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); + obj.engine()->rootContext()->setContextProperty(QStringLiteral("userPaths"), paths); + obj.completeInitialization(); + + if (!obj.package().metadata().isValid()) { + return -1; + } + + KPluginMetaData data = obj.package().metadata(); + // About data + KAboutData aboutData(data.pluginId(), data.name(), data.version(), data.description(), KAboutLicense::byKeyword(data.license()).key()); + + for (auto author : data.authors()) { + aboutData.addAuthor(author.name(), author.task(), author.emailAddress(), author.webAddress(), author.ocsUsername()); + } + // We assume that desktop file in applicaitons dir is named similar as + // the pluginId, this is required to get icons working on wayland for example + aboutData.setDesktopFileName(data.pluginId()); + + KAboutData::setApplicationData(aboutData); + + //The root is not a window? + //have to use a normal QQuickWindow since the root item is already created + QQuickItem *item = qobject_cast(obj.rootObject()); + QWindow *window = qobject_cast(obj.rootObject()); + if (item) { + QQuickWindow view; + item->setParentItem(view.contentItem()); + if (item->implicitWidth() > 0 && item->implicitHeight() > 0) { + view.resize(item->implicitWidth(), item->implicitHeight()); + } else { + view.resize(item->width(), item->height()); + } + + //set anchors + QQmlExpression expr(obj.engine()->rootContext(), obj.rootObject(), QStringLiteral("parent")); + QQmlProperty prop(obj.rootObject(), QStringLiteral("anchors.fill")); + prop.write(expr.evaluate()); + view.setTitle(obj.package().metadata().name()); + view.setIcon(QIcon::fromTheme(obj.package().metadata().iconName())); + + // Forward Qt.quit() in QML code to QApplication::quit() + QObject::connect(obj.engine(), &QQmlEngine::quit, &app, &QCoreApplication::quit); + + view.show(); + return app.exec(); + } else if (window) { + window->setTitle(obj.package().metadata().name()); + window->setIcon(QIcon::fromTheme(obj.package().metadata().iconName())); + } else { + qWarning() << "The root Qml Item should be either a kind of window or a QQuickItem"; + return 1; + } + + return app.exec(); +} + diff --git a/src/qmlcontrols/CMakeLists.txt b/src/qmlcontrols/CMakeLists.txt new file mode 100644 index 0000000..190110e --- /dev/null +++ b/src/qmlcontrols/CMakeLists.txt @@ -0,0 +1,25 @@ + +add_subdirectory(draganddrop) +add_subdirectory(kquickcontrolsaddons) +add_subdirectory(kcmcontrols) + +if(KF5I18n_FOUND AND KF5Config_FOUND AND KF5WidgetsAddons_FOUND AND KF5WindowSystem_FOUND AND KF5GlobalAccel_FOUND AND KF5KIO_FOUND AND KF5GuiAddons_FOUND) + add_subdirectory(kquickcontrols) +endif() + +if(KF5CoreAddons_FOUND) + add_subdirectory(kcoreaddons) +endif() + + +if(KF5KIO_FOUND) + add_subdirectory(kioplugin) +endif() + +if (KF5WindowSystem_FOUND) + add_subdirectory(kwindowsystemplugin) +endif() + +if (KF5Config_FOUND) + add_subdirectory(kconfig) +endif() diff --git a/src/qmlcontrols/draganddrop/CMakeLists.txt b/src/qmlcontrols/draganddrop/CMakeLists.txt new file mode 100644 index 0000000..e8127e4 --- /dev/null +++ b/src/qmlcontrols/draganddrop/CMakeLists.txt @@ -0,0 +1,22 @@ +project(draganddrop) + +set(declarativedragdrop_SRCS + draganddropplugin.cpp + DeclarativeDragArea.cpp + DeclarativeDragDropEvent.cpp + DeclarativeDropArea.cpp + DeclarativeMimeData.cpp + MimeDataWrapper.cpp +) + +add_library(draganddropplugin SHARED ${declarativedragdrop_SRCS}) +target_link_libraries(draganddropplugin + Qt5::Core + Qt5::Quick + Qt5::Qml + Qt5::Gui +) + +install(TARGETS draganddropplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/draganddrop) + +install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/draganddrop) diff --git a/src/qmlcontrols/draganddrop/DeclarativeDragArea.cpp b/src/qmlcontrols/draganddrop/DeclarativeDragArea.cpp new file mode 100644 index 0000000..619452f --- /dev/null +++ b/src/qmlcontrols/draganddrop/DeclarativeDragArea.cpp @@ -0,0 +1,387 @@ +/* + Copyright (C) 2010 by BetterInbox + Original author: Gregory Schlomoff + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "DeclarativeDragArea.h" +#include "DeclarativeMimeData.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +/*! + A DragArea is used to make an item draggable. +*/ + +DeclarativeDragArea::DeclarativeDragArea(QQuickItem *parent) + : QQuickItem(parent), + m_delegate(nullptr), + m_source(parent), + m_target(nullptr), + m_enabled(true), + m_draggingJustStarted(false), + m_dragActive(false), + m_supportedActions(Qt::MoveAction), + m_defaultAction(Qt::MoveAction), + m_data(new DeclarativeMimeData()), // m_data is owned by us, and we shouldn't pass it to Qt directly as it will automatically delete it after the drag and drop. + m_pressAndHoldTimerId(0) +{ + m_startDragDistance = QGuiApplication::styleHints()->startDragDistance(); + setAcceptedMouseButtons(Qt::LeftButton); +// setFiltersChildEvents(true); + setFlag(ItemAcceptsDrops, m_enabled); + setFiltersChildMouseEvents(true); +} + +DeclarativeDragArea::~DeclarativeDragArea() +{ + if (m_data) { + delete m_data; + } +} + +/*! + The delegate is the item that will be displayed next to the mouse cursor during the drag and drop operation. + It usually consists of a large, semi-transparent icon representing the data being dragged. +*/ +QQuickItem* DeclarativeDragArea::delegate() const +{ + return m_delegate; +} + +void DeclarativeDragArea::setDelegate(QQuickItem *delegate) +{ + if (m_delegate != delegate) { + //qDebug() << " ______________________________________________ " << delegate; + m_delegate = delegate; + emit delegateChanged(); + } +} +void DeclarativeDragArea::resetDelegate() +{ + setDelegate(nullptr); +} + +/*! + The QML element that is the source of this drag and drop operation. This can be defined to any item, and will + be available to the DropArea as event.data.source +*/ +QQuickItem* DeclarativeDragArea::source() const +{ + return m_source; +} + +void DeclarativeDragArea::setSource(QQuickItem* source) +{ + if (m_source != source) { + m_source = source; + emit sourceChanged(); + } +} + +void DeclarativeDragArea::resetSource() +{ + setSource(nullptr); +} + +bool DeclarativeDragArea::dragActive() const +{ + return m_dragActive; +} + +// target +QQuickItem* DeclarativeDragArea::target() const +{ + //TODO: implement me + return nullptr; +} + +// data +DeclarativeMimeData* DeclarativeDragArea::mimeData() const +{ + return m_data; +} + +// startDragDistance +int DeclarativeDragArea::startDragDistance() const +{ + return m_startDragDistance; +} + +void DeclarativeDragArea::setStartDragDistance(int distance) +{ + if (distance == m_startDragDistance) { + return; + } + + m_startDragDistance = distance; + emit startDragDistanceChanged(); +} + +// delegateImage +QVariant DeclarativeDragArea::delegateImage() const +{ + return m_delegateImage; +} + +void DeclarativeDragArea::setDelegateImage(const QVariant &image) +{ + if (image.canConvert() && image.value() == m_delegateImage) { + return; + } + + if (image.canConvert()) { + m_delegateImage = image.value(); + } else if (image.canConvert()) { + m_delegateImage = QIcon::fromTheme(image.value()).pixmap(QSize(48, 48)).toImage(); + } else { + m_delegateImage = image.value().pixmap(QSize(48, 48)).toImage(); + } + + emit delegateImageChanged(); +} + +// enabled +bool DeclarativeDragArea::isEnabled() const +{ + return m_enabled; +} +void DeclarativeDragArea::setEnabled(bool enabled) +{ + if (enabled != m_enabled) { + m_enabled = enabled; + emit enabledChanged(); + } +} + +// supported actions +Qt::DropActions DeclarativeDragArea::supportedActions() const +{ + return m_supportedActions; +} +void DeclarativeDragArea::setSupportedActions(Qt::DropActions actions) +{ + if (actions != m_supportedActions) { + m_supportedActions = actions; + emit supportedActionsChanged(); + } +} + +// default action +Qt::DropAction DeclarativeDragArea::defaultAction() const +{ + return m_defaultAction; +} +void DeclarativeDragArea::setDefaultAction(Qt::DropAction action) +{ + if (action != m_defaultAction) { + m_defaultAction = action; + emit defaultActionChanged(); + } +} + +void DeclarativeDragArea::mousePressEvent(QMouseEvent* event) +{ + m_pressAndHoldTimerId = startTimer(QGuiApplication::styleHints()->mousePressAndHoldInterval()); + m_buttonDownPos = event->screenPos(); + m_draggingJustStarted = true; + setKeepMouseGrab(true); +} + +void DeclarativeDragArea::mouseReleaseEvent(QMouseEvent* event) +{ + Q_UNUSED(event); + killTimer(m_pressAndHoldTimerId); + m_pressAndHoldTimerId = 0; + m_draggingJustStarted = false; + setKeepMouseGrab(false); + ungrabMouse(); +} + +void DeclarativeDragArea::timerEvent(QTimerEvent *event) +{ + if (event->timerId() == m_pressAndHoldTimerId && m_draggingJustStarted && m_enabled) { + // Grab delegate before starting drag + if (m_delegate) { + // Another grab is already in progress + if (m_grabResult) { + return; + } + m_grabResult = m_delegate->grabToImage(); + if (m_grabResult) { + connect(m_grabResult.data(), &QQuickItemGrabResult::ready, this, [this]() { + startDrag(m_grabResult->image()); + m_grabResult.reset(); + }); + return; + } + } + + // No delegate or grab failed, start drag immediately + startDrag(m_delegateImage); + } +} + +void DeclarativeDragArea::mouseMoveEvent(QMouseEvent *event) +{ + if ( !m_enabled + || QLineF(event->screenPos(), m_buttonDownPos).length() + < m_startDragDistance) { + return; + } + + //don't start drags on move for touch events, they'll be handled only by press and hold + //reset timer if moved more than m_startDragDistance + if (event->source() == Qt::MouseEventSynthesizedByQt) { + killTimer(m_pressAndHoldTimerId); + m_pressAndHoldTimerId = 0; + return; + } + + if (m_draggingJustStarted) { + // Grab delegate before starting drag + if (m_delegate) { + // Another grab is already in progress + if (m_grabResult) { + return; + } + m_grabResult = m_delegate->grabToImage(); + if (m_grabResult) { + connect(m_grabResult.data(), &QQuickItemGrabResult::ready, this, [this]() { + startDrag(m_grabResult->image()); + m_grabResult.reset(); + }); + return; + } + } + + // No delegate or grab failed, start drag immediately + startDrag(m_delegateImage); + } +} + +bool DeclarativeDragArea::childMouseEventFilter(QQuickItem *item, QEvent *event) +{ + if (!isEnabled()) { + return false; + } + + switch (event->type()) { + case QEvent::MouseButtonPress: { + QMouseEvent *me = static_cast(event); + //qDebug() << "press in dragarea"; + mousePressEvent(me); + break; + } + case QEvent::MouseMove: { + QMouseEvent *me = static_cast(event); + //qDebug() << "move in dragarea"; + mouseMoveEvent(me); + break; + } + case QEvent::MouseButtonRelease: { + QMouseEvent *me = static_cast(event); + //qDebug() << "release in dragarea"; + mouseReleaseEvent(me); + break; + } + default: + break; + } + + return QQuickItem::childMouseEventFilter(item, event); +} + +void DeclarativeDragArea::startDrag(const QImage &image) +{ + grabMouse(); + m_draggingJustStarted = false; + + QDrag *drag = new QDrag(parent()); + DeclarativeMimeData *dataCopy = new DeclarativeMimeData(m_data); //Qt will take ownership of this copy and delete it. + drag->setMimeData(dataCopy); + + const qreal devicePixelRatio = window() ? window()->devicePixelRatio() : 1; + const int imageSize = 48 * devicePixelRatio; + + if (!image.isNull()) { + drag->setPixmap(QPixmap::fromImage(image)); + } else if (mimeData()->hasImage()) { + const QImage im = qvariant_cast(mimeData()->imageData()); + drag->setPixmap(QPixmap::fromImage(im)); + } else if (mimeData()->hasColor()) { + QPixmap px(imageSize, imageSize); + px.fill(mimeData()->color()); + drag->setPixmap(px); + } else { + // Icons otherwise + QStringList icons; + if (mimeData()->hasText()) { + icons << QStringLiteral("text-plain"); + } + if (mimeData()->hasHtml()) { + icons << QStringLiteral("text-html"); + } + if (mimeData()->hasUrls()) { + for (int i = 0; i < std::min(4, mimeData()->urls().size()); ++i) { + icons << QStringLiteral("text-html"); + } + } + if (!icons.isEmpty()) { + QPixmap pm(imageSize * icons.count(), imageSize); + pm.fill(Qt::transparent); + QPainter p(&pm); + int i = 0; + foreach (const QString &ic, icons) { + p.drawPixmap(QPoint(i * imageSize, 0), QIcon::fromTheme(ic).pixmap(imageSize)); + i++; + } + p.end(); + drag->setPixmap(pm); + } + } + + //drag->setHotSpot(QPoint(drag->pixmap().width()/2, drag->pixmap().height()/2)); // TODO: Make a property for that + //setCursor(Qt::OpenHandCursor); //TODO? Make a property for the cursor + + m_dragActive = true; + emit dragActiveChanged(); + emit dragStarted(); + + Qt::DropAction action = drag->exec(m_supportedActions, m_defaultAction); + setKeepMouseGrab(false); + + m_dragActive = false; + emit dragActiveChanged(); + emit drop(action); + + ungrabMouse(); +} diff --git a/src/qmlcontrols/draganddrop/DeclarativeDragArea.h b/src/qmlcontrols/draganddrop/DeclarativeDragArea.h new file mode 100644 index 0000000..adac91d --- /dev/null +++ b/src/qmlcontrols/draganddrop/DeclarativeDragArea.h @@ -0,0 +1,171 @@ +/* + Copyright (C) 2010 by BetterInbox + Original author: Gregory Schlomoff + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef DECLARATIVEDRAGAREA_H +#define DECLARATIVEDRAGAREA_H + +#include +#include +#include + +class QQmlComponent; +class DeclarativeMimeData; +class QQuickItemGrabResult; + +class DeclarativeDragArea : public QQuickItem +{ + Q_OBJECT + + /** + * The delegate is the item that will be displayed next to the mouse cursor during the drag and drop operation. + * It usually consists of a large, semi-transparent icon representing the data being dragged. + */ + Q_PROPERTY(QQuickItem* delegate READ delegate WRITE setDelegate NOTIFY delegateChanged RESET resetDelegate) + + /** + * The QML element that is the source of the resulting drag and drop operation. This can be defined to any item, and will + * be available to the DropArea as event.data.source + */ + Q_PROPERTY(QQuickItem* source READ source WRITE setSource NOTIFY sourceChanged RESET resetSource) + + //TODO: to be implemented + Q_PROPERTY(QQuickItem* target READ source NOTIFY targetChanged) + + /** + * the mime data of the drag operation + * @see DeclarativeMimeData + */ + Q_PROPERTY(DeclarativeMimeData* mimeData READ mimeData CONSTANT) + + /** + * If false no drag operation will be generate + */ + Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged) //TODO: Should call setAcceptDrops() + + /** + * Supported operations, a combination of + * Qt.CopyAction + * Qt.MoveAction + * Qt.LinkAction + * Qt.ActionMask + * Qt.IgnoreAction + * Qt.TargetMoveAction + */ + Q_PROPERTY(Qt::DropActions supportedActions READ supportedActions WRITE setSupportedActions NOTIFY supportedActionsChanged) + + /** + * The default action will be performed during a drag when no modificators are pressed. + */ + Q_PROPERTY(Qt::DropAction defaultAction READ defaultAction WRITE setDefaultAction NOTIFY defaultActionChanged) + + /** + * distance in pixel after which a drag event will get started + */ + Q_PROPERTY(int startDragDistance READ startDragDistance WRITE setStartDragDistance NOTIFY startDragDistanceChanged) + + /** + * an image to be used as delegate. if present overrides the delegate property. in can be either a QImage or a QIcon + */ + Q_PROPERTY(QVariant delegateImage READ delegateImage WRITE setDelegateImage NOTIFY delegateImageChanged) + + /** + * Whether a drag currently originates from this drag area. + * + * @since 5.19 + */ + Q_PROPERTY(bool dragActive READ dragActive NOTIFY dragActiveChanged) + +public: + DeclarativeDragArea(QQuickItem *parent=nullptr); + ~DeclarativeDragArea(); + + QQuickItem *delegate() const; + void setDelegate(QQuickItem* delegate); + void resetDelegate(); + + QVariant delegateImage() const; + void setDelegateImage(const QVariant &image); + QQuickItem* target() const; + QQuickItem* source() const; + void setSource(QQuickItem* source); + void resetSource(); + + bool dragActive() const; + + bool isEnabled() const; + void setEnabled(bool enabled); + + int startDragDistance() const; + void setStartDragDistance(int distance); + + //supported actions + Qt::DropActions supportedActions() const; + void setSupportedActions(Qt::DropActions actions); + + //default action + Qt::DropAction defaultAction() const; + void setDefaultAction(Qt::DropAction action); + + DeclarativeMimeData* mimeData() const; + +Q_SIGNALS: + void dragStarted(); + void delegateChanged(); + void dragActiveChanged(); + void sourceChanged(); + void targetChanged(); + void dataChanged(); + void enabledChanged(); + void drop(int action); + void supportedActionsChanged(); + void defaultActionChanged(); + void startDragDistanceChanged(); + void delegateImageChanged(); + +protected: + void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE; + void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE; + bool childMouseEventFilter(QQuickItem *item, QEvent *event) Q_DECL_OVERRIDE; + +private: + void startDrag(const QImage &image); + + QQuickItem* m_delegate; + QQuickItem* m_source; + QQuickItem* m_target; + QSharedPointer m_grabResult; + bool m_enabled; + bool m_draggingJustStarted; + bool m_dragActive; + Qt::DropActions m_supportedActions; + Qt::DropAction m_defaultAction; + DeclarativeMimeData* const m_data; + QImage m_delegateImage; + int m_startDragDistance; + QPointF m_buttonDownPos; + int m_pressAndHoldTimerId; +}; + +#endif // DECLARATIVEDRAGAREA_H diff --git a/src/qmlcontrols/draganddrop/DeclarativeDragDropEvent.cpp b/src/qmlcontrols/draganddrop/DeclarativeDragDropEvent.cpp new file mode 100644 index 0000000..a75f85f --- /dev/null +++ b/src/qmlcontrols/draganddrop/DeclarativeDragDropEvent.cpp @@ -0,0 +1,71 @@ +/* + Copyright (C) 2010 by BetterInbox + Copyright 2013 by Sebastian Kügler + Original author: Gregory Schlomoff + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "DeclarativeDragDropEvent.h" +#include "DeclarativeMimeData.h" + +DeclarativeDragDropEvent::DeclarativeDragDropEvent(QDropEvent* e, DeclarativeDropArea* parent) : + QObject(parent), + m_x(e->pos().x()), + m_y(e->pos().y()), + m_buttons(e->mouseButtons()), + m_modifiers(e->keyboardModifiers()), + m_data(nullptr), + m_event(e) +{ +} + +DeclarativeDragDropEvent::DeclarativeDragDropEvent(QDragLeaveEvent* e, DeclarativeDropArea* parent) : + QObject(parent), + m_x(0), + m_y(0), + m_buttons(Qt::NoButton), + m_modifiers(Qt::NoModifier), + m_data(nullptr), + m_event(nullptr) +{ + Q_UNUSED(e); +} + +void DeclarativeDragDropEvent::accept(int action) +{ + m_event->setDropAction( (Qt::DropAction) action ); +// qDebug() << "-----> Accepting event: " << this << m_data.urls() << m_data.text() << m_data.html() << ( m_data.hasColor() ? m_data.color().name() : " no color"); + m_event->accept(); +} + +void DeclarativeDragDropEvent::ignore() +{ + m_event->ignore(); +} + +DeclarativeMimeData* DeclarativeDragDropEvent::mimeData() +{ + if (!m_data && m_event) { +// TODO This should be using MimeDataWrapper eventually, although this is an API break, +// so will need to be done carefully. + m_data.reset(new DeclarativeMimeData(m_event->mimeData())); + } + return m_data.data(); +} diff --git a/src/qmlcontrols/draganddrop/DeclarativeDragDropEvent.h b/src/qmlcontrols/draganddrop/DeclarativeDragDropEvent.h new file mode 100644 index 0000000..b35568a --- /dev/null +++ b/src/qmlcontrols/draganddrop/DeclarativeDragDropEvent.h @@ -0,0 +1,121 @@ +/* + Copyright (C) 2010 by BetterInbox + Original author: Gregory Schlomoff + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef DECLARATIVEDRAGDROPEVENT_H +#define DECLARATIVEDRAGDROPEVENT_H + +#include +#include "DeclarativeDropArea.h" +#include "DeclarativeMimeData.h" + +class DeclarativeDragDropEvent : public QObject +{ + Q_OBJECT + + /** + * The mouse X position of the event relative to the DropArea that is receiving the event. + */ + Q_PROPERTY(int x READ x) + + /** + * The mouse Y position of the event relative to the DropArea that is receiving the event. + */ + Q_PROPERTY(int y READ y) + + /** + * The pressed mouse buttons. + * A combination of: + * Qt.NoButton The button state does not refer to any button (see QMouseEvent::button()). + * Qt.LeftButton The left button is pressed, or an event refers to the left button. (The left button may be the right button on left-handed mice.) + * Qt.RightButton The right button. + * Qt.MidButton The middle button. + * Qt.MiddleButton MidButton The middle button. + * Qt.XButton1 The first X button. + * Qt.XButton2 The second X button. + */ + Q_PROPERTY(int buttons READ buttons) + + /** + * Pressed keyboard modifiers, a combination of: + * Qt.NoModifier No modifier key is pressed. + * Qt.ShiftModifier A Shift key on the keyboard is pressed. + * Qt.ControlModifier A Ctrl key on the keyboard is pressed. + * Qt.AltModifier An Alt key on the keyboard is pressed. + * Qt.MetaModifier A Meta key on the keyboard is pressed. + * Qt.KeypadModifier A keypad button is pressed. + * Qt.GroupSwitchModifier X11 only. A Mode_switch key on the keyboard is pressed. + */ + Q_PROPERTY(int modifiers READ modifiers) + + /** + * The mime data of this operation + * @see DeclarativeMimeData + */ + Q_PROPERTY(DeclarativeMimeData* mimeData READ mimeData) + + /** + * The possible different kind of action that can be done in the drop, is a combination of: + * Qt.CopyAction 0x1 Copy the data to the target. + * Qt.MoveAction 0x2 Move the data from the source to the target. + * Qt.LinkAction 0x4 Create a link from the source to the target. + * Qt.ActionMask 0xff + * Qt.IgnoreAction 0x0 Ignore the action (do nothing with the data). + * Qt.TargetMoveAction 0x8002 On Windows, this value is used when the ownership of the D&D data should be taken over by the target application, i.e., the source application should not delete the data. + * On X11 this value is used to do a move. + * TargetMoveAction is not used on the Mac. + */ + Q_PROPERTY(Qt::DropActions possibleActions READ possibleActions) + + /** + * Default action + * @see possibleActions + */ + Q_PROPERTY(Qt::DropAction proposedAction READ proposedAction) + +public: + + DeclarativeDragDropEvent(QDropEvent* e, DeclarativeDropArea* parent = nullptr); + DeclarativeDragDropEvent(QDragLeaveEvent* e, DeclarativeDropArea* parent = nullptr); + + int x() const { return m_x; } + int y() const { return m_y; } + int buttons() const { return m_buttons; } + int modifiers() const { return m_modifiers; } + DeclarativeMimeData* mimeData(); + Qt::DropAction proposedAction() const { return m_event->proposedAction(); } + Qt::DropActions possibleActions() const { return m_event->possibleActions(); } + +public Q_SLOTS: + void accept(int action); + void ignore(); + +private: + int m_x; + int m_y; + Qt::MouseButtons m_buttons; + Qt::KeyboardModifiers m_modifiers; + QScopedPointer m_data; + QDropEvent* m_event; +}; + +#endif // DECLARATIVEDRAGDROPEVENT_H diff --git a/src/qmlcontrols/draganddrop/DeclarativeDropArea.cpp b/src/qmlcontrols/draganddrop/DeclarativeDropArea.cpp new file mode 100644 index 0000000..540d112 --- /dev/null +++ b/src/qmlcontrols/draganddrop/DeclarativeDropArea.cpp @@ -0,0 +1,167 @@ +/* + Copyright (C) 2010 by BetterInbox + Original author: Gregory Schlomoff + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "DeclarativeDropArea.h" +#include "DeclarativeDragDropEvent.h" + +#include + +DeclarativeDropArea::DeclarativeDropArea(QQuickItem *parent) + : QQuickItem(parent), + m_enabled(true), + m_preventStealing(false), + m_temporaryInhibition(false), + m_containsDrag(false) +{ + setFlag(ItemAcceptsDrops, m_enabled); +} + +void DeclarativeDropArea::temporaryInhibitParent(bool inhibit) +{ + QQuickItem *candidate = parentItem(); + + while (candidate) { + if (DeclarativeDropArea *da = qobject_cast(candidate)) { + da->m_temporaryInhibition = inhibit; + if (inhibit) { + emit da->dragLeaveEvent(nullptr); + } + } + candidate = candidate->parentItem(); + } +} + +void DeclarativeDropArea::dragEnterEvent(QDragEnterEvent *event) +{ + if (!m_enabled || m_temporaryInhibition) { + return; + } + + DeclarativeDragDropEvent dde(event, this); + event->accept(); + + emit dragEnter(&dde); + + if (!event->isAccepted()) { + return; + } + + if (m_preventStealing) { + temporaryInhibitParent(true); + } + + m_oldDragMovePos = event->pos(); + setContainsDrag(true); +} + +void DeclarativeDropArea::dragLeaveEvent(QDragLeaveEvent *event) +{ + //do it anyways, in the unlikely case m_preventStealing + //was changed while drag + temporaryInhibitParent(false); + + m_oldDragMovePos = QPoint(-1,-1); + DeclarativeDragDropEvent dde(event, this); + emit dragLeave(&dde); + setContainsDrag(false); +} + +void DeclarativeDropArea::dragMoveEvent(QDragMoveEvent *event) +{ + if (!m_enabled || m_temporaryInhibition) { + return; + } + + //if the position we export didn't change, don't generate the move event + if (event->pos() == m_oldDragMovePos) { + event->setAccepted(false); + return; + } + + m_oldDragMovePos = event->pos(); + DeclarativeDragDropEvent dde(event, this); + event->accept(); + emit dragMove(&dde); +} + +void DeclarativeDropArea::dropEvent(QDropEvent *event) +{ + //do it anyways, in the unlikely case m_preventStealing + //was changed while drag, do it after a loop, + //so the parent dropevent doesn't get delivered + metaObject()->invokeMethod(this, "temporaryInhibitParent", Qt::QueuedConnection, Q_ARG(bool, false)); + + m_oldDragMovePos = QPoint(-1,-1); + + if (!m_enabled || m_temporaryInhibition) { + return; + } + + DeclarativeDragDropEvent dde(event, this); + emit drop(&dde); + setContainsDrag(false); +} + +bool DeclarativeDropArea::isEnabled() const +{ + return m_enabled; +} + +void DeclarativeDropArea::setEnabled(bool enabled) +{ + if (enabled == m_enabled) { + return; + } + + m_enabled = enabled; + setFlag(ItemAcceptsDrops, m_enabled); + emit enabledChanged(); +} + +bool DeclarativeDropArea::preventStealing() const +{ + return m_preventStealing; +} + +void DeclarativeDropArea::setPreventStealing(bool prevent) +{ + if (prevent == m_preventStealing) { + return; + } + + m_preventStealing = prevent; + emit preventStealingChanged(); +} + +void DeclarativeDropArea::setContainsDrag(bool dragging) +{ + if (m_containsDrag != dragging) { + m_containsDrag = dragging; + Q_EMIT containsDragChanged(m_containsDrag); + } +} + +bool DeclarativeDropArea::containsDrag() const +{ + return m_containsDrag; +} diff --git a/src/qmlcontrols/draganddrop/DeclarativeDropArea.h b/src/qmlcontrols/draganddrop/DeclarativeDropArea.h new file mode 100644 index 0000000..d2da505 --- /dev/null +++ b/src/qmlcontrols/draganddrop/DeclarativeDropArea.h @@ -0,0 +1,112 @@ +/* + Copyright (C) 2010 by BetterInbox + Original author: Gregory Schlomoff + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef DECLARATIVEDROPAREA_H +#define DECLARATIVEDROPAREA_H + +#include + +class DeclarativeDragDropEvent; + +class DeclarativeDropArea : public QQuickItem +{ + Q_OBJECT + + /** + * If false the area will receive no drop events + */ + Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged) + + /** + * + */ + Q_PROPERTY(bool preventStealing READ preventStealing WRITE setPreventStealing NOTIFY preventStealingChanged) + + Q_PROPERTY(bool containsDrag READ containsDrag NOTIFY containsDragChanged ) + +public: + DeclarativeDropArea(QQuickItem *parent=nullptr); + bool isEnabled() const; + void setEnabled(bool enabled); + + bool preventStealing() const; + void setPreventStealing(bool prevent); + bool containsDrag() const; + +Q_SIGNALS: + /** + * Emitted when the mouse cursor dragging something enters in the drag area + * @param event description of the dragged content + * @see DeclarativeDragDropEvent + */ + void dragEnter(DeclarativeDragDropEvent* event); + + /** + * Emitted when the mouse cursor dragging something leaves the drag area + * @param event description of the dragged content + * @see DeclarativeDragDropEvent + */ + void dragLeave(DeclarativeDragDropEvent* event); + + /** + * Emitted when the mouse cursor dragging something moves over the drag area + * @param event description of the dragged content + * @see DeclarativeDragDropEvent + */ + void dragMove(DeclarativeDragDropEvent *event); + + /** + * Emitted when the user drops something in the area + * @param event description of the dragged content + * @see DeclarativeDragDropEvent + */ + void drop(DeclarativeDragDropEvent* event); + + //Notifiers + void enabledChanged(); + + void preventStealingChanged(); + + void containsDragChanged(bool contained); + +protected: + void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; + void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE; + void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE; + void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; + +private Q_SLOTS: + void temporaryInhibitParent(bool inhibit); + +private: + void setContainsDrag(bool dragging); + + bool m_enabled : 1; + bool m_preventStealing : 1; + bool m_temporaryInhibition : 1; + bool m_containsDrag : 1; + QPoint m_oldDragMovePos; +}; + +#endif + diff --git a/src/qmlcontrols/draganddrop/DeclarativeMimeData.cpp b/src/qmlcontrols/draganddrop/DeclarativeMimeData.cpp new file mode 100644 index 0000000..54a5fd9 --- /dev/null +++ b/src/qmlcontrols/draganddrop/DeclarativeMimeData.cpp @@ -0,0 +1,165 @@ +/* + Copyright (C) 2010 by BetterInbox + Original author: Gregory Schlomoff + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "DeclarativeMimeData.h" + +/*! + \qmlclass MimeData DeclarativeMimeData + + This is a wrapper class around QMimeData, with a few extensions to provide better support for in-qml drag & drops. +*/ + +DeclarativeMimeData::DeclarativeMimeData() + : QMimeData(), + m_source(nullptr) +{} + +/*! + \internal + \class DeclarativeMimeData + + Creates a new DeclarativeMimeData by cloning the QMimeData passed as parameter. + This is useful for two reasons : + - In DragArea, we want to clone our "working copy" of the DeclarativeMimeData instance, as Qt will automatically + delete it after the drag and drop operation. + - In the drop events, the QMimeData is const, and we have troubles passing const to QML. So we clone it to + remove the "constness" + + This method will try to cast the QMimeData to DeclarativeMimeData, and will clone our extensions to QMimeData as well +*/ +DeclarativeMimeData::DeclarativeMimeData(const QMimeData* copy) + : QMimeData(), + m_source(nullptr) +{ + // Copy the standard MIME data + foreach(QString format, copy->formats()) { + QMimeData::setData(format, copy->data(format)); + } + + // If the object we are copying actually is a DeclarativeMimeData, copy our extended properties as well + const DeclarativeMimeData* declarativeMimeData = qobject_cast(copy); + if (declarativeMimeData) { + this->setSource(declarativeMimeData->source()); + } +} + +/*! + \qmlproperty url MimeData::url + + Returns the first URL from the urls property of QMimeData + TODO: We should use QDeclarativeListProperty to return the whole list instead of only the first element. +*/ +QUrl DeclarativeMimeData::url() const +{ + if ( this->hasUrls() && !this->urls().isEmpty()) { + return QMimeData::urls().first(); + } + return QUrl(); +} +void DeclarativeMimeData::setUrl(const QUrl &url) +{ + if (this->url() == url) + return; + + QList urlList; + urlList.append(url); + QMimeData::setUrls(urlList); + emit urlChanged(); +} + +QJsonArray DeclarativeMimeData::urls() const +{ + QJsonArray varUrls; + foreach (const QUrl &url, QMimeData::urls()) { + varUrls.append(url.toString()); + } + return varUrls; +} + +void DeclarativeMimeData::setUrls(const QJsonArray &urls) +{ + QList urlList; + foreach (const QVariant &varUrl, urls) { + urlList << varUrl.value(); + } + QMimeData::setUrls(urlList); + emit urlsChanged(); +} + +// color +QColor DeclarativeMimeData::color() const +{ + if (this->hasColor()) { + return qvariant_cast(this->colorData()); + } + return QColor(); +} + +bool DeclarativeMimeData::hasColor() const +{ + //qDebug() << " hasColor " << (QMimeData::hasColor() ? color().name() : "false"); + return QMimeData::hasColor(); +} + +void DeclarativeMimeData::setColor(const QColor &color) +{ + if (this->color() != color) { + this->setColorData(color); + emit colorChanged(); + } +} + +void DeclarativeMimeData::setData(const QString &mimeType, const QVariant &data) +{ + if (data.type() == QVariant::ByteArray) { + QMimeData::setData(mimeType, data.toByteArray()); + } else if (data.canConvert(QVariant::String)) { + QMimeData::setData(mimeType, data.toString().toLatin1()); + } +} + +/*! + \qmlproperty item MimeData::source + + Setting source to any existing qml item will enable the receiver of the drag and drop operation to know in which item + the operation originated. + + In the case of inter-application drag and drop operations, the source will not be available, and will be 0. + Be sure to test it in your QML code, before using it, or it will generate errors in the console. +*/ +QQuickItem* DeclarativeMimeData::source() const +{ + return m_source; +} +void DeclarativeMimeData::setSource(QQuickItem* source) +{ + if (m_source != source) { + m_source = source; + emit sourceChanged(); + } +} + +QByteArray DeclarativeMimeData::getDataAsByteArray(const QString& format) +{ + return data(format); +} diff --git a/src/qmlcontrols/draganddrop/DeclarativeMimeData.h b/src/qmlcontrols/draganddrop/DeclarativeMimeData.h new file mode 100644 index 0000000..5df6650 --- /dev/null +++ b/src/qmlcontrols/draganddrop/DeclarativeMimeData.h @@ -0,0 +1,116 @@ +/* + Copyright (C) 2010 by BetterInbox + Original author: Gregory Schlomoff + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef DECLARATIVEMIMEDATA_H +#define DECLARATIVEMIMEDATA_H + +#include +#include +#include +#include +#include + +class DeclarativeMimeData : public QMimeData +{ + Q_OBJECT + + /** + * A plain text (MIME type text/plain) representation of the data. + */ + Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) + + /** + * A string if the data stored in the object is HTML (MIME type text/html); otherwise returns an empty string. + */ + Q_PROPERTY(QString html READ html WRITE setHtml NOTIFY htmlChanged) + + /** + * Url contained in the mimedata + */ + Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged) + + /** + * A list of URLs contained within the MIME data object. + * URLs correspond to the MIME type text/uri-list. + */ + Q_PROPERTY(QJsonArray urls READ urls WRITE setUrls NOTIFY urlsChanged) + + /** + * A color if the data stored in the object represents a color (MIME type application/x-color); otherwise QColor(). + */ + Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) + + /** + * The graphical item on the scene that started the drag event. It may be null. + */ + Q_PROPERTY(QQuickItem* source READ source WRITE setSource NOTIFY sourceChanged) + + /** @see QMimeData::hasUrls */ + Q_PROPERTY(bool hasUrls READ hasUrls NOTIFY urlsChanged) + //TODO: Image property + + /** + * @sa QMimeData::formats + */ + Q_PROPERTY(QStringList formats READ formats) +public: + DeclarativeMimeData(); + DeclarativeMimeData(const QMimeData* copy); + + QUrl url() const; + void setUrl(const QUrl &url); + + QJsonArray urls() const; + void setUrls(const QJsonArray &urls); + + QColor color() const; + void setColor(const QColor &color); + Q_INVOKABLE bool hasColor() const; + + Q_INVOKABLE void setData(const QString &mimeType, const QVariant &data); + + QQuickItem* source() const; + void setSource(QQuickItem* source); + + Q_INVOKABLE QByteArray getDataAsByteArray(const QString& format); + + /* + QString text() const; //TODO: Reimplement this to issue the onChanged signals + void setText(const QString &text); + QString html() const; + void setHtml(const QString &html); + */ + +Q_SIGNALS: + void textChanged(); //FIXME not being used + void htmlChanged(); //FIXME not being used + void urlChanged(); + void urlsChanged(); + void colorChanged(); + void sourceChanged(); + +private: + QQuickItem* m_source; +}; + +#endif // DECLARATIVEMIMEDATA_H diff --git a/src/qmlcontrols/draganddrop/Mainpage.dox b/src/qmlcontrols/draganddrop/Mainpage.dox new file mode 100644 index 0000000..b92f1bf --- /dev/null +++ b/src/qmlcontrols/draganddrop/Mainpage.dox @@ -0,0 +1,15 @@ +/** @mainpage Drag and Drop + +

import org.kde.draganddrop

+ +Use those elements if you want to add drag and drop support to your application + +- DeclarativeDragArea +- DeclarativeDropArea +- DeclarativeDragDropEvent +- DeclarativeMimeData + +*/ + +// DOXYGEN_SET_PROJECT_NAME = DragAndDrop +// vim:ts=4:sw=4:expandtab:filetype=doxygen diff --git a/src/qmlcontrols/draganddrop/MimeDataWrapper.cpp b/src/qmlcontrols/draganddrop/MimeDataWrapper.cpp new file mode 100644 index 0000000..f2db9d2 --- /dev/null +++ b/src/qmlcontrols/draganddrop/MimeDataWrapper.cpp @@ -0,0 +1,93 @@ +/* + Copyright (C) 2015 by Aleix Pol Gonzalez + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "MimeDataWrapper.h" +#include +#include +#include + +MimeDataWrapper::MimeDataWrapper(const QMimeData* data, QObject* parent) + : QObject(parent) + , m_data(data) +{} + +QString MimeDataWrapper::text() const +{ + return m_data->text(); +} + +QString MimeDataWrapper::html() const +{ + return m_data->html(); +} + +QUrl MimeDataWrapper::url() const +{ + if ( m_data->hasUrls() && !m_data->urls().isEmpty()) { + return m_data->urls().first(); + } + return QUrl(); +} + +bool MimeDataWrapper::hasUrls() const +{ + return m_data->hasUrls(); +} + +QJsonArray MimeDataWrapper::urls() const +{ + QJsonArray varUrls; + foreach (const QUrl &url, m_data->urls()) { + varUrls.append(url.toString()); + } + return varUrls; +} + +QVariant MimeDataWrapper::color() const +{ + if (m_data->hasColor()) + return m_data->colorData(); + else + return QVariant(); +} + +QStringList MimeDataWrapper::formats() const +{ + return m_data->formats(); +} + + +QByteArray MimeDataWrapper::getDataAsByteArray(const QString& format) +{ + return m_data->data(format); +} + +QVariant MimeDataWrapper::source() const +{ +// In case it comes from a DeclarativeMimeData + return m_data->property("source"); +} + +QMimeData* MimeDataWrapper::mimeData() const +{ + return const_cast(m_data); +} diff --git a/src/qmlcontrols/draganddrop/MimeDataWrapper.h b/src/qmlcontrols/draganddrop/MimeDataWrapper.h new file mode 100644 index 0000000..94cb31d --- /dev/null +++ b/src/qmlcontrols/draganddrop/MimeDataWrapper.h @@ -0,0 +1,108 @@ +/* + Copyright (C) 2015 by Aleix Pol Gonzalez + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef MIMEDATAWRAPPER_H +#define MIMEDATAWRAPPER_H + +#include +#include +#include + +class QMimeData; +class QObject; +/** + * Exposes a const QMimeData instance + * + * In contrast to DeclarativeMimeData, doesn't create a copy of the QMimeData instance + */ +class MimeDataWrapper : public QObject +{ + Q_OBJECT + + /** + * A plain text (MIME type text/plain) representation of the data. + */ + Q_PROPERTY(QString text READ text CONSTANT) + + /** + * A string if the data stored in the object is HTML (MIME type text/html); otherwise returns an empty string. + */ + Q_PROPERTY(QString html READ html CONSTANT) + + /** + * Url contained in the mimedata + */ + Q_PROPERTY(QUrl url READ url CONSTANT) + + /** + * A list of URLs contained within the MIME data object. + * URLs correspond to the MIME type text/uri-list. + */ + Q_PROPERTY(QJsonArray urls READ urls CONSTANT) + + /** + * A color if the data stored in the object represents a color (MIME type application/x-color); otherwise QVariant(). + */ + Q_PROPERTY(QVariant color READ color CONSTANT) + + /** + * The graphical item on the scene that started the drag event. It may be null. + */ + Q_PROPERTY(QVariant source READ source CONSTANT) + + /** + * Mimetypes provided by the mime data instance + * + * @sa QMimeData::formats + */ + Q_PROPERTY(QStringList formats READ formats CONSTANT) + + /** + * @sa QMimeData::hasUrls + */ + Q_PROPERTY(bool hasUrls READ hasUrls CONSTANT) + + /** + * @returns the wrapped object + */ + Q_PROPERTY(QMimeData* mimeData READ mimeData CONSTANT) + +public: + MimeDataWrapper(const QMimeData* data, QObject* parent); + + QString text() const; + QString html() const; + QUrl url() const; + QJsonArray urls() const; + bool hasUrls() const; + QVariant color() const; + QStringList formats() const; + QVariant source() const; + QMimeData* mimeData() const; + + Q_INVOKABLE QByteArray getDataAsByteArray(const QString& format); + +private: + const QMimeData* m_data; +}; + +#endif diff --git a/src/qmlcontrols/draganddrop/draganddropplugin.cpp b/src/qmlcontrols/draganddrop/draganddropplugin.cpp new file mode 100644 index 0000000..cc9a42e --- /dev/null +++ b/src/qmlcontrols/draganddrop/draganddropplugin.cpp @@ -0,0 +1,43 @@ +/* + Copyright 2011 by Marco Martin + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "draganddropplugin.h" + +#include + +#include "DeclarativeDragArea.h" +#include "DeclarativeDragDropEvent.h" +#include "DeclarativeDropArea.h" +#include "DeclarativeMimeData.h" +#include "MimeDataWrapper.h" + +void DragAndDropPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(QString::fromLatin1(uri) == QLatin1String("org.kde.draganddrop")); + + qmlRegisterType(uri, 2, 0, "DropArea"); + qmlRegisterType(uri, 2, 0, "DragArea"); + qmlRegisterType(); + qmlRegisterUncreatableType(uri, 2, 0, "MimeData", QStringLiteral("MimeData cannot be created from QML.")); + qmlRegisterUncreatableType(uri, 2, 0, "DragDropEvent", QStringLiteral("DragDropEvent cannot be created from QML.")); + qmlRegisterUncreatableType(uri, 2, 0, "MimeDataWrapper", QStringLiteral("DragDropEvent cannot be created from QML.")); +} diff --git a/src/qmlcontrols/draganddrop/draganddropplugin.h b/src/qmlcontrols/draganddrop/draganddropplugin.h new file mode 100644 index 0000000..0a9ed7e --- /dev/null +++ b/src/qmlcontrols/draganddrop/draganddropplugin.h @@ -0,0 +1,37 @@ +/* + Copyright 2011 by Marco Martin + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef DRAGANDDROPPLUGIN_H +#define DRAGANDDROPPLUGIN_H + +#include + +class DragAndDropPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + void registerTypes(const char *uri) Q_DECL_OVERRIDE; +}; + +#endif diff --git a/src/qmlcontrols/draganddrop/qmldir b/src/qmlcontrols/draganddrop/qmldir new file mode 100644 index 0000000..ec45a14 --- /dev/null +++ b/src/qmlcontrols/draganddrop/qmldir @@ -0,0 +1,3 @@ +module org.kde.draganddrop +plugin draganddropplugin + diff --git a/src/qmlcontrols/kcmcontrols/CMakeLists.txt b/src/qmlcontrols/kcmcontrols/CMakeLists.txt new file mode 100644 index 0000000..895b4c6 --- /dev/null +++ b/src/qmlcontrols/kcmcontrols/CMakeLists.txt @@ -0,0 +1,19 @@ +project(draganddrop) + +set(declarativedragdrop_SRCS + kcmcontrolsplugin.cpp +) + +add_library(kcmcontrolsplugin SHARED ${declarativedragdrop_SRCS}) +target_link_libraries(kcmcontrolsplugin + Qt5::Core + Qt5::Quick + Qt5::Qml + Qt5::Gui + KF5::CoreAddons + KF5::QuickAddons +) + +install(TARGETS kcmcontrolsplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kcm) + +install(DIRECTORY qml/ DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kcm) diff --git a/src/qmlcontrols/kcmcontrols/kcmcontrolsplugin.cpp b/src/qmlcontrols/kcmcontrols/kcmcontrolsplugin.cpp new file mode 100644 index 0000000..eeb69ee --- /dev/null +++ b/src/qmlcontrols/kcmcontrols/kcmcontrolsplugin.cpp @@ -0,0 +1,36 @@ +/* + Copyright 2017 by Marco Martin + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "kcmcontrolsplugin.h" + +#include + +#include + + +void KCMControlsPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(uri == QByteArray("org.kde.kcm")); + + qmlRegisterUncreatableType("org.kde.kcm", 1, 0, "ConfigModule", + QLatin1String("Do not create objects of type ConfigModule")); +} diff --git a/src/qmlcontrols/kcmcontrols/kcmcontrolsplugin.h b/src/qmlcontrols/kcmcontrols/kcmcontrolsplugin.h new file mode 100644 index 0000000..e3fccf0 --- /dev/null +++ b/src/qmlcontrols/kcmcontrols/kcmcontrolsplugin.h @@ -0,0 +1,37 @@ +/* + Copyright 2011 by Marco Martin + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef KCMCONTROLSPLUGIN_H +#define KCMCONTROLSPLUGIN_H + +#include + +class KCMControlsPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + void registerTypes(const char *uri) Q_DECL_OVERRIDE; +}; + +#endif diff --git a/src/qmlcontrols/kcmcontrols/qml/GridDelegate.qml b/src/qmlcontrols/kcmcontrols/qml/GridDelegate.qml new file mode 100644 index 0000000..ed9603b --- /dev/null +++ b/src/qmlcontrols/kcmcontrols/qml/GridDelegate.qml @@ -0,0 +1,191 @@ +/* + Copyright (c) 2015 Marco Martin + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +import QtQuick 2.1 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.2 as Controls +import QtQuick.Templates 2.2 as T2 +import QtGraphicalEffects 1.0 + +import org.kde.kirigami 2.2 as Kirigami + +/** + * Base delegate for KControlmodules based on Grid views of thumbnails + * Use the onClicked signal handler for managing the main action when + * the user clicks on the thumbnail + * @inherits QtQuick.Templates.ItemDelegate + */ +T2.ItemDelegate { + id: delegate + + /** + * toolTip: string + * string for a tooltip for the whole delegate + */ + property string toolTip + + /** + * thumbnail: Item + * the item actually implementing the thumbnail: the visualization is up to the implementation + */ + property alias thumbnail: thumbnailArea.data + + /** + * thumbnailAvailable: bool + * Set it to true when a thumbnail is actually available: when false, + * a default icon will be shown instead of the actual thumbnail. + */ + property bool thumbnailAvailable: false + + /** + * actions: list + * A list of extra actions for the thumbnails. They will be shown as + * icons on the bottom-right corner of the thumbnail on mouse over + */ + property list actions + + width: view.cellWidth + height: view.cellHeight + hoverEnabled: true + + Rectangle { + id: thumbnail + anchors { + left: parent.left + right: parent.right + top: parent.top + margins: Kirigami.Units.smallSpacing * 2 + } + height: width/1.6 + radius: Kirigami.Units.smallSpacing + Kirigami.Theme.inherit: false + Kirigami.Theme.colorSet: Kirigami.Theme.View + + color: { + if (delegate.GridView.isCurrentItem) { + return Kirigami.Theme.highlightColor; + } else if (parent.hovered) { + return Qt.tint(Kirigami.Theme.backgroundColor, Qt.rgba(Kirigami.Theme.highlightColor.r, Kirigami.Theme.highlightColor.g, Kirigami.Theme.highlightColor.b, 0.3)) + } else { + return Kirigami.Theme.backgroundColor + } + } + Behavior on color { + ColorAnimation { + duration: Kirigami.Units.longDuration + easing.type: Easing.OutQuad + } + } + + Rectangle { + id: thumbnailArea + radius: Kirigami.Units.smallSpacing/2 + anchors { + fill: parent + margins: Kirigami.Units.smallSpacing + } + + color: Kirigami.Theme.backgroundColor + Kirigami.Icon { + visible: !delegate.thumbnailAvailable + anchors.centerIn: parent + width: Kirigami.Units.iconSizes.large + height: width + source: "view-preview" + } + } + + Rectangle { + anchors.fill: parent + visible: actionsRow.children.length > 0 + opacity: delegate.hovered || (actionsScope.focus) ? 1 : 0 + radius: Kirigami.Units.smallSpacing + color: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.4) + + Kirigami.Theme.inherit: false + Kirigami.Theme.colorSet: Kirigami.Theme.Complementary + + Behavior on opacity { + PropertyAnimation { + duration: Kirigami.Units.longDuration + easing.type: Easing.OutQuad + } + } + + FocusScope { + id: actionsScope + anchors { + right: parent.right + bottom: parent.bottom + margins: Kirigami.Units.smallSpacing + } + width: actionsRow.width + height: actionsRow.height + RowLayout { + id: actionsRow + + Repeater { + model: delegate.actions + delegate: Controls.ToolButton { + Kirigami.Icon { + Kirigami.Theme.inherit: false + Kirigami.Theme.colorSet: Kirigami.Theme.Complementary + anchors.centerIn: parent + width: Kirigami.Units.iconSizes.smallMedium + height: width + source: modelData.iconName + } + activeFocusOnTab: focus || delegate.focus + onClicked: modelData.trigger() + enabled: modelData.enabled + //NOTE: there aren't any global settings where to take "official" tooltip timeouts + Controls.ToolTip.delay: 1000 + Controls.ToolTip.timeout: 5000 + Controls.ToolTip.visible: hovered + Controls.ToolTip.text: modelData.tooltip + } + } + } + } + } + layer.enabled: true + layer.effect: DropShadow { + horizontalOffset: 0 + verticalOffset: 2 + radius: 10 + samples: 32 + color: Qt.rgba(0, 0, 0, 0.3) + } + } + + Controls.Label { + anchors { + left: parent.left + right: parent.right + top: thumbnail.bottom + topMargin: Kirigami.Units.smallSpacing + } + text: delegate.text + horizontalAlignment: Text.AlignHCenter + elide: Text.ElideRight + } + Controls.ToolTip.delay: 1000 + Controls.ToolTip.timeout: 5000 + Controls.ToolTip.visible: hovered + Controls.ToolTip.text: toolTip +} diff --git a/src/qmlcontrols/kcmcontrols/qml/GridView.qml b/src/qmlcontrols/kcmcontrols/qml/GridView.qml new file mode 100644 index 0000000..a76afad --- /dev/null +++ b/src/qmlcontrols/kcmcontrols/qml/GridView.qml @@ -0,0 +1,83 @@ +/* + Copyright (c) 2017 Marco Martin + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +import QtQuick 2.7 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.2 as QtControls +import org.kde.kirigami 2.3 as Kirigami + +/** + * A ScrollView containing a GridView, with the default behavior about + * sizing and background as recomended by the user interface guidelines + * For most KControl modules, it's recomended to use instead the GridViewKCM + * component as the root element of your module. + * @see GridViewKCM + */ +QtControls.ScrollView { + id: scroll + + /** + * view: GridView + * Exposes the internal GridView: in order to set a model or a delegate to it, + * use the following code: + * @code + * import org.kde.kcm 1.1 as KCM + * KCM.GridView { + * view.model: kcm.model + * view.delegate: KCM.GridDelegate {...} + * } + * @endcode + */ + property alias view: view + + + implicitWidth: Math.max(view.cellWidth * 2 + internal.scrollBarSpace + , Math.floor(internal.availableWidth / view.cellWidth) * view.cellWidth + internal.scrollBarSpace + 4) + activeFocusOnTab: false + Kirigami.Theme.colorSet: Kirigami.Theme.View + Kirigami.Theme.inherit: false + + Component.onCompleted: scroll.background.visible = true; + + GridView { + id: view + property int implicitCellWidth: Kirigami.Units.gridUnit * 10 + property int implicitCellHeight: Math.round(implicitCellWidth / 1.6) + Kirigami.Units.gridUnit + QtObject { + id: internal + readonly property int availableWidth: scroll.parent.width - internal.scrollBarSpace - 4 + readonly property int scrollBarSpace: scroll.QtControls.ScrollBar.vertical.width + } + anchors { + fill: parent + margins: 2 + leftMargin: contentHeight <= height ? internal.scrollBarSpace/2 : 2 + rightMargin: contentHeight <= height ? internal.scrollBarSpace/2 : internal.scrollBarSpace + 2 + } + clip: true + activeFocusOnTab: true + + cellWidth: Math.min(Math.floor(internal.availableWidth / 2), implicitCellWidth) + cellHeight: Math.round(cellWidth / 1.6) + Kirigami.Units.gridUnit + + keyNavigationEnabled: true + keyNavigationWraps: true + highlightMoveDuration: 0 + } + QtControls.ScrollBar.horizontal.visible: false +} diff --git a/src/qmlcontrols/kcmcontrols/qml/GridViewKCM.qml b/src/qmlcontrols/kcmcontrols/qml/GridViewKCM.qml new file mode 100644 index 0000000..0f6a5cf --- /dev/null +++ b/src/qmlcontrols/kcmcontrols/qml/GridViewKCM.qml @@ -0,0 +1,79 @@ +/* + Copyright (c) 2017 Marco Martin + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +import QtQuick 2.7 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.2 as QtControls +import org.kde.kirigami 2.2 as Kirigami +import org.kde.kcm 1.1 as KCM + +/** + * This component is intended to be used as the root item for most of the + * KControl modules which are based upon a grid view of thumbnails, such as theme + * or wallpaper selectors. + * It has a big GridView as its main item, the implementation is free to add extra + * content in the header or footer properties. + * @code + * import org.kde.kcm 1.1 as KCM + * KCM.GridViewKCM { + * header: Item {...} + * view.model: kcm.model + * view.delegate: KCM.GridDelegate {...} + * footer: Item {...} + * } + * @endcode + * @inherits org.kde.kirigami.Page + */ +Kirigami.Page { + id: root + + /** + * view: GridView + * Exposes the internal GridView: in order to set a model or a delegate to it, + * use the following code: + * @code + * import org.kde.kcm 1.1 as KCM + * KCM.GridViewKCM { + * ... + * view.model: kcm.model + * view.delegate: KCM.GridDelegate {...} + * ... + * } + * @endcode + */ + property alias view: scroll.view + + title: kcm.name + implicitWidth: view.implicitCellWidth * 3 + scroll.QtControls.ScrollBar.vertical.width + Kirigami.Units.gridUnit + implicitHeight: view.implicitCellHeight * 3 + (header ? header.height : 0) + (footer ? footer.height : 0) + Kirigami.Units.gridUnit + + topPadding: 0 + leftPadding: 0 + rightPadding: 0 + bottomPadding: footer ? Kirigami.Units.smallSpacing : 0 + + KCM.GridView { + id: scroll + width: Math.min(implicitWidth, root.width) + anchors { + top: parent.top + bottom: parent.bottom + horizontalCenter: parent.horizontalCenter + } + } +} diff --git a/src/qmlcontrols/kcmcontrols/qml/SimpleKCM.qml b/src/qmlcontrols/kcmcontrols/qml/SimpleKCM.qml new file mode 100644 index 0000000..70d0537 --- /dev/null +++ b/src/qmlcontrols/kcmcontrols/qml/SimpleKCM.qml @@ -0,0 +1,72 @@ +/* + Copyright (c) 2017 Marco Martin + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +import QtQuick 2.7 +import org.kde.kirigami 2.2 as Kirigami +import org.kde.kcm 1.1 as KCM + +/** + * This component is intended to be used as root item for + * KControl modules with arbitrary content, as per the User interface guidelines, + * usually a Kirigami.FormLayout as its main component. + * header and footer properties can be used. + * @code + * import org.kde.kcm 1.1 as KCM + * import org.kde.kirigami 2.3 as Kirigami + * KCM.SimpleKCM { + * Kirigami.FormLayout { + * TextField { + * Kirigami.FormData.label: "Label:" + * } + * TextField { + * Kirigami.FormData.label: "Label:" + * } + * } + * footer: Item {...} + * } + * @endcode + * @inherits org.kde.kirigami.ScrollablePage + */ +Kirigami.ScrollablePage { + id: root + + title: kcm.name + implicitWidth: Kirigami.Units.gridUnit * 20 + implicitHeight: Math.min(flickable.contentHeight, Kirigami.Units.gridUnit * 20) + + children: [ + Kirigami.Separator { + z: 999 + anchors { + left: parent.left + right: parent.right + top: parent.top + } + visible: !root.flickable.atYBeginning + }, + Kirigami.Separator { + z: 999 + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + visible: !root.flickable.atYEnd + } + ] +} diff --git a/src/qmlcontrols/kcmcontrols/qml/qmldir b/src/qmlcontrols/kcmcontrols/qml/qmldir new file mode 100644 index 0000000..569cfc7 --- /dev/null +++ b/src/qmlcontrols/kcmcontrols/qml/qmldir @@ -0,0 +1,7 @@ +module org.kde.kcm +plugin kcmcontrolsplugin + +GridDelegate 1.1 GridDelegate.qml +GridViewKCM 1.1 GridViewKCM.qml +GridView 1.1 GridView.qml +SimpleKCM 1.1 SimpleKCM.qml diff --git a/src/qmlcontrols/kconfig/CMakeLists.txt b/src/qmlcontrols/kconfig/CMakeLists.txt new file mode 100644 index 0000000..59a68b2 --- /dev/null +++ b/src/qmlcontrols/kconfig/CMakeLists.txt @@ -0,0 +1,18 @@ +project(kconfigplugin) + +set(kconfigplugin_SRCS + kconfigplugin.cpp + kauthorizedproxy.cpp + ) + +add_library(kconfigplugin SHARED ${kconfigplugin_SRCS}) +target_link_libraries(kconfigplugin + Qt5::Core + Qt5::Qml + KF5::ConfigCore +) + +install(TARGETS kconfigplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kconfig) + +install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kconfig) + diff --git a/src/qmlcontrols/kconfig/kauthorizedproxy.cpp b/src/qmlcontrols/kconfig/kauthorizedproxy.cpp new file mode 100644 index 0000000..3e9ec04 --- /dev/null +++ b/src/qmlcontrols/kconfig/kauthorizedproxy.cpp @@ -0,0 +1,41 @@ +/* + * Copyright 2016 Kai Uwe Broulik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "kauthorizedproxy.h" + +#include + +KAuthorizedProxy::KAuthorizedProxy(QObject *parent) : QObject(parent) +{ + +} + +KAuthorizedProxy::~KAuthorizedProxy() +{ + +} + +bool KAuthorizedProxy::authorize(const QString &action) const +{ + return KAuthorized::authorize(action); +} + +bool KAuthorizedProxy::authorizeAction(const QString &action) const +{ + return KAuthorized::authorizeAction(action); +} diff --git a/src/qmlcontrols/kconfig/kauthorizedproxy.h b/src/qmlcontrols/kconfig/kauthorizedproxy.h new file mode 100644 index 0000000..416c9af --- /dev/null +++ b/src/qmlcontrols/kconfig/kauthorizedproxy.h @@ -0,0 +1,42 @@ +/* + * * Copyright 2016 Kai Uwe Broulik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#pragma once + +#include + +class KAuthorizedProxy : public QObject +{ + Q_OBJECT + +public: + explicit KAuthorizedProxy(QObject *parent = nullptr); + ~KAuthorizedProxy() override; + + /** + * Returns whether the user is permitted to perform a certain action. + */ + Q_INVOKABLE bool authorize(const QString &action) const; + + /** + * Returns whether the user is permitted to perform a certain action. + * This behaves like authorize(), except that "action/" is prepended to action + */ + Q_INVOKABLE bool authorizeAction(const QString &action) const; + +}; diff --git a/src/qmlcontrols/kconfig/kconfigplugin.cpp b/src/qmlcontrols/kconfig/kconfigplugin.cpp new file mode 100644 index 0000000..31903e5 --- /dev/null +++ b/src/qmlcontrols/kconfig/kconfigplugin.cpp @@ -0,0 +1,35 @@ +/* + * Copyright 2016 Kai Uwe Broulik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "kconfigplugin.h" + +#include + +#include "kauthorizedproxy.h" + +QObject *kauthorizedProxy_singleton_provider(QQmlEngine *, QJSEngine *) +{ + return new KAuthorizedProxy; +} + +void KConfigPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(QString::fromLatin1(uri) == QLatin1String("org.kde.kconfig")); + + qmlRegisterSingletonType(uri, 1, 0, "KAuthorized", kauthorizedProxy_singleton_provider); +} diff --git a/src/qmlcontrols/kconfig/kconfigplugin.h b/src/qmlcontrols/kconfig/kconfigplugin.h new file mode 100644 index 0000000..8bf1913 --- /dev/null +++ b/src/qmlcontrols/kconfig/kconfigplugin.h @@ -0,0 +1,31 @@ +/* + * Copyright 2016 Kai Uwe Broulik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#pragma once + +#include + +class KConfigPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + void registerTypes(const char *uri) override; + +}; diff --git a/src/qmlcontrols/kconfig/qmldir b/src/qmlcontrols/kconfig/qmldir new file mode 100644 index 0000000..6192fec --- /dev/null +++ b/src/qmlcontrols/kconfig/qmldir @@ -0,0 +1,2 @@ +module org.kde.kconfig +plugin kconfigplugin diff --git a/src/qmlcontrols/kcoreaddons/CMakeLists.txt b/src/qmlcontrols/kcoreaddons/CMakeLists.txt new file mode 100644 index 0000000..3f77f2d --- /dev/null +++ b/src/qmlcontrols/kcoreaddons/CMakeLists.txt @@ -0,0 +1,20 @@ +project(kcoreaddons) + +set(kcoreaddonsplugin_SRCS + kcoreaddonsplugin.cpp + formats.cpp + kuserproxy.cpp + ) + +add_library(kcoreaddonsplugin SHARED ${kcoreaddonsplugin_SRCS}) +target_link_libraries(kcoreaddonsplugin + Qt5::Core + Qt5::Quick + Qt5::Qml + KF5::CoreAddons +) + +install(TARGETS kcoreaddonsplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kcoreaddons) + +install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kcoreaddons) + diff --git a/src/qmlcontrols/kcoreaddons/formats.cpp b/src/qmlcontrols/kcoreaddons/formats.cpp new file mode 100644 index 0000000..7881ac0 --- /dev/null +++ b/src/qmlcontrols/kcoreaddons/formats.cpp @@ -0,0 +1,62 @@ +/* + * Copyright 2014 Bhushan Shah + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License or (at your option) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +#include "formats.h" + +Formats::Formats(QObject* parent) + : QObject(parent) + , m_format() +{ +} + +QString Formats::formatByteSize(double size, int precision) const +{ + return m_format.formatByteSize(size, precision); +} + +QString Formats::formatDuration(quint64 msecs, KFormat::DurationFormatOptions options) const +{ + return m_format.formatDuration(msecs, options); +} + +QString Formats::formatDuration(quint64 msecs, int options) const +{ + return m_format.formatDuration(msecs, static_cast(options)); +} + +QString Formats::formatDecimalDuration(quint64 msecs, int decimalPlaces) const +{ + return m_format.formatDecimalDuration(msecs, decimalPlaces); +} + +QString Formats::formatSpelloutDuration(quint64 msecs) const +{ + return m_format.formatSpelloutDuration(msecs); +} + +QString Formats::formatRelativeDate(const QDate &date, QLocale::FormatType format) const +{ + return m_format.formatRelativeDate(date, format); +} + +QString Formats::formatRelativeDateTime(const QDateTime &dateTime, QLocale::FormatType format) const +{ + return m_format.formatRelativeDateTime(dateTime, format); +} diff --git a/src/qmlcontrols/kcoreaddons/formats.h b/src/qmlcontrols/kcoreaddons/formats.h new file mode 100644 index 0000000..64b1b56 --- /dev/null +++ b/src/qmlcontrols/kcoreaddons/formats.h @@ -0,0 +1,116 @@ +/* + * Copyright 2014 Bhushan Shah + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License or (at your option) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +#ifndef FORMATS_H +#define FORMATS_H + +#include + +class Formats : public QObject +{ + Q_OBJECT + + public: + + explicit Formats (QObject* parent = nullptr); + + /** + * Converts size from bytes to the appropriate string representation + */ + Q_INVOKABLE QString formatByteSize(double size, int precision = 1) const; + + /** + * Given a number of milliseconds, converts that to a string containing + * the localized equivalent, e.g. 1:23:45 + */ + Q_INVOKABLE QString formatDuration(quint64 msecs, KFormat::DurationFormatOptions options = KFormat::DefaultDuration) const; + + Q_DECLARE_FLAGS(DurationFormatOptions, KFormat::DurationFormatOption) + + /** + * This overload exists so it can be called from QML, which does + * not support calling Q_INVOKABLEs with Q_ENUMS from different classes + * + * This is mentioned in the docs and also in https://bugreports.qt.io/browse/QTBUG-20639 + * Until that bug is fixed, we'll need this + */ + Q_INVOKABLE QString formatDuration(quint64 msecs, int options) const; + + /** + * Given a number of milliseconds, converts that to a string containing + * the localized equivalent to the requested decimal places. + * + * e.g. given formatDuration(60000), returns "1.0 minutes" + */ + Q_INVOKABLE QString formatDecimalDuration(quint64 msecs, int decimalPlaces = 2) const; + + /** + * Given a number of milliseconds, converts that to a spell-out string containing + * the localized equivalent. + * + * e.g. given formatSpelloutDuration(60001) returns "1 minute" + * given formatSpelloutDuration(62005) returns "1 minute and 2 seconds" + * given formatSpelloutDuration(90060000) returns "1 day and 1 hour" + * + * Units not interesting to the user, for example seconds or minutes when the first + * unit is day, are not returned because they are irrelevant. The same applies for + * seconds when the first unit is hour. + * + */ + Q_INVOKABLE QString formatSpelloutDuration(quint64 msecs) const; + + /** + * Returns a string formatted to a relative date style. + * + * If the date falls within one week before or after the current date + * then a relative date string will be returned, such as: + * * Yesterday + * * Today + * * Tomorrow + * * Last Tuesday + * * Next Wednesday + * + * If the date falls outside this period then the format is used + */ + Q_INVOKABLE QString formatRelativeDate(const QDate &date, QLocale::FormatType format) const; + + /** + * Returns a string formatted to a relative datetime style. + * + * If the dateTime falls within one week before or after the current date + * then a relative date string will be returned, such as: + * * Yesterday, 3:00pm + * * Today, 3:00pm + * * Tomorrow, 3:00pm + * * Last Tuesday, 3:00pm + * * Next Wednesday, 3:00pm + * + * If the datetime falls outside this period then the format is used + */ + Q_INVOKABLE QString formatRelativeDateTime(const QDateTime &dateTime, QLocale::FormatType format) const; + + private: + + KFormat m_format; +}; + +Q_DECLARE_METATYPE(QLocale::FormatType) + +#endif diff --git a/src/qmlcontrols/kcoreaddons/kcoreaddonsplugin.cpp b/src/qmlcontrols/kcoreaddons/kcoreaddonsplugin.cpp new file mode 100644 index 0000000..e95e2a9 --- /dev/null +++ b/src/qmlcontrols/kcoreaddons/kcoreaddonsplugin.cpp @@ -0,0 +1,49 @@ +/* + * Copyright 2014 Bhushan Shah + * Copyright 2014 David Edmundson + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License or (at your option) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +#include "kcoreaddonsplugin.h" + +#include + +#include "formats.h" +#include "kuserproxy.h" + +#include + +static QObject *formats_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine) +{ + Q_UNUSED(engine) + Q_UNUSED(scriptEngine) + + return new Formats(); +} + +void KCoreAddonsPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(QString::fromLatin1(uri) == QLatin1String("org.kde.kcoreaddons")); + + qmlRegisterSingletonType(uri, 1, 0, "Format", formats_singletontype_provider); + qRegisterMetaType(); + + qmlRegisterUncreatableType(uri, 1, 0, "FormatTypes", QString()); + + qmlRegisterType(uri, 1, 0, "KUser"); +} diff --git a/src/qmlcontrols/kcoreaddons/kcoreaddonsplugin.h b/src/qmlcontrols/kcoreaddons/kcoreaddonsplugin.h new file mode 100644 index 0000000..dd37411 --- /dev/null +++ b/src/qmlcontrols/kcoreaddons/kcoreaddonsplugin.h @@ -0,0 +1,35 @@ +/* + * Copyright 2014 Bhushan Shah + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License or (at your option) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +#ifndef KCOREADDONSPLUGIN_H +#define KCOREADDONSPLUGIN_H + +#include + +class KCoreAddonsPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + void registerTypes(const char *uri) Q_DECL_OVERRIDE; +}; + +#endif diff --git a/src/qmlcontrols/kcoreaddons/kuserproxy.cpp b/src/qmlcontrols/kcoreaddons/kuserproxy.cpp new file mode 100644 index 0000000..9d14af0 --- /dev/null +++ b/src/qmlcontrols/kcoreaddons/kuserproxy.cpp @@ -0,0 +1,137 @@ +/* +Copyright 2013 Marco Martin +Copyright 2014 Sebastian Kügler + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) version 3, or any +later version accepted by the membership of KDE e.V. (or its +successor approved by the membership of KDE e.V.), which shall +act as a proxy defined in Section 6 of version 3 of the license. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library. If not, see . +*/ + +#include "kuserproxy.h" +#include +#include +#include +#include +#include + +#include + +#include + +const QString etcPasswd = QStringLiteral("/etc/passwd"); + +KUserProxy::KUserProxy (QObject *parent) + : QObject(parent), + m_temporaryEmptyFaceIconPath(false) +{ + QString pathToFaceIcon(m_user.faceIconPath()); + if (pathToFaceIcon.isEmpty()) { + //KUser returns null if the current faceIconPath is empty + //so we should explicitly watch ~/.face.icon rather than faceIconPath() + //as we want to watch for this file being created + pathToFaceIcon = QDir::homePath() + QStringLiteral("/.face.icon"); + } + + m_dirWatch.addFile(pathToFaceIcon); + if (QFile::exists(etcPasswd)) { + m_dirWatch.addFile(etcPasswd); + } + + connect(&m_dirWatch, &KDirWatch::dirty, this, &KUserProxy::update); + connect(&m_dirWatch, &KDirWatch::created, this, &KUserProxy::update); +} + +KUserProxy::~KUserProxy() +{ +} + +void KUserProxy::update(const QString &path) +{ + if (path == m_user.faceIconPath()) { + // we need to force updates, even when the path doesn't change, + // but the underlying image does. Change path temporarily, to + // make the Image reload. + // Needs cache: false in the Image item to actually reload + m_temporaryEmptyFaceIconPath = true; + emit faceIconUrlChanged(); + m_temporaryEmptyFaceIconPath = false; + emit faceIconUrlChanged(); + } else if (path == etcPasswd) { + m_user = KUser(); + emit nameChanged(); + } +} + +QString KUserProxy::fullName() const +{ + QString fullName = m_user.property(KUser::FullName).toString(); + if (!fullName.isEmpty()) { + return fullName; + } + return loginName(); +} + +QString KUserProxy::loginName() const +{ + return m_user.loginName(); +} + +QUrl KUserProxy::faceIconUrl() const +{ + if (m_temporaryEmptyFaceIconPath) { + return QUrl(); + } + const QString u = m_user.faceIconPath(); + const QFile f(u); + if (f.exists(u)) { + // We need to return a file URL, not a simple path + return QUrl::fromLocalFile(u); + } + return QUrl(); +} + +QString KUserProxy::os() +{ + if (m_os.isEmpty()) { + QFile osfile(QStringLiteral("/etc/os-release")); + if (osfile.exists()) { + if (!osfile.open(QIODevice::ReadOnly | QIODevice::Text)) { + return QString(); + } + + QTextStream in(&osfile); + while(!in.atEnd()) { + QString line = in.readLine(); + if (line.startsWith(QLatin1String("PRETTY_NAME"))) { + QStringList fields = line.split(QLatin1String("PRETTY_NAME=\"")); + if (fields.count() == 2) { + osfile.close(); + QString pretty = fields.at(1); + pretty.chop(1); + m_os = pretty; + return pretty; + } + } + } + } + } + return m_os; +} + +QString KUserProxy::host() const +{ + return QHostInfo::localHostName(); +} + diff --git a/src/qmlcontrols/kcoreaddons/kuserproxy.h b/src/qmlcontrols/kcoreaddons/kuserproxy.h new file mode 100644 index 0000000..57b7030 --- /dev/null +++ b/src/qmlcontrols/kcoreaddons/kuserproxy.h @@ -0,0 +1,130 @@ +/* +Copyright 2013 Marco Martin +Copyright 2014 Sebastian Kügler + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) version 3, or any +later version accepted by the membership of KDE e.V. (or its +successor approved by the membership of KDE e.V.), which shall +act as a proxy defined in Section 6 of version 3 of the license. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library. If not, see . +*/ + +#ifndef KUSERPROXY_H +#define KUSERPROXY_H + +#include + +#include +#include + +/** + * KUserProxy (exposed as KUser to the QML runtime) is an object allowing + * read-only access to the user's name, os and version and the configured + * user image. This object can be used to personalize user interfaces. + * + * Example usage: + * @code + import org.kde.kcoreaddons 1.0 as KCoreAddons + [...] + + Item { + [...] + KCoreAddons.KUser { + id: kuser + } + + Image { + id: faceIcon + source: kuser.faceIconUrl + [...] + } + + Text { + text: kuser.fullName + [...] + } + } + @endcode + + * @short KUser provides read-only access to the user's personal information + * @see KUser + */ +class KUserProxy : public QObject +{ + Q_OBJECT + + Q_PROPERTY(QString fullName READ fullName NOTIFY nameChanged) + Q_PROPERTY(QString loginName READ loginName NOTIFY nameChanged) + Q_PROPERTY(QUrl faceIconUrl READ faceIconUrl NOTIFY faceIconUrlChanged) + Q_PROPERTY(QString os READ os CONSTANT) + Q_PROPERTY(QString host READ host CONSTANT) + +public: + KUserProxy(QObject *parent = nullptr); + ~KUserProxy(); + + + /** + * @return the full name of the user + * @see nameChanged + */ + QString fullName() const; + + /** + * @return the user's login name + * @see nameChanged + * + */ + QString loginName() const; + + /** + * @return the url of the user's configured image (including file:/) + * @see faceIconUrlChanged + */ + QUrl faceIconUrl() const; + + /** + * @return pretty name indicating operating system and version + * @see nameChanged + */ + QString os(); + + /** + * @return the system's hostname + * @see nameChanged + */ + QString host() const; + +Q_SIGNALS: + /** + * signal that the user's name or login name changed + * @see fullName + * @see loginName + */ + void nameChanged(); + /** + * signal that the user image changed + * @see faceIconUrl + */ + void faceIconUrlChanged(); + +private: + void update(const QString &path); + KDirWatch m_dirWatch; + KUser m_user; + QString m_os; + bool m_temporaryEmptyFaceIconPath; +}; + +#endif //KUSERPROXY_H + diff --git a/src/qmlcontrols/kcoreaddons/qmldir b/src/qmlcontrols/kcoreaddons/qmldir new file mode 100644 index 0000000..626f8ce --- /dev/null +++ b/src/qmlcontrols/kcoreaddons/qmldir @@ -0,0 +1,3 @@ +module org.kde.kcoreaddons +plugin kcoreaddonsplugin + diff --git a/src/qmlcontrols/kioplugin/CMakeLists.txt b/src/qmlcontrols/kioplugin/CMakeLists.txt new file mode 100644 index 0000000..7b258e0 --- /dev/null +++ b/src/qmlcontrols/kioplugin/CMakeLists.txt @@ -0,0 +1,18 @@ +project(kioplugin) + +set(kioplugin_SRCS + kioplugin.cpp + krunproxy.cpp + ) + +add_library(kio SHARED ${kioplugin_SRCS}) +target_link_libraries(kio + Qt5::Core + Qt5::Qml + KF5::KIOWidgets +) + +install(TARGETS kio DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kio) + +install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kio) + diff --git a/src/qmlcontrols/kioplugin/kioplugin.cpp b/src/qmlcontrols/kioplugin/kioplugin.cpp new file mode 100644 index 0000000..3cac84d --- /dev/null +++ b/src/qmlcontrols/kioplugin/kioplugin.cpp @@ -0,0 +1,30 @@ +/* + * Copyright 2014 Antonis Tsiapaliokas + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "kioplugin.h" + +#include + +#include "krunproxy.h" + +void KioPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(QString::fromLatin1(uri) == QLatin1String("org.kde.kio")); + + qmlRegisterType(uri, 1, 0, "KRun"); +} diff --git a/src/qmlcontrols/kioplugin/kioplugin.h b/src/qmlcontrols/kioplugin/kioplugin.h new file mode 100644 index 0000000..bdd6f2c --- /dev/null +++ b/src/qmlcontrols/kioplugin/kioplugin.h @@ -0,0 +1,33 @@ +/* + * Copyright 2014 Antonis Tsiapaliokas + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef KIOPLUGIN_H +#define KIOPLUGIN_H + +#include + +class KioPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + void registerTypes(const char *uri) Q_DECL_OVERRIDE; +}; + +#endif diff --git a/src/qmlcontrols/kioplugin/krunproxy.cpp b/src/qmlcontrols/kioplugin/krunproxy.cpp new file mode 100644 index 0000000..b276773 --- /dev/null +++ b/src/qmlcontrols/kioplugin/krunproxy.cpp @@ -0,0 +1,60 @@ +/* + * Copyright 2014 Antonis Tsiapaliokas + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "krunproxy.h" + +#include + +#include +#include + +KRunProxy::KRunProxy(QObject* parent) + : QObject(parent) +{ +} + +bool KRunProxy::openUrl(const QString &filePath) +{ + QMimeDatabase db; + QMimeType mime = db.mimeTypeForFile(filePath); + const QString fileMymeType = mime.name(); + + if (fileMymeType == QStringLiteral("application/x-executable") || !mime.isValid()) { + //for security reasons we should not be able to execute applications. + //We should use its desktop file to access it. + return false; + } + + if (fileMymeType == QStringLiteral("application/x-desktop")) { + // If our mimetype is a desktop file, then we don't want to open + // the desktop file itself but the application in which it is associated + // with. + KService::Ptr service = KService::serviceByDesktopPath(filePath); + return KRun::runService(*service, QList(), nullptr) != 0; + } else { + return KRun::runUrl(QUrl(filePath), fileMymeType, nullptr); + } +} + +bool KRunProxy::openService(const QString &serviceName) +{ + KService::Ptr service = KService::serviceByDesktopName(serviceName); + if(service) + return KRun::runApplication(*service, QList(), nullptr) != 0; + return false; +} diff --git a/src/qmlcontrols/kioplugin/krunproxy.h b/src/qmlcontrols/kioplugin/krunproxy.h new file mode 100644 index 0000000..40c5695 --- /dev/null +++ b/src/qmlcontrols/kioplugin/krunproxy.h @@ -0,0 +1,45 @@ +/* + * Copyright 2014 Antonis Tsiapaliokas + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef KRUNPROXY_H +#define KRUNPROXY_H + +#include + +class KRunProxy : public QObject +{ + Q_OBJECT + + public: + + explicit KRunProxy (QObject* parent = nullptr); + + /** + * opens the url from the existing file + */ + Q_INVOKABLE bool openUrl(const QString &filePath); + + /** + * Runs the service (application) + * @param serviceName the name of the desktop file without extension + * @return true on success + */ + Q_INVOKABLE bool openService(const QString &serviceName); +}; + +#endif diff --git a/src/qmlcontrols/kioplugin/qmldir b/src/qmlcontrols/kioplugin/qmldir new file mode 100644 index 0000000..fa58b77 --- /dev/null +++ b/src/qmlcontrols/kioplugin/qmldir @@ -0,0 +1,3 @@ +module org.kde.kio +plugin kio + diff --git a/src/qmlcontrols/kquickcontrols/CMakeLists.txt b/src/qmlcontrols/kquickcontrols/CMakeLists.txt new file mode 100644 index 0000000..f2bee5e --- /dev/null +++ b/src/qmlcontrols/kquickcontrols/CMakeLists.txt @@ -0,0 +1,8 @@ +project(kquickcontrols) + +install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kquickcontrols) +install(FILES KeySequenceItem.qml DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kquickcontrols) +install(FILES ColorButton.qml DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kquickcontrols) + +add_subdirectory(private) + diff --git a/src/qmlcontrols/kquickcontrols/ColorButton.qml b/src/qmlcontrols/kquickcontrols/ColorButton.qml new file mode 100644 index 0000000..2d61096 --- /dev/null +++ b/src/qmlcontrols/kquickcontrols/ColorButton.qml @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2015 David Edmundson + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License or (at your option) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 as QtControls +import QtQuick.Dialogs 1.0 as QtDialogs + +/** + * @short A pushbutton to display or allow user selection of a color. + * + * This widget can be used to display or allow user selection of a color. + * + * @inherits QtQuick.Controls.Button + */ +QtControls.Button { + id: colorPicker + + /** + * The user selected color + */ + property alias color: colorDialog.color + + /** + * Title to show in the dialog + */ + property alias dialogTitle: colorDialog.title + + /** + * The color which the user has currently selected whilst the dialog is open + * For the color that is set when the dialog is accepted, use the color property. + */ + property alias currentColor: colorDialog.currentColor + + /** + * Allow the user to configure an alpha value + */ + property alias showAlphaChannel: colorDialog.showAlphaChannel + + + readonly property real _buttonMarigns: 4 // same as QStyles. Remove if we can get this provided by the QQC theme + + implicitWidth: 40 + _buttonMarigns*2 //to perfectly clone kcolorbutton from kwidgetaddons + + + //create a checkerboard background for alpha to be adjusted + Canvas { + anchors.fill: colorBlock + visible: colorDialog.color.a < 1 + + onPaint: { + var ctx = getContext('2d'); + + ctx.fillStyle = "white"; + ctx.fillRect(0,0, ctx.width, ctx.height) + + ctx.fillStyle = "black"; + //in blocks of 16x16 draw two black squares of 8x8 in top left and bottom right + for (var j=0;j + * Copyright (C) 2014 David Edmundson + * Copyright (C) 1998 Mark Donohoe + * Copyright (C) 2001 Ellis Whitehead + * Copyright (C) 2007 Andreas Hartmetz + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "keysequencehelper.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +uint qHash(const QKeySequence &seq) +{ + return qHash(seq.toString()); +} + +class KeySequenceHelperPrivate +{ +public: + KeySequenceHelperPrivate(KeySequenceHelper *q); + + void init(); + + static QKeySequence appendToSequence(const QKeySequence &seq, int keyQt); + static bool isOkWhenModifierless(int keyQt); + + void updateShortcutDisplay(); + void startRecording(); + + /** + * Conflicts the key sequence @a seq with a current standard + * shortcut? + */ + bool conflictWithStandardShortcuts(const QKeySequence &seq); + + /** + * Conflicts the key sequence @a seq with a current global + * shortcut? + */ + bool conflictWithGlobalShortcuts(const QKeySequence &seq); + + /** + * Get permission to steal the shortcut @seq from the standard shortcut @a std. + */ + bool stealStandardShortcut(KStandardShortcut::StandardShortcut std, const QKeySequence &seq); + + bool checkAgainstStandardShortcuts() const + { + return checkAgainstShortcutTypes & KeySequenceHelper::StandardShortcuts; + } + + bool checkAgainstGlobalShortcuts() const + { + return checkAgainstShortcutTypes & KeySequenceHelper::GlobalShortcuts; + } + + void controlModifierlessTimout() + { + if (nKey != 0 && !modifierKeys) { + // No modifier key pressed currently. Start the timout + modifierlessTimeout.start(600); + } else { + // A modifier is pressed. Stop the timeout + modifierlessTimeout.stop(); + } + + } + + void cancelRecording() + { + keySequence = oldKeySequence; + q->doneRecording(); + } + + +//members + KeySequenceHelper *const q; + QToolButton *clearButton; + + QKeySequence keySequence; + QKeySequence oldKeySequence; + QTimer modifierlessTimeout; + bool allowModifierless; + uint nKey; + uint modifierKeys; + bool isRecording; + bool multiKeyShortcutsAllowed; + QString componentName; + QString shortcutDisplay; + + //! Check the key sequence against KStandardShortcut::find() + KeySequenceHelper::ShortcutTypes checkAgainstShortcutTypes; + + /** + * The list of action to check against for conflict shortcut + */ + QList checkList; // deprecated + + /** + * The list of action collections to check against for conflict shortcut + */ +// QList checkActionCollections; + + /** + * The action to steal the shortcut from. + */ + QList stealActions; + + bool stealShortcuts(const QList &actions, const QKeySequence &seq); + void wontStealShortcut(QAction *item, const QKeySequence &seq); + +}; + +KeySequenceHelperPrivate::KeySequenceHelperPrivate(KeySequenceHelper *q) +: q(q) +, allowModifierless(false) +, nKey(0) +, modifierKeys(0) +, isRecording(false) +, multiKeyShortcutsAllowed(true) +, componentName() +, checkAgainstShortcutTypes(KeySequenceHelper::StandardShortcuts | KeySequenceHelper::GlobalShortcuts) +, stealActions() +{ + +} + +KeySequenceHelper::KeySequenceHelper(QObject* parent): + QObject(), + d(new KeySequenceHelperPrivate(this)) +{ + Q_UNUSED(parent); + connect(&d->modifierlessTimeout, SIGNAL(timeout()), this, SLOT(doneRecording())); + d->updateShortcutDisplay(); +} + + +KeySequenceHelper::~KeySequenceHelper() +{ + delete d; +} + +bool KeySequenceHelper::multiKeyShortcutsAllowed() const +{ + return d->multiKeyShortcutsAllowed; +} + +void KeySequenceHelper::setMultiKeyShortcutsAllowed(bool allowed) +{ + d->multiKeyShortcutsAllowed = allowed; +} + +void KeySequenceHelper::setModifierlessAllowed(bool allow) +{ + d->allowModifierless = allow; +} + +bool KeySequenceHelper::isModifierlessAllowed() +{ + return d->allowModifierless; +} + +bool KeySequenceHelper::isKeySequenceAvailable(const QKeySequence& keySequence) const +{ + if (keySequence.isEmpty()) { + return true; + } + return !(d->conflictWithGlobalShortcuts(keySequence) + || d->conflictWithStandardShortcuts(keySequence)); +} + +// +// void KeySequenceHelper::setCheckActionCollections(const QList &actionCollections) +// { +// d->checkActionCollections = actionCollections; +// } +// + +//slot +void KeySequenceHelper::captureKeySequence() +{ + d->startRecording(); +} + +QKeySequence KeySequenceHelper::keySequence() const +{ + return d->keySequence; +} + +void KeySequenceHelper::setKeySequence(const QKeySequence& sequence) +{ + if (!d->isRecording) { + d->oldKeySequence = d->keySequence; + } + d->keySequence = sequence; + d->updateShortcutDisplay(); + emit keySequenceChanged(d->keySequence); +} + + +void KeySequenceHelper::clearKeySequence() +{ + setKeySequence(QKeySequence()); +} + +void KeySequenceHelperPrivate::startRecording() +{ + nKey = 0; + modifierKeys = 0; + oldKeySequence = keySequence; + keySequence = QKeySequence(); + isRecording = true; + + updateShortcutDisplay(); +} +// +void KeySequenceHelper::doneRecording() +{ + d->modifierlessTimeout.stop(); + d->isRecording = false; + d->stealActions.clear(); + + if (d->keySequence == d->oldKeySequence) { +// The sequence hasn't changed + d->updateShortcutDisplay(); + return; + } + + if (! isKeySequenceAvailable(d->keySequence)) { +// The sequence had conflicts and the user said no to stealing it + d->keySequence = d->oldKeySequence; + } else { + emit keySequenceChanged(d->keySequence); + } + + Q_EMIT captureFinished(); + + d->updateShortcutDisplay(); +} + + +bool KeySequenceHelperPrivate::conflictWithGlobalShortcuts(const QKeySequence &keySequence) +{ +#ifdef Q_OS_WIN + //on windows F12 is reserved by the debugger at all times, so we can't use it for a global shortcut + if (KeySequenceHelper::GlobalShortcuts && keySequence.toString().contains(QStringLiteral("F12"))) { + QString title = i18n("Reserved Shortcut"); + QString message = i18n("The F12 key is reserved on Windows, so cannot be used for a global shortcut.\n" + "Please choose another one."); + + KMessageBox::sorry(0, message, title); + return false; + } +#endif + + if (!(checkAgainstShortcutTypes & KeySequenceHelper::GlobalShortcuts)) { + return false; + } + + // Global shortcuts are on key+modifier shortcuts. They can clash with + // each of the keys of a multi key shortcut. + QList others; + for (int i = 0; i < keySequence.count(); ++i) { + QKeySequence tmp(keySequence[i]); + + if (!KGlobalAccel::isGlobalShortcutAvailable(tmp, componentName)) { + others << KGlobalAccel::getGlobalShortcutsByKey(tmp); + } + } + + if (!others.isEmpty() + && !KGlobalAccel::promptStealShortcutSystemwide(nullptr, others, keySequence)) { + return true; + } + + // The user approved stealing the shortcut. We have to steal + // it immediately because KAction::setGlobalShortcut() refuses + // to set a global shortcut that is already used. There is no + // error it just silently fails. So be nice because this is + // most likely the first action that is done in the slot + // listening to keySequenceChanged(). + for (int i = 0; i < keySequence.count(); ++i) { + KGlobalAccel::stealShortcutSystemwide(keySequence[i]); + } + return false; +} + +bool KeySequenceHelperPrivate::conflictWithStandardShortcuts(const QKeySequence &keySequence) +{ + if (!checkAgainstStandardShortcuts()) { + return false; + } + + KStandardShortcut::StandardShortcut ssc = KStandardShortcut::find(keySequence); + if (ssc != KStandardShortcut::AccelNone && !stealStandardShortcut(ssc, keySequence)) { + qDebug() << "!!!!!!!!!!!!!!"; + return true; + } + return false; +} + +bool KeySequenceHelperPrivate::stealStandardShortcut(KStandardShortcut::StandardShortcut std, const QKeySequence &seq) +{ + QString title = i18n("Conflict with Standard Application Shortcut"); + QString message = i18n("The '%1' key combination is also used for the standard action " + "\"%2\" that some applications use.\n" + "Do you really want to use it as a global shortcut as well?", + seq.toString(QKeySequence::NativeText), KStandardShortcut::label(std)); + + if (KMessageBox::warningContinueCancel(nullptr, message, title, KGuiItem(i18n("Reassign"))) != KMessageBox::Continue) { + return false; + } + return true; +} + +void KeySequenceHelperPrivate::updateShortcutDisplay() +{ + //empty string if no non-modifier was pressed + QString s = keySequence.toString(QKeySequence::NativeText); + s.replace(QLatin1Char('&'), QStringLiteral("&&")); + + if (isRecording) { + if (modifierKeys) { + if (!s.isEmpty()) { + s.append(QLatin1Char(',')); + } + if (modifierKeys & Qt::MetaModifier) { + s += KKeyServer::modToStringUser(Qt::MetaModifier) + QLatin1Char('+'); + } +#if defined(Q_OS_MAC) + if (modifierKeys & Qt::AltModifier) { + s += KKeyServer::modToStringUser(Qt::AltModifier) + QLatin1Char('+'); + } + if (modifierKeys & Qt::ControlModifier) { + s += KKeyServer::modToStringUser(Qt::ControlModifier) + QLatin1Char('+'); + } +#else + if (modifierKeys & Qt::ControlModifier) { + s += KKeyServer::modToStringUser(Qt::ControlModifier) + QLatin1Char('+'); + } + if (modifierKeys & Qt::AltModifier) { + s += KKeyServer::modToStringUser(Qt::AltModifier) + QLatin1Char('+'); + } +#endif + if (modifierKeys & Qt::ShiftModifier) { + s += KKeyServer::modToStringUser(Qt::ShiftModifier) + QLatin1Char('+'); + } + if (modifierKeys & Qt::KeypadModifier) { + s += KKeyServer::modToStringUser(Qt::KeypadModifier) + QLatin1Char('+'); + } + } else if (nKey == 0) { + s = i18nc("What the user inputs now will be taken as the new shortcut", "Input"); + } + //make it clear that input is still going on + s.append(QStringLiteral(" ...")); + } + + if (s.isEmpty()) { + s = i18nc("No shortcut defined", "None"); + } + + s.prepend(QLatin1Char(' ')); + s.append(QLatin1Char(' ')); + shortcutDisplay = s; + q->shortcutDisplayChanged(s); +} + +QString KeySequenceHelper::shortcutDisplay() const +{ + return d->shortcutDisplay; +} + +void KeySequenceHelper::keyPressed(int key, int modifiers) +{ + if (key == -1) { + // Qt sometimes returns garbage keycodes, I observed -1, if it doesn't know a key. + // We cannot do anything useful with those (several keys have -1, indistinguishable) + // and QKeySequence.toString() will also yield a garbage string. + KMessageBox::sorry(nullptr, + i18n("The key you just pressed is not supported by Qt."), + i18n("Unsupported Key")); + return d->cancelRecording(); + } + + //don't have the return or space key appear as first key of the sequence when they + //were pressed to start editing - catch and them and imitate their effect + if (!d->isRecording && ((key == Qt::Key_Return || key == Qt::Key_Space))) { + d->startRecording(); + d->modifierKeys = modifiers; + d->updateShortcutDisplay(); + return; + } + + d->modifierKeys = modifiers; + + switch (key) { + case Qt::Key_AltGr: //or else we get unicode salad + return; + case Qt::Key_Shift: + case Qt::Key_Control: + case Qt::Key_Alt: + case Qt::Key_Meta: + case Qt::Key_Super_L: + case Qt::Key_Super_R: + case Qt::Key_Menu: //unused (yes, but why?) + d->controlModifierlessTimout(); + d->updateShortcutDisplay(); + break; + default: + + if (d->nKey == 0 && !(d->modifierKeys & ~Qt::SHIFT)) { + // It's the first key and no modifier pressed. Check if this is + // allowed + if (!(KeySequenceHelperPrivate::isOkWhenModifierless(key) + || d->allowModifierless)) { + // No it's not + return; + } + } + + // We now have a valid key press. + if (key) { + if ((key == Qt::Key_Backtab) && (d->modifierKeys & Qt::SHIFT)) { + key = Qt::Key_Tab | d->modifierKeys; + } else { + key |= (d->modifierKeys); + } + + if (d->nKey == 0) { + d->keySequence = QKeySequence(key); + } else { + d->keySequence = + KeySequenceHelperPrivate::appendToSequence(d->keySequence, key); + } + + d->nKey++; + if ((!d->multiKeyShortcutsAllowed) || (d->nKey >= 4)) { + doneRecording(); + return; + } + d->controlModifierlessTimout(); + d->updateShortcutDisplay(); + } + } +} +// +void KeySequenceHelper::keyReleased(int key, int modifiers) +{ + if (key == -1) { + // ignore garbage, see keyPressEvent() + return; + } + + //if a modifier that belongs to the shortcut was released... + if ((modifiers & d->modifierKeys) < d->modifierKeys) { + d->modifierKeys = modifiers; + d->controlModifierlessTimout(); + d->updateShortcutDisplay(); + } +} +// +//static +QKeySequence KeySequenceHelperPrivate::appendToSequence(const QKeySequence &seq, int keyQt) +{ + if (seq.matches(keyQt) != QKeySequence::NoMatch) { + return seq; + } + + switch (seq.count()) { + case 0: + return QKeySequence(keyQt); + case 1: + return QKeySequence(seq[0], keyQt); + case 2: + return QKeySequence(seq[0], seq[1], keyQt); + case 3: + return QKeySequence(seq[0], seq[1], seq[2], keyQt); + default: + return seq; + } +} +// +//static +bool KeySequenceHelperPrivate::isOkWhenModifierless(int keyQt) +{ + //this whole function is a hack, but especially the first line of code + if (QKeySequence(keyQt).toString().length() == 1) { + return false; + } + + switch (keyQt) { + case Qt::Key_Return: + case Qt::Key_Space: + case Qt::Key_Tab: + case Qt::Key_Backtab: //does this ever happen? + case Qt::Key_Backspace: + case Qt::Key_Delete: + return false; + default: + return true; + } +} diff --git a/src/qmlcontrols/kquickcontrols/private/keysequencehelper.h b/src/qmlcontrols/kquickcontrols/private/keysequencehelper.h new file mode 100644 index 0000000..54c9049 --- /dev/null +++ b/src/qmlcontrols/kquickcontrols/private/keysequencehelper.h @@ -0,0 +1,147 @@ +/* + * + * Copyright (C) 2014 David Edmundson + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef KEYSEQUENCEHELPER_H +#define KEYSEQUENCEHELPER_H + +#include +#include + +/** + * This class is a clone of Key from XMLGUI + * It performs only the logic of building shortcuts + * It is a private class to be used by KeySequenceItem + * + */ + +class KeySequenceHelperPrivate; + +class KeySequenceHelper : public QObject +{ + Q_OBJECT + + Q_PROPERTY( + QKeySequence keySequence + READ keySequence + WRITE setKeySequence + NOTIFY keySequenceChanged) + + Q_PROPERTY( + bool multiKeyShortcutsAllowed + READ multiKeyShortcutsAllowed + WRITE setMultiKeyShortcutsAllowed) + + Q_PROPERTY( + QString shortcutDisplay + READ shortcutDisplay + NOTIFY shortcutDisplayChanged) + + Q_PROPERTY( + bool modifierlessAllowed + READ isModifierlessAllowed + WRITE setModifierlessAllowed) + +public: + + enum ShortcutType { + None = 0x00, //!< No checking for conflicts + StandardShortcuts = 0x01, //!< Check against standard shortcuts. @see KStandardShortcut + GlobalShortcuts = 0x02 //!< Check against global shortcuts. @see KGlobalAccel + }; + Q_DECLARE_FLAGS(ShortcutTypes, ShortcutType) + Q_FLAG(ShortcutTypes) + + /** + * Constructor. + */ + explicit KeySequenceHelper(QObject* parent = nullptr); + + /** + * Destructs the widget. + */ + virtual ~KeySequenceHelper(); + + /** + * Allow multikey shortcuts? + */ + void setMultiKeyShortcutsAllowed(bool); + bool multiKeyShortcutsAllowed() const; + + /** + * This only applies to user input, not to setShortcut(). + * Set whether to accept "plain" keys without modifiers (like Ctrl, Alt, Meta). + * Plain keys by our definition include letter and symbol keys and + * text editing keys (Return, Space, Tab, Backspace, Delete). + * "Special" keys like F1, Cursor keys, Insert, PageDown will always work. + */ + void setModifierlessAllowed(bool allow); + + /** + * @see setModifierlessAllowed() + */ + bool isModifierlessAllowed(); + + + bool isRecording() const; + void setShortcut(bool recording); + + /** + * Set the default key sequence from a string + */ + void setKeySequence(const QKeySequence &sequence); + + /** + * Return the currently selected key sequence as a string + */ + QKeySequence keySequence() const; + QString shortcutDisplay() const; + + bool isKeySequenceAvailable(const QKeySequence &keySequence) const; + + +Q_SIGNALS: + void keySequenceChanged(const QKeySequence &seq); + void shortcutDisplayChanged(const QString &string); + void captureFinished(); + +public Q_SLOTS: + void captureKeySequence(); + void keyPressed(int key, int modifiers); + void keyReleased(int key, int modifiers); + + /** + * Clear the key sequence. + */ + void clearKeySequence(); + +private Q_SLOTS: + void doneRecording(); + +private: + friend class KeySequenceHelperPrivate; + KeySequenceHelperPrivate *const d; + + Q_DISABLE_COPY(KeySequenceHelper) +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(KeySequenceHelper::ShortcutTypes) + + +#endif // KEYSEQUENCEHELPER_H diff --git a/src/qmlcontrols/kquickcontrols/private/kquickcontrolsprivateplugin.cpp b/src/qmlcontrols/kquickcontrols/private/kquickcontrolsprivateplugin.cpp new file mode 100644 index 0000000..81205a2 --- /dev/null +++ b/src/qmlcontrols/kquickcontrols/private/kquickcontrolsprivateplugin.cpp @@ -0,0 +1,33 @@ +/* + * Copyright 2014 David Edmundson + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kquickcontrolsprivateplugin.h" + +#include + +#include "keysequencehelper.h" +#include "translationcontext.h" + +void KQuickControlsPrivatePlugin::registerTypes(const char *uri) +{ + Q_ASSERT(QString::fromLatin1(uri) == QLatin1String("org.kde.private.kquickcontrols")); + qmlRegisterType(uri, 2, 0, "KeySequenceHelper"); + qmlRegisterType(uri, 2, 0, "TranslationContext"); +} + diff --git a/src/qmlcontrols/kquickcontrols/private/kquickcontrolsprivateplugin.h b/src/qmlcontrols/kquickcontrols/private/kquickcontrolsprivateplugin.h new file mode 100644 index 0000000..a879e35 --- /dev/null +++ b/src/qmlcontrols/kquickcontrols/private/kquickcontrolsprivateplugin.h @@ -0,0 +1,34 @@ +/* + * Copyright 2014 David Edmundson + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef KQUICKCONTROLSPRIVATEPLUGIN_H +#define KQUICKCONTROLSPRIVATEPLUGIN_H + +#include + +class KQuickControlsPrivatePlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + void registerTypes(const char *uri) Q_DECL_OVERRIDE; +}; + +#endif diff --git a/src/qmlcontrols/kquickcontrols/private/qmldir b/src/qmlcontrols/kquickcontrols/private/qmldir new file mode 100644 index 0000000..8770bce --- /dev/null +++ b/src/qmlcontrols/kquickcontrols/private/qmldir @@ -0,0 +1,4 @@ +module org.kde.private.kquickcontrols +plugin kquickcontrolsprivateplugin + +ShortcutButton 2.0 ShortcutButton.qml diff --git a/src/qmlcontrols/kquickcontrols/private/translationcontext.cpp b/src/qmlcontrols/kquickcontrols/private/translationcontext.cpp new file mode 100644 index 0000000..faa68c4 --- /dev/null +++ b/src/qmlcontrols/kquickcontrols/private/translationcontext.cpp @@ -0,0 +1,235 @@ +/* + * Copyright (C) 2014 Kevin Ottens + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +// Undefine this because we don't want our i18n*() method names to be turned into i18nd*() +#undef TRANSLATION_DOMAIN + +#include "translationcontext.h" + +#include + +#include + +TranslationContext::TranslationContext(QObject* parent) + : QObject(parent) +{ +} + +TranslationContext::~TranslationContext() +{ +} + +QString TranslationContext::domain() const +{ + return m_domain; +} + +void TranslationContext::setDomain(const QString &domain) +{ + if (m_domain == domain) { + return; + } + + m_domain = domain; + emit domainChanged(domain); +} + +QString TranslationContext::i18n(const QString &message, const QString ¶m1, const QString ¶m2, const QString ¶m3, const QString ¶m4, const QString ¶m5, const QString ¶m6, const QString ¶m7, const QString ¶m8, const QString ¶m9, const QString ¶m10) const +{ + if (message.isNull()) { + qWarning() << "i18n() needs at least one parameter"; + return QString(); + } + + KLocalizedString trMessage = ki18nd(m_domain.toUtf8().constData(), message.toUtf8().constData()); + + if (!param1.isNull()) { + trMessage = trMessage.subs(param1); + } + if (!param2.isNull()) { + trMessage = trMessage.subs(param2); + } + if (!param3.isNull()) { + trMessage = trMessage.subs(param3); + } + if (!param4.isNull()) { + trMessage = trMessage.subs(param4); + } + if (!param5.isNull()) { + trMessage = trMessage.subs(param5); + } + if (!param6.isNull()) { + trMessage = trMessage.subs(param6); + } + if (!param7.isNull()) { + trMessage = trMessage.subs(param7); + } + if (!param8.isNull()) { + trMessage = trMessage.subs(param8); + } + if (!param9.isNull()) { + trMessage = trMessage.subs(param9); + } + if (!param10.isNull()) { + trMessage = trMessage.subs(param10); + } + + return trMessage.toString(); +} + +QString TranslationContext::i18nc(const QString &context, const QString &message, const QString ¶m1, const QString ¶m2, const QString ¶m3, const QString ¶m4, const QString ¶m5, const QString ¶m6, const QString ¶m7, const QString ¶m8, const QString ¶m9, const QString ¶m10) const +{ + if (context.isNull() || message.isNull()) { + qWarning() << "i18nc() needs at least two arguments"; + return QString(); + } + + KLocalizedString trMessage = ki18ndc(m_domain.toUtf8().constData(), context.toUtf8().constData(), message.toUtf8().constData()); + + if (!param1.isNull()) { + trMessage = trMessage.subs(param1); + } + if (!param2.isNull()) { + trMessage = trMessage.subs(param2); + } + if (!param3.isNull()) { + trMessage = trMessage.subs(param3); + } + if (!param4.isNull()) { + trMessage = trMessage.subs(param4); + } + if (!param5.isNull()) { + trMessage = trMessage.subs(param5); + } + if (!param6.isNull()) { + trMessage = trMessage.subs(param6); + } + if (!param7.isNull()) { + trMessage = trMessage.subs(param7); + } + if (!param8.isNull()) { + trMessage = trMessage.subs(param8); + } + if (!param9.isNull()) { + trMessage = trMessage.subs(param9); + } + if (!param10.isNull()) { + trMessage = trMessage.subs(param10); + } + + return trMessage.toString(); +} + +QString TranslationContext::i18np(const QString &singular, const QString &plural, const QString ¶m1, const QString ¶m2, const QString ¶m3, const QString ¶m4, const QString ¶m5, const QString ¶m6, const QString ¶m7, const QString ¶m8, const QString ¶m9, const QString ¶m10) const +{ + if (singular.isNull() || plural.isNull()) { + qWarning() << "i18np() needs at least two arguments"; + return QString(); + } + + KLocalizedString trMessage = ki18ndp(m_domain.toUtf8().constData(), singular.toUtf8().constData(), plural.toUtf8().constData()); + + if (!param1.isNull()) { + bool ok; + int num = param1.toInt(&ok); + if (ok) { + trMessage = trMessage.subs(num); + } else { + trMessage = trMessage.subs(param1); + } + } + if (!param2.isNull()) { + trMessage = trMessage.subs(param2); + } + if (!param3.isNull()) { + trMessage = trMessage.subs(param3); + } + if (!param4.isNull()) { + trMessage = trMessage.subs(param4); + } + if (!param5.isNull()) { + trMessage = trMessage.subs(param5); + } + if (!param6.isNull()) { + trMessage = trMessage.subs(param6); + } + if (!param7.isNull()) { + trMessage = trMessage.subs(param7); + } + if (!param8.isNull()) { + trMessage = trMessage.subs(param8); + } + if (!param9.isNull()) { + trMessage = trMessage.subs(param9); + } + if (!param10.isNull()) { + trMessage = trMessage.subs(param10); + } + + return trMessage.toString(); +} + +QString TranslationContext::i18ncp(const QString &context, const QString &singular, const QString &plural, const QString ¶m1, const QString ¶m2, const QString ¶m3, const QString ¶m4, const QString ¶m5, const QString ¶m6, const QString ¶m7, const QString ¶m8, const QString ¶m9, const QString ¶m10) const +{ + if (context.isNull() || singular.isNull() || plural.isNull()) { + qWarning() << "i18ncp() needs at least three arguments"; + return QString(); + } + + KLocalizedString trMessage = ki18ndcp(m_domain.toUtf8().constData(), context.toUtf8().constData(), singular.toUtf8().constData(), plural.toUtf8().constData()); + + if (!param1.isNull()) { + bool ok; + int num = param1.toInt(&ok); + if (ok) { + trMessage = trMessage.subs(num); + } else { + trMessage = trMessage.subs(param1); + } + } + if (!param2.isNull()) { + trMessage = trMessage.subs(param2); + } + if (!param3.isNull()) { + trMessage = trMessage.subs(param3); + } + if (!param4.isNull()) { + trMessage = trMessage.subs(param4); + } + if (!param5.isNull()) { + trMessage = trMessage.subs(param5); + } + if (!param6.isNull()) { + trMessage = trMessage.subs(param6); + } + if (!param7.isNull()) { + trMessage = trMessage.subs(param7); + } + if (!param8.isNull()) { + trMessage = trMessage.subs(param8); + } + if (!param9.isNull()) { + trMessage = trMessage.subs(param9); + } + if (!param10.isNull()) { + trMessage = trMessage.subs(param10); + } + + return trMessage.toString(); +} diff --git a/src/qmlcontrols/kquickcontrols/private/translationcontext.h b/src/qmlcontrols/kquickcontrols/private/translationcontext.h new file mode 100644 index 0000000..a75bd84 --- /dev/null +++ b/src/qmlcontrols/kquickcontrols/private/translationcontext.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2014 Kevin Ottens + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef TRANSLATIONCONTEXT_H +#define TRANSLATIONCONTEXT_H + +#include + +class TranslationContext : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString domain READ domain WRITE setDomain NOTIFY domainChanged) + +public: + explicit TranslationContext(QObject* parent = nullptr); + virtual ~TranslationContext(); + + QString domain() const; + +public Q_SLOTS: + void setDomain(const QString &domain); + +Q_SIGNALS: + void domainChanged(const QString &domain); + +public: + Q_INVOKABLE QString i18n(const QString &message, const QString ¶m1 = QString(), const QString ¶m2 = QString(), const QString ¶m3 = QString(), const QString ¶m4 = QString(), const QString ¶m5 = QString(), const QString ¶m6 = QString(), const QString ¶m7 = QString(), const QString ¶m8 = QString(), const QString ¶m9 = QString(), const QString ¶m10 = QString()) const; + + Q_INVOKABLE QString i18nc(const QString &context, const QString &message, const QString ¶m1 = QString(), const QString ¶m2 = QString(), const QString ¶m3 = QString(), const QString ¶m4 = QString(), const QString ¶m5 = QString(), const QString ¶m6 = QString(), const QString ¶m7 = QString(), const QString ¶m8 = QString(), const QString ¶m9 = QString(), const QString ¶m10 = QString()) const; + + Q_INVOKABLE QString i18np(const QString &singular, const QString &plural, const QString ¶m1 = QString(), const QString ¶m2 = QString(), const QString ¶m3 = QString(), const QString ¶m4 = QString(), const QString ¶m5 = QString(), const QString ¶m6 = QString(), const QString ¶m7 = QString(), const QString ¶m8 = QString(), const QString ¶m9 = QString(), const QString ¶m10 = QString()) const; + + Q_INVOKABLE QString i18ncp(const QString &context, const QString &singular, const QString &plural, const QString ¶m1 = QString(), const QString ¶m2 = QString(), const QString ¶m3 = QString(), const QString ¶m4 = QString(), const QString ¶m5 = QString(), const QString ¶m6 = QString(), const QString ¶m7 = QString(), const QString ¶m8 = QString(), const QString ¶m9 = QString(), const QString ¶m10 = QString()) const; + +private: + Q_DISABLE_COPY(TranslationContext) + + QString m_domain; +}; + +#endif // TRANSLATIONCONTEXT_H diff --git a/src/qmlcontrols/kquickcontrols/qmldir b/src/qmlcontrols/kquickcontrols/qmldir new file mode 100644 index 0000000..c977449 --- /dev/null +++ b/src/qmlcontrols/kquickcontrols/qmldir @@ -0,0 +1,2 @@ +KeySequenceItem 2.0 KeySequenceItem.qml +ColorButton 2.0 ColorButton.qml \ No newline at end of file diff --git a/src/qmlcontrols/kquickcontrolsaddons/CMakeLists.txt b/src/qmlcontrols/kquickcontrolsaddons/CMakeLists.txt new file mode 100644 index 0000000..f12474d --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/CMakeLists.txt @@ -0,0 +1,39 @@ +project(kquickcontrolsaddons) + +configure_file(config-kquickcontrolsaddons.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kquickcontrolsaddons.h) + +set(kquickcontrolsaddons_SRCS + kquickcontrolsaddonsplugin.cpp + qpixmapitem.cpp + qimageitem.cpp + qiconitem.cpp + mouseeventlistener.cpp + columnproxymodel.cpp + clipboard.cpp + eventgenerator.cpp + mimedatabase.cpp + kcmshell.cpp + icondialog.cpp +) + +if (HAVE_EPOXY) + set(kquickcontrolsaddons_SRCS ${kquickcontrolsaddons_SRCS} plotter.cpp) + set(KQUICKCONTROLSADDONS_EXTRA_LIBS ${epoxy_LIBRARY}) + include_directories(${epoxy_INCLUDE_DIR}) +endif() + +add_library(kquickcontrolsaddonsplugin SHARED ${kquickcontrolsaddons_SRCS}) + +target_link_libraries(kquickcontrolsaddonsplugin + Qt5::Core + Qt5::Quick + Qt5::Qml + Qt5::Gui + KF5::IconThemes + KF5::QuickAddons + KF5::ConfigCore + ${KQUICKCONTROLSADDONS_EXTRA_LIBS}) + +install(TARGETS kquickcontrolsaddonsplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kquickcontrolsaddons) + +install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kquickcontrolsaddons) diff --git a/src/qmlcontrols/kquickcontrolsaddons/Mainpage.dox b/src/qmlcontrols/kquickcontrolsaddons/Mainpage.dox new file mode 100644 index 0000000..ab18724 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/Mainpage.dox @@ -0,0 +1,14 @@ +/** @mainpage Qt Extra Components + +

import org.kde.qtextracomponents

+ +- QPixmapItem +- QImageItem +- QIconItem +- MouseEventListener +- ColumnProxyModel + +*/ + +// DOXYGEN_SET_PROJECT_NAME = QtExtraComponents +// vim:ts=4:sw=4:expandtab:filetype=doxygen diff --git a/src/qmlcontrols/kquickcontrolsaddons/clipboard.cpp b/src/qmlcontrols/kquickcontrolsaddons/clipboard.cpp new file mode 100644 index 0000000..f906079 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/clipboard.cpp @@ -0,0 +1,128 @@ +/* + * Copyright 2014 Aleix Pol Gonzalez + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "clipboard.h" +#include +#include +#include +#include + +Clipboard::Clipboard(QObject* parent) + : QObject(parent) + , m_clipboard(QGuiApplication::clipboard()) + , m_mode(QClipboard::Clipboard) +{ + connect(m_clipboard, SIGNAL(changed(QClipboard::Mode)), SLOT(clipboardChanged(QClipboard::Mode))); +} + +void Clipboard::setMode(QClipboard::Mode mode) +{ + m_mode = mode; + emit modeChanged(m_mode); +} + +void Clipboard::clipboardChanged(QClipboard::Mode m) +{ + if (m == m_mode) { + emit contentChanged(); + } +} + +void Clipboard::clear() +{ + m_clipboard->clear(m_mode); +} + +QClipboard::Mode Clipboard::mode() const +{ + return m_mode; +} + +QVariant Clipboard::contentFormat(const QString &format) const +{ + const QMimeData* data = m_clipboard->mimeData(m_mode); + QVariant ret; + if(format == QStringLiteral("text/uri-list")) { + QVariantList retList; + foreach(const QUrl& url, data->urls()) + retList += url; + ret = retList; + } else if(format.startsWith(QStringLiteral("text/"))) { + ret = data->text(); + } else if(format.startsWith(QStringLiteral("image/"))) { + ret = data->imageData(); + } else + ret = data->data(format.isEmpty() ? data->formats().first(): format); + + return ret; +} + +QVariant Clipboard::content() const +{ + return contentFormat(m_clipboard->mimeData(m_mode)->formats().first()); +} + +void Clipboard::setContent(const QVariant &content) +{ + QMimeData* mimeData = new QMimeData; + switch(content.type()) + { + case QVariant::String: + mimeData->setText(content.toString()); + break; + case QVariant::Color: + mimeData->setColorData(content.toString()); + break; + case QVariant::Pixmap: + case QVariant::Image: + mimeData->setImageData(content); + break; + default: + if (content.type() == QVariant::List) { + QVariantList list = content.toList(); + QList urls; + bool wasUrlList = true; + foreach (const QVariant& url, list) { + if (url.type() != QVariant::Url) { + wasUrlList = false; + break; + } + urls += url.toUrl(); + } + if(wasUrlList) { + mimeData->setUrls(urls); + break; + } + } + + if (content.canConvert(QVariant::String)) { + mimeData->setText(content.toString()); + } else { + mimeData->setData(QStringLiteral("application/octet-stream"), content.toByteArray()); + qWarning() << "Couldn't figure out the content type, storing as application/octet-stream"; + } + break; + } + m_clipboard->setMimeData(mimeData, m_mode); +} + +QStringList Clipboard::formats() const +{ + return m_clipboard->mimeData(m_mode)->formats(); +} diff --git a/src/qmlcontrols/kquickcontrolsaddons/clipboard.h b/src/qmlcontrols/kquickcontrolsaddons/clipboard.h new file mode 100644 index 0000000..6fdca4b --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/clipboard.h @@ -0,0 +1,73 @@ +/* + * Copyright 2014 Aleix Pol Gonzalez + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef CLIPBOARD_H +#define CLIPBOARD_H + +#include +#include +#include + +class ClipboardPrivate; + +class Clipboard : public QObject +{ + Q_OBJECT + /** + * Controls the state this object will be monitoring and extracting its contents from. + */ + Q_PROPERTY(QClipboard::Mode mode READ mode WRITE setMode NOTIFY modeChanged) + + /** + * Provides the contents currently in the clipboard and lets modify them. + */ + Q_PROPERTY(QVariant content READ content WRITE setContent NOTIFY contentChanged) + + /** + * Figure out the nature of the contents in the clipboard. + */ + Q_PROPERTY(QStringList formats READ formats NOTIFY contentChanged) + + public: + explicit Clipboard(QObject* parent = nullptr); + + QClipboard::Mode mode() const; + void setMode(QClipboard::Mode mode); + + Q_SCRIPTABLE QVariant contentFormat(const QString &format) const; + QVariant content() const; + void setContent(const QVariant &content); + + QStringList formats() const; + + Q_SCRIPTABLE void clear(); + + Q_SIGNALS: + void modeChanged(QClipboard::Mode mode); + void contentChanged(); + + private Q_SLOTS: + void clipboardChanged(QClipboard::Mode m); + + private: + QClipboard* m_clipboard; + QClipboard::Mode m_mode; +}; + +#endif diff --git a/src/qmlcontrols/kquickcontrolsaddons/columnproxymodel.cpp b/src/qmlcontrols/kquickcontrolsaddons/columnproxymodel.cpp new file mode 100644 index 0000000..3d3bef8 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/columnproxymodel.cpp @@ -0,0 +1,246 @@ +/* + * Copyright 2012 by Aleix Pol Gonzalez + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "columnproxymodel.h" + +ColumnProxyModel::ColumnProxyModel(QObject* parent) + : QAbstractListModel(parent) + , m_column(0) + , m_sourceModel(nullptr) +{} + +void ColumnProxyModel::setSourceModel(QAbstractItemModel* sourceModel) +{ + if(sourceModel==m_sourceModel) { + return; + } + + beginResetModel(); + if(m_sourceModel) { + disconnect(m_sourceModel, SIGNAL(destroyed(QObject*)), + this, SLOT(sourceDestroyed(QObject*))); + + disconnect(m_sourceModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), + this, SLOT(considerDataChanged(QModelIndex,QModelIndex))); + disconnect(m_sourceModel, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)), + this, SLOT(considerRowsAboutToBeInserted(QModelIndex,int,int))); + disconnect(m_sourceModel, SIGNAL(rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)), + this, SLOT(considerRowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int))); + disconnect(m_sourceModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), + this, SLOT(considerRowsAboutToBeRemoved(QModelIndex,int,int))); + disconnect(m_sourceModel, SIGNAL(rowsInserted(QModelIndex,int,int)), + this, SLOT(considerRowsInserted(QModelIndex,int,int))); + disconnect(m_sourceModel, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)), + this, SLOT(considerRowsMoved(QModelIndex,int,int,QModelIndex,int))); + disconnect(m_sourceModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), + this, SLOT(considerRowsRemoved(QModelIndex,int,int))); + + disconnect(m_sourceModel, SIGNAL(modelAboutToBeReset()), + this, SIGNAL(modelAboutToBeReset())); + disconnect(m_sourceModel, SIGNAL(modelReset()), + this, SIGNAL(modelReset())); + disconnect(m_sourceModel, SIGNAL(headerDataChanged(Qt::Orientation,int,int)), + this, SIGNAL(headerDataChanged(Qt::Orientation,int,int))); + disconnect(m_sourceModel, SIGNAL(layoutAboutToBeChanged()), + this, SIGNAL(layoutAboutToBeChanged())); + disconnect(m_sourceModel, SIGNAL(layoutChanged()), + this, SIGNAL(layoutChanged())); + } + m_sourceModel = sourceModel; + if(m_sourceModel) { + connect(m_sourceModel, SIGNAL(destroyed(QObject*)), + this, SLOT(sourceDestroyed(QObject*))); + + connect(m_sourceModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), + this, SLOT(considerDataChanged(QModelIndex,QModelIndex))); + connect(m_sourceModel, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)), + this, SLOT(considerRowsAboutToBeInserted(QModelIndex,int,int))); + connect(m_sourceModel, SIGNAL(rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)), + this, SLOT(considerRowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int))); + connect(m_sourceModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), + this, SLOT(considerRowsAboutToBeRemoved(QModelIndex,int,int))); + connect(m_sourceModel, SIGNAL(rowsInserted(QModelIndex,int,int)), + this, SLOT(considerRowsInserted(QModelIndex,int,int))); + connect(m_sourceModel, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)), + this, SLOT(considerRowsMoved(QModelIndex,int,int,QModelIndex,int))); + connect(m_sourceModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), + this, SLOT(considerRowsRemoved(QModelIndex,int,int))); + + connect(m_sourceModel, SIGNAL(modelAboutToBeReset()), + this, SIGNAL(modelAboutToBeReset())); + connect(m_sourceModel, SIGNAL(modelReset()), + this, SIGNAL(modelReset())); + connect(m_sourceModel, SIGNAL(headerDataChanged(Qt::Orientation,int,int)), + this, SIGNAL(headerDataChanged(Qt::Orientation,int,int))); + connect(m_sourceModel, SIGNAL(layoutAboutToBeChanged()), + this, SIGNAL(layoutAboutToBeChanged())); + connect(m_sourceModel, SIGNAL(layoutChanged()), + this, SIGNAL(layoutChanged())); + } + endResetModel(); +} + +void ColumnProxyModel::setColumn(int col) +{ + beginResetModel(); + m_column = col; + endResetModel(); +} + +int ColumnProxyModel::column() const +{ + return m_column; +} + +QModelIndex ColumnProxyModel::rootIndex() const +{ + return m_index; +} + +void ColumnProxyModel::setRootIndex(const QModelIndex& index) +{ + if (index == m_index) { + return; + } + + if(index.isValid()) { + setSourceModel(const_cast(index.model())); + } + beginResetModel(); + m_index = index; + endResetModel(); + + emit rootIndexChanged(); +} + +QModelIndex ColumnProxyModel::indexFromModel(QAbstractItemModel* model, int row, int column, const QModelIndex& parent) +{ + return model ? model->index(row, column, parent) : QModelIndex(); +} + +QVariant ColumnProxyModel::data(const QModelIndex& index, int role) const +{ + return m_sourceModel ? m_sourceModel->data(sourceIndex(index), role) : QVariant(); +} + +QVariant ColumnProxyModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + return m_sourceModel ? m_sourceModel->headerData(section, orientation, role) : QVariant(); +} + +QModelIndex ColumnProxyModel::sourceIndex(const QModelIndex& proxyIndex) const +{ + return m_sourceModel ? m_sourceModel->index(proxyIndex.row(), m_column, m_index) : QModelIndex(); +} + +int ColumnProxyModel::rowCount(const QModelIndex& parent) const +{ + return (!m_sourceModel || parent.isValid()) ? 0 : m_sourceModel->rowCount(m_index); +} + +QModelIndex ColumnProxyModel::proxyIndex(const QModelIndex& sourceIndex) const +{ + if(sourceIndex.parent()==m_index) + return index(sourceIndex.row(), sourceIndex.column(), QModelIndex()); + + return QModelIndex(); +} + +void ColumnProxyModel::sourceDestroyed(QObject* source) +{ + Q_ASSERT(source==m_sourceModel); + + beginResetModel(); + m_sourceModel = nullptr; + endResetModel(); +} + +QModelIndex ColumnProxyModel::indexAt(int row, const QModelIndex& parent) const +{ + return m_sourceModel ? m_sourceModel->index(row, m_column, parent) : QModelIndex(); +} + +///////////////// + +void ColumnProxyModel::considerDataChanged(const QModelIndex& idxA, const QModelIndex& idxB) +{ + if(idxA.parent()==m_index && idxB.parent()==m_index) { + emit dataChanged(proxyIndex(idxA), proxyIndex(idxB)); + } +} + +void ColumnProxyModel::considerRowsAboutToBeInserted(const QModelIndex& parent, int rA, int rB) +{ + if(parent==m_index) { + beginInsertRows(QModelIndex(), rA, rB); + } +} + +void ColumnProxyModel::considerRowsAboutToBeMoved(const QModelIndex &sourceParent, int rA, int rB, const QModelIndex& destParent, int rD) +{ + if(sourceParent==m_index && destParent==m_index) { + beginMoveRows(QModelIndex(), rA, rB, QModelIndex(), rD); + } else if(sourceParent==m_index) { + beginRemoveRows(sourceParent, rA, rB); + } else if(destParent==m_index) { + beginInsertRows(destParent, rD, rD+(rB-rA)); + } +} + +void ColumnProxyModel::considerRowsAboutToBeRemoved(const QModelIndex& parent, int rA, int rB) +{ + if(parent==m_index) { + beginRemoveRows(QModelIndex(), rA, rB); + } +} + +void ColumnProxyModel::considerRowsInserted(const QModelIndex& parent, int , int ) +{ + if(parent==m_index) { + endInsertRows(); + } +} + +void ColumnProxyModel::considerRowsMoved(const QModelIndex& sourceParent, int , int , const QModelIndex& destParent, int ) +{ + if(sourceParent==m_index && destParent==m_index) { + endMoveRows(); + } else if(sourceParent==m_index) { + endRemoveRows(); + } else if(destParent==m_index) { + endInsertRows(); + } +} + +void ColumnProxyModel::considerRowsRemoved(const QModelIndex& parent, int , int ) +{ + if(parent==m_index) { + endInsertRows(); + } +} + +QHash ColumnProxyModel::roleNames() const +{ + return m_sourceModel ? m_sourceModel->roleNames() : QHash(); +} + +bool ColumnProxyModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + return m_sourceModel && m_sourceModel->setData(sourceIndex(index), value, role); +} diff --git a/src/qmlcontrols/kquickcontrolsaddons/columnproxymodel.h b/src/qmlcontrols/kquickcontrolsaddons/columnproxymodel.h new file mode 100644 index 0000000..82e5741 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/columnproxymodel.h @@ -0,0 +1,75 @@ +/* + * Copyright 2012 by Aleix Pol Gonzalez + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef COLUMNPROXYMODEL_H +#define COLUMNPROXYMODEL_H + +#include + +class ColumnProxyModel : public QAbstractListModel +{ + Q_OBJECT + Q_PROPERTY(QModelIndex rootIndex READ rootIndex WRITE setRootIndex NOTIFY rootIndexChanged) +// Q_PROPERTY(QAbstractItemModel* sourceModel READ sourceModel WRITE setSourceModel) //rootIndex sets the model + Q_PROPERTY(int column READ column WRITE setColumn) + public: + explicit ColumnProxyModel(QObject* parent = nullptr); + + void setRootIndex(const QModelIndex& idx); + QModelIndex rootIndex() const; + + void setSourceModel(QAbstractItemModel* sourceModel); + QAbstractItemModel* sourceModel() const { return m_sourceModel; } + + int column() const; + void setColumn(int col); + + Q_SCRIPTABLE static QModelIndex indexFromModel(QAbstractItemModel* model, int row, int column=0, const QModelIndex& parent=QModelIndex()); + Q_SCRIPTABLE QModelIndex indexAt(int row, const QModelIndex& parent = QModelIndex()) const; + + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; + int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; + QHash roleNames() const Q_DECL_OVERRIDE; + + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; + + Q_SIGNALS: + void rootIndexChanged(); + + private: + QModelIndex proxyIndex(const QModelIndex& sourceIndex) const; + QModelIndex sourceIndex(const QModelIndex& proxyIndex) const; + + int m_column; + QModelIndex m_index; + QAbstractItemModel* m_sourceModel; + + private Q_SLOTS: + void considerRowsAboutToBeInserted(const QModelIndex&,int,int); + void considerRowsAboutToBeMoved(const QModelIndex& sourceParent, int rA, int rB, const QModelIndex& destParent, int rD); + void considerRowsAboutToBeRemoved(const QModelIndex&,int,int); + void considerRowsRemoved(const QModelIndex&,int,int); + void considerRowsMoved(const QModelIndex&,int,int,const QModelIndex&,int); + void considerRowsInserted(const QModelIndex&,int,int); + void considerDataChanged(const QModelIndex& idxA, const QModelIndex& idxB); + void sourceDestroyed(QObject* source); +}; + +#endif diff --git a/src/qmlcontrols/kquickcontrolsaddons/config-kquickcontrolsaddons.h.cmake b/src/qmlcontrols/kquickcontrolsaddons/config-kquickcontrolsaddons.h.cmake new file mode 100644 index 0000000..e5dbe9d --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/config-kquickcontrolsaddons.h.cmake @@ -0,0 +1,2 @@ +// epoxy library available? +#cmakedefine01 HAVE_EPOXY diff --git a/src/qmlcontrols/kquickcontrolsaddons/eventgenerator.cpp b/src/qmlcontrols/kquickcontrolsaddons/eventgenerator.cpp new file mode 100644 index 0000000..4931117 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/eventgenerator.cpp @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2015 by Eike Hein + * Copyright (C) 2015 Marco Martin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "eventgenerator.h" + +#include +#include +#include + +EventGenerator::EventGenerator(QObject *parent) : QObject(parent) +{ +} + +EventGenerator::~EventGenerator() +{ +} + +void EventGenerator::sendMouseEvent(QQuickItem *item, EventGenerator::MouseEvent type, int x, int y, int button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers) +{ + if (!item) { + return; + } + + QEvent::Type eventType; + switch (type) { + case MouseButtonPress: + eventType = QEvent::MouseButtonPress; + break; + case MouseButtonRelease: + eventType = QEvent::MouseButtonRelease; + break; + case MouseMove: + eventType = QEvent::MouseMove; + break; + default: + return; + } + QMouseEvent ev(eventType, QPointF(x, y), (Qt::MouseButton)button, buttons, modifiers); + + QGuiApplication::sendEvent(item, &ev); +} + +void EventGenerator::sendMouseEventRecursive(QQuickItem *parentItem, EventGenerator::MouseEvent type, int x, int y, int button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers) +{ + if (!parentItem) { + return; + } + + const QList items = allChildItemsRecursive(parentItem); + + foreach(QQuickItem *item, items) { + sendMouseEvent(item, type, x, y, button, buttons, modifiers); + } +} + +void EventGenerator::sendWheelEvent(QQuickItem *item, int x, int y, const QPoint &pixelDelta, const QPoint &angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers) +{ + if (!item || !item->window()) { + return; + } + + QPointF pos(x, y); + QPointF globalPos(item->window()->mapToGlobal(item->mapToScene(pos).toPoint())); + QWheelEvent ev(pos, globalPos, pixelDelta, angleDelta, /* qt4Delta */ 0, /* qt4Orientation */ Qt::Horizontal, buttons, modifiers); + QGuiApplication::sendEvent(item, &ev); +} + +void EventGenerator::sendWheelEventRecursive(QQuickItem *parentItem, int x, int y, const QPoint &pixelDelta, const QPoint &angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers) +{ + if (!parentItem) { + return; + } + + const QList items = allChildItemsRecursive(parentItem); + + foreach(QQuickItem *item, items) { + sendWheelEvent(item, x, y, pixelDelta, angleDelta, buttons, modifiers); + } +} + +void EventGenerator::sendGrabEvent(QQuickItem *item, EventGenerator::GrabEvent type) +{ + if (!item) { + return; + } + + QQuickWindow *win = item->window(); + + if (!win) { + return; + } + + switch (type) { + case GrabMouse: + item->grabMouse(); + break; + case UngrabMouse: { + QEvent ev(QEvent::UngrabMouse); + win->sendEvent(item, &ev); + return; + } + default: + return; + } +} + +void EventGenerator::sendGrabEventRecursive(QQuickItem *parentItem, EventGenerator::GrabEvent type) +{ + if (!parentItem) { + return; + } + + const QList items = allChildItemsRecursive(parentItem); + + foreach(QQuickItem *item, items) { + sendGrabEvent(item, type); + } +} + +QList EventGenerator::allChildItemsRecursive(QQuickItem *parentItem) +{ + QList itemList; + + itemList.append(parentItem->childItems()); + + foreach(QQuickItem *childItem, parentItem->childItems()) { + itemList.append(allChildItemsRecursive(childItem)); + } + + return itemList; +} diff --git a/src/qmlcontrols/kquickcontrolsaddons/eventgenerator.h b/src/qmlcontrols/kquickcontrolsaddons/eventgenerator.h new file mode 100644 index 0000000..d456a76 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/eventgenerator.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2015 by Eike Hein + * Copyright (C) 2015 Marco Martin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + + +#ifndef EventGenerator_H +#define EventGenerator_H + +#include + +class QQuickItem; + +class EventGenerator : public QObject +{ + Q_OBJECT + + public: + enum MouseEvent { + MouseButtonPress, + MouseButtonRelease, + MouseMove + }; + Q_ENUM(MouseEvent) + + enum GrabEvent { + GrabMouse, + UngrabMouse + }; + Q_ENUM(GrabEvent) + + EventGenerator(QObject *parent = nullptr); + ~EventGenerator(); + + /** + * Send a mouse event of @type to the given @item + */ + Q_INVOKABLE void sendMouseEvent(QQuickItem *item, EventGenerator::MouseEvent type, int x, int y, int button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); + + /** + * Send a mouse event of @type to the given @item, all its children and descendants + */ + Q_INVOKABLE void sendMouseEventRecursive(QQuickItem *item, EventGenerator::MouseEvent type, int x, int y, int button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); + + /** + * Send a wheel event to the given @item + * + * @since 5.16 + */ + Q_INVOKABLE void sendWheelEvent(QQuickItem *item, int x, int y, const QPoint &pixelDelta, const QPoint &angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); + + /** + * Send a wheel event to the given @item, all its children and descendants + * + * @since 5.16 + */ + Q_INVOKABLE void sendWheelEventRecursive(QQuickItem *item, int x, int y, const QPoint &pixelDelta, const QPoint &angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); + + /** + * Send a mouse grab event of @type (grab or ungrab) to the given @item + */ + Q_INVOKABLE void sendGrabEvent(QQuickItem *item, EventGenerator::GrabEvent type); + + /** + * Send a mouse grab event of @type (grab or ungrab) to the given @item, all its children and descendants + */ + Q_INVOKABLE void sendGrabEventRecursive(QQuickItem *item, EventGenerator::GrabEvent type); + + private: + static QList allChildItemsRecursive(QQuickItem *parentItem); +}; + +#endif diff --git a/src/qmlcontrols/kquickcontrolsaddons/icondialog.cpp b/src/qmlcontrols/kquickcontrolsaddons/icondialog.cpp new file mode 100644 index 0000000..663d9e4 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/icondialog.cpp @@ -0,0 +1,185 @@ +/*************************************************************************** + * Copyright 2015 Kai Uwe Broulik * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * + ***************************************************************************/ + +#include "icondialog.h" + +#include +#include + +#include +#include +#include + +IconDialog::IconDialog(QObject *parent) + : QObject(parent) + , m_dialog(nullptr) + , m_iconSize(0) + , m_user(false) + , m_modality(Qt::WindowModal) + , m_visible(false) +{ + if (qobject_cast(QCoreApplication::instance())) { + m_dialog.reset(new KIconDialog()); + connect(m_dialog.data(), &KIconDialog::newIconName, this, [this](const QString &newIconName) { + if (m_iconName != newIconName) { + m_iconName = newIconName; + emit iconNameChanged(newIconName); + } + }); + + m_dialog->installEventFilter(this); + } +} + +IconDialog::~IconDialog() +{ + if (m_dialog) { + m_dialog->close(); + } +} + +QString IconDialog::iconName() const +{ + return m_iconName; +} + +int IconDialog::iconSize() const +{ + return m_iconSize; +} + +void IconDialog::setIconSize(int iconSize) +{ + if (m_dialog->iconSize() != iconSize) { + m_iconSize = iconSize; + emit iconSizeChanged(iconSize); + } +} + +QString IconDialog::title() const +{ + return m_dialog->windowTitle(); +} + +void IconDialog::setTitle(const QString &title) +{ + if (m_dialog->windowTitle() != title) { + m_dialog->setWindowTitle(title); + emit titleChanged(title); + } +} + +bool IconDialog::user() const +{ + return m_user; +} + +void IconDialog::setUser(bool user) +{ + if (m_user != user) { + m_user = user; + emit userChanged(user); + } +} + +QString IconDialog::customLocation() const +{ + return m_customLocation; +} + +void IconDialog::setCustomLocation(const QString &customLocation) +{ + if (m_customLocation != customLocation) { + m_dialog->setCustomLocation(customLocation); + + m_customLocation = customLocation; + emit customLocationChanged(customLocation); + } +} + +Qt::WindowModality IconDialog::modality() const +{ + return m_modality; +} + +void IconDialog::setModality(Qt::WindowModality modality) +{ + if (m_modality != modality) { + m_modality = modality; + emit modalityChanged(modality); + } +} + +bool IconDialog::visible() const +{ + return m_dialog->isVisible(); +} + +void IconDialog::setVisible(bool visible) +{ + if (visible) { + open(); + } else { + close(); + } +} + +void IconDialog::open() +{ + if (m_dialog->isVisible()) { + return; + } + + QQuickItem *parentItem = qobject_cast(parent()); + QQuickWindow *parentWindow = (parentItem ? parentItem->window() : qobject_cast(parent())); + + if (m_modality == Qt::NonModal) { + m_dialog->setModal(false); + } else if (m_modality == Qt::WindowModal) { + m_dialog->winId(); // needed to get the windowHandle prior to showing + m_dialog->windowHandle()->setTransientParent(parentWindow); + m_dialog->setModal(false); // WindowModal does not unset the overall modality + } else if (m_modality == Qt::ApplicationModal) { + m_dialog->setModal(true); + } + + m_dialog->setWindowModality(m_modality); + + m_dialog->setup(KIconLoader::Desktop, KIconLoader::Application, false, m_iconSize, m_user); + + m_dialog->show(); +} + +void IconDialog::close() +{ + if (!m_dialog->isVisible()) { + return; + } + + m_dialog->hide(); +} + +bool IconDialog::eventFilter(QObject *watched, QEvent *event) +{ + if (watched == m_dialog.data() && (event->type() == QEvent::Show || event->type() == QEvent::Hide)) { + emit visibleChanged(); + } + + return false; +} diff --git a/src/qmlcontrols/kquickcontrolsaddons/icondialog.h b/src/qmlcontrols/kquickcontrolsaddons/icondialog.h new file mode 100644 index 0000000..38d9440 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/icondialog.h @@ -0,0 +1,113 @@ +/*************************************************************************** + * Copyright 2015 Kai Uwe Broulik * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * + ***************************************************************************/ + +#ifndef ICONDIALOG_H +#define ICONDIALOG_H + +#include +#include +#include + +class KIconDialog; + +class IconDialog : public QObject +{ + Q_OBJECT + + /** + * The name or path of the icon the user has selected + */ + Q_PROPERTY(QString iconName READ iconName NOTIFY iconNameChanged) + /** + * The desired size of icons + */ + Q_PROPERTY(int iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged) + /** + * The title to use for the dialog + */ + Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged) + /** + * Begin with the "user icons" instead of "system icons" + */ + Q_PROPERTY(bool user READ user WRITE setUser NOTIFY userChanged) + /** + * Use a custom location, only local directory paths are allowed + */ + Q_PROPERTY(QString customLocation READ customLocation WRITE setCustomLocation NOTIFY customLocationChanged) + /** + * Window modality, default is Qt.NonModal + */ + Q_PROPERTY(Qt::WindowModality modality READ modality WRITE setModality NOTIFY modalityChanged) + /** + * Whether the dialog is currently visible, setting this property to true + * is the same as calling show() + */ + Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY visibleChanged) + +public: + explicit IconDialog(QObject *parent = nullptr); + virtual ~IconDialog(); + + QString iconName() const; + + int iconSize() const; + void setIconSize(int iconSize); + + QString title() const; + void setTitle(const QString &title); + + bool user() const; + void setUser(bool user); + + QString customLocation() const; + void setCustomLocation(const QString &customLocation); + + Qt::WindowModality modality() const; + void setModality(Qt::WindowModality modality); + + bool visible() const; + void setVisible(bool visible); + + Q_INVOKABLE void open(); + Q_INVOKABLE void close(); + +Q_SIGNALS: + void iconNameChanged(const QString &iconName); + void iconSizeChanged(int iconSize); + void titleChanged(const QString &title); + void userChanged(bool user); + void customLocationChanged(const QString &customLocation); + void modalityChanged(Qt::WindowModality modality); + void visibleChanged(); + +private: + bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE; + + QScopedPointer m_dialog; + + QString m_iconName; + int m_iconSize; + bool m_user; + QString m_customLocation; + Qt::WindowModality m_modality; + bool m_visible; + +}; + +#endif // ICONDIALOG_H diff --git a/src/qmlcontrols/kquickcontrolsaddons/kcmshell.cpp b/src/qmlcontrols/kquickcontrolsaddons/kcmshell.cpp new file mode 100644 index 0000000..08d0916 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/kcmshell.cpp @@ -0,0 +1,44 @@ +/* + * Copyright 2015 Kai Uwe Broulik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "kcmshell.h" + +#include + +#include + +KCMShell::KCMShell(QObject *parent) : QObject(parent) +{ + +} + +KCMShell::~KCMShell() +{ + +} + +void KCMShell::open(const QStringList &names) const +{ + QProcess::startDetached(QStringLiteral("kcmshell5"), names); +} + +QStringList KCMShell::authorize(const QStringList &menuIds) const +{ + return KAuthorized::authorizeControlModules(menuIds); +} diff --git a/src/qmlcontrols/kquickcontrolsaddons/kcmshell.h b/src/qmlcontrols/kquickcontrolsaddons/kcmshell.h new file mode 100644 index 0000000..be15864 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/kcmshell.h @@ -0,0 +1,57 @@ +/* + * Copyright 2015 Kai Uwe Broulik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef KCMSHELL_H +#define KCMSHELL_H + +#include + +class KCMShell : public QObject +{ + Q_OBJECT + +public: + explicit KCMShell(QObject *parent = nullptr); + virtual ~KCMShell(); + +public Q_SLOTS: + void open(const QStringList &names) const; + + /** + * Check which of the given control modules the user is + * allowed to access + * + * This can be used for example to hide context menu options + * that would do nothing if the user wasn't authorized. + * + * @code + * visible: KCMShell.authorize(["org.kde.fooconfig.desktop"]).length > 0 + * @endcode + * + * @param menuIds A list of control module menu IDs + * @return The entries in @p menuIds that the user is + * authorized to access, may be empty + * @sa KAuthorized::authorizeControlModules + * @since 5.23 + */ + QStringList authorize(const QStringList &menuIds) const; + +}; + +#endif // KCMSHELL_H diff --git a/src/qmlcontrols/kquickcontrolsaddons/kquickcontrolsaddonsplugin.cpp b/src/qmlcontrols/kquickcontrolsaddons/kquickcontrolsaddonsplugin.cpp new file mode 100644 index 0000000..346afa1 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/kquickcontrolsaddonsplugin.cpp @@ -0,0 +1,76 @@ +/* + * Copyright 2009 by Alan Alpert + * Copyright 2010 by Ménard Alexis + * Copyright 2010 by Marco Martin + + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kquickcontrolsaddonsplugin.h" +#include "config-kquickcontrolsaddons.h" + +#include +#include + +#include "qpixmapitem.h" +#include "qimageitem.h" +#include "qiconitem.h" +#include "mouseeventlistener.h" +#include "columnproxymodel.h" +#include "clipboard.h" +#include "mimedatabase.h" +#include "kcmshell.h" +#include "icondialog.h" +#include "eventgenerator.h" + +#if HAVE_EPOXY +#include "plotter.h" +#endif + +static QObject *kcmshell_singleton_provider(QQmlEngine *engine, QJSEngine *scriptEngine) +{ + Q_UNUSED(engine); + Q_UNUSED(scriptEngine); + + return new KCMShell(); +} + +void KQuickControlsAddonsPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(QString::fromLatin1(uri) == QLatin1String("org.kde.kquickcontrolsaddons")); + + qmlRegisterType(uri, 2, 0, "QPixmapItem"); + qmlRegisterType(uri, 2, 0, "QImageItem"); + qmlRegisterType(uri, 2, 0, "QIconItem"); + qmlRegisterType(uri, 2, 0, "MouseEventListener"); + qmlRegisterType(uri, 2, 0, "ColumnProxyModel"); + qmlRegisterType(uri, 2, 0, "Clipboard"); + qmlRegisterType(uri, 2, 0, "MimeDatabase"); + qmlRegisterSingletonType(uri, 2, 0, "KCMShell", kcmshell_singleton_provider); + qmlRegisterType(uri, 2, 0, "IconDialog"); + qmlRegisterType(uri, 2, 0, "EventGenerator"); + +#if HAVE_EPOXY + qmlRegisterType(uri, 2, 0, "PlotData"); + qmlRegisterType(uri, 2, 0, "Plotter"); +#endif + + qmlRegisterType(); + qRegisterMetaType("QModelIndex"); +} + + + diff --git a/src/qmlcontrols/kquickcontrolsaddons/kquickcontrolsaddonsplugin.h b/src/qmlcontrols/kquickcontrolsaddons/kquickcontrolsaddonsplugin.h new file mode 100644 index 0000000..fe63898 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/kquickcontrolsaddonsplugin.h @@ -0,0 +1,37 @@ +/* + * Copyright 2009 by Alan Alpert + * Copyright 2010 by Ménard Alexis + * Copyright 2011 by Marco Martin + + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef QTEXTRACOMPONENTSPLUGIN_H +#define QTEXTRACOMPONENTSPLUGIN_H + +#include + + +class KQuickControlsAddonsPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + void registerTypes(const char *uri) Q_DECL_OVERRIDE; +}; + +#endif diff --git a/src/qmlcontrols/kquickcontrolsaddons/mimedatabase.cpp b/src/qmlcontrols/kquickcontrolsaddons/mimedatabase.cpp new file mode 100644 index 0000000..537855c --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/mimedatabase.cpp @@ -0,0 +1,55 @@ +/* + * Copyright 2014 Aleix Pol Gonzalez + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "mimedatabase.h" +#include +#include + +static QJsonObject mimetypeToJsonObject(const QMimeType& type) +{ + if (!type.isValid()) { + qWarning() << "trying to export an invalid type"; + return QJsonObject(); + } + QJsonObject ret; + ret[QStringLiteral("name")] = type.name(); + ret[QStringLiteral("iconName")] = type.iconName(); + ret[QStringLiteral("comment")] = type.comment(); + return ret; +} + +MimeDatabase::MimeDatabase(QObject* parent) + : QObject(parent) +{ +} + +QJsonObject MimeDatabase::mimeTypeForUrl(const QUrl& url) const +{ + return mimetypeToJsonObject(m_db.mimeTypeForUrl(url)); +} + +QJsonObject MimeDatabase::mimeTypeForName(const QString& name) const +{ + QMimeType type = m_db.mimeTypeForName(name); + if (!type.isValid()) { + qWarning() << "wrong mime name" << name; + return QJsonObject(); + } + return mimetypeToJsonObject(type); +} diff --git a/src/qmlcontrols/kquickcontrolsaddons/mimedatabase.h b/src/qmlcontrols/kquickcontrolsaddons/mimedatabase.h new file mode 100644 index 0000000..0bbedb2 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/mimedatabase.h @@ -0,0 +1,39 @@ +/* + * Copyright 2014 Aleix Pol Gonzalez + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef MIMEDATABASE_H +#define MIMEDATABASE_H + +#include +#include + +class MimeDatabase : public QObject +{ + Q_OBJECT + public: + MimeDatabase(QObject* parent = nullptr); + + Q_SCRIPTABLE QJsonObject mimeTypeForUrl(const QUrl & url) const; + Q_SCRIPTABLE QJsonObject mimeTypeForName(const QString & name) const; + + private: + QMimeDatabase m_db; +}; + +#endif // MIMEDATABASE_H diff --git a/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.cpp b/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.cpp new file mode 100644 index 0000000..10aa2f7 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.cpp @@ -0,0 +1,410 @@ +/* + Copyright 2011 Marco Martin + Copyright 2013 Sebastian Kügler + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "mouseeventlistener.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +MouseEventListener::MouseEventListener(QQuickItem *parent) + : QQuickItem(parent), + m_pressed(false), + m_pressAndHoldEvent(nullptr), + m_lastEvent(nullptr), + m_containsMouse(false), + m_acceptedButtons(Qt::LeftButton) +{ + m_pressAndHoldTimer = new QTimer(this); + m_pressAndHoldTimer->setSingleShot(true); + connect(m_pressAndHoldTimer, SIGNAL(timeout()), + this, SLOT(handlePressAndHold())); + + qmlRegisterType(); + qmlRegisterType(); + + setFiltersChildMouseEvents(true); + setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton|Qt::MidButton|Qt::XButton1|Qt::XButton2); +} + +MouseEventListener::~MouseEventListener() +{ +} + +Qt::MouseButtons MouseEventListener::acceptedButtons() const +{ + return m_acceptedButtons; +} + +Qt::CursorShape MouseEventListener::cursorShape() const +{ + return cursor().shape(); +} + +void MouseEventListener::setCursorShape(Qt::CursorShape shape) +{ + if (cursor().shape() == shape) { + return; + } + + setCursor(shape); + + emit cursorShapeChanged(); +} + +void MouseEventListener::setAcceptedButtons(Qt::MouseButtons buttons) +{ + if (buttons == m_acceptedButtons) { + return; + } + + m_acceptedButtons = buttons; + emit acceptedButtonsChanged(); +} + +void MouseEventListener::setHoverEnabled(bool enable) +{ + if (enable == acceptHoverEvents()) { + return; + } + + setAcceptHoverEvents(enable); + emit hoverEnabledChanged(enable); +} + +bool MouseEventListener::hoverEnabled() const +{ + return acceptHoverEvents(); +} + +bool MouseEventListener::isPressed() const +{ + return m_pressed; +} + +void MouseEventListener::hoverEnterEvent(QHoverEvent *event) +{ + Q_UNUSED(event); + + m_containsMouse = true; + emit containsMouseChanged(true); +} + +void MouseEventListener::hoverLeaveEvent(QHoverEvent *event) +{ + Q_UNUSED(event); + + m_containsMouse = false; + emit containsMouseChanged(false); +} + +void MouseEventListener::hoverMoveEvent(QHoverEvent * event) +{ + if (m_lastEvent == event) { + return; + } + + QQuickWindow *w = window(); + QPoint screenPos; + if (w) { + screenPos = w->mapToGlobal(event->pos()); + } + + KDeclarativeMouseEvent dme(event->pos().x(), event->pos().y(), screenPos.x(), screenPos.y(), Qt::NoButton, Qt::NoButton, event->modifiers(), nullptr); + emit positionChanged(&dme); +} + +bool MouseEventListener::containsMouse() const +{ + return m_containsMouse; +} + +void MouseEventListener::mousePressEvent(QMouseEvent *me) +{ + if (m_lastEvent == me || !(me->buttons() & m_acceptedButtons)) { + me->setAccepted(false); + return; + } + + //FIXME: when a popup window is visible: a click anywhere hides it: but the old qquickitem will continue to think it's under the mouse + //doesn't seem to be any good way to properly reset this. + //this msolution will still caused a missed click after the popup is gone, but gets the situation unblocked. + QPoint viewPosition; + if (window()) { + viewPosition = window()->position(); + } + + if (!QRectF(mapToScene(QPoint(0, 0)) + viewPosition, QSizeF(width(), height())).contains(me->screenPos())) { + me->ignore(); + return; + } + m_buttonDownPos = me->screenPos(); + + KDeclarativeMouseEvent dme(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos())); + if (!m_pressAndHoldEvent) { + m_pressAndHoldEvent = new KDeclarativeMouseEvent(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos())); + } + + m_pressed = true; + emit pressed(&dme); + emit pressedChanged(); + + if (dme.isAccepted()) { + me->setAccepted(true); + return; + } + + m_pressAndHoldTimer->start(QGuiApplication::styleHints()->mousePressAndHoldInterval()); +} + +void MouseEventListener::mouseMoveEvent(QMouseEvent *me) +{ + if (m_lastEvent == me || !(me->buttons() & m_acceptedButtons)) { + me->setAccepted(false); + return; + } + + if (QPointF(me->screenPos() - m_buttonDownPos).manhattanLength() > QGuiApplication::styleHints()->startDragDistance() && m_pressAndHoldTimer->isActive()) { + m_pressAndHoldTimer->stop(); + } + + KDeclarativeMouseEvent dme(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos())); + emit positionChanged(&dme); + + if (dme.isAccepted()) { + me->setAccepted(true); + } +} + +void MouseEventListener::mouseReleaseEvent(QMouseEvent *me) +{ + if (m_lastEvent == me) { + me->setAccepted(false); + return; + } + + KDeclarativeMouseEvent dme(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos())); + m_pressed = false; + emit released(&dme); + emit pressedChanged(); + + if (boundingRect().contains(me->pos()) && m_pressAndHoldTimer->isActive()) { + emit clicked(&dme); + m_pressAndHoldTimer->stop(); + } + + if (dme.isAccepted()) { + me->setAccepted(true); + } +} + +void MouseEventListener::wheelEvent(QWheelEvent *we) +{ + if (m_lastEvent == we) { + return; + } + + KDeclarativeWheelEvent dwe(we->pos(), we->globalPos(), we->delta(), we->buttons(), we->modifiers(), we->orientation()); + emit wheelMoved(&dwe); +} + +void MouseEventListener::handlePressAndHold() +{ + if (m_pressed) { + emit pressAndHold(m_pressAndHoldEvent); + + delete m_pressAndHoldEvent; + m_pressAndHoldEvent = nullptr; + } +} + +bool MouseEventListener::childMouseEventFilter(QQuickItem *item, QEvent *event) +{ + if (!isEnabled()) { + return false; + } + + //don't filter other mouseeventlisteners + if (qobject_cast(item)) { + return false; + } + + switch (event->type()) { + case QEvent::MouseButtonPress: { + m_lastEvent = event; + QMouseEvent *me = static_cast(event); + + if (!(me->buttons() & m_acceptedButtons)) { + break; + } + + //the parent will receive events in its own coordinates + const QPointF myPos = mapFromScene(me->windowPos()); + + KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos())); + delete m_pressAndHoldEvent; + m_pressAndHoldEvent = new KDeclarativeMouseEvent(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos())); + + //qDebug() << "pressed in sceneEventFilter"; + m_buttonDownPos = me->screenPos(); + m_pressed = true; + emit pressed(&dme); + emit pressedChanged(); + + if (dme.isAccepted()) { + return true; + } + + m_pressAndHoldTimer->start(QGuiApplication::styleHints()->mousePressAndHoldInterval()); + + break; + } + case QEvent::HoverMove: { + if (!acceptHoverEvents()) { + break; + } + m_lastEvent = event; + QHoverEvent *he = static_cast(event); + const QPointF myPos = item->mapToItem(this, he->pos()); + + QQuickWindow *w = window(); + QPoint screenPos; + if (w) { + screenPos = w->mapToGlobal(myPos.toPoint()); + } + + KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), screenPos.x(), screenPos.y(), Qt::NoButton, Qt::NoButton, he->modifiers(), nullptr); + //qDebug() << "positionChanged..." << dme.x() << dme.y(); + emit positionChanged(&dme); + + if (dme.isAccepted()) { + return true; + } + break; + } + case QEvent::MouseMove: { + m_lastEvent = event; + QMouseEvent *me = static_cast(event); + if (!(me->buttons() & m_acceptedButtons)) { + break; + } + + const QPointF myPos = mapFromScene(me->windowPos()); + KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos())); + //qDebug() << "positionChanged..." << dme.x() << dme.y(); + + //stop the pressandhold if mouse moved enough + if (QPointF(me->screenPos() - m_buttonDownPos).manhattanLength() > QGuiApplication::styleHints()->startDragDistance() && m_pressAndHoldTimer->isActive()) { + m_pressAndHoldTimer->stop(); + + //if the mouse moves and we are waiting to emit a press and hold event, update the co-ordinates + //as there is no update function, delete the old event and create a new one + } else if (m_pressAndHoldEvent) { + delete m_pressAndHoldEvent; + m_pressAndHoldEvent = new KDeclarativeMouseEvent(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos())); + } + emit positionChanged(&dme); + + if (dme.isAccepted()) { + return true; + } + break; + } + case QEvent::MouseButtonRelease: { + m_lastEvent = event; + QMouseEvent *me = static_cast(event); + + const QPointF myPos = mapFromScene(me->windowPos()); + KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos())); + m_pressed = false; + + emit released(&dme); + emit pressedChanged(); + + if (QPointF(me->screenPos() - m_buttonDownPos).manhattanLength() <= QGuiApplication::styleHints()->startDragDistance() && m_pressAndHoldTimer->isActive()) { + emit clicked(&dme); + m_pressAndHoldTimer->stop(); + } + + if (dme.isAccepted()) { + return true; + } + break; + } + case QEvent::UngrabMouse: { + m_lastEvent = event; + handleUngrab(); + break; + } + case QEvent::Wheel: { + m_lastEvent = event; + QWheelEvent *we = static_cast(event); + KDeclarativeWheelEvent dwe(we->pos(), we->globalPos(), we->delta(), we->buttons(), we->modifiers(), we->orientation()); + emit wheelMoved(&dwe); + break; + } + default: + break; + } + + return QQuickItem::childMouseEventFilter(item, event); +// return false; +} + +QScreen* MouseEventListener::screenForGlobalPos(const QPoint& globalPos) +{ + foreach(QScreen *screen, QGuiApplication::screens()) { + if (screen->geometry().contains(globalPos)) { + return screen; + } + } + return nullptr; +} + +void MouseEventListener::mouseUngrabEvent() +{ + handleUngrab(); + + QQuickItem::mouseUngrabEvent(); +} + +void MouseEventListener::touchUngrabEvent() +{ + handleUngrab(); + + QQuickItem::touchUngrabEvent(); +} + +void MouseEventListener::handleUngrab() +{ + if (m_pressed) { + m_pressAndHoldTimer->stop(); + + m_pressed = false; + emit pressedChanged(); + + emit canceled(); + } +} diff --git a/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.h b/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.h new file mode 100644 index 0000000..c34ca25 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.h @@ -0,0 +1,236 @@ +/* + Copyright 2011 Marco Martin + Copyright 2013 Sebastian Kügler + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef MOUSEEVENTLISTENER_H +#define MOUSEEVENTLISTENER_H + +#include + +/** + * This item spies on mouse events from all child objects including child MouseAreas regardless + * of whether the child MouseArea propegates events. It does not accept the event. + * + * In addition unlike MouseArea events include the mouse position in global co-ordinates and provides + * the sceen the mouse is in. + */ + + +class KDeclarativeMouseEvent : public QObject +{ + Q_OBJECT + Q_PROPERTY(int x READ x) + Q_PROPERTY(int y READ y) + Q_PROPERTY(int screenX READ screenX) + Q_PROPERTY(int screenY READ screenY) + Q_PROPERTY(int button READ button) + Q_PROPERTY(Qt::MouseButtons buttons READ buttons) + Q_PROPERTY(Qt::KeyboardModifiers modifiers READ modifiers) + Q_PROPERTY(QScreen* screen READ screen CONSTANT) + Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted NOTIFY acceptedChanged) + +public: + KDeclarativeMouseEvent(int x, int y, int screenX, int screenY, + Qt::MouseButton button, + Qt::MouseButtons buttons, + Qt::KeyboardModifiers modifiers, + QScreen* screen) + : m_x(x), + m_y(y), + m_screenX(screenX), + m_screenY(screenY), + m_button(button), + m_buttons(buttons), + m_modifiers(modifiers), + m_screen(screen) + {} + + int x() const { return m_x; } + int y() const { return m_y; } + int screenX() const { return m_screenX; } + int screenY() const { return m_screenY; } + int button() const { return m_button; } + Qt::MouseButtons buttons() const { return m_buttons; } + Qt::KeyboardModifiers modifiers() const { return m_modifiers; } + QScreen* screen() const { return m_screen; } + + bool isAccepted() const { return m_accepted; } + void setAccepted(bool accepted) { + if (m_accepted != accepted) { + m_accepted = accepted; + emit acceptedChanged(); + } + } + + // only for internal usage + void setX(int x) { m_x = x; } + void setY(int y) { m_y = y; } + +Q_SIGNALS: + void acceptedChanged(); + +private: + int m_x; + int m_y; + int m_screenX; + int m_screenY; + Qt::MouseButton m_button; + Qt::MouseButtons m_buttons; + Qt::KeyboardModifiers m_modifiers; + QScreen *m_screen; + bool m_accepted = false; +}; + +class KDeclarativeWheelEvent : public QObject +{ + Q_OBJECT + Q_PROPERTY(int x READ x CONSTANT) + Q_PROPERTY(int y READ y CONSTANT) + Q_PROPERTY(int screenX READ screenX CONSTANT) + Q_PROPERTY(int screenY READ screenY CONSTANT) + Q_PROPERTY(int delta READ delta CONSTANT) + Q_PROPERTY(Qt::MouseButtons buttons READ buttons CONSTANT) + Q_PROPERTY(Qt::KeyboardModifiers modifiers READ modifiers CONSTANT) + Q_PROPERTY(Qt::Orientation orientation READ orientation CONSTANT) + +public: + KDeclarativeWheelEvent(QPointF pos, QPoint screenPos, int delta, + Qt::MouseButtons buttons, + Qt::KeyboardModifiers modifiers, + Qt::Orientation orientation) + : m_x(pos.x()), + m_y(pos.y()), + m_screenX(screenPos.x()), + m_screenY(screenPos.y()), + m_delta(delta), + m_buttons(buttons), + m_modifiers(modifiers), + m_orientation(orientation) + {} + + int x() const { return m_x; } + int y() const { return m_y; } + int screenX() const { return m_screenX; } + int screenY() const { return m_screenY; } + int delta() const { return m_delta; } + Qt::MouseButtons buttons() const { return m_buttons; } + Qt::KeyboardModifiers modifiers() const { return m_modifiers; } + Qt::Orientation orientation() { return m_orientation; } + + // only for internal usage + void setX(int x) { m_x = x; } + void setY(int y) { m_y = y; } + +private: + int m_x; + int m_y; + int m_screenX; + int m_screenY; + int m_delta; + Qt::MouseButtons m_buttons; + Qt::KeyboardModifiers m_modifiers; + Qt::Orientation m_orientation; +}; + +class MouseEventListener : public QQuickItem +{ + Q_OBJECT + /** + * This property holds whether hover events are handled. + * By default hover events are disabled + */ + Q_PROPERTY(bool hoverEnabled READ hoverEnabled WRITE setHoverEnabled NOTIFY hoverEnabledChanged) + + /** + * True if this MouseEventListener or any of its children contains the mouse cursor: this property will change only when the mouse button is pressed if hoverEnabled is false + */ + Q_PROPERTY(bool containsMouse READ containsMouse NOTIFY containsMouseChanged) + + Q_PROPERTY(Qt::MouseButtons acceptedButtons READ acceptedButtons WRITE setAcceptedButtons NOTIFY acceptedButtonsChanged) + + /** + * This property holds the cursor shape for this mouse area. + * Note that on platforms that do not display a mouse cursor this may have no effect. + */ + Q_PROPERTY(Qt::CursorShape cursorShape READ cursorShape WRITE setCursorShape RESET unsetCursor NOTIFY cursorShapeChanged) + + /** + * True if the mouse is pressed in the item or any of its children + */ + Q_PROPERTY(bool pressed READ isPressed NOTIFY pressedChanged) + +public: + MouseEventListener(QQuickItem *parent=nullptr); + ~MouseEventListener(); + + bool containsMouse() const; + void setHoverEnabled(bool enable); + bool hoverEnabled() const; + bool isPressed() const; + + Qt::MouseButtons acceptedButtons() const; + void setAcceptedButtons(Qt::MouseButtons buttons); + + Qt::CursorShape cursorShape() const; + void setCursorShape(Qt::CursorShape shape); + +protected: + void hoverEnterEvent(QHoverEvent *event) Q_DECL_OVERRIDE; + void hoverLeaveEvent(QHoverEvent *event) Q_DECL_OVERRIDE; + void hoverMoveEvent(QHoverEvent * event) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE; + bool childMouseEventFilter(QQuickItem *item, QEvent *event) Q_DECL_OVERRIDE; + void mouseUngrabEvent() Q_DECL_OVERRIDE; + void touchUngrabEvent() Q_DECL_OVERRIDE; + +Q_SIGNALS: + void pressed(KDeclarativeMouseEvent *mouse); + void positionChanged(KDeclarativeMouseEvent *mouse); + void released(KDeclarativeMouseEvent *mouse); + void clicked(KDeclarativeMouseEvent *mouse); + void pressAndHold(KDeclarativeMouseEvent *mouse); + void wheelMoved(KDeclarativeWheelEvent *wheel); + void containsMouseChanged(bool containsMouseChanged); + void hoverEnabledChanged(bool hoverEnabled); + void acceptedButtonsChanged(); + void cursorShapeChanged(); + void pressedChanged(); + void canceled(); + +private Q_SLOTS: + void handlePressAndHold(); + void handleUngrab(); + +private: + static QScreen* screenForGlobalPos(const QPoint &globalPos); + + bool m_pressed; + KDeclarativeMouseEvent* m_pressAndHoldEvent; + QPointF m_buttonDownPos; + //Important: used only for comparison. If you will ever need to access this pointer, make it a QWeakPointer + QEvent *m_lastEvent; + QTimer *m_pressAndHoldTimer; + bool m_containsMouse; + Qt::MouseButtons m_acceptedButtons; +}; + +#endif diff --git a/src/qmlcontrols/kquickcontrolsaddons/plotter.cpp b/src/qmlcontrols/kquickcontrolsaddons/plotter.cpp new file mode 100644 index 0000000..8c18bcf --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/plotter.cpp @@ -0,0 +1,903 @@ +/* + * This file is part of the KDE project + * + * Copyright © 2014 Fredrik Höglund + * Copyright © 2014 Marco Martin + * Copyright © 2015 David Edmundson + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#include "plotter.h" + +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include + +#include + +#include + +#include + +//completely arbitrary +static int s_defaultSampleSize = 40; + +PlotData::PlotData(QObject *parent) + : QObject(parent), + m_min(std::numeric_limits::max()), + m_max(std::numeric_limits::min()), + m_sampleSize(s_defaultSampleSize) +{ + m_values.reserve(s_defaultSampleSize); + for (int i = 0; i < s_defaultSampleSize; ++i) { + m_values << 0.0; + } +} + +void PlotData::setColor(const QColor &color) +{ + if (m_color == color) { + return; + } + + m_color = color; + + emit colorChanged(); +} + +QColor PlotData::color() const +{ + return m_color; +} + +qreal PlotData::max() const +{ + return m_max; +} + +qreal PlotData::min() const +{ + return m_min; +} + +void PlotData::setSampleSize(int size) +{ + if (m_sampleSize == size) { + return; + } + + m_values.reserve(size); + if (m_values.size() > size) { + const int numberToRemove = (m_values.size() - size); + for (int i = 0; i < numberToRemove; ++i) { + m_values.removeFirst(); + } + } else if (m_values.size() < size) { + const int numberToAdd = (size - m_values.size()); + for (int i = 0; i < numberToAdd; ++i) { + m_values.prepend(0.0); + } + } + + m_sampleSize = size; +} + +QString PlotData::label() const +{ + return m_label; +} + +void PlotData::setLabel(const QString &label) +{ + if (m_label == label) { + return; + } + + m_label = label; + emit labelChanged(); +} + +void PlotData::addSample(qreal value) +{ + + //assume at this point we'll have to pop a single time to stay in size + if (m_values.size() >= m_sampleSize) { + m_values.removeFirst(); + } + + m_values.push_back(value); + + m_max = std::numeric_limits::min(); + m_min = std::numeric_limits::max(); + for (auto v : m_values) { + if (v > m_max) { + m_max = v; + } else if (v < m_min) { + m_min = v; + } + } + + emit valuesChanged(); +} + +QList PlotData::values() const +{ + return m_values; +} + +const char *vs_source = + "attribute vec4 vertex;\n" + "varying float gradient;\n" + + "uniform mat4 matrix;\n" + "uniform float yMin;\n" + "uniform float yMax;\n" + + "void main(void) {\n" + " gradient = (vertex.y - yMin) / (yMax - yMin);" + " gl_Position = matrix * vertex;\n" + "}"; + +const char *fs_source = + "uniform vec4 color1;\n" + "uniform vec4 color2;\n" + + "varying float gradient;\n" + + "void main(void) {\n" + " gl_FragColor = mix(color1, color2, gradient);\n" + "}"; + + + + +// -------------------------------------------------- + + + +class PlotTexture : public QSGTexture +{ +public: + PlotTexture(QOpenGLContext *ctx); + ~PlotTexture(); + + void bind() override final; + bool hasAlphaChannel() const override final { return true; } + bool hasMipmaps() const override final { return false; } + int textureId() const override final { return m_texture; } + QSize textureSize() const override final { return m_size; } + + void recreate(const QSize &size); + GLuint fbo() const { return m_fbo; } + +private: + GLuint m_texture = 0; + GLuint m_fbo = 0; + GLenum m_internalFormat; + bool m_haveTexStorage; + QSize m_size; +}; + +PlotTexture::PlotTexture(QOpenGLContext *ctx) : QSGTexture() +{ + QPair version = ctx->format().version(); + + if (ctx->isOpenGLES()) { + m_haveTexStorage = version >= qMakePair(3, 0) || ctx->hasExtension("GL_EXT_texture_storage"); + m_internalFormat = m_haveTexStorage ? GL_RGBA8 : GL_RGBA; + } else { + m_haveTexStorage = version >= qMakePair(4, 2) || ctx->hasExtension("GL_ARB_texture_storage"); + m_internalFormat = GL_RGBA8; + } + + glGenFramebuffers(1, &m_fbo); +} + +PlotTexture::~PlotTexture() +{ + if (m_texture) { + glDeleteTextures(1, &m_texture); + } + + glDeleteFramebuffers(1, &m_fbo); +} + +void PlotTexture::bind() +{ + glBindTexture(GL_TEXTURE_2D, m_texture); +} + +void PlotTexture::recreate(const QSize &size) +{ + if (m_texture) { + glDeleteTextures(1, &m_texture); + } + + glGenTextures(1, &m_texture); + glBindTexture(GL_TEXTURE_2D, m_texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); + + if (m_haveTexStorage) { + glTexStorage2D(GL_TEXTURE_2D, 1, m_internalFormat, size.width(), size.height()); + } else { + glTexImage2D(GL_TEXTURE_2D, 0, m_internalFormat, size.width(), size.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); + } + + glBindFramebuffer(GL_FRAMEBUFFER, m_fbo); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_texture, 0); + + m_size = size; +} + + + +// ---------------------- + +QOpenGLShaderProgram *Plotter::s_program = nullptr; +int Plotter::u_matrix; +int Plotter::u_color1; +int Plotter::u_color2; +int Plotter::u_yMin; +int Plotter::u_yMax; + +Plotter::Plotter(QQuickItem *parent) + : QQuickItem(parent), + m_min(0), + m_max(0), + m_rangeMax(0), + m_rangeMin(0), + m_sampleSize(s_defaultSampleSize), + m_horizontalLineCount(5), + m_stacked(true), + m_autoRange(true) +{ + setFlag(ItemHasContents); +} + +Plotter::~Plotter() +{ +} + +qreal Plotter::max() const +{ + return m_max; +} + +qreal Plotter::min() const +{ + return m_min; +} + +int Plotter::sampleSize() const +{ + return m_sampleSize; +} + +void Plotter::setSampleSize(int size) +{ + if (m_sampleSize == size) { + return; + } + + m_sampleSize = size; + + m_mutex.lock(); + for (auto data : m_plotData) { + data->setSampleSize(size); + } + m_mutex.unlock(); + + update(); + emit sampleSizeChanged(); +} + +bool Plotter::isStacked() const +{ + return m_stacked; +} + +void Plotter::setStacked(bool stacked) +{ + if (m_stacked == stacked) { + return; + } + + m_stacked = stacked; + + emit stackedChanged(); + update(); +} + +bool Plotter::isAutoRange() const +{ + return m_autoRange; +} + +void Plotter::setAutoRange(bool autoRange) +{ + if (m_autoRange == autoRange) { + return; + } + + m_autoRange = autoRange; + + emit autoRangeChanged(); + normalizeData(); + update(); +} + +qreal Plotter::rangeMax() const +{ + if (m_autoRange) { + return m_max; + } else { + return m_rangeMax; + } +} + +void Plotter::setRangeMax(qreal max) +{ + if (m_rangeMax == max) { + return; + } + + m_rangeMax = max; + + emit rangeMaxChanged(); + normalizeData(); + update(); +} + +qreal Plotter::rangeMin() const +{ + if (m_autoRange) { + return m_min; + } else { + return m_rangeMin; + } +} + +void Plotter::setRangeMin(qreal min) +{ + if (m_rangeMin == min) { + return; + } + + m_rangeMin = min; + + emit rangeMinChanged(); + normalizeData(); + update(); +} + +void Plotter::setGridColor(const QColor &color) +{ + if (m_gridColor == color) { + return; + } + + m_gridColor = color; + + emit gridColorChanged(); +} + +QColor Plotter::gridColor() const +{ + return m_gridColor; +} + +int Plotter::horizontalGridLineCount() +{ + return m_horizontalLineCount; +} + +void Plotter::setHorizontalGridLineCount(int count) +{ + if (m_horizontalLineCount == count) { + return; + } + + m_horizontalLineCount = count; + emit horizontalGridLineCountChanged(); +} + + +void Plotter::addSample(qreal value) +{ + if (m_plotData.count() != 1) { + qWarning() << "Must add a new value per data set, pass an array of values instead"; + return; + } + + addSample(QList() << value); +} + +void Plotter::addSample(const QList &value) +{ + if (value.count() != m_plotData.count()) { + qWarning() << "Must add a new value per data set"; + return; + } + + int i = 0; + m_mutex.lock(); + for (auto data : m_plotData) { + data->addSample(value.value(i)); + ++i; + } + m_mutex.unlock(); + + normalizeData(); + + update(); +} + +void Plotter::dataSet_append(QQmlListProperty *list, PlotData *item) +{ + //encase all m_plotData access in a mutex, since rendering is usually done in another thread + Plotter *p = static_cast(list->object); + p->m_mutex.lock(); + p->m_plotData.append(item); + p->m_mutex.unlock(); +} + +int Plotter::dataSet_count(QQmlListProperty *list) +{ + Plotter *p = static_cast(list->object); + return p->m_plotData.count(); +} + +PlotData *Plotter::dataSet_at(QQmlListProperty *list, int index) +{ + Plotter *p = static_cast(list->object); + p->m_mutex.lock(); + PlotData *d = p->m_plotData.at(index); + p->m_mutex.unlock(); + return d; +} + +void Plotter::dataSet_clear(QQmlListProperty *list) +{ + Plotter *p = static_cast(list->object); + + p->m_mutex.lock(); + p->m_plotData.clear(); + p->m_mutex.unlock(); +} + + +QQmlListProperty Plotter::dataSets() +{ + return QQmlListProperty(this, nullptr, Plotter::dataSet_append, Plotter::dataSet_count, Plotter::dataSet_at, Plotter::dataSet_clear); +} + + + +// Catmull-Rom interpolation +QPainterPath Plotter::interpolate(const QVector &p, qreal x0, qreal x1) const +{ + QPainterPath path; + + const QMatrix4x4 matrix( 0, 1, 0, 0, + -1/6., 1, 1/6., 0, + 0, 1/6., 1, -1/6., + 0, 0, 1, 0); + + const qreal xDelta = (x1 - x0) / (p.count() - 3); + qreal x = x0 - xDelta; + + path.moveTo(x0, p[0]); + + for (int i = 1; i < p.count() - 2; i++) { + const QMatrix4x4 points(x, p[i-1], 0, 0, + x + xDelta * 1, p[i+0], 0, 0, + x + xDelta * 2, p[i+1], 0, 0, + x + xDelta * 3, p[i+2], 0, 0); + + const QMatrix4x4 res = matrix * points; + + path.cubicTo(res(1, 0), res(1, 1), + res(2, 0), res(2, 1), + res(3, 0), res(3, 1)); + + x += xDelta; + } + + return path; +} + +void Plotter::render() +{ + if (!window()) { + return; + } + + GLuint rb; + + if (m_haveMSAA && m_haveFramebufferBlit) { + // Allocate a temporary MSAA renderbuffer + glGenRenderbuffers(1, &rb); + glBindRenderbuffer(GL_RENDERBUFFER, rb); + glRenderbufferStorageMultisample(GL_RENDERBUFFER, m_samples, m_internalFormat, width(), height()); + + // Attach it to the framebuffer object + glBindFramebuffer(GL_FRAMEBUFFER, m_fbo); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rb); + } else { + // If we don't have MSAA support we render directly into the texture + glBindFramebuffer(GL_FRAMEBUFFER, static_cast(m_node->texture())->fbo()); + } + + glViewport(0, 0, width(), height()); + + // Clear the color buffer + glClearColor(0.0, 0.0, 0.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT); + + // Add horizontal lines + qreal lineSpacing = height() / m_horizontalLineCount; + + QVector vertices; + + //don't draw the bottom line that will come later + for (int i = 0; i < m_horizontalLineCount; i++) { + int lineY = ceil(i * lineSpacing)+1; //floor +1 makes the entry at point 0 on pixel 1 + vertices << QVector2D(0, lineY) << QVector2D(width(), lineY); + } + //bottom line + vertices << QVector2D(0, height()-1) << QVector2D(width(), height()-1); + + + // Tessellate + float min = height(); + float max = height(); + + QHash > verticesCounts; + + //encase all m_plotData access in a mutex, since rendering is usually done in another thread + m_mutex.lock(); + int roundedHeight = qRound(height()); + int roundedWidth = qRound(width()); + + for (auto data : m_plotData) { + // Interpolate the data set + const QPainterPath path = interpolate(data->m_normalizedValues, 0, roundedWidth); + + // Flatten the path + const QList polygons = path.toSubpathPolygons(); + + for (const QPolygonF &p : polygons) { + verticesCounts[data].first = 0; + vertices << QVector2D(p.first().x(), roundedHeight); + + for (int i = 0; i < p.count()-1; i++) { + min = qMin(min, roundedHeight - p[i].y()); + vertices << QVector2D(p[i].x(), roundedHeight - p[i].y()); + vertices << QVector2D((p[i].x() + p[i+1].x()) / 2.0, roundedHeight); + verticesCounts[data].first += 2; + } + + min = qMin(min, roundedHeight - p.last().y()); + vertices << QVector2D(p.last().x(), roundedHeight - p.last().y()); + vertices << QVector2D(p.last().x(), roundedHeight); + verticesCounts[data].first += 3; + } + + for (const QPolygonF &p : polygons) { + verticesCounts[data].second = 0; + + for (int i = 0; i < p.count()-1; i++) { + min = qMin(min, roundedHeight - p[i].y()); + vertices << QVector2D(p[i].x(), roundedHeight - p[i].y()); + verticesCounts[data].second += 1; + } + + vertices << QVector2D(p.last().x(), roundedHeight - p.last().y()); + verticesCounts[data].second += 1; + min = qMin(min, roundedHeight - p.last().y()); + } + } + m_mutex.unlock(); + + // Upload vertices + GLuint vbo; + glGenBuffers(1, &vbo); + + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glBufferData(GL_ARRAY_BUFFER, vertices.count() * sizeof(QVector2D), vertices.constData(), GL_STATIC_DRAW); + + // Set up the array + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(QVector2D), nullptr); + glEnableVertexAttribArray(0); + + // Bind the shader program + s_program->bind(); + s_program->setUniformValue(u_matrix, m_matrix); + + // Draw the lines + QColor color1 = m_gridColor; + QColor color2 = m_gridColor; + color1.setAlphaF(0.10); + color2.setAlphaF(0.40); + s_program->setUniformValue(u_yMin, (float) 0.0); + s_program->setUniformValue(u_yMax, (float) height()); + s_program->setUniformValue(u_color1, color1); + s_program->setUniformValue(u_color2, color2); + + glDrawArrays(GL_LINES, 0, (m_horizontalLineCount+1) * 2 ); + + // Enable alpha blending + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + QPair oldCount; + m_mutex.lock(); + for (auto data : m_plotData) { + color2 = data->color(); + color2.setAlphaF(0.60); + // Draw the graph + s_program->setUniformValue(u_yMin, min); + s_program->setUniformValue(u_yMax, max); + s_program->setUniformValue(u_color1, data->color()); + s_program->setUniformValue(u_color2, color2); + + //+2 is for the bottom line + glDrawArrays(GL_TRIANGLE_STRIP, m_horizontalLineCount*2 + 2 + oldCount.first + oldCount.second, verticesCounts[data].first); + + oldCount.first += verticesCounts[data].first; + + s_program->setUniformValue(u_color1, data->color()); + s_program->setUniformValue(u_color2, data->color()); + glDrawArrays(GL_LINE_STRIP, m_horizontalLineCount*2 + 2 + oldCount.first + oldCount.second, verticesCounts[data].second); + + oldCount.second += verticesCounts[data].second; + } + m_mutex.unlock(); + + glDisable(GL_BLEND); + + s_program->setUniformValue(u_color1, m_gridColor); + s_program->setUniformValue(u_color2, m_gridColor); + glDrawArrays(GL_LINES, vertices.count()-2, 2); + + if (m_haveMSAA && m_haveFramebufferBlit) { + // Resolve the MSAA buffer + glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, static_cast(m_node->texture())->fbo()); + glBlitFramebuffer(0, 0, width(), height(), 0, 0, width(), height(), GL_COLOR_BUFFER_BIT, GL_NEAREST); + + // Delete the render buffer + glDeleteRenderbuffers(1, &rb); + } + + // Delete the VBO + glDeleteBuffers(1, &vbo); +} + +QSGNode *Plotter::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *updatePaintNodeData) +{ + Q_UNUSED(updatePaintNodeData) + if (!window()->openglContext()) { + delete oldNode; + return nullptr; + } + + QSGSimpleTextureNode *n = static_cast(oldNode); + + if (width() == 0 && height() == 0) { + delete oldNode; + return nullptr; + } + + if (!n) { + n = new ManagedTextureNode(); + n->setTexture(new PlotTexture(window()->openglContext())); + n->setFiltering(QSGTexture::Linear); + + m_node = n; + if (m_window) { + disconnect(m_window.data(), &QQuickWindow::beforeRendering, this, &Plotter::render); + } + connect(window(), &QQuickWindow::beforeRendering, this, &Plotter::render, Qt::DirectConnection); + m_window = window(); + } + + if (!m_initialized) { + glGenFramebuffers(1, &m_fbo); + + QOpenGLContext *ctx = window()->openglContext(); + QPair version = ctx->format().version(); + + if (ctx->isOpenGLES()) { + m_haveMSAA = version >= qMakePair(3, 0) || ctx->hasExtension("GL_NV_framebuffer_multisample"); + m_haveFramebufferBlit = version >= qMakePair(3, 0) || ctx->hasExtension("GL_NV_framebuffer_blit"); + m_haveInternalFormatQuery = version >= qMakePair(3, 0); + m_internalFormat = version >= qMakePair(3, 0) ? GL_RGBA8 : GL_RGBA; + } else { + m_haveMSAA = version >= qMakePair(3, 2) || ctx->hasExtension("GL_ARB_framebuffer_object") || + ctx->hasExtension("GL_EXT_framebuffer_multisample"); + m_haveFramebufferBlit = version >= qMakePair(3, 0) || ctx->hasExtension("GL_ARB_framebuffer_object") || + ctx->hasExtension("GL_EXT_framebuffer_blit"); + m_haveInternalFormatQuery = version >= qMakePair(4, 2) || ctx->hasExtension("GL_ARB_internalformat_query"); + m_internalFormat = GL_RGBA8; + } + + // Query the maximum sample count for the internal format + if (m_haveInternalFormatQuery) { + int count = 0; + glGetInternalformativ(GL_RENDERBUFFER, m_internalFormat, GL_NUM_SAMPLE_COUNTS, 1, &count); + + if (count > 0) { + QVector samples(count); + glGetInternalformativ(GL_RENDERBUFFER, m_internalFormat, GL_SAMPLES, count, samples.data()); + + // The samples are returned in descending order. Choose the highest value. + m_samples = samples.at(0); + } else { + m_samples = 0; + } + } else if (m_haveMSAA) { + glGetIntegerv(GL_MAX_SAMPLES, &m_samples); + } else { + m_samples = 0; + } + + m_initialized = true; + } + + if (!s_program) { + s_program = new QOpenGLShaderProgram; + s_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vs_source); + s_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fs_source); + s_program->bindAttributeLocation("vertex", 0); + s_program->link(); + + u_yMin = s_program->uniformLocation("yMin"); + u_yMax = s_program->uniformLocation("yMax"); + u_color1 = s_program->uniformLocation("color1"); + u_color2 = s_program->uniformLocation("color2"); + u_matrix = s_program->uniformLocation("matrix"); + } + + //we need a size always equal or smaller, size.toSize() won't do + const QSize targetTextureSize(qRound(boundingRect().size().width()), qRound(boundingRect().size().height())); + if (n->texture()->textureSize() != targetTextureSize) { + static_cast(n->texture())->recreate(targetTextureSize); + m_matrix = QMatrix4x4(); + m_matrix.ortho(0, targetTextureSize.width(), 0, targetTextureSize.height(), -1, 1); + } + + n->setRect(QRect(QPoint(0,0), targetTextureSize)); + return n; +} + +void Plotter::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) +{ + QQuickItem::geometryChanged(newGeometry, oldGeometry); + normalizeData(); +} + +void Plotter::normalizeData() +{ + if (m_plotData.isEmpty()) { + return; + } + //normalize data + m_max = std::numeric_limits::min(); + m_min = std::numeric_limits::max(); + qreal adjustedMax = m_max; + qreal adjustedMin = m_min; + m_mutex.lock(); + if (m_stacked) { + PlotData *previousData = nullptr; + auto i = m_plotData.constEnd(); + do { + --i; + PlotData *data = *i; + data->m_normalizedValues.clear(); + data->m_normalizedValues.resize(data->values().count()); + if (previousData) { + for (int i = 0; i < data->values().count(); ++i) { + data->m_normalizedValues[i] = data->values().value(i) + previousData->m_normalizedValues.value(i); + + if (data->m_normalizedValues[i] > adjustedMax) { + adjustedMax = data->m_normalizedValues[i]; + } + if (data->m_normalizedValues[i] < adjustedMin) { + adjustedMin = data->m_normalizedValues[i]; + } + } + } else { + data->m_normalizedValues = data->values().toVector(); + if (data->max() > adjustedMax) { + adjustedMax = data->max(); + } + if (data->min() < adjustedMin) { + adjustedMin = data->min(); + } + } + previousData = data; + + //global max and global min + if (data->max() > m_max) { + m_max = data->max(); + } + if (data->min() < m_min) { + m_min = data->min(); + } + } while (i != m_plotData.constBegin()); + + } else { + for (auto data : m_plotData) { + data->m_normalizedValues.clear(); + data->m_normalizedValues = data->values().toVector(); + //global max and global min + if (data->max() > m_max) { + adjustedMax = m_max = data->max(); + } + if (data->min() < m_min) { + adjustedMin = m_min = data->min(); + } + } + } + m_mutex.unlock(); + + + if (m_autoRange || m_rangeMax > m_rangeMin) { + if (!m_autoRange) { + adjustedMax = m_rangeMax; + adjustedMin = m_rangeMin; + } + + qreal adjust; + //this should never happen, remove? + if (qFuzzyCompare(adjustedMax - adjustedMin, std::numeric_limits::min())) { + adjust = 1; + } else { + adjust = (height() / (adjustedMax - adjustedMin)); + } + + //normalizebased on global max and min + m_mutex.lock(); + for (auto data : m_plotData) { + for (int i = 0; i < data->values().count(); ++i) { + data->m_normalizedValues[i] = (data->m_normalizedValues.value(i) - adjustedMin) * adjust; + } + } + m_mutex.unlock(); + } +} + diff --git a/src/qmlcontrols/kquickcontrolsaddons/plotter.h b/src/qmlcontrols/kquickcontrolsaddons/plotter.h new file mode 100644 index 0000000..3b3276e --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/plotter.h @@ -0,0 +1,259 @@ +/* + * This file is part of the KDE project + * + * Copyright © 2014 Fredrik Höglund + * Copyright © 2014 Marco Martin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#ifndef PLASMA_PLOTTER_H +#define PLASMA_PLOTTER_H + + +#include + +#include +#include +#include +#include +#include +#include +#include + +/** + * a Plotter can draw a graph of values arriving from an arbitrary number of data sources + * to show their evoluton in time. + * an example can be a plot of the network transfer speed or CPU temperature over time. + * Multiple plots can be fitted in the same graph, either stacked or intersected. + */ +class PlotData : public QObject +{ + Q_OBJECT + /** + * text Label of the data set: note this is purely a model, it will need a Label somewhere to be actually painted + */ + Q_PROPERTY(QString label READ label WRITE setLabel NOTIFY labelChanged) + + /** + * Color to plot this data set + */ + Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) + + /** + * All the values currently in this data set + */ + Q_PROPERTY(QList values READ values NOTIFY valuesChanged) + + /** + * Maximum value of this data set + */ + Q_PROPERTY(qreal max READ max NOTIFY maxChanged) + + /** + * Minimum value of this data set + */ + Q_PROPERTY(qreal min READ min NOTIFY minChanged) + +public: + PlotData(QObject *parent = nullptr); + + void setColor(const QColor &color); + QColor color() const; + + void addSample(qreal value); + + QList values() const; + + QVector m_normalizedValues; + + qreal max() const; + qreal min() const; + + void setSampleSize(int size); + + QString label() const; + void setLabel(const QString &label); + +Q_SIGNALS: + void colorChanged(); + void valuesChanged(); + void maxChanged(); + void minChanged(); + void labelChanged(); + +private: + QString m_label; + QColor m_color; + QList m_values; + + qreal m_min; + qreal m_max; + int m_sampleSize; +}; + +class Plotter : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(QQmlListProperty dataSets READ dataSets) + + /** + * maximum value among all graphs + */ + Q_PROPERTY(qreal max READ max NOTIFY maxChanged) + + /** + * minimum value among all graphs + */ + Q_PROPERTY(qreal min READ min NOTIFY minChanged) + + /** + * draw at most n samples, if new samples are pushed old values are started to be thrown away + */ + Q_PROPERTY(int sampleSize READ sampleSize WRITE setSampleSize NOTIFY sampleSizeChanged) + + /** + * if true stack the graphs one on top of each other instead of just painting one on top of each other + */ + Q_PROPERTY(bool stacked READ isStacked WRITE setStacked NOTIFY stackedChanged) + + /** + * If true, the graph is automatically scaled to always fit in the Plotter area + */ + Q_PROPERTY(bool autoRange READ isAutoRange WRITE setAutoRange NOTIFY autoRangeChanged) + + /** + * Always represents the values scaled between this and rangeMin + * If autoRange is true, this property just holds the minimum value + */ + Q_PROPERTY(qreal rangeMax READ rangeMax WRITE setRangeMax NOTIFY rangeMaxChanged) + + /** + * Always represents the values scaled between this and rangeMax + * If autoRange is true, this property just holds the maximum value + */ + Q_PROPERTY(qreal rangeMin READ rangeMin WRITE setRangeMin NOTIFY rangeMinChanged) + + /** + * Color of the grid lines + */ + Q_PROPERTY(QColor gridColor READ gridColor WRITE setGridColor NOTIFY gridColorChanged) + + + /** + * The number of horizontal lines drawn across the view between 0 and rangeMax at the top of the plotter at rangeMax + * This does not include the bottom line + * Setting this to 0 will disable grid lines + * + * The default value is 5 + */ + Q_PROPERTY(int horizontalGridLineCount READ horizontalGridLineCount WRITE setHorizontalGridLineCount NOTIFY horizontalGridLineCountChanged) + + //Q_CLASSINFO("DefaultProperty", "dataSets") + +public: + Plotter(QQuickItem *parent = nullptr); + ~Plotter(); + + qreal max() const; + qreal min() const; + + int sampleSize() const; + void setSampleSize(int size); + + bool isStacked() const; + void setStacked(bool stacked); + + bool isAutoRange() const; + void setAutoRange(bool autorange); + + qreal rangeMax() const; + void setRangeMax(qreal max); + + qreal rangeMin() const; + void setRangeMin(qreal min); + + void setHorizontalGridLineCount(int count); + int horizontalGridLineCount(); + + void setGridColor(const QColor &color); + QColor gridColor() const; + + QQmlListProperty dataSets(); + static void dataSet_append(QQmlListProperty *list, PlotData *item); + static int dataSet_count(QQmlListProperty *list); + static PlotData *dataSet_at(QQmlListProperty *list, int pos); + static void dataSet_clear(QQmlListProperty *list); + + Q_INVOKABLE void addSample(qreal value); + Q_INVOKABLE void addSample(const QList &value); + +protected: + void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE; + +private: + QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *updatePaintNodeData) override final; + QPainterPath interpolate(const QVector &p, qreal x0, qreal x1) const; + void normalizeData(); + +Q_SIGNALS: + void maxChanged(); + void minChanged(); + void sampleSizeChanged(); + void stackedChanged(); + void autoRangeChanged(); + void rangeMaxChanged(); + void rangeMinChanged(); + void gridColorChanged(); + void horizontalGridLineCountChanged(); + +private Q_SLOTS: + void render(); + +private: + QList m_plotData; + + GLuint m_fbo = 0; + QSGSimpleTextureNode *m_node = nullptr; + qreal m_min; + qreal m_max; + qreal m_rangeMax; + qreal m_rangeMin; + int m_sampleSize; + int m_horizontalLineCount; + bool m_stacked; + bool m_autoRange; + QColor m_gridColor; + + QMatrix4x4 m_matrix; + bool m_initialized = false; + bool m_haveMSAA; + bool m_haveFramebufferBlit; + bool m_haveInternalFormatQuery; + GLenum m_internalFormat; + int m_samples; + QPointer m_window; + QMutex m_mutex; + + static QOpenGLShaderProgram *s_program; + static int u_matrix; + static int u_color1; + static int u_color2; + static int u_yMin; + static int u_yMax; +}; + +#endif diff --git a/src/qmlcontrols/kquickcontrolsaddons/qiconitem.cpp b/src/qmlcontrols/kquickcontrolsaddons/qiconitem.cpp new file mode 100644 index 0000000..e4e9025 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/qiconitem.cpp @@ -0,0 +1,173 @@ +/* + * Copyright 2011 Marco Martin + * Copyright 2014 Aleix Pol Gonzalez + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qiconitem.h" + +#include +#include +#include +#include +#include + +Q_GLOBAL_STATIC(ImageTexturesCache, s_iconImageCache) + +QIconItem::QIconItem(QQuickItem *parent) + : QQuickItem(parent), + m_smooth(false), + m_state(DefaultState), + m_changed(false) +{ + setFlag(ItemHasContents, true); +} + + +QIconItem::~QIconItem() +{ +} + +void QIconItem::setIcon(const QVariant &icon) +{ + if(icon.canConvert()) { + m_icon = icon.value(); + } else if(icon.canConvert()) { + m_icon = QIcon::fromTheme(icon.toString()); + } else { + m_icon = QIcon(); + } + m_changed = true; + update(); + emit iconChanged(); +} + +QIcon QIconItem::icon() const +{ + return m_icon; +} + +QIconItem::State QIconItem::state() const +{ + return m_state; +} + +void QIconItem::setState(QIconItem::State state) +{ + if (m_state == state) { + return; + } + + m_state = state; + m_changed = true; + emit stateChanged(state); + update(); +} + +bool QIconItem::enabled() const +{ + return (m_state == DefaultState); +} + +void QIconItem::setEnabled(bool enabled) +{ + if (enabled) { + setState(DefaultState); + } else { + setState(DisabledState); + } +} + +int QIconItem::implicitWidth() const +{ + return 32; +} + +int QIconItem::implicitHeight() const +{ + return 32; +} + +void QIconItem::setSmooth(const bool smooth) +{ + if (smooth == m_smooth) { + return; + } + m_smooth = smooth; + m_changed = true; + update(); + emit smoothChanged(); +} + +bool QIconItem::smooth() const +{ + return m_smooth; +} + +QSGNode* QIconItem::updatePaintNode(QSGNode* node, QQuickItem::UpdatePaintNodeData* /*data*/) +{ + if (m_icon.isNull()) { + delete node; + return nullptr; + } + + if (m_changed || node == nullptr) { + m_changed = false; + + ManagedTextureNode* mNode = dynamic_cast(node); + if(!mNode) { + delete node; + mNode = new ManagedTextureNode; + } + + QIcon::Mode mode; + switch(m_state) { + case DefaultState: + mode = QIcon::Normal; + break; + case ActiveState: + mode = QIcon::Active; + break; + case DisabledState: + mode = QIcon::Disabled; + break; + case SelectedState: + mode = QIcon::Selected; + break; + } + + QImage img; + const QSize size(width(), height()); + if (!size.isEmpty()) { + img = m_icon.pixmap(size, mode, QIcon::On).toImage(); + } + mNode->setTexture(s_iconImageCache->loadTexture(window(), img)); + mNode->setRect(QRect(QPoint(0,0), size)); + node = mNode; + } + + return node; +} + +void QIconItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) +{ + if (newGeometry.size() != oldGeometry.size()) { + m_changed = true; + update(); + } + QQuickItem::geometryChanged(newGeometry, oldGeometry); +} diff --git a/src/qmlcontrols/kquickcontrolsaddons/qiconitem.h b/src/qmlcontrols/kquickcontrolsaddons/qiconitem.h new file mode 100644 index 0000000..6f2b4a1 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/qiconitem.h @@ -0,0 +1,83 @@ +/* + * Copyright 2011 Marco Martin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef QICONITEM_H +#define QICONITEM_H + +#include +#include +#include + +class QIconItem : public QQuickItem +{ + Q_OBJECT + + Q_PROPERTY(QVariant icon READ icon WRITE setIcon NOTIFY iconChanged) + Q_PROPERTY(bool smooth READ smooth WRITE setSmooth NOTIFY smoothChanged) + Q_PROPERTY(int implicitWidth READ implicitWidth CONSTANT) + Q_PROPERTY(int implicitHeight READ implicitHeight CONSTANT) + Q_PROPERTY(State state READ state WRITE setState NOTIFY stateChanged) + Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY stateChanged) + +public: + + enum State { + DefaultState, ///The default state. + ActiveState, ///Icon is active. + DisabledState, ///Icon is disabled. + SelectedState ///Icon is selected + }; + Q_ENUM(State) + + QIconItem(QQuickItem *parent=nullptr); + ~QIconItem(); + + void setIcon(const QVariant &icon); + QIcon icon() const; + + QIconItem::State state() const; + void setState(State state); + + int implicitWidth() const; + int implicitHeight() const; + + void setSmooth(const bool smooth); + bool smooth() const; + + void setEnabled(bool enabled = true); + bool enabled() const; + + QSGNode* updatePaintNode(QSGNode* node, UpdatePaintNodeData* data) Q_DECL_OVERRIDE; + +Q_SIGNALS: + void iconChanged(); + void smoothChanged(); + void stateChanged(State state); + +protected: + void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE; + +private: + QIcon m_icon; + bool m_smooth; + State m_state; + bool m_changed; +}; + +#endif diff --git a/src/qmlcontrols/kquickcontrolsaddons/qimageitem.cpp b/src/qmlcontrols/kquickcontrolsaddons/qimageitem.cpp new file mode 100644 index 0000000..49a305b --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/qimageitem.cpp @@ -0,0 +1,208 @@ +/* + * Copyright 2011 Marco Martin + * Copyright 2015 Luca Beltrame + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qimageitem.h" + +#include + + +QImageItem::QImageItem(QQuickItem *parent) + : QQuickPaintedItem(parent), + m_smooth(false), + m_fillMode(QImageItem::Stretch) +{ + setFlag(ItemHasContents, true); +} + + +QImageItem::~QImageItem() +{ +} + +void QImageItem::setImage(const QImage &image) +{ + bool oldImageNull = m_image.isNull(); + m_image = image; + updatePaintedRect(); + update(); + emit nativeWidthChanged(); + emit nativeHeightChanged(); + emit imageChanged(); + if (oldImageNull != m_image.isNull()) { + emit nullChanged(); + } +} + +QImage QImageItem::image() const +{ + return m_image; +} + +void QImageItem::resetImage() +{ + setImage(QImage()); +} + +void QImageItem::setSmooth(const bool smooth) +{ + if (smooth == m_smooth) { + return; + } + m_smooth = smooth; + update(); +} + +bool QImageItem::smooth() const +{ + return m_smooth; +} + +int QImageItem::nativeWidth() const +{ + return m_image.size().width() / m_image.devicePixelRatio(); +} + +int QImageItem::nativeHeight() const +{ + return m_image.size().height() / m_image.devicePixelRatio(); +} + +QImageItem::FillMode QImageItem::fillMode() const +{ + return m_fillMode; +} + +void QImageItem::setFillMode(QImageItem::FillMode mode) +{ + if (mode == m_fillMode) { + return; + } + + m_fillMode = mode; + updatePaintedRect(); + update(); + emit fillModeChanged(); +} + +void QImageItem::paint(QPainter *painter) +{ + if (m_image.isNull()) { + return; + } + painter->save(); + painter->setRenderHint(QPainter::Antialiasing, m_smooth); + painter->setRenderHint(QPainter::SmoothPixmapTransform, m_smooth); + + if (m_fillMode == TileVertically) { + painter->scale(width()/(qreal)m_image.width(), 1); + } + + if (m_fillMode == TileHorizontally) { + painter->scale(1, height()/(qreal)m_image.height()); + } + + if (m_fillMode >= Tile) { + painter->drawTiledPixmap(m_paintedRect, QPixmap::fromImage(m_image)); + } else { + painter->drawImage(m_paintedRect, m_image, m_image.rect()); + } + + painter->restore(); +} + +bool QImageItem::isNull() const +{ + return m_image.isNull(); +} + +int QImageItem::paintedWidth() const +{ + if (m_image.isNull()) { + return 0; + } + + return m_paintedRect.width(); +} + +int QImageItem::paintedHeight() const +{ + if (m_image.isNull()) { + return 0; + } + + return m_paintedRect.height(); +} + +void QImageItem::updatePaintedRect() +{ + + if (m_image.isNull()) { + return; + } + + QRect sourceRect = m_paintedRect; + + QRect destRect; + + switch (m_fillMode) { + case PreserveAspectFit: { + QSize scaled = m_image.size(); + + scaled.scale(boundingRect().size().toSize(), Qt::KeepAspectRatio); + destRect = QRect(QPoint(0, 0), scaled); + destRect.moveCenter(boundingRect().center().toPoint()); + break; + } + case PreserveAspectCrop: { + QSize scaled = m_image.size(); + + scaled.scale(boundingRect().size().toSize(), Qt::KeepAspectRatioByExpanding); + destRect = QRect(QPoint(0, 0), scaled); + destRect.moveCenter(boundingRect().center().toPoint()); + break; + } + case TileVertically: { + destRect = boundingRect().toRect(); + destRect.setWidth(destRect.width() / (width()/(qreal)m_image.width())); + break; + } + case TileHorizontally: { + destRect = boundingRect().toRect(); + destRect.setHeight(destRect.height() / (height()/(qreal)m_image.height())); + break; + } + case Stretch: + case Tile: + default: + destRect = boundingRect().toRect(); + } + + if (destRect != sourceRect) { + m_paintedRect = destRect; + emit paintedHeightChanged(); + emit paintedWidthChanged(); + } +} + +void QImageItem::geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry) +{ + QQuickPaintedItem::geometryChanged(newGeometry, oldGeometry); + updatePaintedRect(); +} diff --git a/src/qmlcontrols/kquickcontrolsaddons/qimageitem.h b/src/qmlcontrols/kquickcontrolsaddons/qimageitem.h new file mode 100644 index 0000000..3af9aa2 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/qimageitem.h @@ -0,0 +1,97 @@ +/* + * Copyright 2011 Marco Martin + * Copyright 2015 Luca Beltrame + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef QIMAGEITEM_H +#define QIMAGEITEM_H + +#include +#include + +class QImageItem : public QQuickPaintedItem +{ + Q_OBJECT + + Q_PROPERTY(QImage image READ image WRITE setImage NOTIFY imageChanged RESET resetImage) + Q_PROPERTY(bool smooth READ smooth WRITE setSmooth) + Q_PROPERTY(int nativeWidth READ nativeWidth NOTIFY nativeWidthChanged) + Q_PROPERTY(int nativeHeight READ nativeHeight NOTIFY nativeHeightChanged) + Q_PROPERTY(int paintedWidth READ paintedWidth NOTIFY paintedWidthChanged) + Q_PROPERTY(int paintedHeight READ paintedHeight NOTIFY paintedHeightChanged) + Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged) + Q_PROPERTY(bool null READ isNull NOTIFY nullChanged) + +public: + enum FillMode { + Stretch, // the image is scaled to fit + PreserveAspectFit, // the image is scaled uniformly to fit without cropping + PreserveAspectCrop, // the image is scaled uniformly to fill, cropping if necessary + Tile, // the image is duplicated horizontally and vertically + TileVertically, // the image is stretched horizontally and tiled vertically + TileHorizontally //the image is stretched vertically and tiled horizontally + }; + Q_ENUM(FillMode) + + QImageItem(QQuickItem *parent=nullptr); + ~QImageItem(); + + void setImage(const QImage &image); + QImage image() const; + void resetImage(); + + void setSmooth(const bool smooth); + bool smooth() const; + + int nativeWidth() const; + int nativeHeight() const; + + int paintedWidth() const; + int paintedHeight() const; + + FillMode fillMode() const; + void setFillMode(FillMode mode); + + void paint(QPainter *painter) Q_DECL_OVERRIDE; + + bool isNull() const; + +Q_SIGNALS: + void nativeWidthChanged(); + void nativeHeightChanged(); + void fillModeChanged(); + void imageChanged(); + void nullChanged(); + void paintedWidthChanged(); + void paintedHeightChanged(); + +protected: + void geometryChanged(const QRectF & newGeometry, const QRectF & oldGeometry) Q_DECL_OVERRIDE; + +private: + QImage m_image; + bool m_smooth; + FillMode m_fillMode; + QRect m_paintedRect; + +private Q_SLOTS: + void updatePaintedRect(); + +}; + +#endif diff --git a/src/qmlcontrols/kquickcontrolsaddons/qmldir b/src/qmlcontrols/kquickcontrolsaddons/qmldir new file mode 100644 index 0000000..5e8e1f4 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/qmldir @@ -0,0 +1,5 @@ +module org.kde.kquickcontrolsaddons +plugin kquickcontrolsaddonsplugin + + +ShortcutButton 2.0 ShortcutButton.qml diff --git a/src/qmlcontrols/kquickcontrolsaddons/qpixmapitem.cpp b/src/qmlcontrols/kquickcontrolsaddons/qpixmapitem.cpp new file mode 100644 index 0000000..f12f01b --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/qpixmapitem.cpp @@ -0,0 +1,212 @@ +/* + * Copyright 2011 Marco Martin + * Copyright 2015 Luca Beltrame + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qpixmapitem.h" + +#include + + +QPixmapItem::QPixmapItem(QQuickItem *parent) + : QQuickPaintedItem(parent), + m_smooth(false), + m_fillMode(QPixmapItem::Stretch) +{ + setFlag(ItemHasContents, true); + +} + + +QPixmapItem::~QPixmapItem() +{ +} + +void QPixmapItem::setPixmap(const QPixmap &pixmap) +{ + bool oldPixmapNull = m_pixmap.isNull(); + m_pixmap = pixmap; + updatePaintedRect(); + update(); + emit nativeWidthChanged(); + emit nativeHeightChanged(); + emit pixmapChanged(); + if (oldPixmapNull != m_pixmap.isNull()) { + emit nullChanged(); + } +} + +QPixmap QPixmapItem::pixmap() const +{ + return m_pixmap; +} + +void QPixmapItem::resetPixmap() +{ + setPixmap(QPixmap()); +} + +void QPixmapItem::setSmooth(const bool smooth) +{ + if (smooth == m_smooth) { + return; + } + m_smooth = smooth; + update(); +} + +bool QPixmapItem::smooth() const +{ + return m_smooth; +} + +int QPixmapItem::nativeWidth() const +{ + return m_pixmap.size().width() / m_pixmap.devicePixelRatio(); +} + +int QPixmapItem::nativeHeight() const +{ + return m_pixmap.size().height() / m_pixmap.devicePixelRatio(); +} + +QPixmapItem::FillMode QPixmapItem::fillMode() const +{ + return m_fillMode; +} + +void QPixmapItem::setFillMode(QPixmapItem::FillMode mode) +{ + if (mode == m_fillMode) { + return; + } + + m_fillMode = mode; + updatePaintedRect(); + update(); + emit fillModeChanged(); + +} + +void QPixmapItem::paint(QPainter *painter) +{ + if (m_pixmap.isNull()) { + return; + } + painter->save(); + painter->setRenderHint(QPainter::Antialiasing, m_smooth); + painter->setRenderHint(QPainter::SmoothPixmapTransform, m_smooth); + + if (m_fillMode == TileVertically) { + painter->scale(width()/(qreal)m_pixmap.width(), 1); + } + + if (m_fillMode == TileHorizontally) { + painter->scale(1, height()/(qreal)m_pixmap.height()); + } + + if (m_fillMode >= Tile) { + painter->drawTiledPixmap(m_paintedRect, m_pixmap); + } else { + painter->drawPixmap(m_paintedRect, m_pixmap, m_pixmap.rect()); + } + + painter->restore(); +} + +bool QPixmapItem::isNull() const +{ + return m_pixmap.isNull(); +} + + +int QPixmapItem::paintedWidth() const +{ + if (m_pixmap.isNull()) { + return 0; + } + + return m_paintedRect.width(); +} + +int QPixmapItem::paintedHeight() const +{ + if (m_pixmap.isNull()) { + return 0; + } + + return m_paintedRect.height(); +} + +void QPixmapItem::updatePaintedRect() +{ + + if (m_pixmap.isNull()) { + return; + } + + QRect sourceRect = m_paintedRect; + + QRect destRect; + + switch (m_fillMode) { + case PreserveAspectFit: { + QSize scaled = m_pixmap.size(); + + scaled.scale(boundingRect().size().toSize(), Qt::KeepAspectRatio); + destRect = QRect(QPoint(0, 0), scaled); + destRect.moveCenter(boundingRect().center().toPoint()); + break; + } + case PreserveAspectCrop: { + QSize scaled = m_pixmap.size(); + + scaled.scale(boundingRect().size().toSize(), Qt::KeepAspectRatioByExpanding); + destRect = QRect(QPoint(0, 0), scaled); + destRect.moveCenter(boundingRect().center().toPoint()); + break; + } + case TileVertically: { + destRect = boundingRect().toRect(); + destRect.setWidth(destRect.width() / (width()/(qreal)m_pixmap.width())); + break; + } + case TileHorizontally: { + destRect = boundingRect().toRect(); + destRect.setHeight(destRect.height() / (height()/(qreal)m_pixmap.height())); + break; + } + case Stretch: + case Tile: + default: + destRect = boundingRect().toRect(); + } + + if (destRect != sourceRect) { + m_paintedRect = destRect; + emit paintedHeightChanged(); + emit paintedWidthChanged(); + } +} + +void QPixmapItem::geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry) +{ + QQuickPaintedItem::geometryChanged(newGeometry, oldGeometry); + updatePaintedRect(); +} + diff --git a/src/qmlcontrols/kquickcontrolsaddons/qpixmapitem.h b/src/qmlcontrols/kquickcontrolsaddons/qpixmapitem.h new file mode 100644 index 0000000..7dec859 --- /dev/null +++ b/src/qmlcontrols/kquickcontrolsaddons/qpixmapitem.h @@ -0,0 +1,97 @@ +/* + * Copyright 2011 Marco Martin + * Copyright 2015 Luca Beltrame + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef QPIXMAPITEM_H +#define QPIXMAPITEM_H + +#include +#include + +class QPixmapItem : public QQuickPaintedItem +{ + Q_OBJECT + + Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap NOTIFY pixmapChanged RESET resetPixmap) + Q_PROPERTY(bool smooth READ smooth WRITE setSmooth) + Q_PROPERTY(int nativeWidth READ nativeWidth NOTIFY nativeWidthChanged) + Q_PROPERTY(int nativeHeight READ nativeHeight NOTIFY nativeHeightChanged) + Q_PROPERTY(int paintedWidth READ paintedWidth NOTIFY paintedWidthChanged) + Q_PROPERTY(int paintedHeight READ paintedHeight NOTIFY paintedHeightChanged) + Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged) + Q_PROPERTY(bool null READ isNull NOTIFY nullChanged) + +public: + enum FillMode { + Stretch, // the image is scaled to fit + PreserveAspectFit, // the image is scaled uniformly to fit without cropping + PreserveAspectCrop, // the image is scaled uniformly to fill, cropping if necessary + Tile, // the image is duplicated horizontally and vertically + TileVertically, // the image is stretched horizontally and tiled vertically + TileHorizontally //the image is stretched vertically and tiled horizontally + }; + Q_ENUM(FillMode) + + QPixmapItem(QQuickItem *parent=nullptr); + ~QPixmapItem(); + + void setPixmap(const QPixmap &pixmap); + QPixmap pixmap() const; + void resetPixmap(); + + void setSmooth(const bool smooth); + bool smooth() const; + + int nativeWidth() const; + int nativeHeight() const; + + int paintedWidth() const; + int paintedHeight() const; + + FillMode fillMode() const; + void setFillMode(FillMode mode); + + void paint(QPainter *painter) Q_DECL_OVERRIDE; + + bool isNull() const; + +Q_SIGNALS: + void nativeWidthChanged(); + void nativeHeightChanged(); + void fillModeChanged(); + void pixmapChanged(); + void nullChanged(); + void paintedWidthChanged(); + void paintedHeightChanged(); + +protected: + void geometryChanged(const QRectF & newGeometry, const QRectF & oldGeometry) Q_DECL_OVERRIDE; + +private: + QPixmap m_pixmap; + bool m_smooth; + FillMode m_fillMode; + QRect m_paintedRect; + +private Q_SLOTS: + void updatePaintedRect(); + +}; + +#endif diff --git a/src/qmlcontrols/kwindowsystemplugin/CMakeLists.txt b/src/qmlcontrols/kwindowsystemplugin/CMakeLists.txt new file mode 100644 index 0000000..ce0ea74 --- /dev/null +++ b/src/qmlcontrols/kwindowsystemplugin/CMakeLists.txt @@ -0,0 +1,17 @@ +project(kwindowsystemplugin) + +set(kwindowsystemplugin_SRCS + kwindowsystemplugin.cpp + kwindowsystemproxy.cpp + ) + +add_library(kwindowsystem SHARED ${kwindowsystemplugin_SRCS}) +target_link_libraries(kwindowsystem + Qt5::Core + Qt5::Qml + KF5::WindowSystem +) + +install(TARGETS kwindowsystem DESTINATION ${QML_INSTALL_DIR}/org/kde/kwindowsystem) + +install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/kwindowsystem) diff --git a/src/qmlcontrols/kwindowsystemplugin/kwindowsystemplugin.cpp b/src/qmlcontrols/kwindowsystemplugin/kwindowsystemplugin.cpp new file mode 100644 index 0000000..d2f41be --- /dev/null +++ b/src/qmlcontrols/kwindowsystemplugin/kwindowsystemplugin.cpp @@ -0,0 +1,30 @@ +/* + * Copyright 2015 Kai Uwe Broulik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "kwindowsystemplugin.h" + +#include + +#include "kwindowsystemproxy.h" + +void KWindowSystemPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(QString::fromLatin1(uri) == QLatin1String("org.kde.kwindowsystem")); + + qmlRegisterType(uri, 1, 0, "KWindowSystem"); +} diff --git a/src/qmlcontrols/kwindowsystemplugin/kwindowsystemplugin.h b/src/qmlcontrols/kwindowsystemplugin/kwindowsystemplugin.h new file mode 100644 index 0000000..8a949e8 --- /dev/null +++ b/src/qmlcontrols/kwindowsystemplugin/kwindowsystemplugin.h @@ -0,0 +1,33 @@ +/* + * Copyright 2015 Kai Uwe Broulik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef KWINDOWSYSTEMPLUGIN_H +#define KWINDOWSYSTEMPLUGIN_H + +#include + +class KWindowSystemPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + void registerTypes(const char *uri) Q_DECL_OVERRIDE; +}; + +#endif // KWINDOWSYSTEMPLUGIN_H diff --git a/src/qmlcontrols/kwindowsystemplugin/kwindowsystemproxy.cpp b/src/qmlcontrols/kwindowsystemplugin/kwindowsystemproxy.cpp new file mode 100644 index 0000000..4850011 --- /dev/null +++ b/src/qmlcontrols/kwindowsystemplugin/kwindowsystemproxy.cpp @@ -0,0 +1,151 @@ +/* + * Copyright 2015 Kai Uwe Broulik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include + +#include + +#include "kwindowsystemproxy.h" + +KWindowSystemProxy::KWindowSystemProxy(QObject *parent) + : QObject(parent) + , m_initialized(false) +{ + +} + +KWindowSystemProxy::~KWindowSystemProxy() +{ + +} + +void KWindowSystemProxy::connectNotify(const QMetaMethod &signal) +{ + if (m_initialized) { + return; + } + + if (signal == QMetaMethod::fromSignal(&KWindowSystemProxy::currentDesktopChanged) || + signal == QMetaMethod::fromSignal(&KWindowSystemProxy::desktopNamesChanged) || + signal == QMetaMethod::fromSignal(&KWindowSystemProxy::numberOfDesktopsChanged) || + signal == QMetaMethod::fromSignal(&KWindowSystemProxy::showingDesktopChanged) || + signal == QMetaMethod::fromSignal(&KWindowSystemProxy::compositingActiveChanged)) { + + connect(KWindowSystem::self(), &KWindowSystem::currentDesktopChanged, this, [this](int currentDesktop) { + Q_EMIT currentDesktopChanged(currentDesktop); + Q_EMIT currentDesktopNameChanged(); + }); + + connect(KWindowSystem::self(), &KWindowSystem::desktopNamesChanged, this, [this]() { + Q_EMIT desktopNamesChanged(); + Q_EMIT currentDesktopNameChanged(); + }); + + connect(KWindowSystem::self(), &KWindowSystem::numberOfDesktopsChanged, + this, &KWindowSystemProxy::numberOfDesktopsChanged); + connect(KWindowSystem::self(), &KWindowSystem::showingDesktopChanged, + this, &KWindowSystemProxy::showingDesktopChanged); + connect(KWindowSystem::self(), &KWindowSystem::compositingChanged, + this, &KWindowSystemProxy::compositingActiveChanged); + + m_initialized = true; + } +} + +int KWindowSystemProxy::currentDesktop() const +{ + return KWindowSystem::currentDesktop(); +} + +void KWindowSystemProxy::setCurrentDesktop(int desktop) +{ + KWindowSystem::setCurrentDesktop(desktop); +} + +QString KWindowSystemProxy::currentDesktopName() const +{ + return KWindowSystem::desktopName(KWindowSystem::currentDesktop()); +} + +int KWindowSystemProxy::numberOfDesktops() const +{ + return KWindowSystem::numberOfDesktops(); +} + +bool KWindowSystemProxy::showingDesktop() const +{ + return KWindowSystem::showingDesktop(); +} + +void KWindowSystemProxy::setShowingDesktop(bool showingDesktop) +{ + KWindowSystem::setShowingDesktop(showingDesktop); +} + +bool KWindowSystemProxy::compositingActive() const +{ + return KWindowSystem::compositingActive(); +} + +bool KWindowSystemProxy::hasWindow(QWindow *window) const +{ + if (!window) { + return false; + } + + return KWindowSystem::hasWId(window->winId()); +} + +void KWindowSystemProxy::forceActivateWindow(QWindow *window, long time) +{ + if (window) { + KWindowSystem::forceActiveWindow(window->winId(), time); + } +} + +void KWindowSystemProxy::setOnAllDesktops(QWindow *window, bool onAllDesktops) +{ + if (window) { + KWindowSystem::setOnAllDesktops(window->winId(), onAllDesktops); + } +} + +void KWindowSystemProxy::setOnDesktop(QWindow *window, int desktop) +{ + if (window) { + KWindowSystem::setOnDesktop(window->winId(), desktop); + } +} + +void KWindowSystemProxy::setOnActivities(QWindow *window, const QStringList &activities) +{ + if (window) { + KWindowSystem::setOnActivities(window->winId(), activities); + } +} + +QString KWindowSystemProxy::desktopName(int desktop) const +{ + return KWindowSystem::desktopName(desktop); +} + +void KWindowSystemProxy::setDesktopName(int desktop, const QString &name) +{ + KWindowSystem::setDesktopName(desktop, name); +} diff --git a/src/qmlcontrols/kwindowsystemplugin/kwindowsystemproxy.h b/src/qmlcontrols/kwindowsystemplugin/kwindowsystemproxy.h new file mode 100644 index 0000000..31cd247 --- /dev/null +++ b/src/qmlcontrols/kwindowsystemplugin/kwindowsystemproxy.h @@ -0,0 +1,169 @@ +/* + * Copyright 2015 Kai Uwe Broulik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef KWINDOWSYSTEMPROXY_H +#define KWINDOWSYSTEMPROXY_H + +#include +#include + +class QMetaMethod; +class QWindow; + +/** + * This item exposes various properties of KWindowSystem for use inside a QML environment. + * + * Example usage: + * @code + * import org.kde.kwindowsystem 1.0 + * + * KWindowSystem { + * id: kwindowsystem + * } + * + * Rectangle { + * width: 50 + * height: 50 + * color: "blue" + * opacity: kwindowsystem.compositingActive ? 0.5 : 1 + * } + * + * Label { + * text: i18n("You are currently on Desktop '%1'", kwindowsystem.currentDesktopName) + * } + * @endcode + * + * @note The features provided by this item are specific to the windowing system and might not + * be supported on any platform other than X11 + */ +class KWindowSystemProxy : public QObject +{ + Q_OBJECT + + /** + * @brief The number of the current desktop + */ + Q_PROPERTY(int currentDesktop READ currentDesktop WRITE setCurrentDesktop NOTIFY currentDesktopChanged) + /** + * @brief The name of the current desktop + */ + Q_PROPERTY(QString currentDesktopName READ currentDesktopName NOTIFY currentDesktopNameChanged) + /** + * @brief The number of desktops + */ + Q_PROPERTY(int numberOfDesktops READ numberOfDesktops NOTIFY numberOfDesktopsChanged) + /** + * @brief Whether "show desktop" is currently active + */ + Q_PROPERTY(bool showingDesktop READ showingDesktop WRITE setShowingDesktop NOTIFY showingDesktopChanged) + /** + * @brief Whether desktop compositing is active + * + * @note This property is updated delayed + */ + Q_PROPERTY(bool compositingActive READ compositingActive NOTIFY compositingActiveChanged) + +public: + explicit KWindowSystemProxy(QObject *parent = nullptr); + virtual ~KWindowSystemProxy(); + + int currentDesktop() const; + void setCurrentDesktop(int desktop); + + QString currentDesktopName() const; + int numberOfDesktops() const; + + bool showingDesktop() const; + void setShowingDesktop(bool showingDesktop); + + bool compositingActive() const; + + /** + * Test to see if @p window still managed at present. + * @param window the window to test + */ + Q_INVOKABLE bool hasWindow(QWindow *window) const; + + /** + * Sets window @p window to be the active window. + * + * @note This should be called only in special cases, applications + * shouldn't force themselves or other windows to be the active + * window. Generally, this call should used only by pagers + * and similar tools. + * + * @param window the window to make active + * @param time X server timestamp of the user activity that caused this request + */ + Q_INVOKABLE void forceActivateWindow(QWindow *window, long time = 0); + + /** + * Sets window @p window to be present on all virtual desktops if @p + * onAllDesktops true. Otherwise the window lives only on one single desktop. + * + * @param window the window + * @param onAllDesktops true to show the window on all desktops, false otherwise + */ + Q_INVOKABLE void setOnAllDesktops(QWindow *window, bool onAllDesktops); + /** + * Moves window @p window to desktop @p desktop. + * + * @param window the window + * @param desktop the number of the new desktop + */ + Q_INVOKABLE void setOnDesktop(QWindow *window, int desktop); + /** + * Moves window @p window to activities @p activities. + * + * @param window the window + * @param activities the list of activity UUIDs + */ + Q_INVOKABLE void setOnActivities(QWindow *window, const QStringList &activities); + + /** + * Returns the name of the specified desktop. + * @see currentDesktopName + * @param desktop the number of the desktop + * @return the name of the desktop + **/ + Q_INVOKABLE QString desktopName(int desktop) const; + /** + * Sets the name of the specified desktop. + * @param desktop the number of the desktop + * @param name the new name for the desktop + **/ + Q_INVOKABLE void setDesktopName(int desktop, const QString &name); + +Q_SIGNALS: + void currentDesktopChanged(int desktop); + void currentDesktopNameChanged(); + + void desktopNamesChanged(); + void numberOfDesktopsChanged(int numberOfDesktops); + void showingDesktopChanged(bool showingDesktop); + void compositingActiveChanged(bool compositingActive); + +protected: + void connectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE; + +private: + bool m_initialized; + +}; + +#endif // KWINDOWSYSTEMPROXY_H diff --git a/src/qmlcontrols/kwindowsystemplugin/qmldir b/src/qmlcontrols/kwindowsystemplugin/qmldir new file mode 100644 index 0000000..83ce62b --- /dev/null +++ b/src/qmlcontrols/kwindowsystemplugin/qmldir @@ -0,0 +1,3 @@ +module org.kde.kwindowsystem +plugin kwindowsystem + diff --git a/src/quickaddons/CMakeLists.txt b/src/quickaddons/CMakeLists.txt new file mode 100644 index 0000000..acb2c9e --- /dev/null +++ b/src/quickaddons/CMakeLists.txt @@ -0,0 +1,81 @@ +set(KF5QuickAddons_LIB_SRCS + imagetexturescache.cpp + managedtexturenode.cpp + quickviewsharedengine.cpp + configmodule.cpp + qtquicksettings.cpp) +kconfig_add_kcfg_files(KF5QuickAddons_LIB_SRCS renderersettings.kcfgc) + +add_library(KF5QuickAddons ${KF5QuickAddons_LIB_SRCS}) + +generate_export_header(KF5QuickAddons EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/quickaddons_export.h BASE_NAME QuickAddons) +add_library(KF5::QuickAddons ALIAS KF5QuickAddons) + +# Apps must include or +target_include_directories(KF5QuickAddons INTERFACE "$") + +target_link_libraries(KF5QuickAddons + PUBLIC + Qt5::Quick + PRIVATE + KF5::I18n + KF5::Declarative + KF5::ConfigGui +) + +set_target_properties(KF5QuickAddons + PROPERTIES VERSION ${KDECLARATIVE_VERSION_STRING} + SOVERSION ${KDECLARATIVE_SOVERSION} + EXPORT_NAME QuickAddons +) + +# Install files +#those are deprecated, offered just for compatibility +ecm_generate_headers(QuickAddons_CamelCase_HEADERS + HEADER_NAMES + ImageTexturesCache + ManagedTextureNode + PREFIX QuickAddons + REQUIRED_HEADERS QuickAddons_HEADERS +) +install(FILES ${QuickAddons_CamelCase_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KDeclarative/QuickAddons COMPONENT Devel) + +# Install files +ecm_generate_headers(KQuickAddons_CamelCase_HEADERS + HEADER_NAMES + ImageTexturesCache + ManagedTextureNode + QtQuickSettings + ConfigModule + QuickViewSharedEngine + + PREFIX KQuickAddons + REQUIRED_HEADERS KQuickAddons_HEADERS +) +install(FILES ${KQuickAddons_CamelCase_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KDeclarative/KQuickAddons COMPONENT Devel) + +install(TARGETS KF5QuickAddons + EXPORT KF5DeclarativeTargets + ${KF5_INSTALL_TARGETS_DEFAULT_ARGS} +) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/quickaddons_export.h + ${QuickAddons_HEADERS} + DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KDeclarative/quickaddons + COMPONENT Devel +) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/quickaddons_export.h + ${KQuickAddons_HEADERS} + DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KDeclarative/kquickaddons + COMPONENT Devel +) + +# make available to ecm_add_qch in parent folder +set(KQuickAddons_QCH_SOURCES ${KQuickAddons_HEADERS} PARENT_SCOPE) + +include(ECMGeneratePriFile) +ecm_generate_pri_file(BASE_NAME QuickAddons LIB_NAME KF5QuickAddons DEPS "qml" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/QuickAddons) +install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) diff --git a/src/quickaddons/configmodule.cpp b/src/quickaddons/configmodule.cpp new file mode 100644 index 0000000..a59fcf0 --- /dev/null +++ b/src/quickaddons/configmodule.cpp @@ -0,0 +1,328 @@ +/* + This file is part of the KDE libraries + + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + Copyright (c) 2001 Michael Goffioul + Copyright (C) 2004 Frans Englich + Copyright (C) 2009 Dario Freddi + Copyright (C) 2015 Marco Martin + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +*/ + +#include "configmodule.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +namespace KQuickAddons { + +class ConfigModulePrivate +{ +public: + ConfigModulePrivate(ConfigModule *module): + _q(module), + _qmlObject(nullptr), + _buttons(ConfigModule::Help | ConfigModule::Default | ConfigModule::Apply), + _about(nullptr), + _useRootOnlyMessage(false), + _needsAuthorization(false), + _needsSave(false) + { + } + + void authStatusChanged(int status); + + ConfigModule *_q; + KDeclarative::QmlObjectSharedEngine *_qmlObject; + ConfigModule::Buttons _buttons; + const KAboutData *_about; + QString _rootOnlyMessage; + QString _quickHelp; + bool _useRootOnlyMessage : 1; + + bool _needsAuthorization : 1; + bool _needsSave :1; + QString _authActionName; + + static QHash s_rootObjects; +}; + +QHash ConfigModulePrivate::s_rootObjects = QHash(); + + +ConfigModule::ConfigModule(const KAboutData *aboutData, QObject *parent, const QVariantList &) + : QObject(parent), d(new ConfigModulePrivate(this)) +{ + setAboutData(aboutData); +} + +ConfigModule::ConfigModule(const KPluginMetaData &metaData, QObject *parent, const QVariantList &) + : QObject(parent), d(new ConfigModulePrivate(this)) +{ + KAboutData *aboutData = new KAboutData(metaData.pluginId(), metaData.name(), metaData.version(), metaData.description(), KAboutLicense::byKeyword(metaData.license()).key()); + + for (auto author : metaData.authors()) { + aboutData->addAuthor(author.name(), author.task(), author.emailAddress(), author.webAddress(), author.ocsUsername()); + } + setAboutData(aboutData); +} + +ConfigModule::ConfigModule(QObject *parent, const QVariantList &) + : QObject(parent), d(new ConfigModulePrivate(this)) +{ +} + +ConfigModule::~ConfigModule() +{ + //in case mainUi was never called + if (d->_qmlObject) { + ConfigModulePrivate::s_rootObjects.remove(d->_qmlObject->rootContext()); + } + + delete d->_qmlObject; + delete d->_about; + delete d; +} + + + +ConfigModule *ConfigModule::qmlAttachedProperties(QObject *object) +{ + //at the moment of the attached object creation, the root item is the only one that hasn't a parent + //only way to avoid creation of this attached for everybody but the root item + const QQmlEngine *engine = QtQml::qmlEngine(object); + QQmlContext *cont = QQmlEngine::contextForObject(object); + + //Search the qml context that is the "root" for the sharedqmlobject, which + //is an ancestor of QQmlEngine::contextForObject(object) and the direct child + //of the engine's root context: we can do this assumption on the internals as + //we are distributed on the same repo. + while (cont->parentContext() && cont->parentContext() != engine->rootContext()) { + cont = cont->parentContext(); + } + + if (!object->parent() && ConfigModulePrivate::s_rootObjects.contains(cont)) { + return ConfigModulePrivate::s_rootObjects.value(cont); + } else { + return nullptr; + } +} + +QQuickItem *ConfigModule::mainUi() +{ + if (d->_qmlObject) { + return qobject_cast(d->_qmlObject->rootObject()); + } + d->_qmlObject = new KDeclarative::QmlObjectSharedEngine(this); + ConfigModulePrivate::s_rootObjects[d->_qmlObject->rootContext()] = this; + d->_qmlObject->setTranslationDomain(aboutData()->componentName()); + d->_qmlObject->setInitializationDelayed(true); + + KPackage::Package package = KPackage::PackageLoader::self()->loadPackage(QStringLiteral("KPackage/GenericQML")); + package.setDefaultPackageRoot(QStringLiteral("kpackage/kcms")); + package.setPath(aboutData()->componentName()); + + if (!package.filePath("mainscript").isEmpty()) { + d->_qmlObject->setSource(QUrl::fromLocalFile(package.filePath("mainscript"))); + d->_qmlObject->engine()->rootContext()->setContextProperty(QStringLiteral("kcm"), this); + d->_qmlObject->completeInitialization(); + + return qobject_cast(d->_qmlObject->rootObject()); + } else { + qWarning() << "Error loading the module" << aboutData()->componentName() << ": no QML file provided"; + return nullptr; + } +} + +ConfigModule::Buttons ConfigModule::buttons() const +{ + return d->_buttons; +} + +void ConfigModule::setButtons(const KQuickAddons::ConfigModule::Buttons buttons) +{ + if (d->_buttons == buttons) { + return; + } + + d->_buttons = buttons; + emit buttonsChanged(); +} + +void ConfigModule::setNeedsAuthorization(bool needsAuth) +{ + if (d->_needsAuthorization == needsAuth) { + return; + } + + d->_needsAuthorization = needsAuth; + if (needsAuth && d->_about) { + d->_authActionName = QStringLiteral("org.kde.kcontrol.") + d->_about->componentName() + QStringLiteral(".save"); + d->_needsAuthorization = true; + + } else { + d->_authActionName = QString(); + } + + emit needsAuthorizationChanged(); + emit authActionNameChanged(); +} + +bool ConfigModule::needsAuthorization() const +{ + return d->_needsAuthorization; +} + +QString ConfigModule::name() const +{ + return d->_about->displayName(); +} + +QString ConfigModule::description() const +{ + return d->_about->shortDescription(); +} + +void ConfigModule::setAuthActionName(const QString &name) +{ + if (d->_authActionName == name) { + return; + } + + d->_authActionName = name; + d->_needsAuthorization = true; + + emit needsAuthorizationChanged(); + emit authActionNameChanged(); +} + +QString ConfigModule::authActionName() const +{ + return d->_authActionName; +} + +QQmlEngine *ConfigModule::engine() const +{ + return d->_qmlObject->engine(); +} + +void ConfigModule::load() +{ + setNeedsSave(false); +} + +void ConfigModule::save() +{ + setNeedsSave(false); +} + +void ConfigModule::defaults() +{ +} + +const KAboutData *ConfigModule::aboutData() const +{ + return d->_about; +} + +void ConfigModule::setAboutData(const KAboutData *about) +{ + if (about != d->_about) { + delete d->_about; + d->_about = about; + } +} + +void ConfigModule::setRootOnlyMessage(const QString &message) +{ + if (d->_rootOnlyMessage == message) { + return; + } + + d->_rootOnlyMessage = message; + emit rootOnlyMessageChanged(); +} + +QString ConfigModule::rootOnlyMessage() const +{ + return d->_rootOnlyMessage; +} + +void ConfigModule::setUseRootOnlyMessage(bool on) +{ + if (d->_useRootOnlyMessage == on) { + return; + } + + d->_useRootOnlyMessage = on; + + emit useRootOnlyMessageChanged(); +} + +bool ConfigModule::useRootOnlyMessage() const +{ + return d->_useRootOnlyMessage; +} + +void ConfigModule::setQuickHelp(const QString &help) +{ + if (d->_quickHelp == help) { + return; + } + + d->_quickHelp = help; + + emit quickHelpChanged(); +} + +QString ConfigModule::quickHelp() const +{ + return d->_quickHelp; +} + +void ConfigModule::setNeedsSave(bool needs) +{ + if (needs == d->_needsSave) { + return; + } + + d->_needsSave = needs; + emit needsSaveChanged(); +} + +bool ConfigModule::needsSave() +{ + return d->_needsSave; +} + +} + +#include "moc_configmodule.cpp" + diff --git a/src/quickaddons/configmodule.h b/src/quickaddons/configmodule.h new file mode 100644 index 0000000..3e7d758 --- /dev/null +++ b/src/quickaddons/configmodule.h @@ -0,0 +1,492 @@ +/* + This file is part of the KDE libraries + + Copyright (c) 1999 Matthias Hoelzer-Kluepfel + Copyright (c) 2001 Michael Goffioul + Copyright (C) 2004 Frans Englich + Copyright (C) 2009 Dario Freddi + Copyright (C) 2015 Marco Martin + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +*/ + +#ifndef CONFIGMODULE_H +#define CONFIGMODULE_H + +#include "quickaddons_export.h" + +#include +#include +#include + +#include + +class QStringList; +class KAboutData; +class QQuickItem; +class QQmlEngine; + +namespace KQuickAddons { + +class ConfigModulePrivate; + +/** + * @class KQuickAddons::ConfigModule configmodule.h KQuickAddons/ConfigModule + * + * The base class for configuration modules. + * + * Configuration modules are realized as plugins that are loaded only when + * needed. + * + * The module in principle is a simple widget displaying the + * item to be changed. The module has a very small interface. + * + * All the necessary glue logic and the GUI bells and whistles + * are provided by the control center and must not concern + * the module author. + * + * To write a config module, you have to create a C++ library + * and an accompaining QML user interface. + * The library must contain a factory function like the following: + * + * \code + * #include + * + * K_PLUGIN_FACTORY(MyConfigModuleFactory, registerPlugin() ) + * \endcode + * + * The constructor of the ConfigModule then looks like this: + * \code + * YourConfigModule::YourConfigModule( QObject* parent ) + * : ConfigModule( parent ) + * { + * KAboutData *about = new KAboutData( + * , i18n( "..." ), + * KDE_VERSION_STRING, QString(), KAboutLicense::GPL, + * i18n( "Copyright 2006 ..." ) ); + * about->addAuthor( i18n(...) ); + * setAboutData( about ); + * . + * . + * . + * } + * \endcode + * + * The QML part must be in the KPackage format, installed under share/kpackage/kcms. + * @see KPackage::Package + * The package must have the same name as the KAboutData componentName, to be installed + * by CMake with the command: + * kpackage_install_package(package kcm_componentName kcms) + * given "package" is the subdirectory in the source tree where the package sources are + * located, and "kcm_componentName" is the componentname passed to the KAboutData in the + * C++ part. + * The main config dialog UI will be the file + * ui/main.qml from the package (or what X-KPackage-MainScript value is in the + * package metadata desktop file). + * + * The QML part can access all the properties of ConfigModule (together with the properties + * defined in its subclass) by accessing to the global object "kcm", or with the + * import of "org.kde.kcm 1.0" the ConfigModule attached property. + * + * \code + * import QtQuick 2.1 + * import QtQuick.Controls 1.0 as QtControls + * import org.kde.kcm 1.0 + * import org.kde.plasma.core 2.0 as PlasmaCore + * + * Item { + * //implicitWidth and implicitHeight will be used as initial size + * //when loaded in kcmshell5 + * implicitWidth: units.gridUnit * 20 + * implicitHeight: units.gridUnit * 20 + * + * ConfigModule.buttons: ConfigModule.Help|ConfigModule.Apply + * Label { + * text: kcm.needsSave + * } + * } + * \endcode + * + * If you want to make the ConfigModule available only conditionally (i.e. show in + * the list of available modules only if some test succeeds) then you can use + * Hidden in the .desktop file. An example: + * \code + * Hidden[$e]=$(if test -e /dev/js*; then echo "false"; else echo "true"; fi) + * \endcode + * The example executes the given code in a shell and uses the stdout output for + * the Hidden value (so it's either Hidden=true or Hidden=false). + * + * See http://techbase.kde.org/Development/Tutorials/KCM_HowTo + * for more detailed documentation. + * + */ +class QUICKADDONS_EXPORT ConfigModule : public QObject +{ + Q_OBJECT + + Q_PROPERTY(QQuickItem *mainUi READ mainUi CONSTANT) + Q_PROPERTY(KQuickAddons::ConfigModule::Buttons buttons READ buttons WRITE setButtons NOTIFY buttonsChanged) + Q_PROPERTY(bool needsSave READ needsSave WRITE setNeedsSave NOTIFY needsSaveChanged) + Q_PROPERTY(QString name READ name CONSTANT) + Q_PROPERTY(QString description READ description CONSTANT) + Q_PROPERTY(QString quickHelp READ quickHelp WRITE setQuickHelp NOTIFY quickHelpChanged) + Q_PROPERTY(QString rootOnlyMessage READ rootOnlyMessage WRITE setRootOnlyMessage NOTIFY rootOnlyMessageChanged) + Q_PROPERTY(bool useRootOnlyMessage READ useRootOnlyMessage WRITE setUseRootOnlyMessage NOTIFY useRootOnlyMessageChanged) + Q_PROPERTY(bool needsAuthorization READ needsAuthorization WRITE setNeedsAuthorization NOTIFY needsAuthorizationChanged) + +public: + + /** + * An enumeration type for the buttons used by this module. + * You should only use Help, Default and Apply. The rest is obsolete. + * NoAdditionalButton can be used when we do not want have other button that Ok Cancel + * + * @see ConfigModule::buttons @see ConfigModule::setButtons + */ + enum Button { + NoAdditionalButton = 0, + Help = 1, + Default = 2, + Apply = 4 + }; + Q_ENUM(Button) + Q_DECLARE_FLAGS(Buttons, Button) + Q_FLAG(Buttons) + + /** + * Base class for all KControlModules. + * + * @note do not emit changed signals here, since they are not yet connected + * to any slot. + * @param aboutData becomes owned by the ConfigModule + */ + explicit ConfigModule(const KAboutData *aboutData, QObject *parent = nullptr, const QVariantList &args = QVariantList()); + + /** + * @note do not emit changed signals here, since they are not yet connected + * to any slot. + * @param metaData description for the plugin: it will generate a KAboutData from that + * @since 5.11 + */ + explicit ConfigModule(const KPluginMetaData &metaData, QObject *parent = nullptr, const QVariantList &args = QVariantList()); + + /** + * Base class for all KControlModules. + * + * @note do not emit changed signals here, since they are not yet connected + * to any slot. + */ + explicit ConfigModule(QObject *parent = nullptr, const QVariantList &args = QVariantList()); + + /** + * Destroys the module. + */ + ~ConfigModule(); + + /** + * This is generally only called for the KBugReport. + * If you override you should have it return a pointer to a constant. + * + * + * @returns the KAboutData for this module + */ + const KAboutData *aboutData() const; + + /** + * This sets the KAboutData returned by aboutData() + * The about data is now owned by ConfigModule. + */ + void setAboutData(const KAboutData *about); + + /** + * @brief Set if the module's save() method requires authorization to be executed + * + * It will still have to execute the action itself using the KAuth library, so + * this method is not technically needed to perform the action, but + * using this method will ensure that hosting + * applications like System Settings or kcmshell behave correctly. + * + * @param action the action that will be used by this ConfigModule + */ + void setAuthActionName(const QString &action); + + /** + * Returns the action previously set with setAuthActionName(). By default its an invalid action. + * + * @return The action that has to be authorized to execute the save() method. + */ + QString authActionName() const; + + + /** + * @deturn the qml engine that built the main config UI + */ + QQmlEngine *engine() const; + +//QML property accessors + + /** + * @return The main UI for this configuration module. It's a QQuickItem coming from + * the QML package named the same as the KAboutData's component name for + * this config module + */ + QQuickItem *mainUi(); + + /** + * Sets the quick help. + */ + void setQuickHelp(const QString &help); + + /** + * Return a quick-help text. + * + * This method is called when the module is docked. + * The quick-help text should contain a short description of the module and + * links to the module's help files. You can use HTML formatting tags in the text. + * + * @note make sure the quick help text gets translated (use i18n()). + */ + QString quickHelp() const; + + /** + * Set this property to true when the user changes something in the module, + * signaling that a save (such as user pressing Ok or Apply) is needed. + */ + void setNeedsSave(bool needs); + + /** + * True when the module has something changed and needs save. + */ + bool needsSave(); + + /** + * Sets the buttons to display. + * + * Help: shows a "Help" button. + * + * Default: shows a "Use Defaults" button. + * + * Apply: in kcontrol this will show an "Apply" and "Reset" button, + * in kcmshell this will show an "Ok", "Apply" and "Cancel" button. + * + * If Apply is not specified, kcmshell will show a "Close" button. + * + * @see ConfigModule::buttons + */ + void setButtons(const Buttons btn); + + /** + * Indicate which buttons will be used. + * + * The return value is a value or'ed together from + * the Button enumeration type. + * + * @see ConfigModule::setButtons + */ + Buttons buttons() const; + + + /** + * Sets the RootOnly message. + * + * This message will be shown at the top of the module if useRootOnlyMessage is + * set. If no message is set, a default one will be used. + * + * @see ConfigModule::rootOnlyMessage + */ + void setRootOnlyMessage(const QString &message); + + /** + * Get the RootOnly message for this module. + * + * When the module must be run as root, or acts differently + * for root and a normal user, it is sometimes useful to + * customize the message that appears at the top of the module + * when used as a normal user. This function returns this + * customized message. If none has been set, a default message + * will be used. + * + * @see ConfigModule::setRootOnlyMessage + */ + QString rootOnlyMessage() const; + + + /** + * Change whether or not the RootOnly message should be shown. + * + * Following the value of @p on, the RootOnly message will be + * shown or not. + * + * @see ConfigModule::useRootOnlyMessage + */ + void setUseRootOnlyMessage(bool on); + + /** + * Tell if KControl should show a RootOnly message when run as + * a normal user. + * + * In some cases, the module don't want a RootOnly message to + * appear (for example if it has already one). This function + * tells KControl if a RootOnly message should be shown + * + * @see ConfigModule::setUseRootOnlyMessage + */ + bool useRootOnlyMessage() const; + + + /** + * @brief Set if the module's save() method requires authorization to be executed. + * + * The module can set this property to @c true if it requires authorization. + * It will still have to execute the action itself using the KAuth library, so + * this method is not technically needed to perform the action, but + * using this and/or the setAuthActionName() method will ensure that hosting + * applications like System Settings or kcmshell behave correctly. + * + * Called with @c true, this method will set the action to "org.kde.kcontrol.name.save" where + * "name" is aboutData()->appName() return value. This default action won't be set if + * the aboutData() object is not valid. + * + * Note that called with @c false, this method will reset the action name set with setAuthActionName(). + * + * @param needsAuth Tells if the module's save() method requires authorization to be executed. + */ + void setNeedsAuthorization(bool needsAuth); + + /** + * Returns the value previously set with setNeedsAuthorization() or setAuthActionName(). By default it's @c false. + * + * @return @c true if the module's save() method requires authorization, @c false otherwise + */ + bool needsAuthorization() const; + + /** + * @returns the name of the config module + * @since 5.41 + */ + QString name() const; + + /** + * @returns the description of the config module + * @since 5.41 + */ + QString description() const; + + static ConfigModule *qmlAttachedProperties(QObject *object); + +public Q_SLOTS: + /** + * Load the configuration data into the module. + * + * The load method sets the user interface elements of the + * module to reflect the current settings stored in the + * configuration files. + * + * This method is invoked whenever the module should read its configuration + * (most of the times from a config file) and update the user interface. + * This happens when the user clicks the "Reset" button in the control + * center, to undo all of his changes and restore the currently valid + * settings. It is also called right after construction. + */ + virtual void load(); + + /** + * Save the configuration data. + * + * The save method stores the config information as shown + * in the user interface in the config files. + * + * If necessary, this method also updates the running system, + * e.g. by restarting applications. This normally does not apply for + * KSettings::Dialog modules where the updating is taken care of by + * KSettings::Dispatcher. + * + * save is called when the user clicks "Apply" or "Ok". + * + */ + virtual void save(); + + /** + * Sets the configuration to sensible default values. + * + * This method is called when the user clicks the "Default" + * button. It should set the display to useful values. + */ + virtual void defaults(); + + +Q_SIGNALS: + + /** + * The auth action name has changed: this signal will relay it to the actual KCM + */ + void authActionNameChanged(); + + //QML NOTIFY signaling + /** + * Buttons to display changed. + */ + void buttonsChanged(); + + /** + * Indicate that the module's quickhelp has changed. + * + * Emit this signal whenever the module's quickhelp changes. + * Modules implemented as tabbed dialogs might want to implement + * per-tab quickhelp for example. + * + */ + void quickHelpChanged(); + + /** + * Indicate that the state of the modules contents has changed. + * + * This signal is emitted whenever the state of the configuration + * shown in the module changes. It allows the module container to + * keep track of unsaved changes. + */ + void needsSaveChanged(); + + /** + * Emits this signal whenever the need for root authorization to save changes. + */ + void needsAuthorizationChanged(); + + /** + * Indicate that the module's root message has changed. + * + * Emits this signal whenever the module's root message changes. + * + */ + void rootOnlyMessageChanged(); + + /** + * Emits this signal whenever the the root only message gets used or discarded. + */ + void useRootOnlyMessageChanged(); + +private: + ConfigModulePrivate *const d; +}; + +} + +Q_DECLARE_OPERATORS_FOR_FLAGS(KQuickAddons::ConfigModule::Buttons) +QML_DECLARE_TYPEINFO(KQuickAddons::ConfigModule, QML_HAS_ATTACHED_PROPERTIES) + +#endif //ConfigModule_H + diff --git a/src/quickaddons/imagetexturescache.cpp b/src/quickaddons/imagetexturescache.cpp new file mode 100644 index 0000000..66e147a --- /dev/null +++ b/src/quickaddons/imagetexturescache.cpp @@ -0,0 +1,70 @@ +/* + * Copyright 2014 Aleix Pol Gonzalez + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "imagetexturescache.h" +#include +#include + +typedef QHash > > TexturesCache; + +struct ImageTexturesCachePrivate +{ + TexturesCache cache; +}; + +ImageTexturesCache::ImageTexturesCache() + : d(new ImageTexturesCachePrivate) +{ +} + +ImageTexturesCache::~ImageTexturesCache() +{ +} + +QSharedPointer ImageTexturesCache::loadTexture(QQuickWindow *window, const QImage &image, QQuickWindow::CreateTextureOptions options) +{ + qint64 id = image.cacheKey(); + QSharedPointer texture = d->cache.value(id).value(window).toStrongRef(); + + if (!texture) { + auto cleanAndDelete = [this, window, id](QSGTexture* texture) { + QHash >& textures = (d->cache)[id]; + textures.remove(window); + if (textures.isEmpty()) + d->cache.remove(id); + delete texture; + }; + texture = QSharedPointer(window->createTextureFromImage(image, options), cleanAndDelete); + (d->cache)[id][window] = texture.toWeakRef(); + } + + //if we have a cache in an atlas but our request cannot use an atlassed texture + //create a new texture and use that + //don't use removedFromAtlas() as that requires keeping a reference to the non atlased version + if (!(options & QQuickWindow::TextureCanUseAtlas) && texture->isAtlasTexture()) { + texture = QSharedPointer(window->createTextureFromImage(image, options)); + } + + return texture; +} + +QSharedPointer ImageTexturesCache::loadTexture(QQuickWindow *window, const QImage &image) +{ + return loadTexture(window, image, QQuickWindow::CreateTextureOptions()); +} diff --git a/src/quickaddons/imagetexturescache.h b/src/quickaddons/imagetexturescache.h new file mode 100644 index 0000000..c2f9487 --- /dev/null +++ b/src/quickaddons/imagetexturescache.h @@ -0,0 +1,65 @@ +/* + * Copyright 2014 Aleix Pol Gonzalez + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef IMAGETEXTURESCACHE_H +#define IMAGETEXTURESCACHE_H + +#include +#include + +#include "quickaddons_export.h" + +class QImage; +class QSGTexture; +class ImageTexturesCachePrivate; + +/** + * @class ImageTexturesCache imagetexturescache.h KQuickAddons/ImageTexturesCache + * + * @short Helps to manage textures by creating images and reference counts them. + * + * Use this class as a factory for textures, when creating them from a QImage + * instance. + * Keeps track of all the created textures in a map between the QImage::cacheKey() and + * the cached texture until it gets de-referenced. + * + * @see ManagedTextureNode + */ +class QUICKADDONS_EXPORT ImageTexturesCache +{ +public: + ImageTexturesCache(); + ~ImageTexturesCache(); + + /** + * @returns the texture for a given @p window and @p image. + * + * If an @p image id is the same as one already provided before, we won't create + * a new texture and return a shared pointer to the existing texture. + */ + QSharedPointer loadTexture(QQuickWindow *window, const QImage &image, QQuickWindow::CreateTextureOptions options); + + QSharedPointer loadTexture(QQuickWindow *window, const QImage &image); + + +private: + QScopedPointer d; +}; + +#endif // IMAGETEXTURESCACHE_H diff --git a/src/quickaddons/managedtexturenode.cpp b/src/quickaddons/managedtexturenode.cpp new file mode 100644 index 0000000..408621e --- /dev/null +++ b/src/quickaddons/managedtexturenode.cpp @@ -0,0 +1,29 @@ +/* + * Copyright 2014 Aleix Pol Gonzalez + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "managedtexturenode.h" + +ManagedTextureNode::ManagedTextureNode() +{} + +void ManagedTextureNode::setTexture(QSharedPointer texture) +{ + m_texture = texture; + QSGSimpleTextureNode::setTexture(texture.data()); +} diff --git a/src/quickaddons/managedtexturenode.h b/src/quickaddons/managedtexturenode.h new file mode 100644 index 0000000..6e70108 --- /dev/null +++ b/src/quickaddons/managedtexturenode.h @@ -0,0 +1,57 @@ +/* + * Copyright 2014 Aleix Pol Gonzalez + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef MANAGEDTEXTURENODE_H +#define MANAGEDTEXTURENODE_H + +#include "quickaddons_export.h" +#include +#include +#include +#include + +/** + * @class ManagedTextureNode managedtexturenode.h KQuickAddons/ManagedTextureNode + * + * @short Node that contains a reference counted texture + * + * Usually when assigning textures within a node, we'll want to delete the + * texture with the node. This class will take a shared texture and display it + * within the node. + * + * It's especially interesting to use this class together with the ImageTexturesCache + * that will offer us shareable textures and cache them transparently, when asking + * it to create the texture. + * + * @see ImageTexturesCache + */ + +class QUICKADDONS_EXPORT ManagedTextureNode : public QSGSimpleTextureNode +{ +Q_DISABLE_COPY(ManagedTextureNode) +public: + ManagedTextureNode(); + + void setTexture(QSharedPointer texture); + +private: + QSharedPointer m_texture; +}; + +#endif diff --git a/src/quickaddons/qtquicksettings.cpp b/src/quickaddons/qtquicksettings.cpp new file mode 100644 index 0000000..b81b7eb --- /dev/null +++ b/src/quickaddons/qtquicksettings.cpp @@ -0,0 +1,47 @@ +/* + * Copyright 2016 David Edmundson + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qtquicksettings.h" +#include "renderersettings.h" + +#include +#include + +void KQuickAddons::QtQuickSettings::init() +{ + PlasmaQtQuickSettings::RendererSettings s; + if (!s.renderLoop().isEmpty()) { + qputenv("QSG_RENDER_LOOP", s.renderLoop().toLatin1()); + } + + if (!s.sceneGraphBackend().isNull()) { +#if QT_VERSION >= QT_VERSION_CHECK(5,8,0) + QQuickWindow::setSceneGraphBackend(s.sceneGraphBackend()); +#else + qputenv("QMLSCENE_DEVICE", s.sceneGraphBackend().toLatin1()); +#endif + } + if (s.forceGlCoreProfile()) { + QSurfaceFormat format; + format.setVersion(3,2); + format.setProfile(QSurfaceFormat::CoreProfile); + QSurfaceFormat::setDefaultFormat(format); + } +} + diff --git a/src/quickaddons/qtquicksettings.h b/src/quickaddons/qtquicksettings.h new file mode 100644 index 0000000..edebcf7 --- /dev/null +++ b/src/quickaddons/qtquicksettings.h @@ -0,0 +1,47 @@ +/* + * Copyright 2016 David Edmundson + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef PLASMAQTQUICKSETTINGS_H +#define PLASMAQTQUICKSETTINGS_H + +#include "quickaddons_export.h" + +namespace KQuickAddons +{ + /** + * @namespace KQuickAddons::QtQuickSettings + * + * TODO + */ + namespace QtQuickSettings + { + /** + * Load settings from the appConfig (app + kdeglobals) which relate to QtQuick rendering. + * This will then set relevant default QWindow and QSurfaceFormat flags, or in some cases environment variables + * + * This function must be called at the start of your application before any windows are created. + * + * @since 5.26 + */ + QUICKADDONS_EXPORT void init(); + + } +} + +#endif diff --git a/src/quickaddons/quickviewsharedengine.cpp b/src/quickaddons/quickviewsharedengine.cpp new file mode 100644 index 0000000..afd4d0d --- /dev/null +++ b/src/quickaddons/quickviewsharedengine.cpp @@ -0,0 +1,274 @@ +/* + This file is part of the KDE libraries + + Copyright (C) 2015 Marco Martin + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +*/ + +#include "quickviewsharedengine.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +namespace KQuickAddons { + +class QuickViewSharedEnginePrivate +{ +public: + QuickViewSharedEnginePrivate(QuickViewSharedEngine *module) + : q(module), + resizeMode(QuickViewSharedEngine::ResizeMode::SizeRootObjectToView), + initialSize(0, 0) + { + qmlObject = new KDeclarative::QmlObjectSharedEngine(q); + QObject::connect(qmlObject, &KDeclarative::QmlObject::statusChanged, + q, &QuickViewSharedEngine::statusChanged); + QObject::connect(qmlObject, SIGNAL(finished()), + q, SLOT(executionFinished())); + } + + void executionFinished(); + void syncResizeMode(); + void syncWidth(); + void syncHeight(); + + + QuickViewSharedEngine *q; + KDeclarative::QmlObjectSharedEngine *qmlObject; + QuickViewSharedEngine::ResizeMode resizeMode; + QSize initialSize; + +}; + +void QuickViewSharedEnginePrivate::executionFinished() +{ + if (!qmlObject->rootObject()) { + return; + } + + QQuickItem *item = qobject_cast(qmlObject->rootObject()); + + if (!item) { + return; + } + + item->setParentItem(q->contentItem()); + initialSize = QSize(item->width(), item ->height()); + + if(q->size().isEmpty()) { + q->resize(initialSize); + q->contentItem()->setSize(initialSize); + } + + syncResizeMode(); +} + +void QuickViewSharedEnginePrivate::syncResizeMode() +{ + QQuickItem *item = qobject_cast(qmlObject->rootObject()); + + if (!item) { + return; + } + + if (resizeMode == QuickViewSharedEngine::SizeRootObjectToView) { + item->setSize(QSize(q->width(), q->height())); + + QObject::disconnect(item, SIGNAL(widthChanged()), + q, SLOT(syncWidth())); + QObject::disconnect(item, SIGNAL(heightChanged()), + q, SLOT(syncHeight())); + + } else { + + QObject::connect(item, SIGNAL(widthChanged()), + q, SLOT(syncWidth())); + QObject::connect(item, SIGNAL(heightChanged()), + q, SLOT(syncHeight())); + + syncWidth(); + syncHeight(); + } +} + +void QuickViewSharedEnginePrivate::syncWidth() +{ + QQuickItem *item = qobject_cast(qmlObject->rootObject()); + + if (!item) { + return; + } + + q->setWidth(item->width()); +} + +void QuickViewSharedEnginePrivate::syncHeight() +{ + QQuickItem *item = qobject_cast(qmlObject->rootObject()); + + if (!item) { + return; + } + + q->setHeight(item->height()); +} + + + +QuickViewSharedEngine::QuickViewSharedEngine(QWindow *parent) + : QQuickWindow(parent), + d(new QuickViewSharedEnginePrivate(this)) +{ +} + +QuickViewSharedEngine::~QuickViewSharedEngine() +{ +} + + +void QuickViewSharedEngine::setTranslationDomain(const QString &translationDomain) +{ + d->qmlObject->setTranslationDomain(translationDomain); +} + +QString QuickViewSharedEngine::translationDomain() const +{ + return d->qmlObject->translationDomain(); +} + +QQmlEngine *QuickViewSharedEngine::engine() const +{ + return d->qmlObject->engine(); +} + +QList QuickViewSharedEngine::errors() const +{ + QList errs; + + if (d->qmlObject->mainComponent()) { + errs = d->qmlObject->mainComponent()->errors(); + } + + return errs; +} + +QSize QuickViewSharedEngine::sizeHint() const +{ + QQuickItem *item = qobject_cast(d->qmlObject->rootObject()); + if (!item) { + return QSize(); + } + + const QSizeF implicitSize(item->implicitWidth(), item->implicitHeight()); + + if (!implicitSize.isEmpty()) { + return implicitSize.toSize(); + } + + return QSize(item->width(), item->height()); +} + +QSize QuickViewSharedEngine::initialSize() const +{ + return d->initialSize; +} + +QuickViewSharedEngine::ResizeMode QuickViewSharedEngine::resizeMode() const +{ + return d->resizeMode; +} + +QQmlContext *QuickViewSharedEngine::rootContext() const +{ + return d->qmlObject->rootContext(); +} + +QQuickItem *QuickViewSharedEngine::rootObject() const +{ + return qobject_cast(d->qmlObject->rootObject()); +} + +void QuickViewSharedEngine::setResizeMode(ResizeMode mode) +{ + if (d->resizeMode == mode) { + return; + } + + d->resizeMode = mode; + + emit resizeModeChanged(mode); + + QQuickItem *item = qobject_cast(d->qmlObject->rootObject()); + if (!item) { + return; + } + + d->syncResizeMode(); +} + +void QuickViewSharedEngine::setSource(const QUrl &url) +{ + if (d->qmlObject->source() == url) { + return; + } + + d->qmlObject->setSource(url); + emit sourceChanged(url); +} + +QUrl QuickViewSharedEngine::source() const +{ + return d->qmlObject->source(); +} + +QQmlComponent::Status QuickViewSharedEngine::status() const +{ + if (!d->qmlObject->mainComponent()) { + return QQmlComponent::Null; + } + + return QQmlComponent::Status(d->qmlObject->status()); +} + +void QuickViewSharedEngine::resizeEvent(QResizeEvent *e) +{ + QQuickItem *item = qobject_cast(d->qmlObject->rootObject()); + if (item && d->resizeMode == SizeRootObjectToView) { + item->setSize(e->size()); + } + + QQuickWindow::resizeEvent(e); +} + +} + +#include "moc_quickviewsharedengine.cpp" + diff --git a/src/quickaddons/quickviewsharedengine.h b/src/quickaddons/quickviewsharedengine.h new file mode 100644 index 0000000..cb73f88 --- /dev/null +++ b/src/quickaddons/quickviewsharedengine.h @@ -0,0 +1,123 @@ +/* + This file is part of the KDE libraries + + Copyright (C) 2015 Marco Martin + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +*/ + +#ifndef QUICKVIEWSHAREDENGINE_H +#define QUICKVIEWSHAREDENGINE_H + +#include "quickaddons_export.h" + +#include +#include +#include +#include +#include + +class QQuickItem; +class QQmlEngine; + +namespace KQuickAddons { + +class QuickViewSharedEnginePrivate; + +/** + * @class KQuickAddons::QuickViewSharedEngine quickviewsharedengine.h KQuickAddons/QuickViewSharedEngine + * + * TODO + */ +class QUICKADDONS_EXPORT QuickViewSharedEngine : public QQuickWindow +{ + Q_OBJECT + + Q_PROPERTY(ResizeMode resizeMode READ resizeMode WRITE setResizeMode NOTIFY resizeModeChanged) + Q_PROPERTY(QQmlComponent::Status status READ status NOTIFY statusChanged) + Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged) + +public: + enum ResizeMode { + SizeViewToRootObject, + SizeRootObjectToView + }; + Q_ENUM(ResizeMode) + + explicit QuickViewSharedEngine(QWindow *parent = nullptr); + ~QuickViewSharedEngine(); + + /** + * Installs a translation domain for all + * i18n global functions. If a translation domain is set all i18n calls delegate to the + * matching i18nd calls with the provided translation domain. + * + * The translationDomain affects all i18n calls including those from imports. Because of + * that modules intended to be used as imports should prefer the i18nd variants and set + * the translation domain explicitly in each call. + * + * This method is only required if your declarative usage is inside a library. If it's + * in an application there is no need to set the translation domain as the application's + * domain can be used. + * + * @param translationDomain The translation domain to be used for i18n calls. + * @since 5.25 + */ + void setTranslationDomain(const QString &translationDomain); + + /** + * @return the translation domain for the i18n calls done in this QML engine + * @since 5.25 + */ + QString translationDomain() const; + + QQmlEngine *engine() const; + QList errors() const; + QSize sizeHint() const; + QSize initialSize() const; + QQmlContext *rootContext() const; + QQuickItem *rootObject() const; + QUrl source() const; + QQmlComponent::Status status() const; + ResizeMode resizeMode() const; + void setResizeMode(ResizeMode); + +protected: + void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE; + +public Q_SLOTS: + void setSource(const QUrl &url); + +Q_SIGNALS: + void statusChanged(QQmlComponent::Status status); + void resizeModeChanged(QuickViewSharedEngine::ResizeMode resizeMode); + void sourceChanged(const QUrl &source); + + +private: + const std::unique_ptr d; + + Q_PRIVATE_SLOT(d, void executionFinished()) + Q_PRIVATE_SLOT(d, void syncWidth()) + Q_PRIVATE_SLOT(d, void syncHeight()) +}; + +} + + +#endif //QuickViewSharedEngine_H + diff --git a/src/quickaddons/renderer.kcfg b/src/quickaddons/renderer.kcfg new file mode 100644 index 0000000..c317961 --- /dev/null +++ b/src/quickaddons/renderer.kcfg @@ -0,0 +1,18 @@ + + + + + + + + + + + + false + + + diff --git a/src/quickaddons/renderersettings.kcfgc b/src/quickaddons/renderersettings.kcfgc new file mode 100644 index 0000000..56af4bc --- /dev/null +++ b/src/quickaddons/renderersettings.kcfgc @@ -0,0 +1,4 @@ +File=renderer.kcfg +NameSpace=PlasmaQtQuickSettings +ClassName=RendererSettings +UseEnumTypes=true diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..08e535f --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,33 @@ +include(ECMMarkAsTest) + +find_package(Qt5Test REQUIRED) + +add_executable(kdeclarativetest kdeclarativetest.cpp) + +target_include_directories(kdeclarativetest + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/../src + ${CMAKE_CURRENT_BINARY_DIR}/.. +) + +ecm_mark_as_test(kdeclarativetest) +target_link_libraries(kdeclarativetest + Qt5::Quick + Qt5::Test + KF5::Declarative +) + + +add_executable(qimageitemtest qimageitemtest.cpp) + +ecm_mark_as_test(qimageitemtest) +target_link_libraries(qimageitemtest + Qt5::Quick + Qt5::Test +) + +if (BUILD_EXAMPLES) + kpackage_install_package(helloworld org.kde.example.helloworld genericqml) + kpackage_install_package(helloworldnowindow org.kde.example.helloworldnowindow genericqml) +endif() + diff --git a/tests/colorButtonTest.qml b/tests/colorButtonTest.qml new file mode 100644 index 0000000..a69b879 --- /dev/null +++ b/tests/colorButtonTest.qml @@ -0,0 +1,54 @@ +/* + * Copyright 2015 David Edmundson + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.1 +import org.kde.kquickcontrols 2.0 + +Rectangle { + width: 300 + height: 300 + color: "white" + + ColorButton { + id: btn + + anchors.top: parent.top + anchors.left: parent.left + anchors.margins: 10 + + dialogTitle: "I am title" + showAlphaChannel: true + + color: "blue" //a default colour + } + + + Rectangle { + anchors.top: parent.top + anchors.left: btn.right + anchors.margins: 10 + + width: 20 + height: 20 + + color: btn.color + } + + +} diff --git a/tests/eventgenerator.qml b/tests/eventgenerator.qml new file mode 100644 index 0000000..7158ca6 --- /dev/null +++ b/tests/eventgenerator.qml @@ -0,0 +1,69 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.1 +import org.kde.kquickcontrolsaddons 2.0 + +Rectangle { + width: 500 + height: 500 + color: "red" + + EventGenerator { + id: eventGenerator + } + + MouseArea { + id: parentMouseArea + anchors.fill: parent + drag.filterChildren: true + + onPressed: { + print("Parent Mouse Pressed"); + } + onPositionChanged: { + print("Parent Position changed " + mouse.x + " " + mouse.y); + } + onReleased: { + print("Parent Mouse Released"); + } + + onPressAndHold: { + print("Parent press and hold"); + + eventGenerator.sendGrabEvent(childMouseArea, EventGenerator.UngrabMouse); + eventGenerator.sendGrabEvent(parentMouseArea, EventGenerator.GrabMouse); + eventGenerator.sendMouseEvent(parentMouseArea, EventGenerator.MouseButtonPress, mouse.x, mouse.y, Qt.LeftButton, Qt.LeftButton, 0); + + print("Now Child Position changed events shouldn't appear anymore") + } + + MouseArea { + id: childMouseArea + width: 300 + height: 300 + Rectangle { + anchors.fill: parent + } + onPressed: print("Child Mouse Pressed"); + onPositionChanged: print("Child Position changed " + mouse.x + " " + mouse.y); + onReleased: print("Child Mouse Released"); + } + } +} diff --git a/tests/helloworld/contents/ui/main.qml b/tests/helloworld/contents/ui/main.qml new file mode 100644 index 0000000..d453396 --- /dev/null +++ b/tests/helloworld/contents/ui/main.qml @@ -0,0 +1,58 @@ +/* + * Copyright 2014 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.0 +import QtQuick.Controls 1.3 +import QtQuick.Layouts 1.1 + +ApplicationWindow { + width: 300 + height: 100 + visible: true + + menuBar: MenuBar { + Menu { + title: i18n("Menu") + MenuItem { + text: i18n("item1") + } + MenuItem { + text: i18n("item1") + } + } + } + + toolBar: ToolBar { + RowLayout { + anchors.fill: parent + ToolButton { + text: i18n("Button") + } + } + } + + Column { + Label { + text: i18n("Hello world") + } + Label { + text: commandlineArguments.join(" ") + } + } +} diff --git a/tests/helloworld/metadata.desktop b/tests/helloworld/metadata.desktop new file mode 100644 index 0000000..719af0c --- /dev/null +++ b/tests/helloworld/metadata.desktop @@ -0,0 +1,55 @@ +[Desktop Entry] +Comment= +Encoding=UTF-8 +Keywords= +Name=hello world +Name[ast]=hola mundiu +Name[ca]=hola món +Name[ca@valencia]=hola món +Name[cs]=hello world +Name[da]=Hej verden +Name[de]=Hallo Welt +Name[el]=hello world +Name[en_GB]=hello world +Name[es]=hola mundo +Name[fi]=hei maailma +Name[gd]=shin thu, a shaoghail +Name[gl]=Ola, mundo! +Name[he]=שלום עולם +Name[hu]=Helló világ! +Name[it]=ciao mondo +Name[ko]=hello world +Name[nb]=hallo verden +Name[nl]=hallo wereld +Name[nn]=hei verda +Name[pl]=witaj świecie +Name[pt]=olá mundo +Name[pt_BR]=Olá mundo +Name[ru]=Здравствуй, мир! +Name[sk]=ahoj svet +Name[sl]=pozdravljen svet +Name[sr]=Здраво свете +Name[sr@ijekavian]=Здраво свете +Name[sr@ijekavianlatin]=Zdravo svete +Name[sr@latin]=Zdravo svete +Name[sv]=hello world +Name[tr]=merhaba dünya +Name[uk]=Привіт, світе +Name[x-test]=xxhello worldxx +Name[zh_CN]=你好世界 +Name[zh_TW]=hello world +Type=Application +Icon=package_toys +Exec=kpackagelauncherqml -a org.kde.example.helloworld +X-KDE-ParentApp= +X-KDE-PluginInfo-Author=Marco Martin +X-KDE-PluginInfo-Category=Miscellaneous +X-KDE-PluginInfo-Email=mart@kde.org +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-Name=org.kde.example.helloworld +X-KDE-PluginInfo-Version= +X-KDE-PluginInfo-Website= +X-KDE-ServiceTypes=KPackage/GenericQML + +X-Plasma-MainScript=ui/main.qml +X-Plasma-RemoteLocation= diff --git a/tests/helloworldnowindow/contents/ui/main.qml b/tests/helloworldnowindow/contents/ui/main.qml new file mode 100644 index 0000000..c4653bd --- /dev/null +++ b/tests/helloworldnowindow/contents/ui/main.qml @@ -0,0 +1,37 @@ +/* + * Copyright 2014 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.0 +import QtQuick.Controls 1.3 +import QtQuick.Layouts 1.1 + +Item { + implicitWidth: 300 + implicitHeight: 100 + visible: true + + Column { + Label { + text: i18n("Hello world") + } + Label { + text: commandlineArguments.join(" ") + } + } +} diff --git a/tests/helloworldnowindow/metadata.desktop b/tests/helloworldnowindow/metadata.desktop new file mode 100644 index 0000000..4cc9517 --- /dev/null +++ b/tests/helloworldnowindow/metadata.desktop @@ -0,0 +1,55 @@ +[Desktop Entry] +Comment= +Encoding=UTF-8 +Keywords= +Name=hello world +Name[ast]=hola mundiu +Name[ca]=hola món +Name[ca@valencia]=hola món +Name[cs]=hello world +Name[da]=Hej verden +Name[de]=Hallo Welt +Name[el]=hello world +Name[en_GB]=hello world +Name[es]=hola mundo +Name[fi]=hei maailma +Name[gd]=shin thu, a shaoghail +Name[gl]=Ola, mundo! +Name[he]=שלום עולם +Name[hu]=Helló világ! +Name[it]=ciao mondo +Name[ko]=hello world +Name[nb]=hallo verden +Name[nl]=hallo wereld +Name[nn]=hei verda +Name[pl]=witaj świecie +Name[pt]=olá mundo +Name[pt_BR]=Olá mundo +Name[ru]=Здравствуй, мир! +Name[sk]=ahoj svet +Name[sl]=pozdravljen svet +Name[sr]=Здраво свете +Name[sr@ijekavian]=Здраво свете +Name[sr@ijekavianlatin]=Zdravo svete +Name[sr@latin]=Zdravo svete +Name[sv]=hello world +Name[tr]=merhaba dünya +Name[uk]=Привіт, світе +Name[x-test]=xxhello worldxx +Name[zh_CN]=你好世界 +Name[zh_TW]=hello world +Type=Application +Icon=package_toys +Exec=kpackagelauncherqml -a org.kde.example.helloworldnowindow +X-KDE-ParentApp= +X-KDE-PluginInfo-Author=Marco Martin +X-KDE-PluginInfo-Category=Miscellaneous +X-KDE-PluginInfo-Email=mart@kde.org +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-Name=org.kde.example.helloworldnowindow +X-KDE-PluginInfo-Version= +X-KDE-PluginInfo-Website= +X-KDE-ServiceTypes=KPackage/GenericQML + +X-Plasma-MainScript=ui/main.qml +X-Plasma-RemoteLocation= diff --git a/tests/icondialog.qml b/tests/icondialog.qml new file mode 100644 index 0000000..ac6434a --- /dev/null +++ b/tests/icondialog.qml @@ -0,0 +1,141 @@ +/* + * Copyright 2015 Kai Uwe Broulik + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.2 +import QtQuick.Controls 1.3 +import QtQuick.Layouts 1.1 + +import org.kde.kquickcontrolsaddons 2.0 + +RowLayout { + spacing: 10 + + IconDialog { + id: iconDialog + iconSize: Number(iconSizeInput.text) + title: dialogTitleInput.text + user: userCheckbox.checked + customLocation: customLocationField.text + modality: { + switch(modalityCombo.currentIndex) { + case 0: return Qt.WindowModal + case 1: return Qt.ApplicationModal + case 2: return Qt.NonModal + } + } + } + + Button { + Layout.minimumWidth: 80 + Layout.maximumWidth: Layout.minimumWidth + Layout.minimumHeight: Layout.minimumWidth + Layout.maximumHeight: Layout.minimumWidth + iconName: iconDialog.iconName + onClicked: iconDialog.open() + } + + GridLayout { + Layout.fillWidth: true + columns: 2 + + Label { + Layout.columnSpan: 2 + font.pointSize: Math.round(someLabel.font.pointSize * 1.2) + text: "Push the button to open the icon dialog" + } + + Label { + id: someLabel + text: "Dialog visible:" + } + Label { + text: iconDialog.visible ? "yes" : "no" + } + + Label { + text: "Selected icon:" + } + Label { + text: iconDialog.iconName || "(none)" + } + + Label { + text: "Desired icon size (blank = default):" + } + TextField { + id: iconSizeInput + text: "" + } + + Label { + text: "Dialog title:" + } + TextField { + id: dialogTitleInput + Layout.minimumWidth: 250 + } + + Label { + Layout.columnSpan: 2 + Layout.fillWidth: true + font.pointSize: Math.round(someLabel.font.pointSize / 1.2) + opacity: 0.6 + wrapMode: Text.WordWrap + text: "Not setting a title at all will default to 'Choose Icon' " + + "whereas explicitly setting it to empty (which we do here) " + + "will default to the application name" + } + + CheckBox { + id: userCheckbox + Layout.columnSpan: 2 + text: "Begin with user icons rather than system icons" + } + + Label { + text: "Custom search location" + } + + TextField { + id: customLocationField + Layout.minimumWidth: 250 + } + + Label { + Layout.columnSpan: 2 + Layout.fillWidth: true + font.pointSize: Math.round(someLabel.font.pointSize / 1.2) + opacity: 0.6 + wrapMode: Text.WordWrap + text: "This needs to be a URL to a local folder. You should enable " + + "'Begin with user icons' when setting this" + } + + Label { + text: "Modality" + } + + ComboBox { + id: modalityCombo + Layout.minimumWidth: 250 + model: ["Window modal (default)", "Application modal", "Non-modal"] + } + + } +} diff --git a/tests/kdeclarativetest.cpp b/tests/kdeclarativetest.cpp new file mode 100644 index 0000000..70ea03f --- /dev/null +++ b/tests/kdeclarativetest.cpp @@ -0,0 +1,47 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include + +#include + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + QQuickView view; + QQmlContext *context = view.rootContext(); + context->setContextProperty(QStringLiteral("backgroundColor"), + QColor(Qt::yellow)); + + KDeclarative::KDeclarative kdeclarative; + kdeclarative.setDeclarativeEngine(view.engine()); + kdeclarative.initialize(); + //binds things like kconfig and icons + kdeclarative.setupBindings(); + + view.setSource(QUrl::fromLocalFile(QFINDTESTDATA("test.qml"))); + view.show(); + + return app.exec(); +} diff --git a/tests/mouseeventlistenertest.qml b/tests/mouseeventlistenertest.qml new file mode 100644 index 0000000..fd23916 --- /dev/null +++ b/tests/mouseeventlistenertest.qml @@ -0,0 +1,95 @@ +/* + Copyright 2014 David Edmundson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +import org.kde.qtextracomponents 2.0 +import QtQuick 2.1 +import QtQuick.Layouts 1.0 + + +Item +{ + width: 800 + height: 400 + Row { + anchors.fill: parent + MouseEventListener { + width: 400 + height: 400 + id: mouseListener + acceptedButtons: Qt.LeftButton + hoverEnabled: true + onPressed: { + updateDebug("Pressed", mouse); + } + onPressAndHold: { + updateDebug("Held", mouse); + } + onReleased: { + mouseState.text = ""; + mousePos.text = ""; + screenPos.text = ""; + } + + function updateDebug(state, mouse) { + mouseState.text = state + mousePos.text = mouse.x + "," + mouse.y + screenPos.text = mouse.screenX + "," + mouse.screenY + } + + Rectangle { + color: "red" + anchors.fill: parent + + //MouseEventListener should still get events, even though this has a mousearea + MouseArea { + anchors.fill: parent + } + } + } + + GridLayout { + width: 400 + columns: 2 + Text { + text: "Mouse status:" + } + Text { + id: mouseState + } + Text { + text: "Contains Mouse: " + } + Text { + text: mouseListener.containsMouse + } + Text { + text: "Mouse Position: " + } + Text { + id: mousePos + } + Text { + text: "Screen Position: " + } + Text { + id: screenPos + } + } + } +} \ No newline at end of file diff --git a/tests/plotter.qml b/tests/plotter.qml new file mode 100644 index 0000000..c743fc7 --- /dev/null +++ b/tests/plotter.qml @@ -0,0 +1,81 @@ +/* + * Copyright 2015 by Marco Martin + * Copyright 2015 by David Edmundson + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.0 +import QtQuick.Controls 1.3 + +import org.kde.kquickcontrolsaddons 2.0 + +Item { + width: 500 + height: 200 + + Plotter { + id: renderer + anchors.fill: parent + anchors.margins: 0 + stacked: stackedButton.checked + autoRange: autoRangeButton.checked + horizontalGridLineCount: linesSpinner.value + + dataSets: [ + PlotData { + color: "#4cb2ff" + }, + PlotData { + color: "#00b200" + } + ] + + } + Row { + Button { + text: "Add values" + checkable: true + Timer { + interval: 100 + running: parent.checked + repeat: true + onTriggered: { + renderer.addSample([Math.random() * 40, Math.random() * 40]) + } + } + } + + Button { + id: stackedButton + text: "Stacked" + checkable: true + checked: true + } + Button { + id: autoRangeButton + text: "Auto Range" + checkable: true + checked: true + } + + SpinBox { + id: linesSpinner + value: 5 + minimumValue: 0 + } + } +} diff --git a/tests/qiconitem_resize.qml b/tests/qiconitem_resize.qml new file mode 100644 index 0000000..ae301e5 --- /dev/null +++ b/tests/qiconitem_resize.qml @@ -0,0 +1,27 @@ +import org.kde.kquickcontrolsaddons 2.0 +import QtQuick 2.2 +import QtQuick.Controls 1.3 +import QtQuick.Layouts 1.1 + + +Rectangle { + color: "white" + width: 400 + height: 400 + + QIconItem { + id: anIcon + icon: "rating" + width: 8 + height: 8 + } + + Button { + anchors.bottom: parent.bottom + text: "Resize" + onClicked: { + anIcon.width += 4 + anIcon.height += 4 + } + } +} diff --git a/tests/qiconitem_test.qml b/tests/qiconitem_test.qml new file mode 100644 index 0000000..2beae44 --- /dev/null +++ b/tests/qiconitem_test.qml @@ -0,0 +1,15 @@ +import org.kde.kquickcontrolsaddons 2.0 +import QtQuick 2.2 + +GridView { + width: 300 + cellWidth: 16 + cellHeight: 16 + + model: 50000 + delegate: QIconItem { + width: 16 + height: 16 + icon: "rating" + } +} diff --git a/tests/qimageitemtest.cpp b/tests/qimageitemtest.cpp new file mode 100644 index 0000000..1b4b534 --- /dev/null +++ b/tests/qimageitemtest.cpp @@ -0,0 +1,50 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + app.setAttribute(Qt::AA_UseHighDpiPixmaps, true); + + QQuickView view; + QQmlContext *context = view.rootContext(); + + QImage image; + if (app.devicePixelRatio() < 2) { + image = QImage(QFINDTESTDATA("testimage.png")); + } else { + image = QImage(QFINDTESTDATA("testimage@2x.png")); + image.setDevicePixelRatio(2); + } + + context->setContextProperty(QStringLiteral("testImage"), + image); + + + view.setSource(QUrl::fromLocalFile(QFINDTESTDATA("qimageitemtest.qml"))); + view.show(); + + return app.exec(); +} diff --git a/tests/qimageitemtest.qml b/tests/qimageitemtest.qml new file mode 100644 index 0000000..0eefcfe --- /dev/null +++ b/tests/qimageitemtest.qml @@ -0,0 +1,62 @@ +import QtQuick 2.0 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 1.1 +import org.kde.kquickcontrolsaddons 2.0 as KQCA + +//this file should be used via qimageitemtest executable +//unless you want to test isNull + +Rectangle { + color: "white" + width: 500 + height: 500 + + RowLayout { + anchors.fill: parent + KQCA.QImageItem { + implicitWidth: 300 + implicitHeight: 300 + + id: image + image: testImage + fillMode: fillModeCombo.currentIndex + } + GridLayout { + columns: 2 + Text {text: "fillMode"} + ComboBox { + id: fillModeCombo + model: ListModel{ + ListElement { + display: "Stretch" + } + ListElement { + display: "PreserveAspectFit" + }ListElement { + display: "PreserveAspectCrop" + }ListElement { + display: "Tile" + }ListElement { + display: "TileVertically" + } + ListElement { + display: "TileHorizontally" + } + } + } + + Text {text: "isNull:"} + Text {text: image.null} + Text {text: "nativeWidth:"} + Text {text: image.nativeWidth} + Text {text: "nativeHeight:"} + Text {text: image.nativeHeight} + Text {text: "paintedWidth:"} + Text {text: image.paintedWidth} + Text {text: "paintedHeight:"} + Text {text: image.paintedHeight} + + Text {text: "rect size is 300x300"} + } + } +} \ No newline at end of file diff --git a/tests/test.qml b/tests/test.qml new file mode 100644 index 0000000..9f14243 --- /dev/null +++ b/tests/test.qml @@ -0,0 +1,31 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.1 + +Rectangle { + width: 300 + height: 300 + color: "red" + + Text { + anchors.fill: parent + text: i18n("Hello") + } +} diff --git a/tests/testimage.png b/tests/testimage.png new file mode 100644 index 0000000000000000000000000000000000000000..848169847afb3cd95cc5be9e800c4236bff85796 GIT binary patch literal 8850 zcmV;DB5mD?P)vPva00009a7bBm000ie z000ie0hKEb8vpMP@$1Vu;n&3@O6W>6Q3U{BF=kS;$Oo$=9Fks_ZmJrH^wtTcO#HYxZpc)39X3vqYrB z6!yNjRld8*p1CPu)~(MwE~T*IZ|ol$FnJbGLuk)!Fl0?Vg}? zzDThm%^J)aL?Wn^2sB9b1c{Igdj{FNJ(YXXL;h*2*njTki7)3yvaMqkBSOea9sjpv zZ~K-@+w%LaP5aHKD)tAI%iuzVM_;9Y++Q53{_U*dfA~#f%lXD8ibZ}r&3F%hzg zAGRBIy?#ZbyX%gu*FI$^-(hA@PpwB+y(w*#Fsj$Yt#SXI@V(z(FztKJQ8szZW7vfJ zVc*wg?CIL@os`#n9)pKa4uiQ+=`acD^DPd^*sHct^p*1Iw0bE$riN9}7{stf75NA0356#%o>V)NRkj_3?Om1kT4y9zMaeF?n%!7 zTi1vb`VQf!M&w)T&Rvv6*K#o8c|VK2*{#q}2#Xjd#%4i~C|ns3LKMstN9EA&HX-e| z!`B{6VWKiT1u?UD#5y8jf`~RN?cD5~^zze5f*!HL|Betxz9hh}cYnFoLH4K2h!X@l z-DYS6qFaz0pgj>0n1Obu5%rl(=}L#P$_aLtU%Ro4Iq@ISF8hgsfVXG!A4pe_yk%6(DG6q*VvH7lo2gT_5UR5AuE*ii1tGC2T~Dq5 zI{Y3T0SpZVJwq@(9$LTX|J=0Nz4yNtymK2%1_*mDvC(BscHQ=mn9h^uA>BG3PS`dM zw6Wpl8)5PuUvy3(z44&` z2Gx~V<1s!w2}FONn^%y0#t`_@Ewf+RG@AABGDs|i?p7?5Nr-=(I%W3Blj%}JsB@v( zPlexUvPb}#O3;Db8mza#F1~@TY*_^iVTPo0?YDN50RTh-CWSx{5D+M`$_H;84-`rQ z0_FAul!mHCOv4%qG^=xzmM{J1#>LmK+4%h9k1fTB>|2&CgItV?uoZL13za@wXA-l- z^2teDRG0nRBQ<4JvGl)`Mt0p`c!&c4vjFHga3e!>?a0H5KMG^~?R5Fp{oQ3Ac2s_{ z{Zkc9`5oIet3>|}YBc8RVF??h1J;iKN-ONmZbi;d0RU_n!#MjmgpJtWm5gp}FZcr< z3Hj~z&Zckt*TSu-qc1BdnxB6lLaMA<==9l!-*uJ&=d_UR98Vb;7AyX$5)q0{9MZJkUav>TC{TQF(CpJ>hx`x#IVJ2L;Ze(^0nyY~(DnbJN8 z1R)M>Iak_8US%N3fF;9y)Z)FW47(Uu*v|S0B#qcE@pz&ig4v^xa?C86D1G1M>-@S-&j9? zmSoz90o@tfVD8?O4kY4W2pD@qC|Y{cNq>6zP}ej+H)lq%*#45_&WgU}F$1iC_Ou1* z`iPfmNTbhZt^}G1BCmWH_DhIN`VuYOvi?ZzKcozi8jIh(WDIP%Rt(S4(0*_YGoYa+ zxFWOs+ndfi7d-Ih+`s1ZNKEYek%6uOWB>pOpt#6I@i+}3gIS?9L8mNGgJj`wE9{Cp zFlqb+Lm>k=jF!bjbI@ZTeE0AYkkQ*-tr?yBd~A6-i(Cs3E4485{0QPT9PC%LQyD=Vhnyh<%vS8f*WREi>{vt~rh3UxK4aU{Ijp)n2ke-HsnPjpdn1bH?n$9(v)^+a zL&ur*kH53w!b_Q%c+Z*P`DVlI5j5NY);$GwÃPXf@w5LuN2;|Eac{G%lUI4mJz zqNg3C{dQufSf!z3d7b*n zA2(cor(eJ4_aU`2DTMABA7;SK5tJ)>i0KO=0OJ`tYCn#r^_S>+bPlK8gA&5bL=eS! zl||N1q1|bCSIrb=#@l~$vF~{sci!v_ap|Cx~%FdG1FGN4=u)&ofqCV;ZsMe1_I6Hnep1;svJ^& zJ38DZpqXuPCXe6L*KP`+xQ2qK^DxLlhCASC7p~4BBq9jOFeI7%cHmUljJ;D} zX6$)cMO8o_gi@8*;U9l`mlSDv~{2644L?pBkB;J5ln@M}SK~xW8fBSITe@H?c zl}(Al1Y$5eb|Bb*;uP{K1KWrqq{1-Bf-NI3g$+TXa8T8KTs3fuJRCQmqk)@d)E1wB z>C>hnlg;9Z6;DG-31&t*mBN%MlVBJID#wq5RzAFT3E&_?7$8AdmncJ3wb_1>uJ|Xq z@WpLC-MI2V9X~PmA5eQ?nr0`{Bia5#&k*+N1<4tG|EJ+Y7iPHU<&h%`wv58nd04`R zEh8|51%e1&+>wSFagXcj?iRYes0oiO8;Yb9Y=OLX=!!Uv_ z=N%WO1P~r*i|cNRFC|t?C=WkxB@zR!x$w0H;I$EHb6*^Kr!M5{hOiFxF#y147iqs8 z9d0Aq-A1%I4M=(IaC8>FcHy%J#eT0MP;hq8g&#)2I)`p!;IXeuUZ;t9^X7n=@x&8P zA!OSCfJ{2Lk)MCzC2ZWd8NdDA9}tc*5FR)LeQyqCWqV%c;RiQeRdvjb8v+hFLu@4K zJTWu}K@9~*XW-}zQhqBWSv@nx5@8s^gegLhBteh}L?H!}20b>w!uwuQ`qDF0QCCqk z0mVfnXlQ7}&fU8ai^ajr$mjC_fZe<6@wqSD1jlhuRs)!^BbV#y{M4*y`(~1pS0xW) z7#s;4l8{(<+!{BZ)&f%Kqd3oDFno64D+gKC2|{q76_R1tG6qZ9Fvx@;BRJwB5%~ME zDEM&o4*fx%ME!6m5jUx}8YBp>zE%gr2-IBHb)i)6<~EqpXKy`q2Y24uAf87Z-XQQ23asg2nJa& zgb6{i;HxDeAPZhB1)>V;kVL_civcDMKJTYG1lJYEOF&v&fq zbOX{V7$tGA$m}UK@Sp)p$M3lR$9q1r`kyC0)Hdt^IRXwzNRpEJ?l<56Y}6?J=VKw{ zU?}#XIN0BGgSux*zu$ptQTL!*GTb|}NEApkKp-#}hOiJ4Vc2FY*s1T?3n2uU8Lr#A zZ|eRnOosiwW;jX~)b>6`DyG8v1{h>P6qFPVH9enhxf8&bMr=S1!eP(ULlk`?Y{ouA zjvyXIzcYr0V%`16pvb6B2*{prhQjcI5D*hLOJI_XjM)ZXJMi4z_0RWxXx+d4MJJ}= zmNwx)E`x}S!;)c0l0boA%?gTr7-S-5mIm{Y1?BwIwZGYM%a1ObdjEz|7>dIaQW;+G zTzl$&S|dihJmU|`RyLy0P{FBCKls6#*y075WR`l=NMS;+cnFceI(kgzJkj@|XI06sAqeLU&^H7R6}2FkY)Hh_Tyw+&f?L1Uq$J}T11z$ zBe$yv5w;N@mx7$wjKoYAhCTGNP=-c#zXgD>5#0xaZyl}nAF)}>mR%w@OyBurEI^IWB$i}k%dDDjmhi+Y{_W%!caKb| zhsTf!NzSQjDUD40MBFUhKiVerV}x#v1e`7)G$2BP(0#shINKaSutC-fVB-r9pPe36Z~4J+)Xui|&D-*V zf$%j1(K;FpI#wtbgWP5WQShKT_(Y}$37!9XFC7&r%O6I{!XnOfMZ$=Zm&D- zq{iH~2VBl9VCHu=bc})0JwQbY*gAXYUn7W&t>fSA@Wg*Uc5eGSZXY`4)%mt{Czj;% z>Cd#~-@aLssvOKmcGST@)h^(YzW_hK7-&zR|6xiWbf5V%7*d-JmTBGa!v*Qzjg=Vp z5gWYgR+r7x+Pgxr`*Dw*=>QKYe(_kq4466K z+7B1BZUON1+g~~3fd+s58G_`+p3cu#>`g7yGr}{6T++tYv!4&A&fnE_<|`+OUF)ZY zZ?*PLeeU5;UfdPLURgqtoH7rN z9I|*LFflO^HG#!WLxx{5U_KpElh$7KKvQ+XZoBL055;f(;$=-c2mAU%TRvU=V&gA& zD{?Gm!0(j5(s_0D;bIMMTfXq4k!tUEsm^r%Kz;Mq%PY$+kYrixh$oAR689ySJf9!t zupAbnDpu~B_f`Xd1^~}2<9lV--lr0+ZM!N`ZhMu6IyKL^de@aXC8O29kC<<(3cu<0 zEq5_A|e7-J#09amCb7B2xY{Gp?65?rTMHNgVl{gR=3#xsdPb{M$Pk7Cdx${n}$` z+h7>=h4)AxA_m|UUVZS`u*yrWN*amEHzw3~tf}?jeXPqlu+%3fMhtK#q1p#|Zf?=r zFE=Lu4A|U$^5MmH*zCI3it)!h*GERRBiEEd^@K{W4$j>TOW3jE$mIb3_YpEucyQ;{ z$F-*SU)bqB_VNAg`=&Z7GfrtQ+A`KEIH@^Tf6bPbmp+>E zTaI&7Mz8{)1j6AWjX_t7n>gh@HG0kR3wv0k)5>swxZI=XN3XD1&w3; zxJu->1D)+DB+8>;QUC;)M(6l+%q3Ie6?*mypNyAVw+j;zg*ZhLgp%?& z3?~{mzzPrP&McT2*{;;cJNDvTNXR!{d;g4EUYq*8`gGls`?8xq+37Y^_}U?Wpgn@y zAy75`IGkB?35Y~sOk}`rjBaKhc>wTaCX|mH_`&CYJ9{nw-1X;kPLy%?K53HOSIy}r zrJ}L~1}tP+U394yq`NYiww8`ZN27o58j;{6jYLEJ3Gwzky(7$J{w(E&d2KeqWKkN3X}F!^S7ykFYz*iFBk`(qu= zU20mo^iYTGLJEv8twwvU2}H~ddpdsn==Gh0?s<+C@0uCnh|bS+`OSBDoS(qZJr;B+ zL;E6J_Md)ZbbF{=VZnq;P#g*z)f;m=1EXUn;WQ_+=(e}atuhna)UEAjMcX95wD~SG z!Y3TcSGYR_E}n>@ym%aYt=4lUD*j`%`uVOPM#^o4 z&n}38328tH+1w<@{r8VA+5HzgRe5uyq5NX8H}m=LU9h&f z`-3eH&4@RC_j`A@e6Q-Nwg=A{5Y#gqyerlaiaA%49B5Tgd4?O^cXLTmT+SW;5lCV7 ze3o&8Fh2pH*b|*8w!U!6&2Mi6fQq$Sf9k*gEE!8A?t#?h{Z9~?0rJ7Lmk56a%txxq zC%$}j<t1mqLj3mj@7G)U%B&>alxcb6o?lJ*&5lTB-LB1@I~LEMzc;z$=&i)> zxas6bxb9b{m#50t?vS?bpR>yc+!l$*IKsjSS7J)yv_hysaJO%5dl@e`JPN4=pTA|o zKVACS`p2oiD>r?A%_rt@BztR09VlU~+ZotPBsMbBI#c28T&LOe#g?`+*=hAkEqW76 z_vV*g0#SL^Kc0}V>TcHY16Q?{KsXW*1V9RQC33!}+mVi}of13!`xi{SW%a_D9~pA^ zz?h#QjwJyV9VCvI)|>*}NF@0ce9mUA`$(q51$LFEV{&L9CK;-xrk{DlyOFoM2g zp7#q9hDq0!mkHplL5ok$e#`|h=&m~?IzAt6WjHVS!V}e-II)7y~3P11Yz#_7WSF zD4Mo$`Rw-D7j1ldsP!^4HUDD#HLuxuda5{&MyoKchZpi18sB$YaK|r~riT?SJ@&OM zsSPNA3O*F<3;1cm?3x8QJ~6kCsOmjLXJ&Nu5aNiMjyIny?`(R$b;XA!99;aeZ`~B$ z@XHT>?adz?e**V8FnjEoQ{Mk*Y3HoplxK%V20=>--QSkQt&c6muw&Q9JRxpMXITqa z(uVMCNK>M;xB_QSyaI8v9AObJWJwK1%OC@+367ruIFRaHX1>y5RVz~4EzPe2Nzcf}~!nu3==L>9rM5F`~giNx>?;He@Hju67K?P~#G`*+VM zvfzFe3}l4H(}^s8UY16KrQr{8R19r5T3-1z-<;EHN;y`Hc`eJ!=_RsUg8&>~GzYas zrxqTAQMjNm5tsufI7@^Pkqm?Eo-!DW?J*xuI(fup{^NH&Il1{a*@oKF*{^9f9Bc`D z*k>u|ApB@Q|49 ziOz-4>LR-wVOfMuzdM6B!xxMfqj|to5zoxrgfM8^!B(uH+b!7UlDmHNfu`S&L_hmt zOpB}x=}Rjs$5mO<#?-`IR7I!v^IX>)I8Jx}bSJej4HLEz!@(o$hZ$Ly!GW7s?;3Fw zGXnskT=C3_*?Hf>D7c@FSwfOYh}d{}qh*9hX%8orpW7!dk1Up%5{8jl&@k!T4}(kh27ZtV2g* zVPYUE%DBc|aNpc>|K;F(id1;cuUxZcjoJNLwrrWj%;u_9s|;qQHEY(GgO+^|#_pmX z@=ouT>qXYML!@Kso8O&!5~ML0F{2Cw0fqvzhADy!M4EFj!vbDT!-x)T2^eorMcMuZ zf1Vlthi}K9DTys#zB~pXE`*2?QPq=AKA9k*VrI5Np-_Wu+dF2=n6ZEF-o33$mMrOh zvd@qN<(MUe48OMfJwqYmcS03}fB#fU-KhixB#a=%6A6@sCP0#e&k8O(a8$1M*@{8{ ziVu3~=s=icFL%?O?fX9C5#7R@5qxB2V_nidFvgkclh z906u8!4ei?W+`gpCu4fanMmi-5DnF^DZv0bi0C;fu5Ck)|@$WM)eu*ht>a> zS!~+0$!Kb7D#~Os6_#b40^mdd25Io6&0B9kEPeh(l z%GFv^ACGsRnSCNs%q$UTEc8bFJGPE>&Hw?9%Az5+8_H)CXQ$(|vJa!ICJw_aD2UzX z=!I;W!2>OWKiXPb@NClq$f7&1ardcW5GGxrX5oU_*A>#=GJNf#E!BiV?;z+>me)i2WN8&7E|KBY4tky8v8uvq)8OVf#aNL9yA&|i^3<)6#%ml3& zC5Z}5PkjJyWPcmb(BppAOJj)tF>2s@KHCyQzSUQ$%?;G8*gMm2nG zFbru>lgXr5xNu4#y9BE-!KNTMxdkpKV! zI7vi7R5E*1-ymtFhGri*)dg2)q1Y`ve$@qt!Q=yAKovNAKRT)EOpBoYa&^%=hJU#PX7r<9t) z%teJY<(SZ;MfF_{jv~R;U=Ims)4Q>);wR9CgPflM5g{ZafGcrg^OsN(s$pjSNi-V0 zY2m_!BbV`W7&xW@WM)xUS7!?$Djdg|?0McPzVFY`TF=y4PiE$lks#?d$B` ze;F`>lSCqdb_GspzllRAy63Nd{cAFrJht$;k-&%#R)M5Afbv`}H%%!uPboD=DK(3k zYYPkhsDOx=i1J$N4gd#;sDp@nDP>fXKXW&pEp0A+iAWSgUp9n!-Yvg2{K(ZymMnS4 z$pA)SA5z$%b{1Ycnfa+5J9b!|ot>qw>rV7M?<{8ipw{|K-}hq&FZf3Z2GDAn=6b_0 zRuj?7mSt@tqPF__`c!*+JC~G{P(?+BFl9JC(U^Nuee+-cLnfRvEYl!(aznhb?6dQy z%^wqF0Pm11>9S?Z$+}LKA$gR<|<~cR7xe7InK<*0E&pnM4%1>K_-A^ z0Q&)K4TVClg~Q=Bxm>Pc$&w`sLs*EHt^QW{wdThbd9ELko__J0SB%{8>qy`om+yU% zOeV#mMT@M`(o&hr<)r6%()WFt$z)VC8s$(ZBmm?r%koEigZ3WY!+UrS@8O8}|Lxw? UBtdel6#xJL07*qoM6N<$g8Mt?IsgCw literal 0 HcmV?d00001 diff --git a/tests/testimage@2x.png b/tests/testimage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..46539682db44358089500d48f7d44c307d770d19 GIT binary patch literal 22915 zcmV)>K!d-DP)=RNIPfGk@pau3h}?~yKVmWfZVm1m+uL<|5JW7PEnuyt4`X0;(0SBa@6SyOFF6epc% zzD@BQOT`1Glkh6$7y`QP)ACh7&$R^eSb}M-8jPBN=C4-VR~d7X^(W__6J?Caak7kF=jU}PEcf#EfaHXm7J245j`m*Fl7vqEGQ@d z)XNbWG-g2OJ{a5wgZtstf)vyWlR>@sP>xaZUV%}zGo+Pn6+Eyh>ah;ZX0ww=`nt1> z50ge98)$J@Xv&}nPd>EEHlz`;T85lC>ORVwRWI`{m8lFnoQ zwdAFyVIDZk1Z6@ABrOVm)6Aked;cYM$z7jpHV-b1*iEAM?oltt=(OG7TZ)k*m=QI& z=i!B+6@NKeE_-G6?3LM;<$b_}5C{>my?EMaZ*HGc6W@1Dqq*;z7W3dVOC={n`G$gE zI!e3?YGwsadU$s5w1;Md0_z!@Z;p4lvJ8)Lt$;+tYO&E*-L!vtP5iy#WDPwb%j)6L*o=yaTq~TmsIih%NP~`pa+6Djj-nbPc%YYoQT0%tZ z?Z{&VyBnYTQEhzZXC1P%F*;MHbEclK?iV^SdUA|$%fo#SI7D&Yj!12JWdDsb_r_lRlda6N7;_izhzOD#D3TCN181U_3f~*lXSb=V1SXyk`h$Uk zfgJ`@-}u(CuRR1d$c3LQW6GG{-2$-gLOef`Gc-l`w( za(&Pl)0%Ssp3jsYPQ3T9B>PkXLBMS#5>5;ai9<-LIMQn#8Z(e*OhKV%sw<*iNehH^ z={8Zv$52p6IPGY+nvsxEIAjAL2&N;brtOLgs|O+&I^JZ9DXearM@}+v?A0? zkzLV9auBgw&}!AgR0;HEn!*SOX!$7f&xXd0(Yn-8he5#LJ}5ZKQPztj?En1EF>mb{ z?{a+*>FZWKB5G)Ze_!Cp?t6WY}qn1p|x?IzA&JMD148Ck{fw z>A7h)VRRnVcmHT&LvY9hhv1BfD}6d&{`0LXDyqCy_hiQ=!-t3%_WmlAjJ$YCd;FhQ z(jNOFR##n~1NI33o6_5jszBBqSm)i+cE>ktY0gT&m+o2-2o70D$j;rH^q7JnS1*F# zgD;M)Of)19LsEBf^ev1u`UD<-^o4>1BLxOg!We!tEm3yW4>#xk$M;WIzkR&RHkqIU z_jnz-`()>xbJnoLt_uwro9j`tnX1|a?!>`BUHadnDv-m@1LsAYhL51zQUt*r10Q@9wnS$Mpg_yjpP3=bA_m2m}d6oCCDN!+kH_ zvh|!#f8)64pTb}rWfOr|GdJ8x?U|QX@?~ul^TEaJ~$5Qd8svu!C@;C5vK)x*NMKnX}NkK zJlxmk=M$flNWh>Vi;1kqZrQr>));T7s5oZ3HQuG02oMoN)ouAQ*?hLNTCU*cx>Z_u zR}qqj8K3}gkoS0?-Ub?XxT9VM0@L0`pkyyll{wa^31naVwQpJ~c6=|z&HTADOxLOt^Fm#Gn03HN+&II;v17cO_u8sotyo%toZ?o0= zy3F8=N=^C0-cPS=Oze49k?eH=BOOGcGPV;*73=bu!MvCmIu?Qr&f=XwXiQY1*{nhT zy^5}m=s_(HrM@|na{Mtk7zEQBIpa6(NrvyeYsp4?;C&`PudiM0v!a!sTspt~3ZEW5 z8Fn}iGTh6S4CGq`m~()A{{)li?m0_B&-pWQ7u}AJoVT5^3e|P55wecfXSvFV+u;VGlw(@Fd1QB z;9Mw;8GlPgB44<1+2k};Ap&cAX2r}rv!x^vI-$yc_MfVIZd1Yke*53gDhq7>>7tp= zsXk9Xb(#46ujmGY-RF_EY39e~g`XUqi3Ej`U*wxcdti*Ce++K~ViJ zU=R_S&1$ro^-xe?0CeubRR4T<#NfvS1VT%)77fY67^nr|jAM#tI`Taw{g|)3pI~s! zYBbWgXG>hguK3<@uTOY0dZM)={OaR5@uuhI=xAHvHP|KIWZqIO8vPrzdDpX#Z*A?o z{VR`rt}M@bp<-I#z$f!V%INLhnl?#-XC}xw7C7(^vK)$DR$YX+p6Ge4=H*D3{G5~{D z1W@Xm4X+5iFUA~0hk=3Bf#HkhBdr04dfXm$Tv#f_g$*NAed$o;jUIIcH_^NZ0xObKIRaC?RxE- zL2q)$v0kcKrK#q#4YZ!XZ8Oi%ZKmm}qb5oK4IUsN!N8wG`HGJoT<~q#@WzcN7UGSY zXOz%~bkTpkB^H8A%mk}F1TG`)##%rj|F{=Xvh<5=*&TZZTlNtN-C}?urx=P6Sb>4UV#)aUDJpf?vylVA=ELf_jka01l7B(p#9 z-Q(6*9+7g@-04Sr`y7PdINgp{pG{8Wbd4paa@agw?o8R;Lb~0eHUqqk0Hpvu^u*TE z>%Ntrxc{;#{`#+Z3=HU^t(*clO+ILm8t`=JW?xwhMJL~a!X>w`B^5&om@({Hbn~X= zQ@Dmh3Ub^Q6{wrd$OlIhsp}>HjP+(L(EDz{Zjg25jf*#I8=G>i(~>*>`EMfe?j^!J za4MIFrb5MBC!Agi0|2C4V+SGzG6i@82OI~ahp@-H_}P%Y;l!y0@hQC>qwDcFoc26W zvjts7-S32Jgq#IiP<--#V)>t5=@IOF5DdFU{bci*UuRt1I^6xU3=?t%lF|k`d}9WN zfe`^sq;S=ZC%m?9w2OA=v7d_u04EK&VU|%N z<4u`B#v-8SZ)~;PWqQHGsc{QKP^~bLnbleTN-78WIU<{jfwjsYbhT_=@ z{v7lxej*MTF`()Uh@_p0wGTk}+mJKsE0}k|CG6}6M{VtASYP)~ww(4L16wm%g~-x3 zX>l+%`jZeGI>035d8Yq)20QJ#3+LZ3WdD+V|2TU=ap2(kAgjp%4bBlQJ^o-R(?QDy ze4YXJ0iYZWs?7r}N?=ZEGKvX8aOUgqlw8j)dt>WR%Rdl9Zv_a95&AVN$uc^OL>x*H zlvE%^J!bnd+rR;cv({wQ$M-qU-*?BJ3kImBU8&jdIe)&l=AHnr8?-pmH+;t3>k_ac<9b~pwO*EL$am~`Yd6(_w`Gl;UWrWa58ZK1yR z^GrnsEa0HKh?JSV27y6I4J@pIg(aAD+zl8b7`gv~ukhUl!(b=E;DVueo)3#I_M!YF4oz6G$Krc<3U@DI!a-9&_l(0W*6+Y@mde$#@q2#hgs?v9wH zl+XMRTb6OADD1$Lb^Dl=4rVHn0rYyqWg1T1BONPU0}0>>93Le)kKTON)h zQUgc}C@3hz+&Qx_bJh$@Ei1*_>o;QmzJq9QZ^xdOELfI>rJwEH_<>T6MK;MZ+bQzm z^Yyo%cTUMyx|qyI-u=QAM*CCu=`8FUi(foljiezV(h0_xAV56_XC(>)FjsPhNCF(IwT9z5iA03vc=! zi~jxdOjhfI>Mo^k{zF{1VGIyOfTI{hRM=ee+>8U!n^^^pxJ&Vn1;UwDsz^eSgiRI{ zB;rmO0X+`_9~>jW@q~y_wZX#X2V;me0W+pe$Mx5L7N;&<0>jX8_;4kD_3Pi^(BUey zwS{3A2J-Uq5Q#=%CX+byhJ})&HTd%T?;bashZgT>d;YEM8*Y5iQ@{3F=2RCkN(?Hl zc038Fga%CrctYlo`|^wfT8V-ZtPw?5{+0dvz2o9oP#J>Fp5sAi- zlbZ{l-w%)1i-LjzXqtw`JvN&5I#5pkF~W#|1F`kfD&uRvrV{&#n2Zlf93%m6gu!Sc zP@4yKLQgFWrtPl=2V(#$kW*#kzF*VYnX?DK=jbscfvm=ANRk==ILd@2lTc7FWgIc5 z4Kce7ri^DrGKM503h(?ij!2!vjA=9Rjj#VF7A%+t!!STZ`2Fwi#nx>*AQd4P41#mF zm0*lP2!TK_h(rsaVV46d(tm|@*I$6m!F=qHg##Ck0I~oy7+~!JI+O5P5m1u`J83{k z22yNDf%_N-SU{ewjLH}2kr{Iazvt*MB!RqymlyzpK$#f3PHLcTD-#JBMcj!X?nEF{ ztxJ~CgNU&EpGh?DlL-29@Rb{`$ASg(pzCg|jOYIOB3@YcGBiztVHmx3pZtD5IOnL} zVI$tEpya@jCY7e)<>FbW>(9B30F?loS_3Suz}z@f02mC*1lqh%j_%q~sX;`yBmfS; z5&(+=%u%zIaK19YUZc(s7yDj@#xzC*NJy9}0ZY15(L@AOC6JI&m@bBc(%t8JxjGWBUvp8Pt1 zpeN#>W*;2W3uOz$TXnS82*j%Z=a4H1)BtD$U;-dF2n7@XNq}NINAmp*ham~1f>kJo zoJ2Yp9N^BKTQUJk-40xlBoK4Lu*pPH#SwGDu8@W@Ld((x$0Y23$%HO+eD*V+L{3f! zfZKAvw{s_6eeDed0s&}R&xuLK7|#9hO8n%<-@^~S|1A_16~ZtKH0*TXL}~EZ-WWrr zmV+1lv)l*}1gKU(wg?F6q>jUZ(2N%mSbQy8d~1xYTDulyXI#pRoc#<0JsAaW0H})K zZIQ@{D+EkHcK}Wu>mV%ML1SEj>+R43Z$S&aIU3*PP#E$wuT*vfshl5a6eMhALSs5O z1PBD1l909opB4f!f`kKGCE?+I=-iW?4jv-4TP?(z6;>=i1IHe_C^PVuQsVK){|+e? zbff3Atx^gL=Fi2yU3CR=b8?^*Va12e#Di-eMWikUv&lhlT7PNpy1^LU^%SGPN#ew| z2za{#p^~mRxF8sX&!BkL8n*JujPEx)=gIZ-*y-n@ed{C4jxN?n0$Kn}rZyoC2#vt? zB$&|z;W-S@K5(%I;9J139VI6>W5we~Jm|!b1VRM%<1NWHH{?*)AA+FZkOhHMLQZff zau9Rc;NgCF;fG=pmNKC;9ft5jXGSVv4om%)6-{pt5e~m)LE{>(xZ<+R0Gx^jQEIgtP9Kp z>g#Zds!hk50*t&D5t@G$TlrG7`~K|m*Z0vsKKc=~{_6o|wVn<=KnTsKhn}+oM&4#< zq0R8-?}WFo8YM+-C~r5rMmanpu_k&jB!S#?Qw5WkKAzOM2Hs2W%uR9NfD?f;0nRuW z5t1_2(Rv6kEK;zP3C=il=7G+=(72uvOGYTHTbTF{C`3Trb_d5Fe>@f)eN?8RDy8t) z<4-~nL5Qy2N<@TcGzyTyy!mr8Ee;W3digZimIcNDv)%?UaNG?_4K32AAjYtxB!uJI zYvCgetl+ry(92e{i~rH5|2Mnn(L?n7$F4y8_G?l8;kQt}U<1lNml#ekg(Jm~1X58^ zp}uj^+*ZzV`bm{WP;gR%c%E@Ql;prtNodM|Uxc7B0}=#DahNIrog46QKLpn@(}RrC z26e2bP|@(DV$mpyiV9I!kl#f- z!CVcVeI_#vI~`1&T85KPIsu~74AnEwK96`jj-o)IN9)nv-VUV{ zG)+S=*mM1YF$TdIFa(ps9(n0G$NroE8Z`1BS2TZOCw?3zLw0&%5W9&KIOE_Lj4N|T z`U7NUz7&!whOpIuh}{BPCR3&>3YLl^>V#p+I3zhxkez1Cl>0|2GtKOVz)_tZsXubf z@zcj8N^MIWGjNjuB0{82;?!j)p|G$cO@x#Zk3If3_*<+l>fY zjj6mJHWb-Nsu&VZ47Rl3C>xUOF4M$m5vWe0=zjE0Tc+eA-ABfbtdnRasBo+(!7+hl z%a&$V%!vr^Y~F$c2M)pK_xET$BJJ$}+*TqIiDKKf9hqyCQsSL=HiL+emjg)Oh~hQ4 z=LA^HZvO9k_g;79hz~Zw7_va-7N5Nxga{ae*4wJ;FmcF2%xOcL)qt?wjJVy7xD!TP zw!>11lt>&%Wy2x6qjkx&CS6;p^f(4Uk7u2`d|kR`nV@Wh9$mI^BHp49&~tIr!UYh* zt;|G(r=EHiUaz;ux`%0+aGZ|3jYNds{N^sa_uekFg~QnN&b#>QgO30Ji~zvAqvJWP zNE+>S!*3tm_w5Cva=;0~keh(HdoOK2ocq#V1?MD#d%Gp&961C9TP0y52}pq30vgxd zv5D}*%l*)}k(wb(SM^jTb|%0W@0bT;oo2*(8I3T8%vdJ1N$3Af2&7GzRyrMdp^kyJ zX`1-gtFLDU=bc-SM7(F{+5HC(;XiKpFBBFQprNr5@pu9p1RmhfN73ym;j|UiV$W}1 zr?r=y&elwhT-yUMu7Tn4qpz|RG!59__5|&CL=Cq;3tU+yJA8OOqD=V#$d@L9J1V2MmcUvlWJvBA;&sel#ZbAT~yI|w1jbPO&kj-FP;Tm z>-etU*}MgjNEC*r>w>FN3Z~iBO`B4NPO(@FhYlS^JQfEj1x*l?hryFGdIC|9h{>i^ zJN7Ao}oEcX8YB1kM#uz-J=k(%OP?YHnaM_AK3lXBW{{L77S~YonuUWGp3qIBc18Y1DnP# zpS^?wDWgcrC^!T(ZouFk7~Bt!@Iqq-7!%;>?iOXNeB8w|u#WCps(aQ0)_EGa?>nxm zGwQO*NY`k%u24RsG*d366yDjq1)g5a*)6NX>8>~9(9Z8E1_&QRplIZS^zK+HmfvLW z|9?cZdLl0Z4u)X~WPbjI@734sY!yrvc!VFeGkyZ;jN2Vcz)}eSVF)ImF%Jykg~7eh znUPwEOgRxzYP`Y#fOm++eb%u^Nu5n$`W8w?3|+_lnSayK*oOoIa)P;;mrYI0sH&=g zuiN4v5y4IgB;8VUr;BI=P=FQf8(1P z^$yJQd?JXbGvEU1I6#>$mYK?|%ON0`28|ogm=3{o2rj@OI<44uv@EQPSh@;_r|d2| z*7#Y*1}!~7fK-c;?tn3(R4awdxl&Iv?{tSThJc=*dA)7>4kVLFq9k{vG3 z>1o~Gj6xX$Len|QPSCn-L!Ek?y-#{~X%YLepHomG?lj!?WKG5EmrSi_>UE<@z_0|u z7*oI8ap{Y3yY)P;2!caE4c7B!9C6n`By8Ey;<-W);NTEUOReAw2qwUpYjegjLg+Rt z#yXAy0D@_*r82q-taEpcp=+gOV1Vk#`^y>cV#Z@I9}M2nTI}4p8=UhVJ|9XcSe6A{ z(=y^n(<4G7Bjn7r;b?IP@?|Wr)3MGvq|sR-JuMnsd%V5_KiHIIKvjm%30U$+xhMbdmNYx10rYA3S=PCvr}$wNxJQ1KlegY#Z!|7 zZWoTHTBpv(%gmfH*5z}8YX$Aof?zP9NFiW&5Otd27r6i!Ow)wu#VN{hI=nWOQW=BB zH0cV=7~m^U!ZSO9uw{aQ!K($q!87)6Ku3E)oyT32wy~1{2oBjGQV?A4Gvt%4l6s?c z@TVI#+5 z*{h6`Q_7t+Feich6JnXz{AqhQQ@Jbf=?Mv*n$_#lf@Zpc08%z^90DP|5HJ8HIS4W} z7W1aMmmH>yvDReWciwD%>d9q=7q*Yl7da*jdzFYWrjE*6zMhkIkU$9Pc?0j1rB7Ug zN(WY_$S@8}w93P1v8q4-9CEN=emM-SLlo)p2N6L_4bXcWJN2HPZ)4`injk!V8}Jeo z6ghCnf=yq;xXfDoxXRn4WZAIro-XnE%B(_@`T=lE$qwX)9@mY$Rj^2^mFF#t?Jb(QY>* zDPu^;C`-uj#iM)Xv1ddAS%DR5nsMx3O&OP*3HU@$zvwI@gE3%t^i{mtazC1^Lzpvj z5l%m6DdJWPmTkh34!{6S*ANPY;PJRNTSNrgw&9S4f~DUECEN_KY+73^Fg609( z=$l(*aEI_c7m3p=MPA`YK+CNw_bvL&IVGR1@3G+oXH@Pf>uT;S`bW(zZ}>!DUc!l@ zE-`9Zc(e3DdMr-LO)~(=!E^=22}u7x#dw4uW8esAIhY<;6q)K@bm^z&|KCeTz7!*8 zRQiJ}%0Ay*U`)GNV;cFiAiN?t8i&o&59!G3TmV|oftF)|`y6nO1Q(R~{78y}b^0^7 z7t{Plg=dFOxni=40~jTNFa|oVXyt=|c!M*Jd{60U95%~PNQ>c!wic|*UmBfzF*A5f z{oKH^3$C8?%YPop5{)*aHluLK)QWgO%lRRPkX{i$K+7F?r!146?rvfp?#GPaG5hBP zmaV#a{_Ss!SGh)uQJr#|am?qQ2V>7MFytAfUG6Gb-j8$+lED$sbE!OV^eYR!%a(s) z{;zh7Z`nqNQ5DD1S^oZPF5F-lcxfmz{W0t{VO}N=}2Az3OV3akK2afve@|KIf z@%gED^$e>ri5claVQCl+g z<`cQsUNil>pS<>{TMvw9sm7WypJuvg)3OWNoSH{l%o?v7OLyY?u1`dqBw)t?-ypIv zcP8yJJhHf5?mCCYbTH2M__e&Nf3>uBBYU5=8l4&Q5%dpEdh_XAeagoS;kPJbR+nX{ zm|?&(=%ppsOHpG+DlQlw(YMaQAh<>vH~tY4rOSVPYVC#(f;fO9AP@kkIC10S`C9oG z0G4e&hKaNWHacXTx5cj5pE-qBTIyjQ(w_7&<}*^%m7Col9kKFbHVy>!E`|{ziiEpwioWSWin5qyQ58(&PW?b>;Qs`2imf0VAQS*;rmsb zM8fw@S;5?I{Or^%lQNdoXfkdi=HKu6%!*A-Py8inH8;KXpzj4P+YCH^KF~U1 zcmJ+=wL0E)-}fPJZ;3ko+8?cWdD2_pjwa(e5ct&GJN7Iu|Hg+(eG7i<)pBB(r14uv zmDJc_-WK3t*M9WikB;8h{K!u# zV_Pp(kRQxt_mnuww*#Mi0SNhkJ1z&Rr(l3zs`u8R<5S-0^VDFT0bFTj$jJY}@@30! zUBe#APQmxWgb@e;tfkfB)i>YxR8mF0olw!)^g-%&5g;Tm>owr=w}I(i;OSFlG}15y_U}^xbDu2svda1+EI-L6S4wUY+r4(N8kBK zQbn$h*)3;D*zeyKg#boCZZmMqGr+kGK)w#VI|sP;e85s5C(0ZGS^z{mJSg*gQ`!Pr zK~%H-TC#-|a%i4JPPOHD+ZH;WsBo0YD784qQ)?rRvNL8r!uFV+#u@*4*HwG&%8H|Z zCZs?*^M_rZU%W5!_H~WszAF;4y{uDann@24pgF*d*Malj0Tyz1P`Gz0aM#5kkC^qZ zwrzpCPnf%G0=|McU{+(_j!0|JBpK(%arUxX3K7Tw6QsnR!ZgbD*RH zOs8iGNim|@obUemW8t4-m|x_rcYeL7*|+->5~iAxSMuaHF1_!4Yp^)s1(N1Y`kcP$ z^+zt`oL{a;o*S2KB?Mw1nl#stCY5-Wl*#1jTNmtIy6(V?1wP9U1{^E~?mveo68Smb zEqUoHw^vkD3~3JhOHa>xFd8_tMv|S$W0DaE0al~-+|2l@kKTIibFtx;|7-WJ`f;E@ z+?b>`B+cY*kH}kn>qq{zWw^(i$V|G*1ps?!kLR&1|FQH?V#}3LyZI8S>=|IhF$u1R zfh!H3Jvn^ZWBK;N2R;}2!v5BqSKm=4lGoMdfSz6M+Z8RJe(m?q*}Zff#DuR<15vSVh1Tw`IVL8XmUx8km;%p? z#ikQo9G7kRaT#W&6Jz6PVov}GCL$gldN-iuy-;Gzd}>)<#nu(GR+#CuWN)r6zGfb4 zy!Yj)g%8N{SAJ#9`40^%e(Up9cP)5u?|;9S;H?}$m(+MN0p%PnxcZ^bwmdk}Yx>^P ztL`&O;-3&22N9vJvPsp|Rh`z}qCQztR(O7HZf>z)njVeB!d61PT4>C??Y3)P{?|y) zJ06UM%k2@RV&zK?fOk_5Y~OyH5iZA+%Jz5XhVANw2^n4-wVO|9x0>gLox1$E6V??Z z#-wY;KpdO|jJROhHo=WoL!$7dxrJx1ub*4m za%+5A?jeoooAX4;yR$uK?7Cpymm^0qapk+sPnF-b>$>$}yS6m_s}i}9P^>ym1vKxh zyRP2->S&znYmY5`Aa5qSTGIr=Z4vC=dJxB-d^Eg%qgR7SB0{8A)`qLq%KyD?!>-XN z!;#{HA&@>GBDN75wMgTBkH>5`nnhF4aco`MCU-AZ*5 zY@a~kC;Dg7cdJD$G9)P>nFzNXI`ehgIj=p+LmtT_rPYfvBBXEIqm~O{@64oBr z3*f1doNK4|FK5Qhs)eC|50+`eO4=xyRs@1VG#p1=RWtGmLntcknsJPAhAFfB9|~`+ zy#l~rMpA|&N!BT25>r7H{H6^{FRE*+$Yg{F?CxEk4pt_1UK3vb$JOCP!*WZ+J1h-SB2jG&5lbK+Ztsr)NW>yV z2lnrp0bu`7&wJyOtCq&K#zzW@{pCV)@2j?H!$b^?v1&9`M-a>pVd}g>7{ciF7>qG^ z{rag_|E6rlpHVxaspca^Rv;6cii!$;+-H1K+Y$#(Z%FK2_RWn|Cx*?(POwxgPbvpQ z3XG>iyAzlK1OY}K!O$H1;ef!GBMw*`v5obifB)>=zk6w@Ww`P2Rj0>9{R2fMx#f&g z#@JD40$eae+F~HXL2xP|Y&Rf}6+`D9m`NLkM+fH}4Mrds@IOCPRKZrnO9@=Xo2$tx8aKk#q5-~I% zYJ_b$n6+>!e11>ncpk3-0XBW~zNxV#E075UQ3e0=f%uZJS^dRL;lE$eY#t8AoK{#W z4oMwdB~lz<$~9bP9k~F(km}wOh~S!d`hk{X!QO5Tl-{~#&5%}1zqNM7yeO}KsB~&! z3Fkn^%8`3M&Kc$&H3M7T+5?Z*txD37s6NmLukOX{MP=|9-MU+xz&fYDn&4ywG67h3 z;2v)s+kU~XcW%F-A#rGVn^`RqvK^L6K*2$JHl8yM71O~C2TX7-Gk_!_ z%}EHKKyVtNT{R$26~hqT%zjcza7~*u0j{&NSmVeOjXw|FzxO{syE*>1x8G@c>XB_N zFRZAFZ4s?@4U#I75(fYfI5_MU9f}+<0TlYmF+1m^{&UlJnk!=Y(UNAi`<^?V`m(3* z9bEqJnXeX9Mz-BsRF=C;Xsm}g7-Mc%OS#XBrxw6$W?+#3%w~>Ii4HJ=A}7@)>>wVG zlY~7f#veeo1sNCC?)zD8tFz;ptu;@7r7^jGPQ-3vuD?bf5nhNP*~kIrz?;u7E9ZDD zE;<(xyBP=D-|g5;xeq2fEv2WPCa4`UZ~uzQi1u9o-|Mq%YgdbR<>ue!P1VoV4bej! zX*g$@>D#4bZf<$zj=k+~%xyJmn5_~}WOt;l?F1tZvtEZ%gy0kpriT_`Ny(+~>A7%} z1?rqthXA{k!)jx$7Zy5yBw=Z7tkLt{H^21oaToSg#{GHxKSV)njqcG{U*gD=EfuJX zF^2r25X$G2K#~LLNDvXMn8dDa2T@y750Klv3b)3dKgB#TGL-LaJjn{=2(a$JJ>FmL z_~_+t)jjdjuE=ZuR~g%SRMc)}l58k)GI!!MnWUJ+5U=JSNcc+`rub*#q~eR<5dm;; zG$$)N2IvHE1{6wNqS{xZoSw^Z1O@4j7ztnP1K0g=-ih7I`Rfuvd+AtyfoujU5>hn19Qsf{5}2KY)9BspkpY}h{vZDn-(DG{@gyLW!s_3qEyyc>dP09-$?c%|kpu9Ya{8dI>O^b+J4 zQy`cI#yIL?dy&qGkPZuOw1r~JrhVumPK~jpmj($01r>_q<&^p#{_&-c z(8fP&Id*^zF?V$OJVJ036;6TGs3Te@5i0P)pX(YhTBePbhVZNTZ1xL7`xeKSNwefX z$zTuc{rX9pS|0mqYqIuo8>XN7N-#(aLTJ#r2Oxr}lF*n3R+SHq<3OJtg;)1u`P7eN zTJWe$wknUy-Kf| z_SYOf^?tLc@>XA|bq*IpuM$L*DVJkQG}X5uAtUek(RiS6b;VG>rMOBi+ zD33!II!>5!UKeoyKx?uFwn}DRGXjdj3@18LN6X$@|2s^zywQIfvkl@*>yazcLL5;~ zWjUKu|MhBmXOkyS4NDvVx|B=P1xm{cQ8*&IX7n=k|Dx-9$aw_9k|Ea z-}d7{*3@K__^&^m8>sZXvRX3+eX(`-{&LwzqxCh<<(BgKjB&)BaJRtL z!-53U4*IqH-_FfD^^X^peW!6yI}zCa+pjw_WFNkVh{~UH0WHJGRY9#rz7uZ32=f>%fVTt*P=8uCpEzD z3Z+6azFGG$cC~e6Mbjm4#ukQ)ql#LT|AqD5GcUXL8@)$PyzTFwp3|Zo{3}gqUJ{pW zj5C3tmIs}CdUoe}qhqXZ3uqg-Fn&EV=eTFqOuubNeD`;N=K&&dm4E&4I8?F_86z8aHrk!P!_`d=5D4Hfz;oKf;TZe?Vn)Yvw(#4V=4~sWW-;LpxFWg_U33 z+}7W@fBwWbLwfGvn|NXTOL1!I-9NT_X$cO%+c?-Z2L6I3e1DHT{Os0>ilLo7H5N9ZM?GlgbUvN z`07u^9>Cl7kq}H)Afv!HpZM_9O7Y6u%x_NPgY2}LjT|z`;4fF;jANRA5zZ|C7(7~_ z-*nANNj!7t*Jwz%)4W80PckgtH}zLb=iPbp(v=t04d(o7*RB@PnbX!7xwyGbZl7Vv zC#9DPSijv4wGcOTg#d^W}L@M>^+7r?qQEy!7>A)2xo?pR+mvtg-vb zp}uzQS`ps+_<8Nk5B;WjmOU#n6G#RaERphp1Rzo_!vJ9OR6gX?Yby>i8;u&HeaeGN ziqE_2{IjmAD%a^G-z` z^VJ>GVC~3F+R2C_*$CZkiAT(Y%?q5~4%w4F{mUh)0Udw7PmZ=``gnF=Y)@vfmaHYP>fhVi|J`MmVpY*8F~FYkyn7^ zj;d#)!9pXtAaruyNq$E_Rv;tf7i(AhHj5X|0P7GzXNUl+g~L;rvbuHLzJyWeK)^s* za6T3mbTuXEc7!gkTub2Y=J8w;A^S*A*|WL+*Dllqo#Yypk(&#MD5wZawj1`67fK?i z3`sZ)02`g8xePoJ(u#g_RNjYfnLf9)W##b|4)7>|PmRj)yOR~j2x$bCrmltwd5TXgrpPe7XOxkK=xGM41E~ku7*wJ>%Z`N_uc$8 zfU&e-i3kmv#M8M+YzeHM3QaCkzZ!! zu9O2f5e_3i)neEH(>m_>3_v=r+Ps2OP~e@`>67mC491XjB2d(|n?gi{;F0|;eU-mI zgF&5`ZprVuZEIHrf&|TB@P8?NAX*I|LpJn_J+M>U=T}6E`?W1`!Wr3fex;jiKDvp=b3F75p~s@k6crwV~bz+@x#Ymu<4(Su`zLN zt=Vv=AG?2iQ9D<7DnE`*0Sn2_R{f(lH=5**{-ygrY~MXe{NJ%lX4S;YfvoGX2jLY#c!VE1 z^Yn0s?Tlc;_19qTc*c@Rbd3lHNCqTyLNp^B##F5G3VQF4g#(p;_3G7PY3}-;6x(m; zhFz@{`r_vuU)KE3x1adTk2e2tb$SK?pS$y9{cG!v`68c8;s5{{9Z5t%RMG+Sjn{YR zO=ogq&{OM|3K-39l`J*pSKPAnz2A@85l29_i#1{a2O0S0C}PDFL=l03LpO9NgTso% z;lw4#lY|~1Fb14e_6hv|_P#wxs_VS-_nmW}{haBZ2ZKO>7?1!VTLxia6v@Q0tvKFn z951TGaZ*yb?Cd(Jq~eY9t`byj*4}K&v6DDeNu^RrDqEF6oH)B$+47@6GA_k7#CjNv zU;u$(fO$_(zwW)~oG*Xe+m9Ir7+`ow{hONUp6>hXKELyw?_Konh9n6B!66@H#q+Ob zg~$X5OckN2Bd(@Mak)`$^f(716{1uKua_ z7C&56UwIGO6o1!Ze@%bz8>G^Mn;J03LKgcn~1Th9f+rIERP>l%t8Z;%|wMoe2;In4@|#fY3KMsWsMHjjxo_X5t4snEAy^ zg-NcA?<}#d6D;Z{kqS7PlyE48pr%kQ1+cqylN^$4{Mgcu!V*qg*On5ud-9x; zG}u_*kZ?r`UCt7ut$g!5aUnSwd(r1nT>^`6G_9c9yzIJm{%5B4ZO`Kpcz8hn!a#O< z#YOjoxG)5p2z4qubvy7}GsjA`$mB?io_(ABpZ&xK*8FO)s7Jm|bO>^t2z!FFAfB>P zgy5Wo`WVCO)3NU(8ANwyHexWpxh+J5X8$yZLTEmh!h$O@aZY+8j*I2Ik-mZ?m;}xj z4USl?$(Nv)1g8#tc)sg??oWQgT~Sn@677B%ZpC{sfRk>BJ%tKRxC)vWH>zoY$K6NP zdmnh}=?6c5P4Q$m5*>nEC;s1mLKTL-N)o7sCCEY@qAkP15k9sJ{On~j1Y4lCXB1Zk zk+~*`1Y7gwig2>r30>fYObFestW)ae=R4B|``_Q|TWW2iY$!7~Its!N@cmSPzb{ts zBS#?+43!uI78e4x$xJMxEl>U0=D$0=*hgOsbO^Et;K=!wssaA82$tXe4q;9HVXVk* zY;4)~I8UMKIbL-F!6p~Ba1(2mg}4aZob$uPGd}@8%4ob|87Lw!NqCliwEV))Z*1TG z(C(d%AC*7FhN*ceiQZq62G4d?@ehRxO41+_KtzCQlZcA}VgbjbR61PpYxuFP2Nv(h zi;E6H76Cc*4NBi!G=Nf84qFFyG{byj-6I*$jZxWBM_SvofryZjdDy~%Bne6OCCtL{ zvFaA^jdX}nE4F?qVp%!&y%?Ci_=Nq!tN;36M1FP~0zne%yB|ZpKey{L z18Br$Q1g}cXGAnhU$Mx6EgTqfV3UjaMr?y{M1=9I!Z+(xyxpr=B1CuTeSz#LaJgh_%AFSblE zo8&Q;G_L2smFZY*m@}9!Dsf6cC8aSM;-YX!Lx`)&&;7l@kYt&nUi~}ni%-0CbLRKN&)pTK>D~T1h^as0$F|6mp_RA{x{oqK7HFN<#W-IAlHcB{L;IZiCpwV zK2v}cRx@ojV|U}eu5Ak_!bVNgYP>*d`8N!7QzB6Et{@vs8org8eT*hzQZ?E=HGC&l z&LAw^+OL@)&}CMfe`ogRerx;or|VbVHE;* zFTZH}SW*bYVSY(yNz=E{@{k+Et=X7$a~(t!2Q6w2;mK_Bdh5tQYl+ox_QmfANGDGF zHMcCfNx)OZXwd%gU;pSkK66Lt9qs54~q>{oJ-y|Ly-0-5wFTSAz~gt^vn}fAl_;n(i{J5t$Iv(HOvhC2TBBuf5`OzZHKq zJGP3Mp%DQj;*fZ1NSt^t#Q|KAYVH%SrsmIGkM{rs1f)waQ5-IR)4+g>3<|ZiU)#F! z=|9-KbaVA4o_*2KA;>kLtj8Y{nFw`VK`9(fiYO2~nMT$wVqqF_LzcuO002P*3l41Z zl8};?!~p=q3ZBed!jm4uruHJ#l(;1YtSloc-6Tz&0f$m3)YhNs7n?r*pYQwFHT6Yj zX4<)Pr(kBm%(rB$b_jAUaHB_r6?bO}lSCr|A?NhLkyle(q@`a7k`S;V$cBJ5ix>?U zXn1xSg6B6rX6*v{Q!CNq-qm_B(PJ#1p=*Ts{E&+ZjsrB8>vz_3<+Y#u)cd}8_KLeO zQ$hmC%oa1-$BrFyhlYlnEnBwOd-m+H4jw!x_wL=J?Ab%Ty}fgtM*8T{qqJ$$CX~x%@_nC*#iA?}3UX#jDf-9Vz5M1h~>q2og&Tf`pw_2&V<4cVm>1yxWge*v8S3yS~18-S*FWWv_mrd;!Vw zhyl>9UAyqiGtcm@UAt)CzI|fLmMtl*b=DYTMNwo+DQ&H_1Hire?z>atHg*Vdl?cN6y(SyXD<&+lz~&$eK>Vdk zfK9XA8i8O-2WeSE*_?-lLi@O=>q;}@&>|bm+)Tm(Go&q=%KDY6&|eJ%B>Mf;*qHiB zy#Ce7tB-Ab;`g%X!N|ynFQxRp@r`d3qbSM~QQ_f-AMSeo`R7wxw{G==AXr93{g!39 zVHo-VGD@i&5oH08Wm)Gf%X-bW?fqR{UB_J4Ei0v_EXyhn4i1JlqMG|$bO>^lP-fs2EKW(f-fTZb{FjiV-y+sW2r_w$J?l*eppXzkpx`XSXmDiC zI*bsSIwBLo5>|3913-WXFdUnf?X-ce60FQ(j4gsMvsjj1kNa~^;M9v6n^!-EQk zlarHULI}moU0UmYAw(K+mueS)WR9IVZL@!sh=zm^-*p`4+o@FQ)nc(YoXKP=y}iA` zu3fwI&Yd?uEWSgKt3+tRK4}rmJmV`eb(Eutm>@9CEIqW5VqVM%>TTqwOS0lTcF1_y zgfuLv(dVqjP`Iz@M`=GuIhsVq?m}dOStn@dICci8jR?q;zAh(8pwAgZX|xV6 z=tI`-y`qtVnQKzY?+78DO{dfQZQDM*Y}v9>6h#IAUV7=J@X04{pQBih~6Nge{o&+ zOX+m_Xc&f-TrQ_aMn+73f4{!flHyY65acSsV9)T}n$U64xKcQZiTW^d?qXWAl0{lu z-bgB)Lbn>kIK2$b(L7tXBi2J=Zo~uF@(58?09PO}LBJvhu1LePvdB5TSlj(@QdgKT zT0MpH!{b<^K9m%bn0+ZkG(tq*avbNMi^bypVzD^BfB*hq$BrH5b|u7IbO>^lP*IeP z7dJFZ;RZ1x6JTiidwA!PpFvv|MvHxI=jk~d>q(TCXDVD`Yhc=^@WGk`ObMUXw(%o&*-tk|xfB)KNkvYVx34&7LS z3dRs|HCYl8q!6$vg{)mb-tWbd%pe9*YvN+ti7xcU#34)$2UuJG5NxDlLmTt35aR!P zp7*6}Hv9ddp`nS#AAkI|(Iu`GH;o_-vtEK`5t)Mr4^lp#7oO({*L5Wk(bUuwmCI#O zC={q%E>k9x;cB%iMn^{-X0{y1k;WLdZQEFuC9>J9wryKSQKZ5!)Sl<*bULkSwVJjp zi!NNaKued#>951X!|3ntXDKBO4-ebKx0(rL=)8Qy)qKUX~VDeK6$MDrte};DzKZ?B958F@7xQ(&f(wFD^lrHh< zQQ{GA9iZ>7Zs=oahymHA@3e?Qjf(JX(xss@fdJc=SVh}#*OHZ}a|y6CT*rfJ#|}nI zIB;cZR@_$*ggAQs0G#m^SjXF73!ed;vMlQ#QmNFQzP`TW_uO+&=}uWbEd}s`|a$UF27}Kq_wwXD@%tZiw0D6h2AcV*R$Pkf_*gkFpu#GXc zF-9`8WsI?sM;o#ITmT?S7SzcgHbkUs+m47RGR8zv6otkZlf>*a?o%;yL_{It1-KSM zgv_jy{~Py|29PzzoF$?zW)6?j^RJH;zx|80Z9C0=n+zz9P>!ZhQBw$XHR(W0fB}{S z4`F@ZHVh050D>)5uPW0qz8rR%zTHf`E; zmgsWrYwuiKvjkyg8X6k1r>Cdo%*>3a)oNX~Z7)+wc>q=r(c7!l>U{uK0~latpQybc z=i(y_!>hRbcra+KXT6xrew>hIEdU8(o~Ae6<=UQXv@veZ#N;676i`u9(5zs=g$yz< zlPOrH52Yy&m65aPU7kn2I}6B!D3_XKld_);X*0iNC?>(+%KI^O_5><4k-R!vS~Qkr z%~zS@z9mF3PzbpU%aRBUftbNe(1roSU^1AhU%*6p1e2vPxYa&9fRA#{>pSB6{_m&L z>1Q`=*s$Oa{7%I+6NHF(_wL=C%jNQ=Qfa(Wsf-N_3={$UDu5@LIiC=svHfCP@1kJN za<7R*Dlsz~01|*;W=!hS@VXqS*@YIhmPLsf%0!q9F2IBm>6w+_i7b}T16Z4T6gj6K zLd8~|{K(AaolS-xjAPmDV zY}vBqj!K)o9$fdRJ#gTFeemExba!`CcXzk1lzNbeJ_z8$09Guu8VC!p9UGRE5OTKA)rz5&g6-H4f>19jeE-ZhaZEm!I40W_{8`0- zny(N^fC;r9Ss2W|3j>*T;Pea>hw!6b-Bn;ncvOKI{<9J9cD3WNC`s`CZbcArZ-T*D0BokDhCcF zBsuV82HoCrickK;b`A^4^khqNSH0RR!zec%6| z#bWV)y%m;I^Wlcf?k7*4^v1`>Gg|9x6h)~p3|A|q-owm~G4nbA&J_=Go1i_gu;H*X ztm8x{#Dut!%g4F?kXhHmu?}U7!7=qsoGAVij8kuV^EE3lYs_{Y5+q4DB86zo!4`ZH z%iT?om>r2sM90(V^v5502ToSi3_?>&TDWoS6_+VUipvz$N(w74Jc)Y> zn;_UutX9lIh_BnW{ju%ax1YJy_jRjr(+4Iqi=#)67L-!`VHmCmf?%^!>TOD?L8a6( zV@y|Kn!VYVcE@8h7{cN7-yzd0n+32nD`-|A5G>)u9di@Z%Mk`ge-ZtuH6SJs3B$~P z#>~I_{`bFsAzJ^N9=CkvW@a%oG?ZcHo+yfXYPH&mD2g^jQ8cKvzDH}l${5oFKz1a} z{2(Go8I$68{Y9K`o|L9ikW!+XOpTw{z`V~knF%mri2q9o?u>1ZdyDt{}e zMi`y`E|8zP>=Y=B1Is12j>B4+&yJ0ab;vOXcf^d$%yjth;k4s8UA0=RJBp&-D2i4D zL9kY9y;f_z7QjklO!`tjjyE%e5RkGpS45(WQGX9N);+9L0g&^^6my_Q!K&<=^4i4r@rBXpD)e}Y0l6t*97>40`X5L_o zSX2>{~&hMD=e5TXP?5m7)yEQClg^Ib%=*+F*QJ%ufWAB;|l zVCgudJ)choKxo19vM)39uXM;UKknGUGZ)M(PMkQA4a2ZoYn`vx>-|cp^$+qp`K^W!LQ5&n5z%qmwvSqt^_t^2M~yKfmSs&kj#H}DYBSG1`>cNEnP+(4 zzI`&A&64l?luD($RK_F6iTxd;!_(DG zJwN@4r?!6f|18Fhyjk(4CdgbcGo3hbBBzvE8wA0RYpvHQrFz0J%qgX^#+dFz`S*=6 z0st-Y5{&@_M08S0`HJuR2h!>EcWm1}4dDEZ@>aic{@Z=ez4C<*o-O_Gaih4#Mw}<2 zuk84_&;Q$Y+CDcuvV%6fr3f+~n3)b9JZK>awRc_DtJP{fK@bcOQ9&t{H^yX{ISU}q z%-zPA0)RXKKiN+p4s0X<#LOWPO#v7qq7i03Pef;!`LvYsjbgDl(cj-6?%%&ZxY<^t zlPC9jYUMIsL)Ryr-YR&@6XbH(y?eLZx^=5luh;EbttM^T7PVSU)M_=dZCgZ9