From 6146287cb3dac27691895f99c7f9bf3215730bd9 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Wed, 11 May 2011 17:35:46 +0200 Subject: [PATCH] Squashed commit of changes from the 4.8-temp branch. --- doc/src/images/qml-listview-snippet.png | Bin 0 -> 2048 bytes doc/src/snippets/declarative/grid/grid-items.qml | 58 ++ .../snippets/declarative/grid/grid-no-spacing.qml | 57 ++ doc/src/snippets/declarative/grid/grid-spacing.qml | 60 ++ .../declarative/listview/listview-snippet.qml | 52 ++ .../declarative/qml-intro/images/qt-logo.svg | 104 +++ .../basics/color-animation/coloranimation.desktop | 11 + .../basics/color-animation/coloranimation.png | Bin 0 -> 3400 bytes .../basics/color-animation/coloranimation.pro | 39 + .../basics/color-animation/coloranimation.svg | 93 +++ .../animation/basics/color-animation/main.cpp | 14 + .../basics/color-animation/qml/basics.qmlproject | 16 + .../basics/color-animation/qml/color-animation.qml | 110 +++ .../color-animation/qml/images/face-smile.png | Bin 0 -> 15408 bytes .../basics/color-animation/qml/images/moon.png | Bin 0 -> 2433 bytes .../basics/color-animation/qml/images/shadow.png | Bin 0 -> 425 bytes .../basics/color-animation/qml/images/star.png | Bin 0 -> 349 bytes .../basics/color-animation/qml/images/sun.png | Bin 0 -> 8153 bytes .../color-animation/qml/property-animation.qml | 105 +++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../animation/basics/property-animation/main.cpp | 14 + .../property-animation/propertyanimation.desktop | 11 + .../property-animation/propertyanimation.png | Bin 0 -> 3400 bytes .../property-animation/propertyanimation.pro | 39 + .../property-animation/propertyanimation.svg | 93 +++ .../property-animation/qml/basics.qmlproject | 16 + .../property-animation/qml/color-animation.qml | 110 +++ .../property-animation/qml/images/face-smile.png | Bin 0 -> 15408 bytes .../basics/property-animation/qml/images/moon.png | Bin 0 -> 2433 bytes .../property-animation/qml/images/shadow.png | Bin 0 -> 425 bytes .../basics/property-animation/qml/images/star.png | Bin 0 -> 349 bytes .../basics/property-animation/qml/images/sun.png | Bin 0 -> 8153 bytes .../property-animation/qml/property-animation.qml | 105 +++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../qtc_packaging/debian_fremantle/README | 6 + .../qtc_packaging/debian_fremantle/changelog | 5 + .../qtc_packaging/debian_fremantle/compat | 1 + .../qtc_packaging/debian_fremantle/control | 13 + .../qtc_packaging/debian_fremantle/copyright | 40 + .../qtc_packaging/debian_fremantle/rules | 91 ++ .../behavior-example/behaviorexample.desktop | 11 + .../behaviors/behavior-example/behaviorexample.png | Bin 0 -> 3400 bytes .../behaviors/behavior-example/behaviorexample.pro | 39 + .../behaviors/behavior-example/behaviorexample.svg | 93 +++ .../animation/behaviors/behavior-example/main.cpp | 14 + .../behaviors/behavior-example/qml/SideRect.qml | 62 ++ .../behavior-example/qml/behavior-example.qml | 118 +++ .../behavior-example/qml/behaviors.qmlproject | 16 + .../behaviors/behavior-example/qml/wigglytext.qml | 108 +++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/animation/easing/easing.desktop | 11 + examples/declarative/animation/easing/easing.png | Bin 0 -> 3400 bytes examples/declarative/animation/easing/easing.pro | 39 + examples/declarative/animation/easing/easing.svg | 93 +++ examples/declarative/animation/easing/main.cpp | 14 + .../animation/easing/qml/content/QuitButton.qml | 52 ++ .../animation/easing/qml/content/quit.png | Bin 0 -> 583 bytes .../declarative/animation/easing/qml/easing.qml | 159 ++++ .../animation/easing/qml/easing.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ examples/declarative/animation/states/main.cpp | 14 + .../declarative/animation/states/qml/qt-logo.png | Bin 0 -> 5149 bytes .../declarative/animation/states/qml/states.qml | 101 +++ .../animation/states/qml/states.qmlproject | 16 + .../animation/states/qml/transitions.qml | 130 +++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/animation/states/states.desktop | 11 + examples/declarative/animation/states/states.png | Bin 0 -> 3400 bytes examples/declarative/animation/states/states.pro | 39 + examples/declarative/animation/states/states.svg | 93 +++ .../demos/calculator/calculator.desktop | 11 + .../declarative/demos/calculator/calculator.png | Bin 0 -> 3400 bytes .../declarative/demos/calculator/calculator.pro | 39 + .../declarative/demos/calculator/calculator.svg | 93 +++ examples/declarative/demos/calculator/main.cpp | 14 + .../demos/calculator/qml/Core/Button.qml | 80 ++ .../demos/calculator/qml/Core/Display.qml | 68 ++ .../demos/calculator/qml/Core/calculator.js | 91 ++ .../demos/calculator/qml/Core/images/button-.png | Bin 0 -> 1288 bytes .../calculator/qml/Core/images/button-blue.png | Bin 0 -> 1565 bytes .../calculator/qml/Core/images/button-green.png | Bin 0 -> 1543 bytes .../calculator/qml/Core/images/button-purple.png | Bin 0 -> 1566 bytes .../calculator/qml/Core/images/button-red.png | Bin 0 -> 1586 bytes .../demos/calculator/qml/Core/images/display.png | Bin 0 -> 998 bytes .../declarative/demos/calculator/qml/Core/qmldir | 2 + .../demos/calculator/qml/calculator.qml | 158 ++++ .../demos/calculator/qml/calculator.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ examples/declarative/demos/flickr/flickr.desktop | 11 + examples/declarative/demos/flickr/flickr.png | Bin 0 -> 3400 bytes examples/declarative/demos/flickr/flickr.pro | 39 + examples/declarative/demos/flickr/flickr.svg | 93 +++ examples/declarative/demos/flickr/main.cpp | 14 + .../demos/flickr/qml/common/Progress.qml | 73 ++ .../demos/flickr/qml/common/RssModel.qml | 66 ++ .../demos/flickr/qml/common/ScrollBar.qml | 81 ++ .../declarative/demos/flickr/qml/common/Slider.qml | 91 ++ .../declarative/demos/flickr/qml/common/qmldir | 10 + .../declarative/demos/flickr/qml/flickr-90.qml | 52 ++ examples/declarative/demos/flickr/qml/flickr.qml | 125 +++ .../declarative/demos/flickr/qml/flickr.qmlproject | 16 + .../declarative/demos/flickr/qml/mobile/Button.qml | 79 ++ .../demos/flickr/qml/mobile/GridDelegate.qml | 111 +++ .../demos/flickr/qml/mobile/ImageDetails.qml | 186 +++++ .../demos/flickr/qml/mobile/ListDelegate.qml | 64 ++ .../demos/flickr/qml/mobile/TitleBar.qml | 128 +++ .../demos/flickr/qml/mobile/ToolBar.qml | 69 ++ .../demos/flickr/qml/mobile/images/gloss.png | Bin 0 -> 1236 bytes .../demos/flickr/qml/mobile/images/lineedit.png | Bin 0 -> 1415 bytes .../demos/flickr/qml/mobile/images/lineedit.sci | 5 + .../demos/flickr/qml/mobile/images/quit.png | Bin 0 -> 2369 bytes .../demos/flickr/qml/mobile/images/stripes.png | Bin 0 -> 257 bytes .../demos/flickr/qml/mobile/images/titlebar.png | Bin 0 -> 1436 bytes .../demos/flickr/qml/mobile/images/titlebar.sci | 5 + .../demos/flickr/qml/mobile/images/toolbutton.png | Bin 0 -> 2550 bytes .../demos/flickr/qml/mobile/images/toolbutton.sci | 5 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ examples/declarative/demos/photoviewer/main.cpp | 14 + .../demos/photoviewer/photoviewer.desktop | 11 + .../declarative/demos/photoviewer/photoviewer.png | Bin 0 -> 3400 bytes .../declarative/demos/photoviewer/photoviewer.pro | 39 + .../declarative/demos/photoviewer/photoviewer.svg | 93 +++ .../qml/PhotoViewerCore/AlbumDelegate.qml | 146 ++++ .../qml/PhotoViewerCore/BusyIndicator.qml | 50 ++ .../photoviewer/qml/PhotoViewerCore/Button.qml | 72 ++ .../qml/PhotoViewerCore/EditableButton.qml | 86 ++ .../qml/PhotoViewerCore/PhotoDelegate.qml | 188 +++++ .../qml/PhotoViewerCore/ProgressBar.qml | 57 ++ .../photoviewer/qml/PhotoViewerCore/RssModel.qml | 54 ++ .../demos/photoviewer/qml/PhotoViewerCore/Tag.qml | 91 ++ .../qml/PhotoViewerCore/images/box-shadow.png | Bin 0 -> 588 bytes .../qml/PhotoViewerCore/images/busy.png | Bin 0 -> 2629 bytes .../qml/PhotoViewerCore/images/cardboard.png | Bin 0 -> 8844 bytes .../demos/photoviewer/qml/PhotoViewerCore/qmldir | 8 + .../qml/PhotoViewerCore/script/script.js | 27 + .../declarative/demos/photoviewer/qml/i18n/base.ts | 30 + .../demos/photoviewer/qml/i18n/qml_fr.ts | 30 + .../demos/photoviewer/qml/photoviewer.qml | 110 +++ .../demos/photoviewer/qml/photoviewer.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ examples/declarative/demos/rssnews/main.cpp | 14 + .../demos/rssnews/qml/content/BusyIndicator.qml | 53 ++ .../demos/rssnews/qml/content/CategoryDelegate.qml | 82 ++ .../demos/rssnews/qml/content/NewsDelegate.qml | 71 ++ .../demos/rssnews/qml/content/RssFeeds.qml | 59 ++ .../demos/rssnews/qml/content/ScrollBar.qml | 107 +++ .../demos/rssnews/qml/content/images/busy.png | Bin 0 -> 2629 bytes .../demos/rssnews/qml/content/images/scrollbar.png | Bin 0 -> 161 bytes examples/declarative/demos/rssnews/qml/rssnews.qml | 111 +++ .../demos/rssnews/qml/rssnews.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ examples/declarative/demos/rssnews/rssnews.desktop | 11 + examples/declarative/demos/rssnews/rssnews.png | Bin 0 -> 3400 bytes examples/declarative/demos/rssnews/rssnews.pro | 39 + examples/declarative/demos/rssnews/rssnews.svg | 93 +++ examples/declarative/demos/samegame/main.cpp | 14 + .../demos/samegame/qml/SamegameCore/BoomBlock.qml | 109 +++ .../demos/samegame/qml/SamegameCore/Button.qml | 75 ++ .../demos/samegame/qml/SamegameCore/Dialog.qml | 77 ++ .../samegame/qml/SamegameCore/pics/background.png | Bin 0 -> 313930 bytes .../samegame/qml/SamegameCore/pics/blueStar.png | Bin 0 -> 278 bytes .../samegame/qml/SamegameCore/pics/blueStone.png | Bin 0 -> 3054 bytes .../samegame/qml/SamegameCore/pics/greenStar.png | Bin 0 -> 273 bytes .../samegame/qml/SamegameCore/pics/greenStone.png | Bin 0 -> 2932 bytes .../samegame/qml/SamegameCore/pics/redStar.png | Bin 0 -> 274 bytes .../samegame/qml/SamegameCore/pics/redStone.png | Bin 0 -> 2902 bytes .../demos/samegame/qml/SamegameCore/pics/star.png | Bin 0 -> 262 bytes .../samegame/qml/SamegameCore/pics/yellowStone.png | Bin 0 -> 3056 bytes .../demos/samegame/qml/SamegameCore/qmldir | 3 + .../demos/samegame/qml/SamegameCore/samegame.js | 238 ++++++ .../demos/samegame/qml/highscores/README | 1 + .../demos/samegame/qml/highscores/score_data.xml | 2 + .../demos/samegame/qml/highscores/score_style.xsl | 28 + .../demos/samegame/qml/highscores/scores.php | 34 + .../declarative/demos/samegame/qml/samegame.qml | 161 ++++ .../demos/samegame/qml/samegame.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/demos/samegame/samegame.desktop | 11 + examples/declarative/demos/samegame/samegame.png | Bin 0 -> 3400 bytes examples/declarative/demos/samegame/samegame.pro | 39 + examples/declarative/demos/samegame/samegame.svg | 93 +++ examples/declarative/demos/twitter/main.cpp | 14 + .../demos/twitter/qml/TwitterCore/Button.qml | 90 ++ .../demos/twitter/qml/TwitterCore/FatDelegate.qml | 105 +++ .../demos/twitter/qml/TwitterCore/Input.qml | 65 ++ .../demos/twitter/qml/TwitterCore/Loading.qml | 49 ++ .../twitter/qml/TwitterCore/MultiTitleBar.qml | 60 ++ .../demos/twitter/qml/TwitterCore/RssModel.qml | 76 ++ .../demos/twitter/qml/TwitterCore/SearchView.qml | 124 +++ .../demos/twitter/qml/TwitterCore/TitleBar.qml | 130 +++ .../demos/twitter/qml/TwitterCore/ToolBar.qml | 64 ++ .../demos/twitter/qml/TwitterCore/UserModel.qml | 65 ++ .../demos/twitter/qml/TwitterCore/images/gloss.png | Bin 0 -> 1236 bytes .../twitter/qml/TwitterCore/images/lineedit.png | Bin 0 -> 1415 bytes .../twitter/qml/TwitterCore/images/lineedit.sci | 5 + .../twitter/qml/TwitterCore/images/loading.png | Bin 0 -> 813 bytes .../demos/twitter/qml/TwitterCore/images/quit.png | Bin 0 -> 2369 bytes .../twitter/qml/TwitterCore/images/stripes.png | Bin 0 -> 257 bytes .../twitter/qml/TwitterCore/images/titlebar.png | Bin 0 -> 1436 bytes .../twitter/qml/TwitterCore/images/titlebar.sci | 5 + .../twitter/qml/TwitterCore/images/toolbutton.png | Bin 0 -> 2550 bytes .../twitter/qml/TwitterCore/images/toolbutton.sci | 5 + .../demos/twitter/qml/TwitterCore/qmldir | 10 + examples/declarative/demos/twitter/qml/twitter.qml | 134 +++ .../demos/twitter/qml/twitter.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ examples/declarative/demos/twitter/twitter.desktop | 11 + examples/declarative/demos/twitter/twitter.png | Bin 0 -> 3400 bytes examples/declarative/demos/twitter/twitter.pro | 39 + examples/declarative/demos/twitter/twitter.svg | 93 +++ examples/declarative/demos/webbrowser/main.cpp | 14 + .../demos/webbrowser/qml/content/Button.qml | 65 ++ .../webbrowser/qml/content/FlickableWebView.qml | 195 +++++ .../demos/webbrowser/qml/content/Header.qml | 150 ++++ .../demos/webbrowser/qml/content/ScrollBar.qml | 107 +++ .../demos/webbrowser/qml/content/UrlInput.qml | 96 +++ .../demos/webbrowser/qml/content/pics/display.png | Bin 0 -> 998 bytes .../webbrowser/qml/content/pics/edit-delete.png | Bin 0 -> 831 bytes .../qml/content/pics/go-jump-locationbar.png | Bin 0 -> 408 bytes .../webbrowser/qml/content/pics/go-next-view.png | Bin 0 -> 1310 bytes .../qml/content/pics/go-previous-view.png | Bin 0 -> 1080 bytes .../webbrowser/qml/content/pics/scrollbar.png | Bin 0 -> 161 bytes .../webbrowser/qml/content/pics/titlebar-bg.png | Bin 0 -> 213 bytes .../webbrowser/qml/content/pics/view-refresh.png | Bin 0 -> 2182 bytes .../demos/webbrowser/qml/webbrowser.qml | 79 ++ .../demos/webbrowser/qml/webbrowser.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../demos/webbrowser/webbrowser.desktop | 11 + .../declarative/demos/webbrowser/webbrowser.png | Bin 0 -> 3400 bytes .../declarative/demos/webbrowser/webbrowser.pro | 39 + .../declarative/demos/webbrowser/webbrowser.svg | 93 +++ examples/declarative/i18n/i18n.desktop | 11 + examples/declarative/i18n/i18n.png | Bin 0 -> 3400 bytes examples/declarative/i18n/i18n.pro | 39 + examples/declarative/i18n/i18n.svg | 93 +++ examples/declarative/i18n/main.cpp | 14 + examples/declarative/i18n/qml/i18n.qml | 78 ++ examples/declarative/i18n/qml/i18n.qmlproject | 16 + examples/declarative/i18n/qml/i18n/base.ts | 12 + examples/declarative/i18n/qml/i18n/qml_en_AU.ts | 12 + examples/declarative/i18n/qml/i18n/qml_fr.ts | 12 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../imageelements/borderimage/borderimage.desktop | 11 + .../imageelements/borderimage/borderimage.png | Bin 0 -> 3400 bytes .../imageelements/borderimage/borderimage.pro | 39 + .../imageelements/borderimage/borderimage.svg | 93 +++ .../declarative/imageelements/borderimage/main.cpp | 14 + .../imageelements/borderimage/qml/borderimage.qml | 97 +++ .../borderimage/qml/borderimage.qmlproject | 16 + .../borderimage/qml/content/MyBorderImage.qml | 90 ++ .../borderimage/qml/content/ShadowRectangle.qml | 54 ++ .../imageelements/borderimage/qml/content/bw.png | Bin 0 -> 1357 bytes .../borderimage/qml/content/colors-round.sci | 7 + .../borderimage/qml/content/colors-stretch.sci | 5 + .../borderimage/qml/content/colors.png | Bin 0 -> 1655 bytes .../borderimage/qml/content/shadow.png | Bin 0 -> 588 bytes .../imageelements/borderimage/qml/shadows.qml | 64 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../qtc_packaging/debian_fremantle/README | 6 + .../qtc_packaging/debian_fremantle/changelog | 5 + .../qtc_packaging/debian_fremantle/compat | 1 + .../qtc_packaging/debian_fremantle/control | 13 + .../qtc_packaging/debian_fremantle/copyright | 40 + .../qtc_packaging/debian_fremantle/rules | 91 ++ .../declarative/imageelements/image/image.desktop | 11 + examples/declarative/imageelements/image/image.png | Bin 0 -> 3400 bytes examples/declarative/imageelements/image/image.pro | 39 + examples/declarative/imageelements/image/image.svg | 93 +++ examples/declarative/imageelements/image/main.cpp | 14 + .../imageelements/image/qml/ImageCell.qml | 60 ++ .../declarative/imageelements/image/qml/image.qml | 66 ++ .../imageelements/image/qml/image.qmlproject | 16 + .../imageelements/image/qml/qt-logo.png | Bin 0 -> 5149 bytes .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/imageelements/shadows/main.cpp | 14 + .../imageelements/shadows/qml/borderimage.qml | 97 +++ .../shadows/qml/borderimage.qmlproject | 16 + .../shadows/qml/content/MyBorderImage.qml | 90 ++ .../shadows/qml/content/ShadowRectangle.qml | 54 ++ .../imageelements/shadows/qml/content/bw.png | Bin 0 -> 1357 bytes .../shadows/qml/content/colors-round.sci | 7 + .../shadows/qml/content/colors-stretch.sci | 5 + .../imageelements/shadows/qml/content/colors.png | Bin 0 -> 1655 bytes .../imageelements/shadows/qml/content/shadow.png | Bin 0 -> 588 bytes .../imageelements/shadows/qml/shadows.qml | 64 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../imageelements/shadows/shadows.desktop | 11 + .../declarative/imageelements/shadows/shadows.png | Bin 0 -> 3400 bytes .../declarative/imageelements/shadows/shadows.pro | 39 + .../declarative/imageelements/shadows/shadows.svg | 93 +++ .../declarative/keyinteraction/focus/focus.desktop | 11 + .../declarative/keyinteraction/focus/focus.png | Bin 0 -> 3400 bytes .../declarative/keyinteraction/focus/focus.pro | 39 + .../declarative/keyinteraction/focus/focus.svg | 93 +++ examples/declarative/keyinteraction/focus/main.cpp | 14 + .../keyinteraction/focus/qml/Core/ContextMenu.qml | 65 ++ .../keyinteraction/focus/qml/Core/GridMenu.qml | 105 +++ .../keyinteraction/focus/qml/Core/ListMenu.qml | 105 +++ .../focus/qml/Core/ListViewDelegate.qml | 85 ++ .../keyinteraction/focus/qml/Core/images/arrow.png | Bin 0 -> 583 bytes .../focus/qml/Core/images/qt-logo.png | Bin 0 -> 5149 bytes .../declarative/keyinteraction/focus/qml/focus.qml | 111 +++ .../keyinteraction/focus/qml/focus.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../modelviews/Delegate/Delegate.desktop | 11 + .../declarative/modelviews/Delegate/Delegate.png | Bin 0 -> 3400 bytes .../declarative/modelviews/Delegate/Delegate.pro | 39 + .../declarative/modelviews/Delegate/Delegate.svg | 93 +++ examples/declarative/modelviews/Delegate/main.cpp | 14 + .../modelviews/Delegate/qml/Delegate.qml | 88 ++ .../modelviews/Delegate/qml/package.qmlproject | 16 + .../declarative/modelviews/Delegate/qml/view.qml | 76 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../gridview-example/gridviewexample.desktop | 11 + .../gridview-example/gridviewexample.png | Bin 0 -> 3400 bytes .../gridview-example/gridviewexample.pro | 39 + .../gridview-example/gridviewexample.svg | 93 +++ .../modelviews/gridview-example/main.cpp | 14 + .../gridview-example/qml/gridview-example.qml | 89 ++ .../gridview-example/qml/gridview.qmlproject | 16 + .../gridview-example/qml/pics/AddressBook_48.png | Bin 0 -> 3350 bytes .../gridview-example/qml/pics/AudioPlayer_48.png | Bin 0 -> 3806 bytes .../gridview-example/qml/pics/Camera_48.png | Bin 0 -> 3540 bytes .../gridview-example/qml/pics/DateBook_48.png | Bin 0 -> 2610 bytes .../gridview-example/qml/pics/EMail_48.png | Bin 0 -> 3655 bytes .../gridview-example/qml/pics/TodoList_48.png | Bin 0 -> 3429 bytes .../gridview-example/qml/pics/VideoPlayer_48.png | Bin 0 -> 4151 bytes .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../listview/dynamiclist/dynamiclist.desktop | 11 + .../listview/dynamiclist/dynamiclist.png | Bin 0 -> 3400 bytes .../listview/dynamiclist/dynamiclist.pro | 39 + .../listview/dynamiclist/dynamiclist.svg | 93 +++ .../modelviews/listview/dynamiclist/main.cpp | 14 + .../listview/dynamiclist/qml/content/PetsModel.qml | 98 +++ .../dynamiclist/qml/content/PressAndHoldButton.qml | 82 ++ .../dynamiclist/qml/content/RecipesModel.qml | 129 +++ .../dynamiclist/qml/content/TextButton.qml | 78 ++ .../dynamiclist/qml/content/pics/arrow-down.png | Bin 0 -> 594 bytes .../dynamiclist/qml/content/pics/arrow-up.png | Bin 0 -> 692 bytes .../dynamiclist/qml/content/pics/fruit-salad.jpg | Bin 0 -> 17952 bytes .../dynamiclist/qml/content/pics/hamburger.jpg | Bin 0 -> 8572 bytes .../dynamiclist/qml/content/pics/lemonade.jpg | Bin 0 -> 6645 bytes .../dynamiclist/qml/content/pics/list-delete.png | Bin 0 -> 831 bytes .../dynamiclist/qml/content/pics/minus-sign.png | Bin 0 -> 250 bytes .../dynamiclist/qml/content/pics/moreDown.png | Bin 0 -> 217 bytes .../dynamiclist/qml/content/pics/moreUp.png | Bin 0 -> 212 bytes .../dynamiclist/qml/content/pics/pancakes.jpg | Bin 0 -> 9163 bytes .../dynamiclist/qml/content/pics/plus-sign.png | Bin 0 -> 462 bytes .../qml/content/pics/vegetable-soup.jpg | Bin 0 -> 8639 bytes .../listview/dynamiclist/qml/dynamiclist.qml | 203 +++++ .../dynamiclist/qml/expandingdelegates.qml | 202 +++++ .../listview/dynamiclist/qml/highlight.qml | 99 +++ .../listview/dynamiclist/qml/highlightranges.qml | 122 +++ .../listview/dynamiclist/qml/listview.qmlproject | 16 + .../listview/dynamiclist/qml/sections.qml | 87 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../expandingdelegates/expandingdelegates.desktop | 11 + .../expandingdelegates/expandingdelegates.png | Bin 0 -> 3400 bytes .../expandingdelegates/expandingdelegates.pro | 39 + .../expandingdelegates/expandingdelegates.svg | 93 +++ .../listview/expandingdelegates/main.cpp | 14 + .../expandingdelegates/qml/content/PetsModel.qml | 98 +++ .../qml/content/PressAndHoldButton.qml | 82 ++ .../qml/content/RecipesModel.qml | 129 +++ .../expandingdelegates/qml/content/TextButton.qml | 78 ++ .../qml/content/pics/arrow-down.png | Bin 0 -> 594 bytes .../qml/content/pics/arrow-up.png | Bin 0 -> 692 bytes .../qml/content/pics/fruit-salad.jpg | Bin 0 -> 17952 bytes .../qml/content/pics/hamburger.jpg | Bin 0 -> 8572 bytes .../qml/content/pics/lemonade.jpg | Bin 0 -> 6645 bytes .../qml/content/pics/list-delete.png | Bin 0 -> 831 bytes .../qml/content/pics/minus-sign.png | Bin 0 -> 250 bytes .../qml/content/pics/moreDown.png | Bin 0 -> 217 bytes .../expandingdelegates/qml/content/pics/moreUp.png | Bin 0 -> 212 bytes .../qml/content/pics/pancakes.jpg | Bin 0 -> 9163 bytes .../qml/content/pics/plus-sign.png | Bin 0 -> 462 bytes .../qml/content/pics/vegetable-soup.jpg | Bin 0 -> 8639 bytes .../expandingdelegates/qml/dynamiclist.qml | 203 +++++ .../expandingdelegates/qml/expandingdelegates.qml | 202 +++++ .../listview/expandingdelegates/qml/highlight.qml | 99 +++ .../expandingdelegates/qml/highlightranges.qml | 122 +++ .../expandingdelegates/qml/listview.qmlproject | 16 + .../listview/expandingdelegates/qml/sections.qml | 87 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../qtc_packaging/debian_fremantle/README | 6 + .../qtc_packaging/debian_fremantle/changelog | 5 + .../qtc_packaging/debian_fremantle/compat | 1 + .../qtc_packaging/debian_fremantle/control | 13 + .../qtc_packaging/debian_fremantle/copyright | 40 + .../qtc_packaging/debian_fremantle/rules | 91 ++ .../listview/highlight/highlight.desktop | 11 + .../modelviews/listview/highlight/highlight.png | Bin 0 -> 3400 bytes .../modelviews/listview/highlight/highlight.pro | 39 + .../modelviews/listview/highlight/highlight.svg | 93 +++ .../modelviews/listview/highlight/main.cpp | 14 + .../listview/highlight/qml/content/PetsModel.qml | 98 +++ .../highlight/qml/content/PressAndHoldButton.qml | 82 ++ .../highlight/qml/content/RecipesModel.qml | 129 +++ .../listview/highlight/qml/content/TextButton.qml | 78 ++ .../highlight/qml/content/pics/arrow-down.png | Bin 0 -> 594 bytes .../highlight/qml/content/pics/arrow-up.png | Bin 0 -> 692 bytes .../highlight/qml/content/pics/fruit-salad.jpg | Bin 0 -> 17952 bytes .../highlight/qml/content/pics/hamburger.jpg | Bin 0 -> 8572 bytes .../highlight/qml/content/pics/lemonade.jpg | Bin 0 -> 6645 bytes .../highlight/qml/content/pics/list-delete.png | Bin 0 -> 831 bytes .../highlight/qml/content/pics/minus-sign.png | Bin 0 -> 250 bytes .../highlight/qml/content/pics/moreDown.png | Bin 0 -> 217 bytes .../listview/highlight/qml/content/pics/moreUp.png | Bin 0 -> 212 bytes .../highlight/qml/content/pics/pancakes.jpg | Bin 0 -> 9163 bytes .../highlight/qml/content/pics/plus-sign.png | Bin 0 -> 462 bytes .../highlight/qml/content/pics/vegetable-soup.jpg | Bin 0 -> 8639 bytes .../listview/highlight/qml/dynamiclist.qml | 203 +++++ .../listview/highlight/qml/expandingdelegates.qml | 202 +++++ .../listview/highlight/qml/highlight.qml | 99 +++ .../listview/highlight/qml/highlightranges.qml | 122 +++ .../listview/highlight/qml/listview.qmlproject | 16 + .../modelviews/listview/highlight/qml/sections.qml | 87 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../qtc_packaging/debian_fremantle/README | 6 + .../qtc_packaging/debian_fremantle/changelog | 5 + .../qtc_packaging/debian_fremantle/compat | 1 + .../qtc_packaging/debian_fremantle/control | 13 + .../qtc_packaging/debian_fremantle/copyright | 40 + .../highlight/qtc_packaging/debian_fremantle/rules | 91 ++ .../highlightranges/highlightranges.desktop | 11 + .../listview/highlightranges/highlightranges.png | Bin 0 -> 3400 bytes .../listview/highlightranges/highlightranges.pro | 39 + .../listview/highlightranges/highlightranges.svg | 93 +++ .../modelviews/listview/highlightranges/main.cpp | 14 + .../highlightranges/qml/content/PetsModel.qml | 98 +++ .../qml/content/PressAndHoldButton.qml | 82 ++ .../highlightranges/qml/content/RecipesModel.qml | 129 +++ .../highlightranges/qml/content/TextButton.qml | 78 ++ .../qml/content/pics/arrow-down.png | Bin 0 -> 594 bytes .../highlightranges/qml/content/pics/arrow-up.png | Bin 0 -> 692 bytes .../qml/content/pics/fruit-salad.jpg | Bin 0 -> 17952 bytes .../highlightranges/qml/content/pics/hamburger.jpg | Bin 0 -> 8572 bytes .../highlightranges/qml/content/pics/lemonade.jpg | Bin 0 -> 6645 bytes .../qml/content/pics/list-delete.png | Bin 0 -> 831 bytes .../qml/content/pics/minus-sign.png | Bin 0 -> 250 bytes .../highlightranges/qml/content/pics/moreDown.png | Bin 0 -> 217 bytes .../highlightranges/qml/content/pics/moreUp.png | Bin 0 -> 212 bytes .../highlightranges/qml/content/pics/pancakes.jpg | Bin 0 -> 9163 bytes .../highlightranges/qml/content/pics/plus-sign.png | Bin 0 -> 462 bytes .../qml/content/pics/vegetable-soup.jpg | Bin 0 -> 8639 bytes .../listview/highlightranges/qml/dynamiclist.qml | 203 +++++ .../highlightranges/qml/expandingdelegates.qml | 202 +++++ .../listview/highlightranges/qml/highlight.qml | 99 +++ .../highlightranges/qml/highlightranges.qml | 122 +++ .../highlightranges/qml/listview.qmlproject | 16 + .../listview/highlightranges/qml/sections.qml | 87 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../modelviews/listview/sections/main.cpp | 14 + .../listview/sections/qml/content/PetsModel.qml | 98 +++ .../sections/qml/content/PressAndHoldButton.qml | 82 ++ .../listview/sections/qml/content/RecipesModel.qml | 129 +++ .../listview/sections/qml/content/TextButton.qml | 78 ++ .../sections/qml/content/pics/arrow-down.png | Bin 0 -> 594 bytes .../sections/qml/content/pics/arrow-up.png | Bin 0 -> 692 bytes .../sections/qml/content/pics/fruit-salad.jpg | Bin 0 -> 17952 bytes .../sections/qml/content/pics/hamburger.jpg | Bin 0 -> 8572 bytes .../sections/qml/content/pics/lemonade.jpg | Bin 0 -> 6645 bytes .../sections/qml/content/pics/list-delete.png | Bin 0 -> 831 bytes .../sections/qml/content/pics/minus-sign.png | Bin 0 -> 250 bytes .../sections/qml/content/pics/moreDown.png | Bin 0 -> 217 bytes .../listview/sections/qml/content/pics/moreUp.png | Bin 0 -> 212 bytes .../sections/qml/content/pics/pancakes.jpg | Bin 0 -> 9163 bytes .../sections/qml/content/pics/plus-sign.png | Bin 0 -> 462 bytes .../sections/qml/content/pics/vegetable-soup.jpg | Bin 0 -> 8639 bytes .../listview/sections/qml/dynamiclist.qml | 203 +++++ .../listview/sections/qml/expandingdelegates.qml | 202 +++++ .../modelviews/listview/sections/qml/highlight.qml | 99 +++ .../listview/sections/qml/highlightranges.qml | 122 +++ .../listview/sections/qml/listview.qmlproject | 16 + .../modelviews/listview/sections/qml/sections.qml | 87 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../modelviews/listview/sections/sections.desktop | 11 + .../modelviews/listview/sections/sections.png | Bin 0 -> 3400 bytes .../modelviews/listview/sections/sections.pro | 39 + .../modelviews/listview/sections/sections.svg | 93 +++ .../modelviews/pathview-example/main.cpp | 14 + .../pathview-example/pathviewexample.desktop | 11 + .../pathview-example/pathviewexample.png | Bin 0 -> 3400 bytes .../pathview-example/pathviewexample.pro | 39 + .../pathview-example/pathviewexample.svg | 93 +++ .../pathview-example/qml/pathview-example.qml | 109 +++ .../pathview-example/qml/pathview.qmlproject | 16 + .../pathview-example/qml/pics/AddressBook_48.png | Bin 0 -> 3350 bytes .../pathview-example/qml/pics/AudioPlayer_48.png | Bin 0 -> 3806 bytes .../pathview-example/qml/pics/Camera_48.png | Bin 0 -> 3540 bytes .../pathview-example/qml/pics/DateBook_48.png | Bin 0 -> 2610 bytes .../pathview-example/qml/pics/EMail_48.png | Bin 0 -> 3655 bytes .../pathview-example/qml/pics/TodoList_48.png | Bin 0 -> 3429 bytes .../pathview-example/qml/pics/VideoPlayer_48.png | Bin 0 -> 4151 bytes .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../qtc_packaging/debian_fremantle/README | 6 + .../qtc_packaging/debian_fremantle/changelog | 5 + .../qtc_packaging/debian_fremantle/compat | 1 + .../qtc_packaging/debian_fremantle/control | 13 + .../qtc_packaging/debian_fremantle/copyright | 40 + .../qtc_packaging/debian_fremantle/rules | 91 ++ .../modelviews/visualitemmodel/main.cpp | 14 + .../visualitemmodel/qml/visualitemmodel.qml | 107 +++ .../visualitemmodel/qml/visualitemmodel.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../visualitemmodel/visualitemmodel.desktop | 11 + .../modelviews/visualitemmodel/visualitemmodel.png | Bin 0 -> 3400 bytes .../modelviews/visualitemmodel/visualitemmodel.pro | 39 + .../modelviews/visualitemmodel/visualitemmodel.svg | 93 +++ .../modelviews/webview/alerts/alerts.desktop | 11 + .../modelviews/webview/alerts/alerts.png | Bin 0 -> 3400 bytes .../modelviews/webview/alerts/alerts.pro | 39 + .../modelviews/webview/alerts/alerts.svg | 93 +++ .../declarative/modelviews/webview/alerts/main.cpp | 14 + .../modelviews/webview/alerts/qml/alerts.html | 5 + .../modelviews/webview/alerts/qml/alerts.qml | 101 +++ .../modelviews/webview/alerts/qml/autosize.qml | 106 +++ .../webview/alerts/qml/content/Mapping/Map.qml | 73 ++ .../webview/alerts/qml/content/Mapping/map.html | 60 ++ .../webview/alerts/qml/content/pics/cancel.png | Bin 0 -> 1038 bytes .../webview/alerts/qml/content/pics/ok.png | Bin 0 -> 655 bytes .../modelviews/webview/alerts/qml/googlemaps.qml | 83 ++ .../modelviews/webview/alerts/qml/inlinehtml.qml | 55 ++ .../modelviews/webview/alerts/qml/newwindows.html | 3 + .../modelviews/webview/alerts/qml/newwindows.qml | 71 ++ .../webview/alerts/qml/webview.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../modelviews/webview/autosize/autosize.desktop | 11 + .../modelviews/webview/autosize/autosize.png | Bin 0 -> 3400 bytes .../modelviews/webview/autosize/autosize.pro | 39 + .../modelviews/webview/autosize/autosize.svg | 93 +++ .../modelviews/webview/autosize/main.cpp | 14 + .../modelviews/webview/autosize/qml/alerts.html | 5 + .../modelviews/webview/autosize/qml/alerts.qml | 101 +++ .../modelviews/webview/autosize/qml/autosize.qml | 106 +++ .../webview/autosize/qml/content/Mapping/Map.qml | 73 ++ .../webview/autosize/qml/content/Mapping/map.html | 60 ++ .../webview/autosize/qml/content/pics/cancel.png | Bin 0 -> 1038 bytes .../webview/autosize/qml/content/pics/ok.png | Bin 0 -> 655 bytes .../modelviews/webview/autosize/qml/googlemaps.qml | 83 ++ .../modelviews/webview/autosize/qml/inlinehtml.qml | 55 ++ .../webview/autosize/qml/newwindows.html | 3 + .../modelviews/webview/autosize/qml/newwindows.qml | 71 ++ .../webview/autosize/qml/webview.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../autosize/qtc_packaging/debian_fremantle/README | 6 + .../qtc_packaging/debian_fremantle/changelog | 5 + .../autosize/qtc_packaging/debian_fremantle/compat | 1 + .../qtc_packaging/debian_fremantle/control | 13 + .../qtc_packaging/debian_fremantle/copyright | 40 + .../autosize/qtc_packaging/debian_fremantle/rules | 91 ++ .../webview/googlemaps/googlemaps.desktop | 11 + .../modelviews/webview/googlemaps/googlemaps.png | Bin 0 -> 3400 bytes .../modelviews/webview/googlemaps/googlemaps.pro | 39 + .../modelviews/webview/googlemaps/googlemaps.svg | 93 +++ .../modelviews/webview/googlemaps/main.cpp | 14 + .../modelviews/webview/googlemaps/qml/alerts.html | 5 + .../modelviews/webview/googlemaps/qml/alerts.qml | 101 +++ .../modelviews/webview/googlemaps/qml/autosize.qml | 106 +++ .../webview/googlemaps/qml/content/Mapping/Map.qml | 73 ++ .../googlemaps/qml/content/Mapping/map.html | 60 ++ .../webview/googlemaps/qml/content/pics/cancel.png | Bin 0 -> 1038 bytes .../webview/googlemaps/qml/content/pics/ok.png | Bin 0 -> 655 bytes .../webview/googlemaps/qml/googlemaps.qml | 83 ++ .../webview/googlemaps/qml/inlinehtml.qml | 55 ++ .../webview/googlemaps/qml/newwindows.html | 3 + .../webview/googlemaps/qml/newwindows.qml | 71 ++ .../webview/googlemaps/qml/webview.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../qtc_packaging/debian_fremantle/README | 6 + .../qtc_packaging/debian_fremantle/changelog | 5 + .../qtc_packaging/debian_fremantle/compat | 1 + .../qtc_packaging/debian_fremantle/control | 13 + .../qtc_packaging/debian_fremantle/copyright | 40 + .../qtc_packaging/debian_fremantle/rules | 91 ++ .../webview/inlinehtml/inlinehtml.desktop | 11 + .../modelviews/webview/inlinehtml/inlinehtml.png | Bin 0 -> 3400 bytes .../modelviews/webview/inlinehtml/inlinehtml.pro | 39 + .../modelviews/webview/inlinehtml/inlinehtml.svg | 93 +++ .../modelviews/webview/inlinehtml/main.cpp | 14 + .../modelviews/webview/inlinehtml/qml/alerts.html | 5 + .../modelviews/webview/inlinehtml/qml/alerts.qml | 101 +++ .../modelviews/webview/inlinehtml/qml/autosize.qml | 106 +++ .../webview/inlinehtml/qml/content/Mapping/Map.qml | 73 ++ .../inlinehtml/qml/content/Mapping/map.html | 60 ++ .../webview/inlinehtml/qml/content/pics/cancel.png | Bin 0 -> 1038 bytes .../webview/inlinehtml/qml/content/pics/ok.png | Bin 0 -> 655 bytes .../webview/inlinehtml/qml/googlemaps.qml | 83 ++ .../webview/inlinehtml/qml/inlinehtml.qml | 55 ++ .../webview/inlinehtml/qml/newwindows.html | 3 + .../webview/inlinehtml/qml/newwindows.qml | 71 ++ .../webview/inlinehtml/qml/webview.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../qtc_packaging/debian_fremantle/README | 6 + .../qtc_packaging/debian_fremantle/changelog | 5 + .../qtc_packaging/debian_fremantle/compat | 1 + .../qtc_packaging/debian_fremantle/control | 13 + .../qtc_packaging/debian_fremantle/copyright | 40 + .../qtc_packaging/debian_fremantle/rules | 91 ++ .../modelviews/webview/newwindows/main.cpp | 14 + .../webview/newwindows/newwindows.desktop | 11 + .../modelviews/webview/newwindows/newwindows.png | Bin 0 -> 3400 bytes .../modelviews/webview/newwindows/newwindows.pro | 39 + .../modelviews/webview/newwindows/newwindows.svg | 93 +++ .../modelviews/webview/newwindows/qml/alerts.html | 5 + .../modelviews/webview/newwindows/qml/alerts.qml | 101 +++ .../modelviews/webview/newwindows/qml/autosize.qml | 106 +++ .../webview/newwindows/qml/content/Mapping/Map.qml | 73 ++ .../newwindows/qml/content/Mapping/map.html | 60 ++ .../webview/newwindows/qml/content/pics/cancel.png | Bin 0 -> 1038 bytes .../webview/newwindows/qml/content/pics/ok.png | Bin 0 -> 655 bytes .../webview/newwindows/qml/googlemaps.qml | 83 ++ .../webview/newwindows/qml/inlinehtml.qml | 55 ++ .../webview/newwindows/qml/newwindows.html | 3 + .../webview/newwindows/qml/newwindows.qml | 71 ++ .../webview/newwindows/qml/webview.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ examples/declarative/positioners/main.cpp | 14 + .../declarative/positioners/positioners.desktop | 11 + examples/declarative/positioners/positioners.png | Bin 0 -> 3400 bytes examples/declarative/positioners/positioners.pro | 39 + examples/declarative/positioners/positioners.svg | 93 +++ examples/declarative/positioners/qml/Button.qml | 78 ++ examples/declarative/positioners/qml/add.png | Bin 0 -> 810 bytes examples/declarative/positioners/qml/del.png | Bin 0 -> 488 bytes .../declarative/positioners/qml/positioners.qml | 253 ++++++ .../positioners/qml/positioners.qmlproject | 18 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../sqllocalstorage/sqllocalstorage.qmlproject | 16 + .../fonts/availableFonts/availableFonts.desktop | 11 + .../text/fonts/availableFonts/availableFonts.png | Bin 0 -> 3400 bytes .../text/fonts/availableFonts/availableFonts.pro | 39 + .../text/fonts/availableFonts/availableFonts.svg | 93 +++ .../declarative/text/fonts/availableFonts/main.cpp | 14 + .../fonts/availableFonts/qml/availableFonts.qml | 57 ++ .../text/fonts/availableFonts/qml/banner.qml | 61 ++ .../text/fonts/availableFonts/qml/fonts.qml | 104 +++ .../text/fonts/availableFonts/qml/fonts.qmlproject | 16 + .../availableFonts/qml/fonts/tarzeau_ocr_a.ttf | Bin 0 -> 24544 bytes .../text/fonts/availableFonts/qml/hello.qml | 79 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/text/fonts/banner/banner.desktop | 11 + examples/declarative/text/fonts/banner/banner.png | Bin 0 -> 3400 bytes examples/declarative/text/fonts/banner/banner.pro | 39 + examples/declarative/text/fonts/banner/banner.svg | 93 +++ examples/declarative/text/fonts/banner/main.cpp | 14 + .../text/fonts/banner/qml/availableFonts.qml | 57 ++ .../declarative/text/fonts/banner/qml/banner.qml | 61 ++ .../declarative/text/fonts/banner/qml/fonts.qml | 104 +++ .../text/fonts/banner/qml/fonts.qmlproject | 16 + .../text/fonts/banner/qml/fonts/tarzeau_ocr_a.ttf | Bin 0 -> 24544 bytes .../declarative/text/fonts/banner/qml/hello.qml | 79 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/text/fonts/fonts/fonts.desktop | 11 + examples/declarative/text/fonts/fonts/fonts.png | Bin 0 -> 3400 bytes examples/declarative/text/fonts/fonts/fonts.pro | 39 + examples/declarative/text/fonts/fonts/fonts.svg | 93 +++ examples/declarative/text/fonts/fonts/main.cpp | 14 + .../text/fonts/fonts/qml/availableFonts.qml | 57 ++ .../declarative/text/fonts/fonts/qml/banner.qml | 61 ++ .../declarative/text/fonts/fonts/qml/fonts.qml | 104 +++ .../text/fonts/fonts/qml/fonts.qmlproject | 16 + .../text/fonts/fonts/qml/fonts/tarzeau_ocr_a.ttf | Bin 0 -> 24544 bytes .../declarative/text/fonts/fonts/qml/hello.qml | 79 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/text/fonts/hello/hello.desktop | 11 + examples/declarative/text/fonts/hello/hello.png | Bin 0 -> 3400 bytes examples/declarative/text/fonts/hello/hello.pro | 39 + examples/declarative/text/fonts/hello/hello.svg | 93 +++ examples/declarative/text/fonts/hello/main.cpp | 14 + .../text/fonts/hello/qml/availableFonts.qml | 57 ++ .../declarative/text/fonts/hello/qml/banner.qml | 61 ++ .../declarative/text/fonts/hello/qml/fonts.qml | 104 +++ .../text/fonts/hello/qml/fonts.qmlproject | 16 + .../text/fonts/hello/qml/fonts/tarzeau_ocr_a.ttf | Bin 0 -> 24544 bytes .../declarative/text/fonts/hello/qml/hello.qml | 79 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ examples/declarative/text/textselection/main.cpp | 14 + .../text/textselection/qml/pics/endHandle.png | Bin 0 -> 185 bytes .../text/textselection/qml/pics/endHandle.sci | 5 + .../text/textselection/qml/pics/startHandle.png | Bin 0 -> 178 bytes .../text/textselection/qml/pics/startHandle.sci | 5 + .../text/textselection/qml/textselection.qml | 290 +++++++ .../textselection/qml/textselection.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../text/textselection/textselection.desktop | 11 + .../text/textselection/textselection.png | Bin 0 -> 3400 bytes .../text/textselection/textselection.pro | 39 + .../text/textselection/textselection.svg | 93 +++ .../experimentalgestures.desktop | 11 + .../experimental-gestures/experimentalgestures.png | Bin 0 -> 3400 bytes .../experimental-gestures/experimentalgestures.pro | 39 + .../experimental-gestures/experimentalgestures.svg | 93 +++ .../gestures/experimental-gestures/main.cpp | 14 + .../qml/experimental-gestures.qml | 76 ++ .../experimental-gestures/qml/gestures.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../mousearea/mousearea-example/main.cpp | 14 + .../mousearea-example/mouseareaexample.desktop | 11 + .../mousearea-example/mouseareaexample.png | Bin 0 -> 3400 bytes .../mousearea-example/mouseareaexample.pro | 39 + .../mousearea-example/mouseareaexample.svg | 93 +++ .../mousearea-example/qml/mousearea-example.qml | 112 +++ .../mousearea-example/qml/mousearea.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../touchinteraction/touchinteraction.pro | 4 + examples/declarative/toys/clocks/clocks.desktop | 11 + examples/declarative/toys/clocks/clocks.png | Bin 0 -> 3400 bytes examples/declarative/toys/clocks/clocks.pro | 39 + examples/declarative/toys/clocks/clocks.svg | 93 +++ examples/declarative/toys/clocks/main.cpp | 14 + examples/declarative/toys/clocks/qml/clocks.qml | 59 ++ .../declarative/toys/clocks/qml/clocks.qmlproject | 16 + .../declarative/toys/clocks/qml/content/Clock.qml | 124 +++ .../toys/clocks/qml/content/QuitButton.qml | 52 ++ .../toys/clocks/qml/content/background.png | Bin 0 -> 46895 bytes .../declarative/toys/clocks/qml/content/center.png | Bin 0 -> 765 bytes .../toys/clocks/qml/content/clock-night.png | Bin 0 -> 23359 bytes .../declarative/toys/clocks/qml/content/clock.png | Bin 0 -> 20653 bytes .../declarative/toys/clocks/qml/content/hour.png | Bin 0 -> 625 bytes .../declarative/toys/clocks/qml/content/minute.png | Bin 0 -> 625 bytes .../declarative/toys/clocks/qml/content/quit.png | Bin 0 -> 583 bytes .../declarative/toys/clocks/qml/content/second.png | Bin 0 -> 303 bytes .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/toys/corkboards/corkboards.desktop | 11 + .../declarative/toys/corkboards/corkboards.png | Bin 0 -> 3400 bytes .../declarative/toys/corkboards/corkboards.pro | 39 + .../declarative/toys/corkboards/corkboards.svg | 93 +++ examples/declarative/toys/corkboards/main.cpp | 14 + examples/declarative/toys/corkboards/qml/Day.qml | 153 ++++ examples/declarative/toys/corkboards/qml/cork.jpg | Bin 0 -> 149337 bytes .../declarative/toys/corkboards/qml/corkboards.qml | 115 +++ .../toys/corkboards/qml/corkboards.qmlproject | 16 + .../toys/corkboards/qml/note-yellow.png | Bin 0 -> 54559 bytes examples/declarative/toys/corkboards/qml/tack.png | Bin 0 -> 7282 bytes .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../toys/dynamicscene/dynamicscene.desktop | 11 + .../declarative/toys/dynamicscene/dynamicscene.png | Bin 0 -> 3400 bytes .../declarative/toys/dynamicscene/dynamicscene.pro | 39 + .../declarative/toys/dynamicscene/dynamicscene.svg | 93 +++ examples/declarative/toys/dynamicscene/main.cpp | 14 + .../toys/dynamicscene/qml/dynamicscene.qml | 223 +++++ .../toys/dynamicscene/qml/dynamicscene.qmlproject | 16 + .../declarative/toys/dynamicscene/qml/images/NOTE | 1 + .../toys/dynamicscene/qml/images/face-smile.png | Bin 0 -> 15408 bytes .../toys/dynamicscene/qml/images/moon.png | Bin 0 -> 1757 bytes .../toys/dynamicscene/qml/images/rabbit_brown.png | Bin 0 -> 1245 bytes .../toys/dynamicscene/qml/images/rabbit_bw.png | Bin 0 -> 1759 bytes .../toys/dynamicscene/qml/images/star.png | Bin 0 -> 349 bytes .../toys/dynamicscene/qml/images/sun.png | Bin 0 -> 8153 bytes .../toys/dynamicscene/qml/images/tree_s.png | Bin 0 -> 3406 bytes .../toys/dynamicscene/qml/qml/Button.qml | 80 ++ .../toys/dynamicscene/qml/qml/GenericSceneItem.qml | 49 ++ .../toys/dynamicscene/qml/qml/PaletteItem.qml | 59 ++ .../toys/dynamicscene/qml/qml/PerspectiveItem.qml | 65 ++ .../declarative/toys/dynamicscene/qml/qml/Sun.qml | 78 ++ .../toys/dynamicscene/qml/qml/itemCreation.js | 62 ++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ examples/declarative/toys/tic-tac-toe/main.cpp | 14 + .../toys/tic-tac-toe/qml/content/Button.qml | 79 ++ .../toys/tic-tac-toe/qml/content/TicTac.qml | 60 ++ .../toys/tic-tac-toe/qml/content/pics/board.png | Bin 0 -> 12258 bytes .../toys/tic-tac-toe/qml/content/pics/o.png | Bin 0 -> 1470 bytes .../toys/tic-tac-toe/qml/content/pics/x.png | Bin 0 -> 1331 bytes .../toys/tic-tac-toe/qml/content/tic-tac-toe.js | 149 ++++ .../toys/tic-tac-toe/qml/tic-tac-toe.qml | 123 +++ .../toys/tic-tac-toe/qml/tic-tac-toe.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/toys/tic-tac-toe/tic-tac-toe.pro | 39 + .../declarative/toys/tic-tac-toe/tictactoe.desktop | 11 + .../declarative/toys/tic-tac-toe/tictactoe.png | Bin 0 -> 3400 bytes .../declarative/toys/tic-tac-toe/tictactoe.pro | 39 + .../declarative/toys/tic-tac-toe/tictactoe.svg | 93 +++ examples/declarative/toys/tvtennis/main.cpp | 14 + .../declarative/toys/tvtennis/qml/tvtennis.qml | 109 +++ .../toys/tvtennis/qml/tvtennis.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/toys/tvtennis/tvtennis.desktop | 11 + examples/declarative/toys/tvtennis/tvtennis.png | Bin 0 -> 3400 bytes examples/declarative/toys/tvtennis/tvtennis.pro | 39 + examples/declarative/toys/tvtennis/tvtennis.svg | 93 +++ .../ui-components/dialcontrol/dialcontrol.desktop | 11 + .../ui-components/dialcontrol/dialcontrol.png | Bin 0 -> 3400 bytes .../ui-components/dialcontrol/dialcontrol.pro | 39 + .../ui-components/dialcontrol/dialcontrol.svg | 93 +++ .../declarative/ui-components/dialcontrol/main.cpp | 14 + .../ui-components/dialcontrol/qml/content/Dial.qml | 86 ++ .../dialcontrol/qml/content/QuitButton.qml | 52 ++ .../dialcontrol/qml/content/background.png | Bin 0 -> 35876 bytes .../dialcontrol/qml/content/needle.png | Bin 0 -> 342 bytes .../dialcontrol/qml/content/needle_shadow.png | Bin 0 -> 632 bytes .../dialcontrol/qml/content/overlay.png | Bin 0 -> 3564 bytes .../ui-components/dialcontrol/qml/content/quit.png | Bin 0 -> 583 bytes .../ui-components/dialcontrol/qml/dialcontrol.qml | 98 +++ .../dialcontrol/qml/dialcontrol.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../ui-components/flipable/flipable.desktop | 11 + .../ui-components/flipable/flipable.png | Bin 0 -> 3400 bytes .../ui-components/flipable/flipable.pro | 39 + .../ui-components/flipable/flipable.svg | 93 +++ .../declarative/ui-components/flipable/main.cpp | 14 + .../ui-components/flipable/qml/content/5_heart.png | Bin 0 -> 3872 bytes .../ui-components/flipable/qml/content/9_club.png | Bin 0 -> 6135 bytes .../ui-components/flipable/qml/content/Card.qml | 80 ++ .../ui-components/flipable/qml/content/back.png | Bin 0 -> 1418 bytes .../ui-components/flipable/qml/flipable.qml | 55 ++ .../ui-components/flipable/qml/flipable.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ examples/declarative/ui-components/main/main.cpp | 14 + .../declarative/ui-components/main/main.desktop | 11 + examples/declarative/ui-components/main/main.png | Bin 0 -> 3400 bytes examples/declarative/ui-components/main/main.pro | 39 + examples/declarative/ui-components/main/main.svg | 93 +++ .../ui-components/main/qml/ScrollBar.qml | 74 ++ .../ui-components/main/qml/SearchBox.qml | 109 +++ .../ui-components/main/qml/TabWidget.qml | 102 +++ .../ui-components/main/qml/content/ProgressBar.qml | 83 ++ .../ui-components/main/qml/content/Spinner.qml | 70 ++ .../ui-components/main/qml/content/background.png | Bin 0 -> 426 bytes .../ui-components/main/qml/content/spinner-bg.png | Bin 0 -> 345 bytes .../main/qml/content/spinner-select.png | Bin 0 -> 320 bytes .../ui-components/main/qml/images/clear.png | Bin 0 -> 429 bytes .../main/qml/images/lineedit-bg-focus.png | Bin 0 -> 526 bytes .../ui-components/main/qml/images/lineedit-bg.png | Bin 0 -> 426 bytes .../declarative/ui-components/main/qml/main.qml | 99 +++ .../ui-components/main/qml/pics/niagara_falls.jpg | Bin 0 -> 142510 bytes .../ui-components/main/qml/progressbar.qmlproject | 16 + .../ui-components/main/qml/scrollbar.qmlproject | 16 + .../ui-components/main/qml/searchbox.qmlproject | 16 + .../ui-components/main/qml/spinner.qmlproject | 16 + .../declarative/ui-components/main/qml/tab.png | Bin 0 -> 507 bytes .../ui-components/main/qml/tabwidget.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/ui-components/progressbar/main.cpp | 14 + .../ui-components/progressbar/progressbar.desktop | 11 + .../ui-components/progressbar/progressbar.png | Bin 0 -> 3400 bytes .../ui-components/progressbar/progressbar.pro | 39 + .../ui-components/progressbar/progressbar.svg | 93 +++ .../progressbar/qml/content/ProgressBar.qml | 83 ++ .../progressbar/qml/content/background.png | Bin 0 -> 426 bytes .../ui-components/progressbar/qml/main.qml | 73 ++ .../progressbar/qml/progressbar.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../declarative/ui-components/slideswitch/main.cpp | 14 + .../slideswitch/qml/content/Switch.qml | 117 +++ .../slideswitch/qml/content/background.svg | 23 + .../ui-components/slideswitch/qml/content/knob.svg | 867 ++++++++++++++++++++ .../ui-components/slideswitch/qml/slideswitch.qml | 51 ++ .../slideswitch/qml/slideswitch.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../qtc_packaging/debian_fremantle/README | 6 + .../qtc_packaging/debian_fremantle/changelog | 5 + .../qtc_packaging/debian_fremantle/compat | 1 + .../qtc_packaging/debian_fremantle/control | 13 + .../qtc_packaging/debian_fremantle/copyright | 40 + .../qtc_packaging/debian_fremantle/rules | 91 ++ .../ui-components/slideswitch/slideswitch.desktop | 11 + .../ui-components/slideswitch/slideswitch.png | Bin 0 -> 3400 bytes .../ui-components/slideswitch/slideswitch.pro | 39 + .../ui-components/slideswitch/slideswitch.svg | 93 +++ .../xml/xmlhttprequest-example/main.cpp | 14 + .../xml/xmlhttprequest-example/qml/data.xml | 5 + .../qml/xmlhttprequest-example.qml | 95 +++ .../qml/xmlhttprequest.qmlproject | 16 + .../qmlapplicationviewer/qmlapplicationviewer.cpp | 157 ++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 + .../qmlapplicationviewer/qmlapplicationviewer.pri | 154 ++++ .../xmlhttprequestexample.desktop | 11 + .../xmlhttprequestexample.png | Bin 0 -> 3400 bytes .../xmlhttprequestexample.pro | 39 + .../xmlhttprequestexample.svg | 93 +++ 969 files changed, 50542 insertions(+), 0 deletions(-) create mode 100644 doc/src/images/qml-listview-snippet.png create mode 100644 doc/src/snippets/declarative/grid/grid-items.qml create mode 100644 doc/src/snippets/declarative/grid/grid-no-spacing.qml create mode 100644 doc/src/snippets/declarative/grid/grid-spacing.qml create mode 100644 doc/src/snippets/declarative/listview/listview-snippet.qml create mode 100644 doc/src/snippets/declarative/qml-intro/images/qt-logo.svg create mode 100644 examples/declarative/animation/basics/color-animation/coloranimation.desktop create mode 100644 examples/declarative/animation/basics/color-animation/coloranimation.png create mode 100644 examples/declarative/animation/basics/color-animation/coloranimation.pro create mode 100644 examples/declarative/animation/basics/color-animation/coloranimation.svg create mode 100644 examples/declarative/animation/basics/color-animation/main.cpp create mode 100644 examples/declarative/animation/basics/color-animation/qml/basics.qmlproject create mode 100644 examples/declarative/animation/basics/color-animation/qml/color-animation.qml create mode 100644 examples/declarative/animation/basics/color-animation/qml/images/face-smile.png create mode 100644 examples/declarative/animation/basics/color-animation/qml/images/moon.png create mode 100644 examples/declarative/animation/basics/color-animation/qml/images/shadow.png create mode 100644 examples/declarative/animation/basics/color-animation/qml/images/star.png create mode 100644 examples/declarative/animation/basics/color-animation/qml/images/sun.png create mode 100644 examples/declarative/animation/basics/color-animation/qml/property-animation.qml create mode 100644 examples/declarative/animation/basics/color-animation/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/animation/basics/color-animation/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/animation/basics/color-animation/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/animation/basics/property-animation/main.cpp create mode 100644 examples/declarative/animation/basics/property-animation/propertyanimation.desktop create mode 100644 examples/declarative/animation/basics/property-animation/propertyanimation.png create mode 100644 examples/declarative/animation/basics/property-animation/propertyanimation.pro create mode 100644 examples/declarative/animation/basics/property-animation/propertyanimation.svg create mode 100644 examples/declarative/animation/basics/property-animation/qml/basics.qmlproject create mode 100644 examples/declarative/animation/basics/property-animation/qml/color-animation.qml create mode 100644 examples/declarative/animation/basics/property-animation/qml/images/face-smile.png create mode 100644 examples/declarative/animation/basics/property-animation/qml/images/moon.png create mode 100644 examples/declarative/animation/basics/property-animation/qml/images/shadow.png create mode 100644 examples/declarative/animation/basics/property-animation/qml/images/star.png create mode 100644 examples/declarative/animation/basics/property-animation/qml/images/sun.png create mode 100644 examples/declarative/animation/basics/property-animation/qml/property-animation.qml create mode 100644 examples/declarative/animation/basics/property-animation/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/animation/basics/property-animation/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/animation/basics/property-animation/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/README create mode 100644 examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/changelog create mode 100644 examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/compat create mode 100644 examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/control create mode 100644 examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/copyright create mode 100755 examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/rules create mode 100644 examples/declarative/animation/behaviors/behavior-example/behaviorexample.desktop create mode 100644 examples/declarative/animation/behaviors/behavior-example/behaviorexample.png create mode 100644 examples/declarative/animation/behaviors/behavior-example/behaviorexample.pro create mode 100644 examples/declarative/animation/behaviors/behavior-example/behaviorexample.svg create mode 100644 examples/declarative/animation/behaviors/behavior-example/main.cpp create mode 100644 examples/declarative/animation/behaviors/behavior-example/qml/SideRect.qml create mode 100644 examples/declarative/animation/behaviors/behavior-example/qml/behavior-example.qml create mode 100644 examples/declarative/animation/behaviors/behavior-example/qml/behaviors.qmlproject create mode 100644 examples/declarative/animation/behaviors/behavior-example/qml/wigglytext.qml create mode 100644 examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/animation/easing/easing.desktop create mode 100644 examples/declarative/animation/easing/easing.png create mode 100644 examples/declarative/animation/easing/easing.pro create mode 100644 examples/declarative/animation/easing/easing.svg create mode 100644 examples/declarative/animation/easing/main.cpp create mode 100644 examples/declarative/animation/easing/qml/content/QuitButton.qml create mode 100644 examples/declarative/animation/easing/qml/content/quit.png create mode 100644 examples/declarative/animation/easing/qml/easing.qml create mode 100644 examples/declarative/animation/easing/qml/easing.qmlproject create mode 100644 examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/animation/states/main.cpp create mode 100644 examples/declarative/animation/states/qml/qt-logo.png create mode 100644 examples/declarative/animation/states/qml/states.qml create mode 100644 examples/declarative/animation/states/qml/states.qmlproject create mode 100644 examples/declarative/animation/states/qml/transitions.qml create mode 100644 examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/animation/states/states.desktop create mode 100644 examples/declarative/animation/states/states.png create mode 100644 examples/declarative/animation/states/states.pro create mode 100644 examples/declarative/animation/states/states.svg create mode 100644 examples/declarative/demos/calculator/calculator.desktop create mode 100644 examples/declarative/demos/calculator/calculator.png create mode 100644 examples/declarative/demos/calculator/calculator.pro create mode 100644 examples/declarative/demos/calculator/calculator.svg create mode 100644 examples/declarative/demos/calculator/main.cpp create mode 100644 examples/declarative/demos/calculator/qml/Core/Button.qml create mode 100644 examples/declarative/demos/calculator/qml/Core/Display.qml create mode 100644 examples/declarative/demos/calculator/qml/Core/calculator.js create mode 100644 examples/declarative/demos/calculator/qml/Core/images/button-.png create mode 100644 examples/declarative/demos/calculator/qml/Core/images/button-blue.png create mode 100644 examples/declarative/demos/calculator/qml/Core/images/button-green.png create mode 100644 examples/declarative/demos/calculator/qml/Core/images/button-purple.png create mode 100644 examples/declarative/demos/calculator/qml/Core/images/button-red.png create mode 100644 examples/declarative/demos/calculator/qml/Core/images/display.png create mode 100644 examples/declarative/demos/calculator/qml/Core/qmldir create mode 100644 examples/declarative/demos/calculator/qml/calculator.qml create mode 100644 examples/declarative/demos/calculator/qml/calculator.qmlproject create mode 100644 examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/demos/flickr/flickr.desktop create mode 100644 examples/declarative/demos/flickr/flickr.png create mode 100644 examples/declarative/demos/flickr/flickr.pro create mode 100644 examples/declarative/demos/flickr/flickr.svg create mode 100644 examples/declarative/demos/flickr/main.cpp create mode 100644 examples/declarative/demos/flickr/qml/common/Progress.qml create mode 100644 examples/declarative/demos/flickr/qml/common/RssModel.qml create mode 100644 examples/declarative/demos/flickr/qml/common/ScrollBar.qml create mode 100644 examples/declarative/demos/flickr/qml/common/Slider.qml create mode 100644 examples/declarative/demos/flickr/qml/common/qmldir create mode 100644 examples/declarative/demos/flickr/qml/flickr-90.qml create mode 100644 examples/declarative/demos/flickr/qml/flickr.qml create mode 100644 examples/declarative/demos/flickr/qml/flickr.qmlproject create mode 100644 examples/declarative/demos/flickr/qml/mobile/Button.qml create mode 100644 examples/declarative/demos/flickr/qml/mobile/GridDelegate.qml create mode 100644 examples/declarative/demos/flickr/qml/mobile/ImageDetails.qml create mode 100644 examples/declarative/demos/flickr/qml/mobile/ListDelegate.qml create mode 100644 examples/declarative/demos/flickr/qml/mobile/TitleBar.qml create mode 100644 examples/declarative/demos/flickr/qml/mobile/ToolBar.qml create mode 100644 examples/declarative/demos/flickr/qml/mobile/images/gloss.png create mode 100644 examples/declarative/demos/flickr/qml/mobile/images/lineedit.png create mode 100644 examples/declarative/demos/flickr/qml/mobile/images/lineedit.sci create mode 100644 examples/declarative/demos/flickr/qml/mobile/images/quit.png create mode 100644 examples/declarative/demos/flickr/qml/mobile/images/stripes.png create mode 100644 examples/declarative/demos/flickr/qml/mobile/images/titlebar.png create mode 100644 examples/declarative/demos/flickr/qml/mobile/images/titlebar.sci create mode 100644 examples/declarative/demos/flickr/qml/mobile/images/toolbutton.png create mode 100644 examples/declarative/demos/flickr/qml/mobile/images/toolbutton.sci create mode 100644 examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/demos/photoviewer/main.cpp create mode 100644 examples/declarative/demos/photoviewer/photoviewer.desktop create mode 100644 examples/declarative/demos/photoviewer/photoviewer.png create mode 100644 examples/declarative/demos/photoviewer/photoviewer.pro create mode 100644 examples/declarative/demos/photoviewer/photoviewer.svg create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/AlbumDelegate.qml create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/BusyIndicator.qml create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/Button.qml create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/EditableButton.qml create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/PhotoDelegate.qml create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/ProgressBar.qml create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/RssModel.qml create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/Tag.qml create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/images/box-shadow.png create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/images/busy.png create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/images/cardboard.png create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/qmldir create mode 100644 examples/declarative/demos/photoviewer/qml/PhotoViewerCore/script/script.js create mode 100644 examples/declarative/demos/photoviewer/qml/i18n/base.ts create mode 100644 examples/declarative/demos/photoviewer/qml/i18n/qml_fr.ts create mode 100644 examples/declarative/demos/photoviewer/qml/photoviewer.qml create mode 100644 examples/declarative/demos/photoviewer/qml/photoviewer.qmlproject create mode 100644 examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/demos/rssnews/main.cpp create mode 100644 examples/declarative/demos/rssnews/qml/content/BusyIndicator.qml create mode 100644 examples/declarative/demos/rssnews/qml/content/CategoryDelegate.qml create mode 100644 examples/declarative/demos/rssnews/qml/content/NewsDelegate.qml create mode 100644 examples/declarative/demos/rssnews/qml/content/RssFeeds.qml create mode 100644 examples/declarative/demos/rssnews/qml/content/ScrollBar.qml create mode 100644 examples/declarative/demos/rssnews/qml/content/images/busy.png create mode 100644 examples/declarative/demos/rssnews/qml/content/images/scrollbar.png create mode 100644 examples/declarative/demos/rssnews/qml/rssnews.qml create mode 100644 examples/declarative/demos/rssnews/qml/rssnews.qmlproject create mode 100644 examples/declarative/demos/rssnews/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/demos/rssnews/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/demos/rssnews/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/demos/rssnews/rssnews.desktop create mode 100644 examples/declarative/demos/rssnews/rssnews.png create mode 100644 examples/declarative/demos/rssnews/rssnews.pro create mode 100644 examples/declarative/demos/rssnews/rssnews.svg create mode 100644 examples/declarative/demos/samegame/main.cpp create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/BoomBlock.qml create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/Button.qml create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/Dialog.qml create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/pics/background.png create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/pics/blueStar.png create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/pics/blueStone.png create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/pics/greenStar.png create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/pics/greenStone.png create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/pics/redStar.png create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/pics/redStone.png create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/pics/star.png create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/pics/yellowStone.png create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/qmldir create mode 100644 examples/declarative/demos/samegame/qml/SamegameCore/samegame.js create mode 100644 examples/declarative/demos/samegame/qml/highscores/README create mode 100644 examples/declarative/demos/samegame/qml/highscores/score_data.xml create mode 100644 examples/declarative/demos/samegame/qml/highscores/score_style.xsl create mode 100644 examples/declarative/demos/samegame/qml/highscores/scores.php create mode 100644 examples/declarative/demos/samegame/qml/samegame.qml create mode 100644 examples/declarative/demos/samegame/qml/samegame.qmlproject create mode 100644 examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/demos/samegame/samegame.desktop create mode 100644 examples/declarative/demos/samegame/samegame.png create mode 100644 examples/declarative/demos/samegame/samegame.pro create mode 100644 examples/declarative/demos/samegame/samegame.svg create mode 100644 examples/declarative/demos/twitter/main.cpp create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/Button.qml create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/FatDelegate.qml create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/Input.qml create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/Loading.qml create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/MultiTitleBar.qml create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/RssModel.qml create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/SearchView.qml create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/TitleBar.qml create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/ToolBar.qml create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/UserModel.qml create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/images/gloss.png create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/images/lineedit.png create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/images/lineedit.sci create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/images/loading.png create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/images/quit.png create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/images/stripes.png create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/images/titlebar.png create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/images/titlebar.sci create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/images/toolbutton.png create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/images/toolbutton.sci create mode 100644 examples/declarative/demos/twitter/qml/TwitterCore/qmldir create mode 100644 examples/declarative/demos/twitter/qml/twitter.qml create mode 100644 examples/declarative/demos/twitter/qml/twitter.qmlproject create mode 100644 examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/demos/twitter/twitter.desktop create mode 100644 examples/declarative/demos/twitter/twitter.png create mode 100644 examples/declarative/demos/twitter/twitter.pro create mode 100644 examples/declarative/demos/twitter/twitter.svg create mode 100644 examples/declarative/demos/webbrowser/main.cpp create mode 100644 examples/declarative/demos/webbrowser/qml/content/Button.qml create mode 100644 examples/declarative/demos/webbrowser/qml/content/FlickableWebView.qml create mode 100644 examples/declarative/demos/webbrowser/qml/content/Header.qml create mode 100644 examples/declarative/demos/webbrowser/qml/content/ScrollBar.qml create mode 100644 examples/declarative/demos/webbrowser/qml/content/UrlInput.qml create mode 100644 examples/declarative/demos/webbrowser/qml/content/pics/display.png create mode 100644 examples/declarative/demos/webbrowser/qml/content/pics/edit-delete.png create mode 100644 examples/declarative/demos/webbrowser/qml/content/pics/go-jump-locationbar.png create mode 100644 examples/declarative/demos/webbrowser/qml/content/pics/go-next-view.png create mode 100644 examples/declarative/demos/webbrowser/qml/content/pics/go-previous-view.png create mode 100644 examples/declarative/demos/webbrowser/qml/content/pics/scrollbar.png create mode 100644 examples/declarative/demos/webbrowser/qml/content/pics/titlebar-bg.png create mode 100644 examples/declarative/demos/webbrowser/qml/content/pics/view-refresh.png create mode 100644 examples/declarative/demos/webbrowser/qml/webbrowser.qml create mode 100644 examples/declarative/demos/webbrowser/qml/webbrowser.qmlproject create mode 100644 examples/declarative/demos/webbrowser/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/demos/webbrowser/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/demos/webbrowser/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/demos/webbrowser/webbrowser.desktop create mode 100644 examples/declarative/demos/webbrowser/webbrowser.png create mode 100644 examples/declarative/demos/webbrowser/webbrowser.pro create mode 100644 examples/declarative/demos/webbrowser/webbrowser.svg create mode 100644 examples/declarative/i18n/i18n.desktop create mode 100644 examples/declarative/i18n/i18n.png create mode 100644 examples/declarative/i18n/i18n.pro create mode 100644 examples/declarative/i18n/i18n.svg create mode 100644 examples/declarative/i18n/main.cpp create mode 100644 examples/declarative/i18n/qml/i18n.qml create mode 100644 examples/declarative/i18n/qml/i18n.qmlproject create mode 100644 examples/declarative/i18n/qml/i18n/base.ts create mode 100644 examples/declarative/i18n/qml/i18n/qml_en_AU.ts create mode 100644 examples/declarative/i18n/qml/i18n/qml_fr.ts create mode 100644 examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/imageelements/borderimage/borderimage.desktop create mode 100644 examples/declarative/imageelements/borderimage/borderimage.png create mode 100644 examples/declarative/imageelements/borderimage/borderimage.pro create mode 100644 examples/declarative/imageelements/borderimage/borderimage.svg create mode 100644 examples/declarative/imageelements/borderimage/main.cpp create mode 100644 examples/declarative/imageelements/borderimage/qml/borderimage.qml create mode 100644 examples/declarative/imageelements/borderimage/qml/borderimage.qmlproject create mode 100644 examples/declarative/imageelements/borderimage/qml/content/MyBorderImage.qml create mode 100644 examples/declarative/imageelements/borderimage/qml/content/ShadowRectangle.qml create mode 100644 examples/declarative/imageelements/borderimage/qml/content/bw.png create mode 100644 examples/declarative/imageelements/borderimage/qml/content/colors-round.sci create mode 100644 examples/declarative/imageelements/borderimage/qml/content/colors-stretch.sci create mode 100644 examples/declarative/imageelements/borderimage/qml/content/colors.png create mode 100644 examples/declarative/imageelements/borderimage/qml/content/shadow.png create mode 100644 examples/declarative/imageelements/borderimage/qml/shadows.qml create mode 100644 examples/declarative/imageelements/borderimage/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/imageelements/borderimage/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/imageelements/borderimage/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/README create mode 100644 examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/changelog create mode 100644 examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/compat create mode 100644 examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/control create mode 100644 examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/copyright create mode 100755 examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/rules create mode 100644 examples/declarative/imageelements/image/image.desktop create mode 100644 examples/declarative/imageelements/image/image.png create mode 100644 examples/declarative/imageelements/image/image.pro create mode 100644 examples/declarative/imageelements/image/image.svg create mode 100644 examples/declarative/imageelements/image/main.cpp create mode 100644 examples/declarative/imageelements/image/qml/ImageCell.qml create mode 100644 examples/declarative/imageelements/image/qml/image.qml create mode 100644 examples/declarative/imageelements/image/qml/image.qmlproject create mode 100644 examples/declarative/imageelements/image/qml/qt-logo.png create mode 100644 examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/imageelements/shadows/main.cpp create mode 100644 examples/declarative/imageelements/shadows/qml/borderimage.qml create mode 100644 examples/declarative/imageelements/shadows/qml/borderimage.qmlproject create mode 100644 examples/declarative/imageelements/shadows/qml/content/MyBorderImage.qml create mode 100644 examples/declarative/imageelements/shadows/qml/content/ShadowRectangle.qml create mode 100644 examples/declarative/imageelements/shadows/qml/content/bw.png create mode 100644 examples/declarative/imageelements/shadows/qml/content/colors-round.sci create mode 100644 examples/declarative/imageelements/shadows/qml/content/colors-stretch.sci create mode 100644 examples/declarative/imageelements/shadows/qml/content/colors.png create mode 100644 examples/declarative/imageelements/shadows/qml/content/shadow.png create mode 100644 examples/declarative/imageelements/shadows/qml/shadows.qml create mode 100644 examples/declarative/imageelements/shadows/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/imageelements/shadows/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/imageelements/shadows/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/imageelements/shadows/shadows.desktop create mode 100644 examples/declarative/imageelements/shadows/shadows.png create mode 100644 examples/declarative/imageelements/shadows/shadows.pro create mode 100644 examples/declarative/imageelements/shadows/shadows.svg create mode 100644 examples/declarative/keyinteraction/focus/focus.desktop create mode 100644 examples/declarative/keyinteraction/focus/focus.png create mode 100644 examples/declarative/keyinteraction/focus/focus.pro create mode 100644 examples/declarative/keyinteraction/focus/focus.svg create mode 100644 examples/declarative/keyinteraction/focus/main.cpp create mode 100644 examples/declarative/keyinteraction/focus/qml/Core/ContextMenu.qml create mode 100644 examples/declarative/keyinteraction/focus/qml/Core/GridMenu.qml create mode 100644 examples/declarative/keyinteraction/focus/qml/Core/ListMenu.qml create mode 100644 examples/declarative/keyinteraction/focus/qml/Core/ListViewDelegate.qml create mode 100644 examples/declarative/keyinteraction/focus/qml/Core/images/arrow.png create mode 100644 examples/declarative/keyinteraction/focus/qml/Core/images/qt-logo.png create mode 100644 examples/declarative/keyinteraction/focus/qml/focus.qml create mode 100644 examples/declarative/keyinteraction/focus/qml/focus.qmlproject create mode 100644 examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/Delegate/Delegate.desktop create mode 100644 examples/declarative/modelviews/Delegate/Delegate.png create mode 100644 examples/declarative/modelviews/Delegate/Delegate.pro create mode 100644 examples/declarative/modelviews/Delegate/Delegate.svg create mode 100644 examples/declarative/modelviews/Delegate/main.cpp create mode 100644 examples/declarative/modelviews/Delegate/qml/Delegate.qml create mode 100644 examples/declarative/modelviews/Delegate/qml/package.qmlproject create mode 100644 examples/declarative/modelviews/Delegate/qml/view.qml create mode 100644 examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/gridview-example/gridviewexample.desktop create mode 100644 examples/declarative/modelviews/gridview-example/gridviewexample.png create mode 100644 examples/declarative/modelviews/gridview-example/gridviewexample.pro create mode 100644 examples/declarative/modelviews/gridview-example/gridviewexample.svg create mode 100644 examples/declarative/modelviews/gridview-example/main.cpp create mode 100644 examples/declarative/modelviews/gridview-example/qml/gridview-example.qml create mode 100644 examples/declarative/modelviews/gridview-example/qml/gridview.qmlproject create mode 100644 examples/declarative/modelviews/gridview-example/qml/pics/AddressBook_48.png create mode 100644 examples/declarative/modelviews/gridview-example/qml/pics/AudioPlayer_48.png create mode 100644 examples/declarative/modelviews/gridview-example/qml/pics/Camera_48.png create mode 100644 examples/declarative/modelviews/gridview-example/qml/pics/DateBook_48.png create mode 100644 examples/declarative/modelviews/gridview-example/qml/pics/EMail_48.png create mode 100644 examples/declarative/modelviews/gridview-example/qml/pics/TodoList_48.png create mode 100644 examples/declarative/modelviews/gridview-example/qml/pics/VideoPlayer_48.png create mode 100644 examples/declarative/modelviews/gridview-example/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/gridview-example/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/gridview-example/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/listview/dynamiclist/dynamiclist.desktop create mode 100644 examples/declarative/modelviews/listview/dynamiclist/dynamiclist.png create mode 100644 examples/declarative/modelviews/listview/dynamiclist/dynamiclist.pro create mode 100644 examples/declarative/modelviews/listview/dynamiclist/dynamiclist.svg create mode 100644 examples/declarative/modelviews/listview/dynamiclist/main.cpp create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/PetsModel.qml create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/PressAndHoldButton.qml create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/RecipesModel.qml create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/TextButton.qml create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/arrow-down.png create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/arrow-up.png create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/fruit-salad.jpg create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/hamburger.jpg create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/lemonade.jpg create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/list-delete.png create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/minus-sign.png create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/moreDown.png create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/moreUp.png create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/pancakes.jpg create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/plus-sign.png create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/vegetable-soup.jpg create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/dynamiclist.qml create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/expandingdelegates.qml create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/highlight.qml create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/highlightranges.qml create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/listview.qmlproject create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qml/sections.qml create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/listview/dynamiclist/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/expandingdelegates.desktop create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/expandingdelegates.png create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/expandingdelegates.pro create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/expandingdelegates.svg create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/main.cpp create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/PetsModel.qml create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/PressAndHoldButton.qml create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/RecipesModel.qml create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/TextButton.qml create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/arrow-down.png create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/arrow-up.png create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/fruit-salad.jpg create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/hamburger.jpg create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/lemonade.jpg create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/list-delete.png create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/minus-sign.png create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/moreDown.png create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/moreUp.png create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/pancakes.jpg create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/plus-sign.png create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/vegetable-soup.jpg create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/dynamiclist.qml create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/expandingdelegates.qml create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/highlight.qml create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/highlightranges.qml create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/listview.qmlproject create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qml/sections.qml create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/README create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/changelog create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/compat create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/control create mode 100644 examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/copyright create mode 100755 examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/rules create mode 100644 examples/declarative/modelviews/listview/highlight/highlight.desktop create mode 100644 examples/declarative/modelviews/listview/highlight/highlight.png create mode 100644 examples/declarative/modelviews/listview/highlight/highlight.pro create mode 100644 examples/declarative/modelviews/listview/highlight/highlight.svg create mode 100644 examples/declarative/modelviews/listview/highlight/main.cpp create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/PetsModel.qml create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/PressAndHoldButton.qml create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/RecipesModel.qml create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/TextButton.qml create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/arrow-down.png create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/arrow-up.png create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/fruit-salad.jpg create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/hamburger.jpg create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/lemonade.jpg create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/list-delete.png create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/minus-sign.png create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/moreDown.png create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/moreUp.png create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/pancakes.jpg create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/plus-sign.png create mode 100644 examples/declarative/modelviews/listview/highlight/qml/content/pics/vegetable-soup.jpg create mode 100644 examples/declarative/modelviews/listview/highlight/qml/dynamiclist.qml create mode 100644 examples/declarative/modelviews/listview/highlight/qml/expandingdelegates.qml create mode 100644 examples/declarative/modelviews/listview/highlight/qml/highlight.qml create mode 100644 examples/declarative/modelviews/listview/highlight/qml/highlightranges.qml create mode 100644 examples/declarative/modelviews/listview/highlight/qml/listview.qmlproject create mode 100644 examples/declarative/modelviews/listview/highlight/qml/sections.qml create mode 100644 examples/declarative/modelviews/listview/highlight/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/listview/highlight/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/listview/highlight/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/README create mode 100644 examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/changelog create mode 100644 examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/compat create mode 100644 examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/control create mode 100644 examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/copyright create mode 100755 examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/rules create mode 100644 examples/declarative/modelviews/listview/highlightranges/highlightranges.desktop create mode 100644 examples/declarative/modelviews/listview/highlightranges/highlightranges.png create mode 100644 examples/declarative/modelviews/listview/highlightranges/highlightranges.pro create mode 100644 examples/declarative/modelviews/listview/highlightranges/highlightranges.svg create mode 100644 examples/declarative/modelviews/listview/highlightranges/main.cpp create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/PetsModel.qml create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/PressAndHoldButton.qml create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/RecipesModel.qml create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/TextButton.qml create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/arrow-down.png create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/arrow-up.png create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/fruit-salad.jpg create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/hamburger.jpg create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/lemonade.jpg create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/list-delete.png create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/minus-sign.png create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/moreDown.png create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/moreUp.png create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/pancakes.jpg create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/plus-sign.png create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/content/pics/vegetable-soup.jpg create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/dynamiclist.qml create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/expandingdelegates.qml create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/highlight.qml create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/highlightranges.qml create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/listview.qmlproject create mode 100644 examples/declarative/modelviews/listview/highlightranges/qml/sections.qml create mode 100644 examples/declarative/modelviews/listview/highlightranges/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/listview/highlightranges/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/listview/highlightranges/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/listview/sections/main.cpp create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/PetsModel.qml create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/PressAndHoldButton.qml create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/RecipesModel.qml create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/TextButton.qml create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/arrow-down.png create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/arrow-up.png create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/fruit-salad.jpg create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/hamburger.jpg create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/lemonade.jpg create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/list-delete.png create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/minus-sign.png create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/moreDown.png create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/moreUp.png create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/pancakes.jpg create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/plus-sign.png create mode 100644 examples/declarative/modelviews/listview/sections/qml/content/pics/vegetable-soup.jpg create mode 100644 examples/declarative/modelviews/listview/sections/qml/dynamiclist.qml create mode 100644 examples/declarative/modelviews/listview/sections/qml/expandingdelegates.qml create mode 100644 examples/declarative/modelviews/listview/sections/qml/highlight.qml create mode 100644 examples/declarative/modelviews/listview/sections/qml/highlightranges.qml create mode 100644 examples/declarative/modelviews/listview/sections/qml/listview.qmlproject create mode 100644 examples/declarative/modelviews/listview/sections/qml/sections.qml create mode 100644 examples/declarative/modelviews/listview/sections/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/listview/sections/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/listview/sections/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/listview/sections/sections.desktop create mode 100644 examples/declarative/modelviews/listview/sections/sections.png create mode 100644 examples/declarative/modelviews/listview/sections/sections.pro create mode 100644 examples/declarative/modelviews/listview/sections/sections.svg create mode 100644 examples/declarative/modelviews/pathview-example/main.cpp create mode 100644 examples/declarative/modelviews/pathview-example/pathviewexample.desktop create mode 100644 examples/declarative/modelviews/pathview-example/pathviewexample.png create mode 100644 examples/declarative/modelviews/pathview-example/pathviewexample.pro create mode 100644 examples/declarative/modelviews/pathview-example/pathviewexample.svg create mode 100644 examples/declarative/modelviews/pathview-example/qml/pathview-example.qml create mode 100644 examples/declarative/modelviews/pathview-example/qml/pathview.qmlproject create mode 100644 examples/declarative/modelviews/pathview-example/qml/pics/AddressBook_48.png create mode 100644 examples/declarative/modelviews/pathview-example/qml/pics/AudioPlayer_48.png create mode 100644 examples/declarative/modelviews/pathview-example/qml/pics/Camera_48.png create mode 100644 examples/declarative/modelviews/pathview-example/qml/pics/DateBook_48.png create mode 100644 examples/declarative/modelviews/pathview-example/qml/pics/EMail_48.png create mode 100644 examples/declarative/modelviews/pathview-example/qml/pics/TodoList_48.png create mode 100644 examples/declarative/modelviews/pathview-example/qml/pics/VideoPlayer_48.png create mode 100644 examples/declarative/modelviews/pathview-example/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/pathview-example/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/pathview-example/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/README create mode 100644 examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/changelog create mode 100644 examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/compat create mode 100644 examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/control create mode 100644 examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/copyright create mode 100755 examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/rules create mode 100644 examples/declarative/modelviews/visualitemmodel/main.cpp create mode 100644 examples/declarative/modelviews/visualitemmodel/qml/visualitemmodel.qml create mode 100644 examples/declarative/modelviews/visualitemmodel/qml/visualitemmodel.qmlproject create mode 100644 examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/visualitemmodel/visualitemmodel.desktop create mode 100644 examples/declarative/modelviews/visualitemmodel/visualitemmodel.png create mode 100644 examples/declarative/modelviews/visualitemmodel/visualitemmodel.pro create mode 100644 examples/declarative/modelviews/visualitemmodel/visualitemmodel.svg create mode 100644 examples/declarative/modelviews/webview/alerts/alerts.desktop create mode 100644 examples/declarative/modelviews/webview/alerts/alerts.png create mode 100644 examples/declarative/modelviews/webview/alerts/alerts.pro create mode 100644 examples/declarative/modelviews/webview/alerts/alerts.svg create mode 100644 examples/declarative/modelviews/webview/alerts/main.cpp create mode 100644 examples/declarative/modelviews/webview/alerts/qml/alerts.html create mode 100644 examples/declarative/modelviews/webview/alerts/qml/alerts.qml create mode 100644 examples/declarative/modelviews/webview/alerts/qml/autosize.qml create mode 100644 examples/declarative/modelviews/webview/alerts/qml/content/Mapping/Map.qml create mode 100644 examples/declarative/modelviews/webview/alerts/qml/content/Mapping/map.html create mode 100644 examples/declarative/modelviews/webview/alerts/qml/content/pics/cancel.png create mode 100644 examples/declarative/modelviews/webview/alerts/qml/content/pics/ok.png create mode 100644 examples/declarative/modelviews/webview/alerts/qml/googlemaps.qml create mode 100644 examples/declarative/modelviews/webview/alerts/qml/inlinehtml.qml create mode 100644 examples/declarative/modelviews/webview/alerts/qml/newwindows.html create mode 100644 examples/declarative/modelviews/webview/alerts/qml/newwindows.qml create mode 100644 examples/declarative/modelviews/webview/alerts/qml/webview.qmlproject create mode 100644 examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/webview/autosize/autosize.desktop create mode 100644 examples/declarative/modelviews/webview/autosize/autosize.png create mode 100644 examples/declarative/modelviews/webview/autosize/autosize.pro create mode 100644 examples/declarative/modelviews/webview/autosize/autosize.svg create mode 100644 examples/declarative/modelviews/webview/autosize/main.cpp create mode 100644 examples/declarative/modelviews/webview/autosize/qml/alerts.html create mode 100644 examples/declarative/modelviews/webview/autosize/qml/alerts.qml create mode 100644 examples/declarative/modelviews/webview/autosize/qml/autosize.qml create mode 100644 examples/declarative/modelviews/webview/autosize/qml/content/Mapping/Map.qml create mode 100644 examples/declarative/modelviews/webview/autosize/qml/content/Mapping/map.html create mode 100644 examples/declarative/modelviews/webview/autosize/qml/content/pics/cancel.png create mode 100644 examples/declarative/modelviews/webview/autosize/qml/content/pics/ok.png create mode 100644 examples/declarative/modelviews/webview/autosize/qml/googlemaps.qml create mode 100644 examples/declarative/modelviews/webview/autosize/qml/inlinehtml.qml create mode 100644 examples/declarative/modelviews/webview/autosize/qml/newwindows.html create mode 100644 examples/declarative/modelviews/webview/autosize/qml/newwindows.qml create mode 100644 examples/declarative/modelviews/webview/autosize/qml/webview.qmlproject create mode 100644 examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/README create mode 100644 examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/changelog create mode 100644 examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/compat create mode 100644 examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/control create mode 100644 examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/copyright create mode 100755 examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/rules create mode 100644 examples/declarative/modelviews/webview/googlemaps/googlemaps.desktop create mode 100644 examples/declarative/modelviews/webview/googlemaps/googlemaps.png create mode 100644 examples/declarative/modelviews/webview/googlemaps/googlemaps.pro create mode 100644 examples/declarative/modelviews/webview/googlemaps/googlemaps.svg create mode 100644 examples/declarative/modelviews/webview/googlemaps/main.cpp create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/alerts.html create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/alerts.qml create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/autosize.qml create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/content/Mapping/Map.qml create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/content/Mapping/map.html create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/content/pics/cancel.png create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/content/pics/ok.png create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/googlemaps.qml create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/inlinehtml.qml create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/newwindows.html create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/newwindows.qml create mode 100644 examples/declarative/modelviews/webview/googlemaps/qml/webview.qmlproject create mode 100644 examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/README create mode 100644 examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/changelog create mode 100644 examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/compat create mode 100644 examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/control create mode 100644 examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/copyright create mode 100755 examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/rules create mode 100644 examples/declarative/modelviews/webview/inlinehtml/inlinehtml.desktop create mode 100644 examples/declarative/modelviews/webview/inlinehtml/inlinehtml.png create mode 100644 examples/declarative/modelviews/webview/inlinehtml/inlinehtml.pro create mode 100644 examples/declarative/modelviews/webview/inlinehtml/inlinehtml.svg create mode 100644 examples/declarative/modelviews/webview/inlinehtml/main.cpp create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/alerts.html create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/alerts.qml create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/autosize.qml create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/content/Mapping/Map.qml create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/content/Mapping/map.html create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/content/pics/cancel.png create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/content/pics/ok.png create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/googlemaps.qml create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/inlinehtml.qml create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/newwindows.html create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/newwindows.qml create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qml/webview.qmlproject create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/README create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/changelog create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/compat create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/control create mode 100644 examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/copyright create mode 100755 examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/rules create mode 100644 examples/declarative/modelviews/webview/newwindows/main.cpp create mode 100644 examples/declarative/modelviews/webview/newwindows/newwindows.desktop create mode 100644 examples/declarative/modelviews/webview/newwindows/newwindows.png create mode 100644 examples/declarative/modelviews/webview/newwindows/newwindows.pro create mode 100644 examples/declarative/modelviews/webview/newwindows/newwindows.svg create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/alerts.html create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/alerts.qml create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/autosize.qml create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/content/Mapping/Map.qml create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/content/Mapping/map.html create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/content/pics/cancel.png create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/content/pics/ok.png create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/googlemaps.qml create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/inlinehtml.qml create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/newwindows.html create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/newwindows.qml create mode 100644 examples/declarative/modelviews/webview/newwindows/qml/webview.qmlproject create mode 100644 examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/positioners/main.cpp create mode 100644 examples/declarative/positioners/positioners.desktop create mode 100644 examples/declarative/positioners/positioners.png create mode 100644 examples/declarative/positioners/positioners.pro create mode 100644 examples/declarative/positioners/positioners.svg create mode 100644 examples/declarative/positioners/qml/Button.qml create mode 100644 examples/declarative/positioners/qml/add.png create mode 100644 examples/declarative/positioners/qml/del.png create mode 100644 examples/declarative/positioners/qml/positioners.qml create mode 100644 examples/declarative/positioners/qml/positioners.qmlproject create mode 100644 examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/sqllocalstorage/sqllocalstorage.qmlproject create mode 100644 examples/declarative/text/fonts/availableFonts/availableFonts.desktop create mode 100644 examples/declarative/text/fonts/availableFonts/availableFonts.png create mode 100644 examples/declarative/text/fonts/availableFonts/availableFonts.pro create mode 100644 examples/declarative/text/fonts/availableFonts/availableFonts.svg create mode 100644 examples/declarative/text/fonts/availableFonts/main.cpp create mode 100644 examples/declarative/text/fonts/availableFonts/qml/availableFonts.qml create mode 100644 examples/declarative/text/fonts/availableFonts/qml/banner.qml create mode 100644 examples/declarative/text/fonts/availableFonts/qml/fonts.qml create mode 100644 examples/declarative/text/fonts/availableFonts/qml/fonts.qmlproject create mode 100644 examples/declarative/text/fonts/availableFonts/qml/fonts/tarzeau_ocr_a.ttf create mode 100644 examples/declarative/text/fonts/availableFonts/qml/hello.qml create mode 100644 examples/declarative/text/fonts/availableFonts/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/text/fonts/availableFonts/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/text/fonts/availableFonts/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/text/fonts/banner/banner.desktop create mode 100644 examples/declarative/text/fonts/banner/banner.png create mode 100644 examples/declarative/text/fonts/banner/banner.pro create mode 100644 examples/declarative/text/fonts/banner/banner.svg create mode 100644 examples/declarative/text/fonts/banner/main.cpp create mode 100644 examples/declarative/text/fonts/banner/qml/availableFonts.qml create mode 100644 examples/declarative/text/fonts/banner/qml/banner.qml create mode 100644 examples/declarative/text/fonts/banner/qml/fonts.qml create mode 100644 examples/declarative/text/fonts/banner/qml/fonts.qmlproject create mode 100644 examples/declarative/text/fonts/banner/qml/fonts/tarzeau_ocr_a.ttf create mode 100644 examples/declarative/text/fonts/banner/qml/hello.qml create mode 100644 examples/declarative/text/fonts/banner/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/text/fonts/banner/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/text/fonts/banner/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/text/fonts/fonts/fonts.desktop create mode 100644 examples/declarative/text/fonts/fonts/fonts.png create mode 100644 examples/declarative/text/fonts/fonts/fonts.pro create mode 100644 examples/declarative/text/fonts/fonts/fonts.svg create mode 100644 examples/declarative/text/fonts/fonts/main.cpp create mode 100644 examples/declarative/text/fonts/fonts/qml/availableFonts.qml create mode 100644 examples/declarative/text/fonts/fonts/qml/banner.qml create mode 100644 examples/declarative/text/fonts/fonts/qml/fonts.qml create mode 100644 examples/declarative/text/fonts/fonts/qml/fonts.qmlproject create mode 100644 examples/declarative/text/fonts/fonts/qml/fonts/tarzeau_ocr_a.ttf create mode 100644 examples/declarative/text/fonts/fonts/qml/hello.qml create mode 100644 examples/declarative/text/fonts/fonts/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/text/fonts/fonts/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/text/fonts/fonts/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/text/fonts/hello/hello.desktop create mode 100644 examples/declarative/text/fonts/hello/hello.png create mode 100644 examples/declarative/text/fonts/hello/hello.pro create mode 100644 examples/declarative/text/fonts/hello/hello.svg create mode 100644 examples/declarative/text/fonts/hello/main.cpp create mode 100644 examples/declarative/text/fonts/hello/qml/availableFonts.qml create mode 100644 examples/declarative/text/fonts/hello/qml/banner.qml create mode 100644 examples/declarative/text/fonts/hello/qml/fonts.qml create mode 100644 examples/declarative/text/fonts/hello/qml/fonts.qmlproject create mode 100644 examples/declarative/text/fonts/hello/qml/fonts/tarzeau_ocr_a.ttf create mode 100644 examples/declarative/text/fonts/hello/qml/hello.qml create mode 100644 examples/declarative/text/fonts/hello/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/text/fonts/hello/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/text/fonts/hello/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/text/textselection/main.cpp create mode 100644 examples/declarative/text/textselection/qml/pics/endHandle.png create mode 100644 examples/declarative/text/textselection/qml/pics/endHandle.sci create mode 100644 examples/declarative/text/textselection/qml/pics/startHandle.png create mode 100644 examples/declarative/text/textselection/qml/pics/startHandle.sci create mode 100644 examples/declarative/text/textselection/qml/textselection.qml create mode 100644 examples/declarative/text/textselection/qml/textselection.qmlproject create mode 100644 examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/text/textselection/textselection.desktop create mode 100644 examples/declarative/text/textselection/textselection.png create mode 100644 examples/declarative/text/textselection/textselection.pro create mode 100644 examples/declarative/text/textselection/textselection.svg create mode 100644 examples/declarative/touchinteraction/gestures/experimental-gestures/experimentalgestures.desktop create mode 100644 examples/declarative/touchinteraction/gestures/experimental-gestures/experimentalgestures.png create mode 100644 examples/declarative/touchinteraction/gestures/experimental-gestures/experimentalgestures.pro create mode 100644 examples/declarative/touchinteraction/gestures/experimental-gestures/experimentalgestures.svg create mode 100644 examples/declarative/touchinteraction/gestures/experimental-gestures/main.cpp create mode 100644 examples/declarative/touchinteraction/gestures/experimental-gestures/qml/experimental-gestures.qml create mode 100644 examples/declarative/touchinteraction/gestures/experimental-gestures/qml/gestures.qmlproject create mode 100644 examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/touchinteraction/mousearea/mousearea-example/main.cpp create mode 100644 examples/declarative/touchinteraction/mousearea/mousearea-example/mouseareaexample.desktop create mode 100644 examples/declarative/touchinteraction/mousearea/mousearea-example/mouseareaexample.png create mode 100644 examples/declarative/touchinteraction/mousearea/mousearea-example/mouseareaexample.pro create mode 100644 examples/declarative/touchinteraction/mousearea/mousearea-example/mouseareaexample.svg create mode 100644 examples/declarative/touchinteraction/mousearea/mousearea-example/qml/mousearea-example.qml create mode 100644 examples/declarative/touchinteraction/mousearea/mousearea-example/qml/mousearea.qmlproject create mode 100644 examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/touchinteraction/touchinteraction.pro create mode 100644 examples/declarative/toys/clocks/clocks.desktop create mode 100644 examples/declarative/toys/clocks/clocks.png create mode 100644 examples/declarative/toys/clocks/clocks.pro create mode 100644 examples/declarative/toys/clocks/clocks.svg create mode 100644 examples/declarative/toys/clocks/main.cpp create mode 100644 examples/declarative/toys/clocks/qml/clocks.qml create mode 100644 examples/declarative/toys/clocks/qml/clocks.qmlproject create mode 100644 examples/declarative/toys/clocks/qml/content/Clock.qml create mode 100644 examples/declarative/toys/clocks/qml/content/QuitButton.qml create mode 100644 examples/declarative/toys/clocks/qml/content/background.png create mode 100644 examples/declarative/toys/clocks/qml/content/center.png create mode 100644 examples/declarative/toys/clocks/qml/content/clock-night.png create mode 100644 examples/declarative/toys/clocks/qml/content/clock.png create mode 100644 examples/declarative/toys/clocks/qml/content/hour.png create mode 100644 examples/declarative/toys/clocks/qml/content/minute.png create mode 100644 examples/declarative/toys/clocks/qml/content/quit.png create mode 100644 examples/declarative/toys/clocks/qml/content/second.png create mode 100644 examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/toys/corkboards/corkboards.desktop create mode 100644 examples/declarative/toys/corkboards/corkboards.png create mode 100644 examples/declarative/toys/corkboards/corkboards.pro create mode 100644 examples/declarative/toys/corkboards/corkboards.svg create mode 100644 examples/declarative/toys/corkboards/main.cpp create mode 100644 examples/declarative/toys/corkboards/qml/Day.qml create mode 100644 examples/declarative/toys/corkboards/qml/cork.jpg create mode 100644 examples/declarative/toys/corkboards/qml/corkboards.qml create mode 100644 examples/declarative/toys/corkboards/qml/corkboards.qmlproject create mode 100644 examples/declarative/toys/corkboards/qml/note-yellow.png create mode 100644 examples/declarative/toys/corkboards/qml/tack.png create mode 100644 examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/toys/dynamicscene/dynamicscene.desktop create mode 100644 examples/declarative/toys/dynamicscene/dynamicscene.png create mode 100644 examples/declarative/toys/dynamicscene/dynamicscene.pro create mode 100644 examples/declarative/toys/dynamicscene/dynamicscene.svg create mode 100644 examples/declarative/toys/dynamicscene/main.cpp create mode 100644 examples/declarative/toys/dynamicscene/qml/dynamicscene.qml create mode 100644 examples/declarative/toys/dynamicscene/qml/dynamicscene.qmlproject create mode 100644 examples/declarative/toys/dynamicscene/qml/images/NOTE create mode 100644 examples/declarative/toys/dynamicscene/qml/images/face-smile.png create mode 100644 examples/declarative/toys/dynamicscene/qml/images/moon.png create mode 100644 examples/declarative/toys/dynamicscene/qml/images/rabbit_brown.png create mode 100644 examples/declarative/toys/dynamicscene/qml/images/rabbit_bw.png create mode 100644 examples/declarative/toys/dynamicscene/qml/images/star.png create mode 100644 examples/declarative/toys/dynamicscene/qml/images/sun.png create mode 100644 examples/declarative/toys/dynamicscene/qml/images/tree_s.png create mode 100644 examples/declarative/toys/dynamicscene/qml/qml/Button.qml create mode 100644 examples/declarative/toys/dynamicscene/qml/qml/GenericSceneItem.qml create mode 100644 examples/declarative/toys/dynamicscene/qml/qml/PaletteItem.qml create mode 100644 examples/declarative/toys/dynamicscene/qml/qml/PerspectiveItem.qml create mode 100644 examples/declarative/toys/dynamicscene/qml/qml/Sun.qml create mode 100644 examples/declarative/toys/dynamicscene/qml/qml/itemCreation.js create mode 100644 examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/toys/tic-tac-toe/main.cpp create mode 100644 examples/declarative/toys/tic-tac-toe/qml/content/Button.qml create mode 100644 examples/declarative/toys/tic-tac-toe/qml/content/TicTac.qml create mode 100644 examples/declarative/toys/tic-tac-toe/qml/content/pics/board.png create mode 100644 examples/declarative/toys/tic-tac-toe/qml/content/pics/o.png create mode 100644 examples/declarative/toys/tic-tac-toe/qml/content/pics/x.png create mode 100644 examples/declarative/toys/tic-tac-toe/qml/content/tic-tac-toe.js create mode 100644 examples/declarative/toys/tic-tac-toe/qml/tic-tac-toe.qml create mode 100644 examples/declarative/toys/tic-tac-toe/qml/tic-tac-toe.qmlproject create mode 100644 examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/toys/tic-tac-toe/tic-tac-toe.pro create mode 100644 examples/declarative/toys/tic-tac-toe/tictactoe.desktop create mode 100644 examples/declarative/toys/tic-tac-toe/tictactoe.png create mode 100644 examples/declarative/toys/tic-tac-toe/tictactoe.pro create mode 100644 examples/declarative/toys/tic-tac-toe/tictactoe.svg create mode 100644 examples/declarative/toys/tvtennis/main.cpp create mode 100644 examples/declarative/toys/tvtennis/qml/tvtennis.qml create mode 100644 examples/declarative/toys/tvtennis/qml/tvtennis.qmlproject create mode 100644 examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/toys/tvtennis/tvtennis.desktop create mode 100644 examples/declarative/toys/tvtennis/tvtennis.png create mode 100644 examples/declarative/toys/tvtennis/tvtennis.pro create mode 100644 examples/declarative/toys/tvtennis/tvtennis.svg create mode 100644 examples/declarative/ui-components/dialcontrol/dialcontrol.desktop create mode 100644 examples/declarative/ui-components/dialcontrol/dialcontrol.png create mode 100644 examples/declarative/ui-components/dialcontrol/dialcontrol.pro create mode 100644 examples/declarative/ui-components/dialcontrol/dialcontrol.svg create mode 100644 examples/declarative/ui-components/dialcontrol/main.cpp create mode 100644 examples/declarative/ui-components/dialcontrol/qml/content/Dial.qml create mode 100644 examples/declarative/ui-components/dialcontrol/qml/content/QuitButton.qml create mode 100644 examples/declarative/ui-components/dialcontrol/qml/content/background.png create mode 100644 examples/declarative/ui-components/dialcontrol/qml/content/needle.png create mode 100644 examples/declarative/ui-components/dialcontrol/qml/content/needle_shadow.png create mode 100644 examples/declarative/ui-components/dialcontrol/qml/content/overlay.png create mode 100644 examples/declarative/ui-components/dialcontrol/qml/content/quit.png create mode 100644 examples/declarative/ui-components/dialcontrol/qml/dialcontrol.qml create mode 100644 examples/declarative/ui-components/dialcontrol/qml/dialcontrol.qmlproject create mode 100644 examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/ui-components/flipable/flipable.desktop create mode 100644 examples/declarative/ui-components/flipable/flipable.png create mode 100644 examples/declarative/ui-components/flipable/flipable.pro create mode 100644 examples/declarative/ui-components/flipable/flipable.svg create mode 100644 examples/declarative/ui-components/flipable/main.cpp create mode 100644 examples/declarative/ui-components/flipable/qml/content/5_heart.png create mode 100644 examples/declarative/ui-components/flipable/qml/content/9_club.png create mode 100644 examples/declarative/ui-components/flipable/qml/content/Card.qml create mode 100644 examples/declarative/ui-components/flipable/qml/content/back.png create mode 100644 examples/declarative/ui-components/flipable/qml/flipable.qml create mode 100644 examples/declarative/ui-components/flipable/qml/flipable.qmlproject create mode 100644 examples/declarative/ui-components/flipable/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/ui-components/flipable/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/ui-components/flipable/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/ui-components/main/main.cpp create mode 100644 examples/declarative/ui-components/main/main.desktop create mode 100644 examples/declarative/ui-components/main/main.png create mode 100644 examples/declarative/ui-components/main/main.pro create mode 100644 examples/declarative/ui-components/main/main.svg create mode 100644 examples/declarative/ui-components/main/qml/ScrollBar.qml create mode 100644 examples/declarative/ui-components/main/qml/SearchBox.qml create mode 100644 examples/declarative/ui-components/main/qml/TabWidget.qml create mode 100644 examples/declarative/ui-components/main/qml/content/ProgressBar.qml create mode 100644 examples/declarative/ui-components/main/qml/content/Spinner.qml create mode 100644 examples/declarative/ui-components/main/qml/content/background.png create mode 100644 examples/declarative/ui-components/main/qml/content/spinner-bg.png create mode 100644 examples/declarative/ui-components/main/qml/content/spinner-select.png create mode 100644 examples/declarative/ui-components/main/qml/images/clear.png create mode 100644 examples/declarative/ui-components/main/qml/images/lineedit-bg-focus.png create mode 100644 examples/declarative/ui-components/main/qml/images/lineedit-bg.png create mode 100644 examples/declarative/ui-components/main/qml/main.qml create mode 100644 examples/declarative/ui-components/main/qml/pics/niagara_falls.jpg create mode 100644 examples/declarative/ui-components/main/qml/progressbar.qmlproject create mode 100644 examples/declarative/ui-components/main/qml/scrollbar.qmlproject create mode 100644 examples/declarative/ui-components/main/qml/searchbox.qmlproject create mode 100644 examples/declarative/ui-components/main/qml/spinner.qmlproject create mode 100644 examples/declarative/ui-components/main/qml/tab.png create mode 100644 examples/declarative/ui-components/main/qml/tabwidget.qmlproject create mode 100644 examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/ui-components/progressbar/main.cpp create mode 100644 examples/declarative/ui-components/progressbar/progressbar.desktop create mode 100644 examples/declarative/ui-components/progressbar/progressbar.png create mode 100644 examples/declarative/ui-components/progressbar/progressbar.pro create mode 100644 examples/declarative/ui-components/progressbar/progressbar.svg create mode 100644 examples/declarative/ui-components/progressbar/qml/content/ProgressBar.qml create mode 100644 examples/declarative/ui-components/progressbar/qml/content/background.png create mode 100644 examples/declarative/ui-components/progressbar/qml/main.qml create mode 100644 examples/declarative/ui-components/progressbar/qml/progressbar.qmlproject create mode 100644 examples/declarative/ui-components/progressbar/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/ui-components/progressbar/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/ui-components/progressbar/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/ui-components/slideswitch/main.cpp create mode 100644 examples/declarative/ui-components/slideswitch/qml/content/Switch.qml create mode 100644 examples/declarative/ui-components/slideswitch/qml/content/background.svg create mode 100644 examples/declarative/ui-components/slideswitch/qml/content/knob.svg create mode 100644 examples/declarative/ui-components/slideswitch/qml/slideswitch.qml create mode 100644 examples/declarative/ui-components/slideswitch/qml/slideswitch.qmlproject create mode 100644 examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/README create mode 100644 examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/changelog create mode 100644 examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/compat create mode 100644 examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/control create mode 100644 examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/copyright create mode 100755 examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/rules create mode 100644 examples/declarative/ui-components/slideswitch/slideswitch.desktop create mode 100644 examples/declarative/ui-components/slideswitch/slideswitch.png create mode 100644 examples/declarative/ui-components/slideswitch/slideswitch.pro create mode 100644 examples/declarative/ui-components/slideswitch/slideswitch.svg create mode 100644 examples/declarative/xml/xmlhttprequest-example/main.cpp create mode 100644 examples/declarative/xml/xmlhttprequest-example/qml/data.xml create mode 100644 examples/declarative/xml/xmlhttprequest-example/qml/xmlhttprequest-example.qml create mode 100644 examples/declarative/xml/xmlhttprequest-example/qml/xmlhttprequest.qmlproject create mode 100644 examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.pri create mode 100644 examples/declarative/xml/xmlhttprequest-example/xmlhttprequestexample.desktop create mode 100644 examples/declarative/xml/xmlhttprequest-example/xmlhttprequestexample.png create mode 100644 examples/declarative/xml/xmlhttprequest-example/xmlhttprequestexample.pro create mode 100644 examples/declarative/xml/xmlhttprequest-example/xmlhttprequestexample.svg diff --git a/doc/src/images/qml-listview-snippet.png b/doc/src/images/qml-listview-snippet.png new file mode 100644 index 0000000000000000000000000000000000000000..0ee0ffcd0e380baacdb16093a4c5b4504688b1b8 GIT binary patch literal 2048 zcmZ`)dpHve7gu;gF1d_i=JKLtLTLW@Ka{8_k>hExDA$OS$D1W93q4o6AO} zZTj4mE^p1+$L2*uBFx;Djc@PsJ>T>7{qg;A&iS45oadb9Ip;jTljG@eT24k?Modgh z4({rFUS!QgG9jXzgNlCG%&P|G3=_prZteBX5-`}#Q6e6!7Cbq8* z?(B$2s`@@2>FN~#+_&PsY<0HU2qISut~>>QB=t7e><^362c~jSQosDx(xn~OM zH<$Cyl8&-XYVJM|u;sRR+0jZ^O$T+y)xGj+tb6!o#FD+q26S*5Po)Y!y<=w2r34PO zRZk0_cT!@PY&IXONI15w+_Rhz<9e#2d<=nlU_Sw%Z&gdvlDeRJlr4KSa>xfr)K zFfees0K^xjwXoQ1HZ`1Oyylsfwu3t!84`STtX*33Ih}q&J@0b?tnS0pr&frdg-@iI zR-zBYb|yyS5p6$(L zX>y9amZ2H|06*Rf*%GE@5a;KwAW-dLMSmxZjHo!O?l59wV(M{IfFbeaxZ$G2VSyT+o9MzsB!8XCnBSr=T# zHg^;WG#ap!+w5)O(csk{G>c?1nT-MgKXx7?E-qdxXRc~dcE73$(S&GAce8DEq(f_N zzO4$roEh)$3+kySp7z1c%DWWV4UOsgDXLONFf8zR|z#LB{^6c^54xT?x<8?+RS-Zx_6}(^Rzwn-oIq<>zL9)>>*`q-@ zbv>EhnDP6si#C_}^$j5OWuY3%x!R+FwZLi)xYPA*{YOua6Ce5NaL5*9J3U?T$j_yI zsw#qdX|v+v&{JW??G6t}lCNtQati-*&`!voVPB;CU07WLRoH!NUki$!yuI@Wl=T>!U4GQxAYkH>>Dv0b;&=;q((Z`Yu6xOu zFP*V-GZ-`)ZE0ndkdPp+pm3f3mnV28rnC8Cr_wW%ow1H^v$hdzyuUwg_=^(h#{$cw z_*JH_q@*OMAlrI4%)++XV}1-c=NS^5Fc zdPw0enlg&FPtEPJJSbbSAt)Z1&_uO7tFM=c47b8b)0Mr@Z{NH*mB_O$gDDN~@0O`y?hNUfhl2es-ySJVQKu4&N8Bk3BjH zA1lfH5@jtTBNN5Ay)-d7@XA~wG<3DJxS^Ux6U97>9PAR4V7 z@$Ku^LWW*XB_2PpjC$w^&Ig?^q#VHm?h^%h-c#w zTI%ZRhYm$|UW|BlJtpSf^m7h})6>)Q=?Ro*6VTW0_Tj&4qBiToPb_T2H z9-FEtbwIX_jEqR^-GfBhRxkZoa|%Pb78hr6KxzfLoIqXXbW#$RQ5Rufmt1v;V`F0? zep`h;XxzxtIKFZl8XPa(xzR1+h|C)^+}lQ4Ti7!wn7$3|0JtSXEWU zXgEh5kEk^;g{YREiQifYYGK(a7^&drPJqs(r|-ThK3r}bkQ){LiOApLPSe^}1Y6w8 zn@i)aK1d`yY*KQ^ZN^$YQ1M0F{Kt$-(iu?;pN{s8b){Z^49_SWINjk?vyuc2Yx=E$ zF?BrY9pYmU7g}In&%{~|MpyVevefB~tUnue@~kZ}TS2SVtjSSgt>D-}+0P68nX1fC zq+P;d(#B#%-1qknPEPO6_2dE|QgXVV)t1(hg-u=!FQ`;x+4{Dy$W`y4EZHc$&DYQ0 zpKEu|TsC%dDL~0U(I*#4OX7ZKKa;Nb7<5ebvROq}3g79S-sJc^t0gdymZWHBvO3Rb z;BvVR+6UMV8=2TUckU1fgm5gj5{G+rHRe>!|0NHBWGl7tisNdWi|B`o!CgF@o1HFY F{0nEc=H~za literal 0 HcmV?d00001 diff --git a/doc/src/snippets/declarative/grid/grid-items.qml b/doc/src/snippets/declarative/grid/grid-items.qml new file mode 100644 index 0000000..62a444d --- /dev/null +++ b/doc/src/snippets/declarative/grid/grid-items.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + width: 112; height: 112 + color: "#303030" + + Grid { + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + columns: 2 + spacing: 6 + + Rectangle { color: "#aa6666"; width: 50; height: 50 } + Rectangle { color: "#aaaa66"; width: 50; height: 50 } + Rectangle { color: "#9999aa"; width: 50; height: 50 } + Rectangle { color: "#6666aa"; width: 50; height: 50 } + } +} diff --git a/doc/src/snippets/declarative/grid/grid-no-spacing.qml b/doc/src/snippets/declarative/grid/grid-no-spacing.qml new file mode 100644 index 0000000..a6ca305 --- /dev/null +++ b/doc/src/snippets/declarative/grid/grid-no-spacing.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + width: 112; height: 112 + color: "#303030" + + Grid { + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + columns: 2 + + Rectangle { color: "#aa6666"; width: 50; height: 50 } + Rectangle { color: "#aaaa66"; width: 50; height: 50 } + Rectangle { color: "#9999aa"; width: 50; height: 50 } + Rectangle { color: "#6666aa"; width: 50; height: 50 } + } +} diff --git a/doc/src/snippets/declarative/grid/grid-spacing.qml b/doc/src/snippets/declarative/grid/grid-spacing.qml new file mode 100644 index 0000000..c03cdad --- /dev/null +++ b/doc/src/snippets/declarative/grid/grid-spacing.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [document] +import QtQuick 1.0 + +Rectangle { + width: 112; height: 112 + color: "#303030" + + Grid { + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + columns: 2 + spacing: 6 + + Rectangle { color: "#aa6666"; width: 50; height: 50 } + Rectangle { color: "#aaaa66"; width: 50; height: 50 } + Rectangle { color: "#9999aa"; width: 50; height: 50 } + Rectangle { color: "#6666aa"; width: 50; height: 50 } + } +} +//! [document] diff --git a/doc/src/snippets/declarative/listview/listview-snippet.qml b/doc/src/snippets/declarative/listview/listview-snippet.qml new file mode 100644 index 0000000..f2a260d --- /dev/null +++ b/doc/src/snippets/declarative/listview/listview-snippet.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [document] +import QtQuick 1.0 + +ListView { + width: 50; height: 200 + model: 4 + delegate: Text { + text: index; + font.pixelSize: 40 + } +} +//! [document] diff --git a/doc/src/snippets/declarative/qml-intro/images/qt-logo.svg b/doc/src/snippets/declarative/qml-intro/images/qt-logo.svg new file mode 100644 index 0000000..8c018be --- /dev/null +++ b/doc/src/snippets/declarative/qml-intro/images/qt-logo.svg @@ -0,0 +1,104 @@ + + + + + + image/svg+xml + + + + + + SVG generated by Lineform + + + + + + + + + + + + + + + diff --git a/examples/declarative/animation/basics/color-animation/coloranimation.desktop b/examples/declarative/animation/basics/color-animation/coloranimation.desktop new file mode 100644 index 0000000..b6df2d0 --- /dev/null +++ b/examples/declarative/animation/basics/color-animation/coloranimation.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=color-animation +Exec=/opt/usr/bin/color-animation +Icon=color-animation +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/animation/basics/color-animation/coloranimation.png b/examples/declarative/animation/basics/color-animation/coloranimation.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/animation/basics/color-animation/main.cpp b/examples/declarative/animation/basics/color-animation/main.cpp new file mode 100644 index 0000000..1bf8fc2 --- /dev/null +++ b/examples/declarative/animation/basics/color-animation/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/color-animation.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/animation/basics/color-animation/qml/basics.qmlproject b/examples/declarative/animation/basics/color-animation/qml/basics.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/animation/basics/color-animation/qml/basics.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/animation/basics/color-animation/qml/color-animation.qml b/examples/declarative/animation/basics/color-animation/qml/color-animation.qml new file mode 100644 index 0000000..809f391 --- /dev/null +++ b/examples/declarative/animation/basics/color-animation/qml/color-animation.qml @@ -0,0 +1,110 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import Qt.labs.particles 1.0 + +Item { + id: window + width: 640; height: 480 + + // Let's draw the sky... + Rectangle { + anchors { left: parent.left; top: parent.top; right: parent.right; bottom: parent.verticalCenter } + gradient: Gradient { + GradientStop { + position: 0.0 + SequentialAnimation on color { + loops: Animation.Infinite + ColorAnimation { from: "DeepSkyBlue"; to: "#0E1533"; duration: 5000 } + ColorAnimation { from: "#0E1533"; to: "DeepSkyBlue"; duration: 5000 } + } + } + GradientStop { + position: 1.0 + SequentialAnimation on color { + loops: Animation.Infinite + ColorAnimation { from: "SkyBlue"; to: "#437284"; duration: 5000 } + ColorAnimation { from: "#437284"; to: "SkyBlue"; duration: 5000 } + } + } + } + } + + // the sun, moon, and stars + Item { + width: parent.width; height: 2 * parent.height + NumberAnimation on rotation { from: 0; to: 360; duration: 10000; loops: Animation.Infinite } + Image { + source: "images/sun.png"; y: 10; anchors.horizontalCenter: parent.horizontalCenter + rotation: -3 * parent.rotation + } + Image { + source: "images/moon.png"; y: parent.height - 74; anchors.horizontalCenter: parent.horizontalCenter + rotation: -parent.rotation + } + Particles { + x: 0; y: parent.height/2; width: parent.width; height: parent.height/2 + source: "images/star.png"; angleDeviation: 360; velocity: 0 + velocityDeviation: 0; count: parent.width / 10; fadeInDuration: 2800 + SequentialAnimation on opacity { + loops: Animation.Infinite + NumberAnimation { from: 0; to: 1; duration: 5000 } + NumberAnimation { from: 1; to: 0; duration: 5000 } + } + } + } + + // ...and the ground. + Rectangle { + anchors { left: parent.left; top: parent.verticalCenter; right: parent.right; bottom: parent.bottom } + gradient: Gradient { + GradientStop { + position: 0.0 + SequentialAnimation on color { + loops: Animation.Infinite + ColorAnimation { from: "ForestGreen"; to: "#001600"; duration: 5000 } + ColorAnimation { from: "#001600"; to: "ForestGreen"; duration: 5000 } + } + } + GradientStop { position: 1.0; color: "DarkGreen" } + } + } +} diff --git a/examples/declarative/animation/basics/color-animation/qml/images/face-smile.png b/examples/declarative/animation/basics/color-animation/qml/images/face-smile.png new file mode 100644 index 0000000000000000000000000000000000000000..3d66d725781730c7a9376a25113164f8882d9795 GIT binary patch literal 15408 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 SNxgs4ATkn);&q}%LH`e8$k9yz literal 0 HcmV?d00001 diff --git a/examples/declarative/animation/basics/color-animation/qml/images/moon.png b/examples/declarative/animation/basics/color-animation/qml/images/moon.png new file mode 100644 index 0000000000000000000000000000000000000000..9407b2b4f012de17999fb3695ddc14fb5787289e GIT binary patch literal 2433 zcmV-{34Zp8P)Px#32;bRa{vGvuK)lWuK`{fksJU300(qQO+^RT2NVkw8~1$KVgLXD0%A)?L;(MX zkIcUS00{+2L_t(&-tE|F$ff652k_thY-fGXyUt{pOvqU4l8PpwVhOc1)R=;_9|WyZ zLM+ira0?<9W5h3Q6)l1vgo?IG)nXN?A!$i1)j~*dr5Y0rW^pnz$;@Ql{k&&+c0bH9 zQk_ZOi79@W>*0KP4)=ZipX>VH%m2^SxEfdEYWzP(cs+yKi{rxAylP+HWZ?=E6V>s# z^8@BP@r**r9t&l0^#@8gdjd+HBvJdsN@Dnago1GTwE ztyC(sA_t}-joMtHHF2PndD9^L&M)0AeKjIPmuLP{qlZ2^xFu7VqqbwuOsz((QmGWE za zEYnpBT9KY(?|a~TrR^0}AnbJ?`N__;b5o_r8X~1!xqwkC95HfKY-T35uTd$@&AlX* zX#{h%9 z3TI`8-~C6&KR8w$t_AU*9qZnfixy8(0TmbP0}8w1ugMoZ(ojA78QuJA{~9PYQgQ;#DN22U-hqE@RHLSrN)MJJ?wbd zIa^A{6iR!dcV6gRstK2`NhGd0Q_$bgtJ+Gb7RfEdU4Xv>=^5BU#{IbFJex^mL5vBT^$W zbiuM)_4U&yjvTTA^CTWJUl8!(WZM#@b%|Og5!C1_>=>x^t!vE^Dm(NSpZ%B|T@N)2#UY*}B>SW{TBsn%FA(MWBXiA07rvqSC! zNt4Ygt-gsywmADEjm%u5BNIv8U@DVpwNkmD<65guc|ql7bGy!{G@fgL1M{uHYFk*>?&mj`nF|SsYbA-)f!7wA|0iG%uwybw)QY2Y&)f$QfkT2 znvRaqVzRMDWNM;SIjfc1lSyqDiN#hFHVq9#60NRQ(2<%I-+AG10CdXuxzb$idILSz zxzRDL%v>gu$_@4O&=aXlP0a;;y9PG&WO`N&b+r1fk%>+pJvd|q2Ia~>j2&pzI+i55 zQp-9LBkTIu6;$@kq&oVxM2iiF4eNqaw)OQaS+*wDK6}mdPyhn;osUhbj#w(SV$GJh z3LTlLMk+|vhL#QV1*;OwHTpJ0#&T1!8(fQhQyyQ+57`3ET`y)|&GifoB@Vn`SFkKK zGt?D}q=t@LM%Suct)RtNs!?bS9B9S5YV+z_z7WcA$O}nx-K6*MzFZ>F*EKNL*iovL z5ibLbmUDDM38V)K+ObBWBF%z;Q>Drm$K ziAdkvH3s@d5<#xj)6=@fH%O&AR`d+@KCwPIG=M<;qo?|x-nX|9U^hAHhz&uH| zpk06{%;e@Ojanr&GPPrN>Xrvb`te)^uz^ro-dAGqidl-VDD(_j5oxZ_5N){@kko~~t$pv10XA=z4upfy(+pSk}2 zyC3b%{!b3cMF^6AUjNMx_3pdAvnnyyml_zNkh9Rs7uUi?@xIv(9=Z9!yZ${ZUfU}> zoJ$s;?tkjL_I@$FV=Z(AvA!FWUeX96g<6YRD^)((|Jb`9IkvAljA?mjpRi7z9{uS% z+V`h-4Tp)yH8Q&*UBRv#Lv>kyIs3!!`Qr7vN%02yg#YcCh&Ov*I)3twmdPx#0%A)?L;(MXkIcUS000SaNLh0L01egv01egwkZ*aM00007bV*G`2iXc00xlLP z#V}X^00AvYL_t(2&sCDmNl}EMEjCrA2w=vc5!OUM!FuD-_qwCu z^ZIk5D1g1};DjS(oC+vrU?eAsfYNG&Q)L-!!IU*zr^u&;}%JHDzo8btuQ^bBfVmTJZVFZXTRuy2CrP* zT!PphT5-)`(2H-=@k)Vt<;gk3%#kNYmKlWzY$75$v}x%FIigLAuX-!tj^E%PUE_#&1J>;Bn(m#0}>+tzhKNaRv)bo>$a@~7Ni*txp8b$W75xsJQ)&K2Nfd>P4e_{{OW z(~I@y#8eivb^SXekx4GghgWPVlaP+9 zNOe3isi&#jPHSy0`-1#=FN)3@_pe!NQI(jQonrCMFf2u6*?}!tHM6v??l8Obck?;Z rp!JTQUY&A`>woHd{mlRRh4lbP0l+XkKyuFM8 literal 0 HcmV?d00001 diff --git a/examples/declarative/animation/basics/color-animation/qml/images/sun.png b/examples/declarative/animation/basics/color-animation/qml/images/sun.png new file mode 100644 index 0000000000000000000000000000000000000000..7713ca5ce7d1223430594e4d79632a70257dce05 GIT binary patch literal 8153 zcmV;~A12_5P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOM@ z5+^2qR+x?e03TUNL_t(|+U%LxlO@M>-oKMeRo%LK-+Q~KyJtmX8w?hL08COc1&gAM zut6)R2+EG|1H%uF@S7g&(6i}3!45z9$uD+eiCWarIqh0fr!GQVN8^r~8YOT{Tfz`J2phPG;f%+o!~S@AoG9i1DAD6!&;--lRg z-5&@aKy*3?s#Wmc3LrS&(|r9DvcCY!eh~5ZI)s_=9{^sU+E{^FUIzGImwKZum}mF@ z^tVLeWe7k5pJE`)5X_&n$4-EBMXmfc;57xH2NdR3e?}77YQ;k%1Msyc3HG$cYoDFI z=SrcaR&`|XM4w_HSTEIw=0660E|{?jvE2z70E|?q1`+1g=qhG}2%ymfP?ZF(Y2+dJ zphcDkHBv>u0rGqQL%#7T1F{Ma35|0I@L!%2<<$R(@xLkcKLF2;nZ`AI^ARaT0Mv`x zodBB#AQu%mBp8HYGX%l_XW#M3TTg0V9aSyC$qW`Vk&e2Q}P;#H+D}^DSaq#}SZA5b#+YWCQ%9 zqpHvgRNJg*%?Z`PnA5Yz;FGwM2Z-I#eIxlc?Q>BT@Zg`KYX1eqb2|kLJ_mAPP1qgGg8z0Rk^x~V&3Gaf( zyIov3?FnYc-CMEObZT+?bW;l#z*p-fB*9LsvBx5*ahpYYoGD*|cdJBn9MT?#N_s%r zlestsVasc27nHQvs5Jz`MYXRpH?|rflsC`T1h|3pM;ZSo5Ch*0Q%fB2f@b1(ekwrL*WCsUn!6Yfc>_IIMiTP z%*gP)Re|cs3VuhW$oF=9(K;s%Pp-T8Y9{MD8vW`+KCcQXOw5{`(1%q(o(7G(B+z7- z1nj$|1c*Z~5E0ZWyx(OuB|PqvcXeprBg-2=-V~CREKby%bv+SZyNMbU-dOY)pQ@sf zX8zjpqF0ENb~|ZyQR$U>ti&*-Gw{DMApF|XgnpCF`RkO8Pow_a<)|oU%~D zK3zq8D*?oasqq;xSlQ&(&4O#&ZIQ%ZV4dv|%a~PCVH=+<@+>rCaUxH0@4Rali9gF; zgi;r*D>9JEMPX$ubu9K(AQB>1Ctqwac$Iu;*hUY@VCxN5gTUu8%ludsVP0U|jRc`5 zIKO~O8tZ1#5|r)Z)n^R9n-G!@2!Ay8^o?H($UK$avE8m1x9e*65{iY`dR+Xhq}3}8 z(b~?EerD@vw2`)2qOzUAbV8)@-vu=`sNN?oBI@La&V6!~y}ZFu97h1?kgEihWI_;p*cMl^Q@EfCGr{>Utllw$KfZI_y zLIR5_3L=1i{FMM+oB-Kf(7^N2%Ixet1X~m+0?pQTNGF;^(e^fccCepx_pXi~48#*l zjdNck)m{XsC}k!h;bu_yL!Aq7De|iH8t?&Ze+Pq$f9M^*cXMIQe5cmX>*SgNd%Z

b<3iL|%8C*7t4{PmZnxpJ}Z9PFOkp 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/animation/basics/color-animation/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/animation/basics/color-animation/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/animation/basics/color-animation/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/animation/basics/color-animation/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/animation/basics/color-animation/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/animation/basics/color-animation/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/animation/basics/property-animation/main.cpp b/examples/declarative/animation/basics/property-animation/main.cpp new file mode 100644 index 0000000..6ae8859 --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/property-animation.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/animation/basics/property-animation/propertyanimation.desktop b/examples/declarative/animation/basics/property-animation/propertyanimation.desktop new file mode 100644 index 0000000..6155c2f --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/propertyanimation.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=property-animation +Exec=/opt/usr/bin/property-animation +Icon=property-animation +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/animation/basics/property-animation/propertyanimation.png b/examples/declarative/animation/basics/property-animation/propertyanimation.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/animation/basics/property-animation/qml/basics.qmlproject b/examples/declarative/animation/basics/property-animation/qml/basics.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/qml/basics.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/animation/basics/property-animation/qml/color-animation.qml b/examples/declarative/animation/basics/property-animation/qml/color-animation.qml new file mode 100644 index 0000000..809f391 --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/qml/color-animation.qml @@ -0,0 +1,110 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import Qt.labs.particles 1.0 + +Item { + id: window + width: 640; height: 480 + + // Let's draw the sky... + Rectangle { + anchors { left: parent.left; top: parent.top; right: parent.right; bottom: parent.verticalCenter } + gradient: Gradient { + GradientStop { + position: 0.0 + SequentialAnimation on color { + loops: Animation.Infinite + ColorAnimation { from: "DeepSkyBlue"; to: "#0E1533"; duration: 5000 } + ColorAnimation { from: "#0E1533"; to: "DeepSkyBlue"; duration: 5000 } + } + } + GradientStop { + position: 1.0 + SequentialAnimation on color { + loops: Animation.Infinite + ColorAnimation { from: "SkyBlue"; to: "#437284"; duration: 5000 } + ColorAnimation { from: "#437284"; to: "SkyBlue"; duration: 5000 } + } + } + } + } + + // the sun, moon, and stars + Item { + width: parent.width; height: 2 * parent.height + NumberAnimation on rotation { from: 0; to: 360; duration: 10000; loops: Animation.Infinite } + Image { + source: "images/sun.png"; y: 10; anchors.horizontalCenter: parent.horizontalCenter + rotation: -3 * parent.rotation + } + Image { + source: "images/moon.png"; y: parent.height - 74; anchors.horizontalCenter: parent.horizontalCenter + rotation: -parent.rotation + } + Particles { + x: 0; y: parent.height/2; width: parent.width; height: parent.height/2 + source: "images/star.png"; angleDeviation: 360; velocity: 0 + velocityDeviation: 0; count: parent.width / 10; fadeInDuration: 2800 + SequentialAnimation on opacity { + loops: Animation.Infinite + NumberAnimation { from: 0; to: 1; duration: 5000 } + NumberAnimation { from: 1; to: 0; duration: 5000 } + } + } + } + + // ...and the ground. + Rectangle { + anchors { left: parent.left; top: parent.verticalCenter; right: parent.right; bottom: parent.bottom } + gradient: Gradient { + GradientStop { + position: 0.0 + SequentialAnimation on color { + loops: Animation.Infinite + ColorAnimation { from: "ForestGreen"; to: "#001600"; duration: 5000 } + ColorAnimation { from: "#001600"; to: "ForestGreen"; duration: 5000 } + } + } + GradientStop { position: 1.0; color: "DarkGreen" } + } + } +} diff --git a/examples/declarative/animation/basics/property-animation/qml/images/face-smile.png b/examples/declarative/animation/basics/property-animation/qml/images/face-smile.png new file mode 100644 index 0000000000000000000000000000000000000000..3d66d725781730c7a9376a25113164f8882d9795 GIT binary patch literal 15408 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 SNxgs4ATkn);&q}%LH`e8$k9yz literal 0 HcmV?d00001 diff --git a/examples/declarative/animation/basics/property-animation/qml/images/moon.png b/examples/declarative/animation/basics/property-animation/qml/images/moon.png new file mode 100644 index 0000000000000000000000000000000000000000..9407b2b4f012de17999fb3695ddc14fb5787289e GIT binary patch literal 2433 zcmV-{34Zp8P)Px#32;bRa{vGvuK)lWuK`{fksJU300(qQO+^RT2NVkw8~1$KVgLXD0%A)?L;(MX zkIcUS00{+2L_t(&-tE|F$ff652k_thY-fGXyUt{pOvqU4l8PpwVhOc1)R=;_9|WyZ zLM+ira0?<9W5h3Q6)l1vgo?IG)nXN?A!$i1)j~*dr5Y0rW^pnz$;@Ql{k&&+c0bH9 zQk_ZOi79@W>*0KP4)=ZipX>VH%m2^SxEfdEYWzP(cs+yKi{rxAylP+HWZ?=E6V>s# z^8@BP@r**r9t&l0^#@8gdjd+HBvJdsN@Dnago1GTwE ztyC(sA_t}-joMtHHF2PndD9^L&M)0AeKjIPmuLP{qlZ2^xFu7VqqbwuOsz((QmGWE za zEYnpBT9KY(?|a~TrR^0}AnbJ?`N__;b5o_r8X~1!xqwkC95HfKY-T35uTd$@&AlX* zX#{h%9 z3TI`8-~C6&KR8w$t_AU*9qZnfixy8(0TmbP0}8w1ugMoZ(ojA78QuJA{~9PYQgQ;#DN22U-hqE@RHLSrN)MJJ?wbd zIa^A{6iR!dcV6gRstK2`NhGd0Q_$bgtJ+Gb7RfEdU4Xv>=^5BU#{IbFJex^mL5vBT^$W zbiuM)_4U&yjvTTA^CTWJUl8!(WZM#@b%|Og5!C1_>=>x^t!vE^Dm(NSpZ%B|T@N)2#UY*}B>SW{TBsn%FA(MWBXiA07rvqSC! zNt4Ygt-gsywmADEjm%u5BNIv8U@DVpwNkmD<65guc|ql7bGy!{G@fgL1M{uHYFk*>?&mj`nF|SsYbA-)f!7wA|0iG%uwybw)QY2Y&)f$QfkT2 znvRaqVzRMDWNM;SIjfc1lSyqDiN#hFHVq9#60NRQ(2<%I-+AG10CdXuxzb$idILSz zxzRDL%v>gu$_@4O&=aXlP0a;;y9PG&WO`N&b+r1fk%>+pJvd|q2Ia~>j2&pzI+i55 zQp-9LBkTIu6;$@kq&oVxM2iiF4eNqaw)OQaS+*wDK6}mdPyhn;osUhbj#w(SV$GJh z3LTlLMk+|vhL#QV1*;OwHTpJ0#&T1!8(fQhQyyQ+57`3ET`y)|&GifoB@Vn`SFkKK zGt?D}q=t@LM%Suct)RtNs!?bS9B9S5YV+z_z7WcA$O}nx-K6*MzFZ>F*EKNL*iovL z5ibLbmUDDM38V)K+ObBWBF%z;Q>Drm$K ziAdkvH3s@d5<#xj)6=@fH%O&AR`d+@KCwPIG=M<;qo?|x-nX|9U^hAHhz&uH| zpk06{%;e@Ojanr&GPPrN>Xrvb`te)^uz^ro-dAGqidl-VDD(_j5oxZ_5N){@kko~~t$pv10XA=z4upfy(+pSk}2 zyC3b%{!b3cMF^6AUjNMx_3pdAvnnyyml_zNkh9Rs7uUi?@xIv(9=Z9!yZ${ZUfU}> zoJ$s;?tkjL_I@$FV=Z(AvA!FWUeX96g<6YRD^)((|Jb`9IkvAljA?mjpRi7z9{uS% z+V`h-4Tp)yH8Q&*UBRv#Lv>kyIs3!!`Qr7vN%02yg#YcCh&Ov*I)3twmdPx#0%A)?L;(MXkIcUS000SaNLh0L01egv01egwkZ*aM00007bV*G`2iXc00xlLP z#V}X^00AvYL_t(2&sCDmNl}EMEjCrA2w=vc5!OUM!FuD-_qwCu z^ZIk5D1g1};DjS(oC+vrU?eAsfYNG&Q)L-!!IU*zr^u&;}%JHDzo8btuQ^bBfVmTJZVFZXTRuy2CrP* zT!PphT5-)`(2H-=@k)Vt<;gk3%#kNYmKlWzY$75$v}x%FIigLAuX-!tj^E%PUE_#&1J>;Bn(m#0}>+tzhKNaRv)bo>$a@~7Ni*txp8b$W75xsJQ)&K2Nfd>P4e_{{OW z(~I@y#8eivb^SXekx4GghgWPVlaP+9 zNOe3isi&#jPHSy0`-1#=FN)3@_pe!NQI(jQonrCMFf2u6*?}!tHM6v??l8Obck?;Z rp!JTQUY&A`>woHd{mlRRh4lbP0l+XkKyuFM8 literal 0 HcmV?d00001 diff --git a/examples/declarative/animation/basics/property-animation/qml/images/sun.png b/examples/declarative/animation/basics/property-animation/qml/images/sun.png new file mode 100644 index 0000000000000000000000000000000000000000..7713ca5ce7d1223430594e4d79632a70257dce05 GIT binary patch literal 8153 zcmV;~A12_5P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOM@ z5+^2qR+x?e03TUNL_t(|+U%LxlO@M>-oKMeRo%LK-+Q~KyJtmX8w?hL08COc1&gAM zut6)R2+EG|1H%uF@S7g&(6i}3!45z9$uD+eiCWarIqh0fr!GQVN8^r~8YOT{Tfz`J2phPG;f%+o!~S@AoG9i1DAD6!&;--lRg z-5&@aKy*3?s#Wmc3LrS&(|r9DvcCY!eh~5ZI)s_=9{^sU+E{^FUIzGImwKZum}mF@ z^tVLeWe7k5pJE`)5X_&n$4-EBMXmfc;57xH2NdR3e?}77YQ;k%1Msyc3HG$cYoDFI z=SrcaR&`|XM4w_HSTEIw=0660E|{?jvE2z70E|?q1`+1g=qhG}2%ymfP?ZF(Y2+dJ zphcDkHBv>u0rGqQL%#7T1F{Ma35|0I@L!%2<<$R(@xLkcKLF2;nZ`AI^ARaT0Mv`x zodBB#AQu%mBp8HYGX%l_XW#M3TTg0V9aSyC$qW`Vk&e2Q}P;#H+D}^DSaq#}SZA5b#+YWCQ%9 zqpHvgRNJg*%?Z`PnA5Yz;FGwM2Z-I#eIxlc?Q>BT@Zg`KYX1eqb2|kLJ_mAPP1qgGg8z0Rk^x~V&3Gaf( zyIov3?FnYc-CMEObZT+?bW;l#z*p-fB*9LsvBx5*ahpYYoGD*|cdJBn9MT?#N_s%r zlestsVasc27nHQvs5Jz`MYXRpH?|rflsC`T1h|3pM;ZSo5Ch*0Q%fB2f@b1(ekwrL*WCsUn!6Yfc>_IIMiTP z%*gP)Re|cs3VuhW$oF=9(K;s%Pp-T8Y9{MD8vW`+KCcQXOw5{`(1%q(o(7G(B+z7- z1nj$|1c*Z~5E0ZWyx(OuB|PqvcXeprBg-2=-V~CREKby%bv+SZyNMbU-dOY)pQ@sf zX8zjpqF0ENb~|ZyQR$U>ti&*-Gw{DMApF|XgnpCF`RkO8Pow_a<)|oU%~D zK3zq8D*?oasqq;xSlQ&(&4O#&ZIQ%ZV4dv|%a~PCVH=+<@+>rCaUxH0@4Rali9gF; zgi;r*D>9JEMPX$ubu9K(AQB>1Ctqwac$Iu;*hUY@VCxN5gTUu8%ludsVP0U|jRc`5 zIKO~O8tZ1#5|r)Z)n^R9n-G!@2!Ay8^o?H($UK$avE8m1x9e*65{iY`dR+Xhq}3}8 z(b~?EerD@vw2`)2qOzUAbV8)@-vu=`sNN?oBI@La&V6!~y}ZFu97h1?kgEihWI_;p*cMl^Q@EfCGr{>Utllw$KfZI_y zLIR5_3L=1i{FMM+oB-Kf(7^N2%Ixet1X~m+0?pQTNGF;^(e^fccCepx_pXi~48#*l zjdNck)m{XsC}k!h;bu_yL!Aq7De|iH8t?&Ze+Pq$f9M^*cXMIQe5cmX>*SgNd%Z

b<3iL|%8C*7t4{PmZnxpJ}Z9PFOkp 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/animation/basics/property-animation/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/animation/basics/property-animation/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/animation/basics/property-animation/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/animation/basics/property-animation/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/README b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/README new file mode 100644 index 0000000..3f1e89d --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/README @@ -0,0 +1,6 @@ +The Debian Package propertyanimation +---------------------------- + +Comments regarding the Package + + -- Daniel Molkentin Thu, 18 Nov 2010 16:22:35 +0100 diff --git a/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/changelog b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/changelog new file mode 100644 index 0000000..4e1c4df --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/changelog @@ -0,0 +1,5 @@ +propertyanimation (0.0.1) unstable; urgency=low + + * Initial Release. + + -- Daniel Molkentin Thu, 18 Nov 2010 16:22:35 +0100 diff --git a/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/compat b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/compat @@ -0,0 +1 @@ +7 diff --git a/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/control b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/control new file mode 100644 index 0000000..cc2e5ef --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/control @@ -0,0 +1,13 @@ +Source: propertyanimation +Section: user/hidden +Priority: optional +Maintainer: Daniel Molkentin +Build-Depends: debhelper (>= 5), libqt4-dev +Standards-Version: 3.7.3 +Homepage: + +Package: propertyanimation +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: + diff --git a/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/copyright b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/copyright new file mode 100644 index 0000000..e197e37 --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/copyright @@ -0,0 +1,40 @@ +This package was debianized by Daniel Molkentin on +Thu, 18 Nov 2010 16:22:35 +0100. + +It was downloaded from + +Upstream Author(s): + + + + +Copyright: + + + + +License: + + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2010, Daniel Molkentin and +is licensed under the GPL, see above. + + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. diff --git a/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/rules b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/rules new file mode 100755 index 0000000..e838932 --- /dev/null +++ b/examples/declarative/animation/basics/property-animation/qtc_packaging/debian_fremantle/rules @@ -0,0 +1,91 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/propertyanimation.sgml > propertyanimation.1 + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + $(MAKE) clean + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/propertyanimation. + $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/propertyanimation install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + # dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + # dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/examples/declarative/animation/behaviors/behavior-example/behaviorexample.desktop b/examples/declarative/animation/behaviors/behavior-example/behaviorexample.desktop new file mode 100644 index 0000000..95af017 --- /dev/null +++ b/examples/declarative/animation/behaviors/behavior-example/behaviorexample.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=behavior-example +Exec=/opt/usr/bin/behavior-example +Icon=behavior-example +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/animation/behaviors/behavior-example/behaviorexample.png b/examples/declarative/animation/behaviors/behavior-example/behaviorexample.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 zcmV-O4Y%@%P)ht(u000b3 zNkl+r+m%F_C;*wliAId+l;Bw~NnREVgX6DSfv+(~Ms$%J>UH~1TiKG?i==6q;ABhC^ z?Fa;PP1zvRpk{yshy{xNzW=_}wlshM$8bMz0ywE)|E?{*$bARG!R}74&+E~=fBGSCH_q~3rZLE`kFZF`Zg5p_(F9S`V+!f^EBN1AfbVO>l zV*?2wmM7*K$N;DTgsUiqL8d@0kV=|_n&`jpzizedO9)tWdFTh8K`^#$^77P!9khgW zY!Rx>mStcADTf#t1$7O$0t|o*0XKn3gatG^hba2{-neB1+ztE?*sLjd^k^HO+7rUI z#U<*@0G0o{w7eb^h!lqynFTclTrU#CporX1FqyNMH+0Ern&N9m&#V&xj_U(F2mB2J zt<46%_t{NEnvD|IFZF~~d&Uw1T_g&S##v*=ONjw)029C*A{l`GV{0SE$m`(;jw}{N znskEx<>q}Q<12YZEl*LE3Ih306gaq~kqj^oOalLlQhy0dt;u@8$p7^Lt&4>oL!oPx z#8s8=%aut5!dB!t3TKe~K&L~H1lMXjK+#OKRHI5GD|IzkUH?i3OO@}-LaMj9G8lz# z%l5CTmMR6d2)5Xi&TXYMH@9`QFE#2K3&XXz*HoZoHYmE}} z2gzCqV(C$)Qa4CsW6qOGtI%%!WV`fQi$l5ySZr*mjmtm*mMy$LnBc~UpU3Zbir>EL z5q7k1!|(B;ltK`4R+^dg2p6W_d^>jD_u(zaPCr^^8@hrk3G%j4n9z3e5I$h zHt*%PdcQ(f^FBoE0!itt&AS&D@SD9H-ToBEcllZB+s zk=+N-HEn5kb?LNr0_tj96^ef~kie^2ICbnKhHki|lDRofU;aApOn#Gh#$V=lzx5aV z$Jx^^nO%`X>~HULygE0g(X z`b{py-oel{4)1Lt5=ryItKVXDcD&f3()r}32l444EK3-kNE2=Dpl9>WCG-onSlD9c zr%N?M8yN>I$G3v%iKcWshT`^}P5k(+E4)4M9*-UV z&4O$+)XU|82r~)zlcQfDWVF&5ZZFgaJuU2x93q*UBV#3rrAM(ON9|alVFXl)&YX@% zrn2~rAcuB*qU@=(8D~0mGavLg@|)W{pqZSz_G=dbK~FOQb~8TtAx|87jOIX-tF6w^ zE}q=qk0lm!nQ>k||12}9;gZF6-KIckC(i%2z(g#|rlvN!+qYIAV1cALUyv7|DWDVZ zX$(wW$FeP#{K4*hcr=|#P$&$|hffa@Fv3e>f?B$+m4Id1%9%neo+H}QK_nQiKtO_= zl`f2u2zU)e(5EpuKSS2cx#Vx(wu^As=Cu#baASJJRhKn0OvcBFC8vpJ=CQ?My|Bz# zz=^_Co`6)^qH{|deviLQGGit4^Rx(EQ~10ZbLj+GD@TChb9=j@^z6)V>N`*Kk5B$J ze{}qdg}TxBWxn^(KOkbGYZ?h_s*YG=wFFc=3zU$c6s9F)Od%3%#;D-BreyPxTM?QD z9z!FUO_9xIol|}uej|j>6Ch{jux$5pqD;~k-A=y!k1x!=$7+wtBz2KR47Sqly&wN$2gymjWt&D)GPzc~L zAmG!PO3acmvt?3VJ(xek7m2e4a;8m_*N@k56OcCJydSwcE%(-LUHTXJ-cXJh2-bmfHU`sYDbPJpf{I$AtTF3d1C zH&IsaGnxn(&H4YF1v8Tqk{O%MaC?~t#L~l6(YG zroAqg9-GOc<1ITrCv$U*#4lBy$A<1jDGgg}EZeNG>nIwv2-NKXBF;O*?VUc}xNw${ z*m#*_PwU-;JgtCDCMW!QFwTLkdpNTDPM6%s!bPT2Hw$NqtmQsLwFSE9^d4klv>kuu zZd!fa1c|QgD-B(7M^6)jQ&;)P2R|#5j5hUhWb30~dpLW3j%=!huYUfIUD+N> zOg@-AL&i!H^y~OMFf=vnYA0y4aPszNc=n-}`150b%a-Pyg-mjzVN^c`m%|q5>GIPZ z)p_a6zw_{cV|2Afi)<>LquYK5zrCH-%oUz{_%43qwmV&I49%Y7;>=qpG@632BkJd8 z7tS&=JI>a~=7L-}5GEW5uWK#(MxIsFk7E1)e|s&!n>Mz1-0J+_UopfA-KH za&OO}CBYF)r*3lQ+IL8s3xE?@_8p8cZ(Za0(=T#kW(3nRvBe^5rI<=y=iJzj8B1J2 z)xTk_2vt0wIwK;&mJTnEe7cPvy!#3vUx24S_hs6eA~m`ZMiwsd)1j9bUbs-$5k#P~ z)x#6V+ZdaEotMsDX783=1ie1uxfx>V5#reyZ0s7Z)YeMCilGpJ-Ccf~Lpndd_+765 z+a;d7>m;AnImz;OWWy}P>n)oTRnX!^lEY3ZF{6#Dc zP3eWtdbxc=2v{URq3CS&v1OCaF9zOYVEn2}rp4FECpsQLQ$~gR152@@J>5iMHTEp9 zmbgOTwypq)+ybwkf6Hx_(&+2{0*~+cD~@)35x?GCF?F^=+yrLVZhq-;c$IqD0$m+m zc5U(T@;g7`=FF(8-fuK>pz}eFZ2dewBe?pGiugIGL}Lk9BRn3({hx|39KXWzKl+!7 zC&mJ5-bPt0t45OC0A2y;?_2xbL3dhw4R4!7U~7k$#~*0t+{M#;_4_fNIQ%GkqPqzC z{Fru@iNqkLopCayuA3jF3DBx@F$?M&px$p>POu^EIL3&;mUb_j@9_{%y~nH9KjiJH zFn*68OEP4v6sDamNuAY`{8WHU0^b1jB8W8VcDg$bSTz|%BSf72I~;Uwcw}XkOeQa- zN>|#7#+$$bFbQ%K=Z5G-Q2zs*1I$KV%`Xz*a{tmd#PwW{T{?%<;++x}lOt6OjpN+* zyh-s&?Bdn?QBX0Q%hnAW@#+Lr-J9yYq*QhOS|x@K=8e3ZH*^eS1|bPb`j36QKfG8Z zAP&3?+zy0mKT_2r@`lPZFbrxaZ{(t(qreQ11hK(Sf8VPgtFe^{`1WNu)oTGS0vV9M z1KO%TqAZ*rM@-}VIAYK-Qmz0)j`740Nr19ZN&5TVzSVZtAOOgdU;^L7B5vsF1ravm zc*acLs3D53I|MQUY8q4m3!7f(?^>Tb{p$($g#A)4e1B9s{@lL%?>o@kZ5V1WZ~Qcn zz|bu+Ir<-X<5ugvfemb60~^@D1~#yPwc`H(pHeSaefwW^{L9a%BKPWN%_+ eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/animation/behaviors/behavior-example/main.cpp b/examples/declarative/animation/behaviors/behavior-example/main.cpp new file mode 100644 index 0000000..5797077 --- /dev/null +++ b/examples/declarative/animation/behaviors/behavior-example/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/behavior-example.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/animation/behaviors/behavior-example/qml/SideRect.qml b/examples/declarative/animation/behaviors/behavior-example/qml/SideRect.qml new file mode 100644 index 0000000..9517421 --- /dev/null +++ b/examples/declarative/animation/behaviors/behavior-example/qml/SideRect.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: myRect + + property string text + + width: 75; height: 50 + radius: 6 + color: "#646464" + border.width: 4; border.color: "white" + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: { + focusRect.x = myRect.x; + focusRect.y = myRect.y; + focusRect.text = myRect.text; + } + } +} diff --git a/examples/declarative/animation/behaviors/behavior-example/qml/behavior-example.qml b/examples/declarative/animation/behaviors/behavior-example/qml/behavior-example.qml new file mode 100644 index 0000000..3e050ab --- /dev/null +++ b/examples/declarative/animation/behaviors/behavior-example/qml/behavior-example.qml @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + width: 600; height: 400 + color: "#343434" + + Rectangle { + anchors.centerIn: parent + width: 200; height: 200 + radius: 30 + color: "transparent" + border.width: 4; border.color: "white" + + + SideRect { + id: leftRect + anchors { verticalCenter: parent.verticalCenter; horizontalCenter: parent.left } + text: "Left" + } + + SideRect { + id: rightRect + anchors { verticalCenter: parent.verticalCenter; horizontalCenter: parent.right } + text: "Right" + } + + SideRect { + id: topRect + anchors { verticalCenter: parent.top; horizontalCenter: parent.horizontalCenter } + text: "Top" + } + + SideRect { + id: bottomRect + anchors { verticalCenter: parent.bottom; horizontalCenter: parent.horizontalCenter } + text: "Bottom" + } + + + Rectangle { + id: focusRect + + property string text + + x: 62; y: 75; width: 75; height: 50 + radius: 6 + border.width: 4; border.color: "white" + color: "firebrick" + + // Set an 'elastic' behavior on the focusRect's x property. + Behavior on x { + NumberAnimation { easing.type: Easing.OutElastic; easing.amplitude: 3.0; easing.period: 2.0; duration: 300 } + } + + // Set an 'elastic' behavior on the focusRect's y property. + Behavior on y { + NumberAnimation { easing.type: Easing.OutElastic; easing.amplitude: 3.0; easing.period: 2.0; duration: 300 } + } + + Text { + id: focusText + text: focusRect.text + anchors.centerIn: parent + color: "white" + font.pixelSize: 16; font.bold: true + + // Set a behavior on the focusText's x property: + // Set the opacity to 0, set the new text value, then set the opacity back to 1. + Behavior on text { + SequentialAnimation { + NumberAnimation { target: focusText; property: "opacity"; to: 0; duration: 150 } + NumberAnimation { target: focusText; property: "opacity"; to: 1; duration: 150 } + } + } + } + } + } +} diff --git a/examples/declarative/animation/behaviors/behavior-example/qml/behaviors.qmlproject b/examples/declarative/animation/behaviors/behavior-example/qml/behaviors.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/animation/behaviors/behavior-example/qml/behaviors.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/animation/behaviors/behavior-example/qml/wigglytext.qml b/examples/declarative/animation/behaviors/behavior-example/qml/wigglytext.qml new file mode 100644 index 0000000..6cd93ab --- /dev/null +++ b/examples/declarative/animation/behaviors/behavior-example/qml/wigglytext.qml @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: container + + property string text: "Drag this text..." + property bool animated: true + + width: 640; height: 480; color: "#474747"; focus: true + + Keys.onPressed: { + if (event.key == Qt.Key_Delete || event.key == Qt.Key_Backspace) + container.remove() + else if (event.text != "") { + container.append(event.text) + } + } + + function append(text) { + container.animated = false + var lastLetter = container.children[container.children.length - 1] + var newLetter = letterComponent.createObject(container) + newLetter.text = text + newLetter.follow = lastLetter + container.animated = true + } + + function remove() { + if (container.children.length) + container.children[container.children.length - 1].destroy() + } + + function doLayout() { + var follow = null + for (var i = 0; i < container.text.length; ++i) { + var newLetter = letterComponent.createObject(container) + newLetter.text = container.text[i] + newLetter.follow = follow + follow = newLetter + } + } + + Component { + id: letterComponent + Text { + id: letter + property variant follow + + x: follow ? follow.x + follow.width : container.width / 3 + y: follow ? follow.y : container.height / 2 + + font.pixelSize: 40; font.bold: true + color: "#999999"; styleColor: "#222222"; style: Text.Raised + + MouseArea { + anchors.fill: parent + drag.target: letter; drag.axis: Drag.XandYAxis + onPressed: letter.color = "#dddddd" + onReleased: letter.color = "#999999" + } + + Behavior on x { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } } + Behavior on y { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } } + } + } + + Component.onCompleted: doLayout() +} diff --git a/examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/animation/behaviors/behavior-example/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/animation/easing/easing.desktop b/examples/declarative/animation/easing/easing.desktop new file mode 100644 index 0000000..56437b5 --- /dev/null +++ b/examples/declarative/animation/easing/easing.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=easing +Exec=/opt/usr/bin/easing +Icon=easing +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/animation/easing/easing.png b/examples/declarative/animation/easing/easing.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/animation/easing/main.cpp b/examples/declarative/animation/easing/main.cpp new file mode 100644 index 0000000..084c83a --- /dev/null +++ b/examples/declarative/animation/easing/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/easing.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/animation/easing/qml/content/QuitButton.qml b/examples/declarative/animation/easing/qml/content/QuitButton.qml new file mode 100644 index 0000000..cbbf916 --- /dev/null +++ b/examples/declarative/animation/easing/qml/content/QuitButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +Image { + source: "quit.png" + scale: quitMouse.pressed ? 0.8 : 1.0 + smooth: quitMouse.pressed + MouseArea { + id: quitMouse + anchors.fill: parent + anchors.margins: -10 + onClicked: Qt.quit() + } +} diff --git a/examples/declarative/animation/easing/qml/content/quit.png b/examples/declarative/animation/easing/qml/content/quit.png new file mode 100644 index 0000000000000000000000000000000000000000..b822057d4e6a6ac5ed2b7d20fb27d5368b0e831b GIT binary patch literal 583 zcmV-N0=WH&P)iLVjkLUbqUBm)|aiE*K3 zcJA~s1Q&7dB@h+jHEskYS%e6>@m-Yfs4;jc7hOGcW~w{mf!>^|^Q)qYI!%m`7$cH` zr2CS3Wp1xe(q&0^tGO!nNK%yaN7CX5*sP>qsb;Cn2X_y^1E5C{0eI-{H>e4BzXYrT z?UcIh?n?kIN%w$TnYzC~&&*Z^u#3PmU_4WECjcwJm&{-Qmfih&1)FKWz5#DrF-F{d z0@wf!*X(o=aNv0j_8piqvk$EpW4ZdVgdWNi!~~DkVAE!{1<(f*Iti@Tpt;zEL2*v~ zFtg9V8Q|*(*bksv#fElR+39g$6F69d?EoD!+Z-GS!*c;RLjLf}7zd8#28KX)?*gy( z00Z#Y-4_}`cb`t!z6Pv}G2n^2U&(^*J_Wo6_GgNBC@vv~K6Ur`U0}l2YOrmf3!Dbj zfX+ejmOH?k2JF04~q4ZzJB>?d%c!~o3f6VRb}hJ(=tW&^O0R?T7S zgH>ksu?Bq!Tq~R90ZH#tv)q<+c7z6dQj({d7n0ijj$J|5B%S+@U%)9z%Ow_L3 Vh5vkKWu5>4002ovPDHLkV1nYy`N{wQ literal 0 HcmV?d00001 diff --git a/examples/declarative/animation/easing/qml/easing.qml b/examples/declarative/animation/easing/qml/easing.qml new file mode 100644 index 0000000..fd974d9 --- /dev/null +++ b/examples/declarative/animation/easing/qml/easing.qml @@ -0,0 +1,159 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "content" + +Rectangle { + id: window + width: 600; height: 460; color: "#232323" + + ListModel { + id: easingTypes + ListElement { name: "Easing.Linear"; type: Easing.Linear; ballColor: "DarkRed" } + ListElement { name: "Easing.InQuad"; type: Easing.InQuad; ballColor: "IndianRed" } + ListElement { name: "Easing.OutQuad"; type: Easing.OutQuad; ballColor: "Salmon" } + ListElement { name: "Easing.InOutQuad"; type: Easing.InOutQuad; ballColor: "Tomato" } + ListElement { name: "Easing.OutInQuad"; type: Easing.OutInQuad; ballColor: "DarkOrange" } + ListElement { name: "Easing.InCubic"; type: Easing.InCubic; ballColor: "Gold" } + ListElement { name: "Easing.OutCubic"; type: Easing.OutCubic; ballColor: "Yellow" } + ListElement { name: "Easing.InOutCubic"; type: Easing.InOutCubic; ballColor: "PeachPuff" } + ListElement { name: "Easing.OutInCubic"; type: Easing.OutInCubic; ballColor: "Thistle" } + ListElement { name: "Easing.InQuart"; type: Easing.InQuart; ballColor: "Orchid" } + ListElement { name: "Easing.OutQuart"; type: Easing.OutQuart; ballColor: "Purple" } + ListElement { name: "Easing.InOutQuart"; type: Easing.InOutQuart; ballColor: "SlateBlue" } + ListElement { name: "Easing.OutInQuart"; type: Easing.OutInQuart; ballColor: "Chartreuse" } + ListElement { name: "Easing.InQuint"; type: Easing.InQuint; ballColor: "LimeGreen" } + ListElement { name: "Easing.OutQuint"; type: Easing.OutQuint; ballColor: "SeaGreen" } + ListElement { name: "Easing.InOutQuint"; type: Easing.InOutQuint; ballColor: "DarkGreen" } + ListElement { name: "Easing.OutInQuint"; type: Easing.OutInQuint; ballColor: "Olive" } + ListElement { name: "Easing.InSine"; type: Easing.InSine; ballColor: "DarkSeaGreen" } + ListElement { name: "Easing.OutSine"; type: Easing.OutSine; ballColor: "Teal" } + ListElement { name: "Easing.InOutSine"; type: Easing.InOutSine; ballColor: "Turquoise" } + ListElement { name: "Easing.OutInSine"; type: Easing.OutInSine; ballColor: "SteelBlue" } + ListElement { name: "Easing.InExpo"; type: Easing.InExpo; ballColor: "SkyBlue" } + ListElement { name: "Easing.OutExpo"; type: Easing.OutExpo; ballColor: "RoyalBlue" } + ListElement { name: "Easing.InOutExpo"; type: Easing.InOutExpo; ballColor: "MediumBlue" } + ListElement { name: "Easing.OutInExpo"; type: Easing.OutInExpo; ballColor: "MidnightBlue" } + ListElement { name: "Easing.InCirc"; type: Easing.InCirc; ballColor: "CornSilk" } + ListElement { name: "Easing.OutCirc"; type: Easing.OutCirc; ballColor: "Bisque" } + ListElement { name: "Easing.InOutCirc"; type: Easing.InOutCirc; ballColor: "RosyBrown" } + ListElement { name: "Easing.OutInCirc"; type: Easing.OutInCirc; ballColor: "SandyBrown" } + ListElement { name: "Easing.InElastic"; type: Easing.InElastic; ballColor: "DarkGoldenRod" } + ListElement { name: "Easing.OutElastic"; type: Easing.OutElastic; ballColor: "Chocolate" } + ListElement { name: "Easing.InOutElastic"; type: Easing.InOutElastic; ballColor: "SaddleBrown" } + ListElement { name: "Easing.OutInElastic"; type: Easing.OutInElastic; ballColor: "Brown" } + ListElement { name: "Easing.InBack"; type: Easing.InBack; ballColor: "Maroon" } + ListElement { name: "Easing.OutBack"; type: Easing.OutBack; ballColor: "LavenderBlush" } + ListElement { name: "Easing.InOutBack"; type: Easing.InOutBack; ballColor: "MistyRose" } + ListElement { name: "Easing.OutInBack"; type: Easing.OutInBack; ballColor: "Gainsboro" } + ListElement { name: "Easing.OutBounce"; type: Easing.OutBounce; ballColor: "Silver" } + ListElement { name: "Easing.InBounce"; type: Easing.InBounce; ballColor: "DimGray" } + ListElement { name: "Easing.InOutBounce"; type: Easing.InOutBounce; ballColor: "SlateGray" } + ListElement { name: "Easing.OutInBounce"; type: Easing.OutInBounce; ballColor: "DarkSlateGray" } + } + + Component { + id: delegate + + Item { + height: 56; width: window.width + + Text { text: name; anchors.centerIn: parent; color: "White" } + + Rectangle { + id: slot1; color: "#121212"; x: 30; height: 46; width: 46 + border.color: "#343434"; border.width: 1; radius: 12 + anchors.verticalCenter: parent.verticalCenter + } + + Rectangle { + id: slot2; color: "#121212"; x: window.width - 76; height: 46; width: 46 + border.color: "#343434"; border.width: 1; radius: 12 + anchors.verticalCenter: parent.verticalCenter + } + + Rectangle { + id: rect; x: 30; color: "#454545" + border.color: "White"; border.width: 2 + height: 46; width: 46; radius: 12 + anchors.verticalCenter: parent.verticalCenter + + MouseArea { + onClicked: if (rect.state == '') rect.state = "right"; else rect.state = '' + anchors.fill: parent + anchors.margins: -5 // Make MouseArea bigger than the rectangle, itself + } + + states : State { + name: "right" + PropertyChanges { target: rect; x: window.width - 76; color: ballColor } + } + + transitions: Transition { + NumberAnimation { properties: "x"; easing.type: type; duration: 1000 } + ColorAnimation { properties: "color"; easing.type: type; duration: 1000 } + } + } + } + } + + Flickable { + anchors.fill: parent + contentHeight: layout.height+50 + Rectangle { + id: titlePane + color: "#444444" + height: 35 + anchors { top: parent.top; left: parent.left; right: parent.right } + QuitButton { + id: quitButton + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 10 + } + } + Column { + id: layout + anchors { top: titlePane.bottom; topMargin: 10; left: parent.left; right: parent.right } + Repeater { model: easingTypes; delegate: delegate } + } + } +} diff --git a/examples/declarative/animation/easing/qml/easing.qmlproject b/examples/declarative/animation/easing/qml/easing.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/animation/easing/qml/easing.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/animation/easing/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/animation/states/main.cpp b/examples/declarative/animation/states/main.cpp new file mode 100644 index 0000000..fec4662 --- /dev/null +++ b/examples/declarative/animation/states/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/states.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/animation/states/qml/qt-logo.png b/examples/declarative/animation/states/qml/qt-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..14ddf2a0289e64c686b34712b8754bc4baac2726 GIT binary patch literal 5149 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/animation/states/qml/states.qml b/examples/declarative/animation/states/qml/states.qml new file mode 100644 index 0000000..a9046eb --- /dev/null +++ b/examples/declarative/animation/states/qml/states.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: page + width: 640; height: 480 + color: "#343434" + + Image { + id: userIcon + x: topLeftRect.x; y: topLeftRect.y + source: "qt-logo.png" + } + + Rectangle { + id: topLeftRect + + anchors { left: parent.left; top: parent.top; leftMargin: 10; topMargin: 20 } + width: 46; height: 54 + color: "Transparent"; border.color: "Gray"; radius: 6 + + // Clicking in here sets the state to the default state, returning the image to + // its initial position + MouseArea { anchors.fill: parent; onClicked: page.state = '' } + } + + Rectangle { + id: middleRightRect + + anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 20 } + width: 46; height: 54 + color: "Transparent"; border.color: "Gray"; radius: 6 + + // Clicking in here sets the state to 'middleRight' + MouseArea { anchors.fill: parent; onClicked: page.state = 'middleRight' } + } + + Rectangle { + id: bottomLeftRect + + anchors { left: parent.left; bottom: parent.bottom; leftMargin: 10; bottomMargin: 20 } + width: 46; height: 54 + color: "Transparent"; border.color: "Gray"; radius: 6 + + // Clicking in here sets the state to 'bottomLeft' + MouseArea { anchors.fill: parent; onClicked: page.state = 'bottomLeft' } + } + + states: [ + // In state 'middleRight', move the image to middleRightRect + State { + name: "middleRight" + PropertyChanges { target: userIcon; x: middleRightRect.x; y: middleRightRect.y } + }, + + // In state 'bottomLeft', move the image to bottomLeftRect + State { + name: "bottomLeft" + PropertyChanges { target: userIcon; x: bottomLeftRect.x; y: bottomLeftRect.y } + } + ] +} diff --git a/examples/declarative/animation/states/qml/states.qmlproject b/examples/declarative/animation/states/qml/states.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/animation/states/qml/states.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/animation/states/qml/transitions.qml b/examples/declarative/animation/states/qml/transitions.qml new file mode 100644 index 0000000..ea73b82 --- /dev/null +++ b/examples/declarative/animation/states/qml/transitions.qml @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +/* + This is exactly the same as states.qml, except that we have appended + a set of transitions to apply animations when the item changes + between each state. +*/ + +Rectangle { + id: page + width: 640; height: 480 + color: "#343434" + + Image { + id: userIcon + x: topLeftRect.x; y: topLeftRect.y + source: "qt-logo.png" + } + + Rectangle { + id: topLeftRect + + anchors { left: parent.left; top: parent.top; leftMargin: 10; topMargin: 20 } + width: 46; height: 54 + color: "Transparent"; border.color: "Gray"; radius: 6 + + // Clicking in here sets the state to the default state, returning the image to + // its initial position + MouseArea { anchors.fill: parent; onClicked: page.state = '' } + } + + Rectangle { + id: middleRightRect + + anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 20 } + width: 46; height: 54 + color: "Transparent"; border.color: "Gray"; radius: 6 + + // Clicking in here sets the state to 'middleRight' + MouseArea { anchors.fill: parent; onClicked: page.state = 'middleRight' } + } + + Rectangle { + id: bottomLeftRect + + anchors { left: parent.left; bottom: parent.bottom; leftMargin: 10; bottomMargin: 20 } + width: 46; height: 54 + color: "Transparent"; border.color: "Gray"; radius: 6 + + // Clicking in here sets the state to 'bottomLeft' + MouseArea { anchors.fill: parent; onClicked: page.state = 'bottomLeft' } + } + + states: [ + // In state 'middleRight', move the image to middleRightRect + State { + name: "middleRight" + PropertyChanges { target: userIcon; x: middleRightRect.x; y: middleRightRect.y } + }, + + // In state 'bottomLeft', move the image to bottomLeftRect + State { + name: "bottomLeft" + PropertyChanges { target: userIcon; x: bottomLeftRect.x; y: bottomLeftRect.y } + } + ] + + // Transitions define how the properties change when the item moves between each state + transitions: [ + + // When transitioning to 'middleRight' move x,y over a duration of 1 second, + // with OutBounce easing function. + Transition { + from: "*"; to: "middleRight" + NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce; duration: 1000 } + }, + + // When transitioning to 'bottomLeft' move x,y over a duration of 2 seconds, + // with InOutQuad easing function. + Transition { + from: "*"; to: "bottomLeft" + NumberAnimation { properties: "x,y"; easing.type: Easing.InOutQuad; duration: 2000 } + }, + + // For any other state changes move x,y linearly over duration of 200ms. + Transition { + NumberAnimation { properties: "x,y"; duration: 200 } + } + ] +} diff --git a/examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/animation/states/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/animation/states/states.desktop b/examples/declarative/animation/states/states.desktop new file mode 100644 index 0000000..31eb8d5 --- /dev/null +++ b/examples/declarative/animation/states/states.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=states +Exec=/opt/usr/bin/states +Icon=states +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/animation/states/states.png b/examples/declarative/animation/states/states.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 zcmV-O4Y%@%P)ht(u000b3 zNkl+r+m%F_C;*wliAId+l;Bw~NnREVgX6DSfv+(~Ms$%J>UH~1TiKG?i==6q;ABhC^ z?Fa;PP1zvRpk{yshy{xNzW=_}wlshM$8bMz0ywE)|E?{*$bARG!R}74&+E~=fBGSCH_q~3rZLE`kFZF`Zg5p_(F9S`V+!f^EBN1AfbVO>l zV*?2wmM7*K$N;DTgsUiqL8d@0kV=|_n&`jpzizedO9)tWdFTh8K`^#$^77P!9khgW zY!Rx>mStcADTf#t1$7O$0t|o*0XKn3gatG^hba2{-neB1+ztE?*sLjd^k^HO+7rUI z#U<*@0G0o{w7eb^h!lqynFTclTrU#CporX1FqyNMH+0Ern&N9m&#V&xj_U(F2mB2J zt<46%_t{NEnvD|IFZF~~d&Uw1T_g&S##v*=ONjw)029C*A{l`GV{0SE$m`(;jw}{N znskEx<>q}Q<12YZEl*LE3Ih306gaq~kqj^oOalLlQhy0dt;u@8$p7^Lt&4>oL!oPx z#8s8=%aut5!dB!t3TKe~K&L~H1lMXjK+#OKRHI5GD|IzkUH?i3OO@}-LaMj9G8lz# z%l5CTmMR6d2)5Xi&TXYMH@9`QFE#2K3&XXz*HoZoHYmE}} z2gzCqV(C$)Qa4CsW6qOGtI%%!WV`fQi$l5ySZr*mjmtm*mMy$LnBc~UpU3Zbir>EL z5q7k1!|(B;ltK`4R+^dg2p6W_d^>jD_u(zaPCr^^8@hrk3G%j4n9z3e5I$h zHt*%PdcQ(f^FBoE0!itt&AS&D@SD9H-ToBEcllZB+s zk=+N-HEn5kb?LNr0_tj96^ef~kie^2ICbnKhHki|lDRofU;aApOn#Gh#$V=lzx5aV z$Jx^^nO%`X>~HULygE0g(X z`b{py-oel{4)1Lt5=ryItKVXDcD&f3()r}32l444EK3-kNE2=Dpl9>WCG-onSlD9c zr%N?M8yN>I$G3v%iKcWshT`^}P5k(+E4)4M9*-UV z&4O$+)XU|82r~)zlcQfDWVF&5ZZFgaJuU2x93q*UBV#3rrAM(ON9|alVFXl)&YX@% zrn2~rAcuB*qU@=(8D~0mGavLg@|)W{pqZSz_G=dbK~FOQb~8TtAx|87jOIX-tF6w^ zE}q=qk0lm!nQ>k||12}9;gZF6-KIckC(i%2z(g#|rlvN!+qYIAV1cALUyv7|DWDVZ zX$(wW$FeP#{K4*hcr=|#P$&$|hffa@Fv3e>f?B$+m4Id1%9%neo+H}QK_nQiKtO_= zl`f2u2zU)e(5EpuKSS2cx#Vx(wu^As=Cu#baASJJRhKn0OvcBFC8vpJ=CQ?My|Bz# zz=^_Co`6)^qH{|deviLQGGit4^Rx(EQ~10ZbLj+GD@TChb9=j@^z6)V>N`*Kk5B$J ze{}qdg}TxBWxn^(KOkbGYZ?h_s*YG=wFFc=3zU$c6s9F)Od%3%#;D-BreyPxTM?QD z9z!FUO_9xIol|}uej|j>6Ch{jux$5pqD;~k-A=y!k1x!=$7+wtBz2KR47Sqly&wN$2gymjWt&D)GPzc~L zAmG!PO3acmvt?3VJ(xek7m2e4a;8m_*N@k56OcCJydSwcE%(-LUHTXJ-cXJh2-bmfHU`sYDbPJpf{I$AtTF3d1C zH&IsaGnxn(&H4YF1v8Tqk{O%MaC?~t#L~l6(YG zroAqg9-GOc<1ITrCv$U*#4lBy$A<1jDGgg}EZeNG>nIwv2-NKXBF;O*?VUc}xNw${ z*m#*_PwU-;JgtCDCMW!QFwTLkdpNTDPM6%s!bPT2Hw$NqtmQsLwFSE9^d4klv>kuu zZd!fa1c|QgD-B(7M^6)jQ&;)P2R|#5j5hUhWb30~dpLW3j%=!huYUfIUD+N> zOg@-AL&i!H^y~OMFf=vnYA0y4aPszNc=n-}`150b%a-Pyg-mjzVN^c`m%|q5>GIPZ z)p_a6zw_{cV|2Afi)<>LquYK5zrCH-%oUz{_%43qwmV&I49%Y7;>=qpG@632BkJd8 z7tS&=JI>a~=7L-}5GEW5uWK#(MxIsFk7E1)e|s&!n>Mz1-0J+_UopfA-KH za&OO}CBYF)r*3lQ+IL8s3xE?@_8p8cZ(Za0(=T#kW(3nRvBe^5rI<=y=iJzj8B1J2 z)xTk_2vt0wIwK;&mJTnEe7cPvy!#3vUx24S_hs6eA~m`ZMiwsd)1j9bUbs-$5k#P~ z)x#6V+ZdaEotMsDX783=1ie1uxfx>V5#reyZ0s7Z)YeMCilGpJ-Ccf~Lpndd_+765 z+a;d7>m;AnImz;OWWy}P>n)oTRnX!^lEY3ZF{6#Dc zP3eWtdbxc=2v{URq3CS&v1OCaF9zOYVEn2}rp4FECpsQLQ$~gR152@@J>5iMHTEp9 zmbgOTwypq)+ybwkf6Hx_(&+2{0*~+cD~@)35x?GCF?F^=+yrLVZhq-;c$IqD0$m+m zc5U(T@;g7`=FF(8-fuK>pz}eFZ2dewBe?pGiugIGL}Lk9BRn3({hx|39KXWzKl+!7 zC&mJ5-bPt0t45OC0A2y;?_2xbL3dhw4R4!7U~7k$#~*0t+{M#;_4_fNIQ%GkqPqzC z{Fru@iNqkLopCayuA3jF3DBx@F$?M&px$p>POu^EIL3&;mUb_j@9_{%y~nH9KjiJH zFn*68OEP4v6sDamNuAY`{8WHU0^b1jB8W8VcDg$bSTz|%BSf72I~;Uwcw}XkOeQa- zN>|#7#+$$bFbQ%K=Z5G-Q2zs*1I$KV%`Xz*a{tmd#PwW{T{?%<;++x}lOt6OjpN+* zyh-s&?Bdn?QBX0Q%hnAW@#+Lr-J9yYq*QhOS|x@K=8e3ZH*^eS1|bPb`j36QKfG8Z zAP&3?+zy0mKT_2r@`lPZFbrxaZ{(t(qreQ11hK(Sf8VPgtFe^{`1WNu)oTGS0vV9M z1KO%TqAZ*rM@-}VIAYK-Qmz0)j`740Nr19ZN&5TVzSVZtAOOgdU;^L7B5vsF1ravm zc*acLs3D53I|MQUY8q4m3!7f(?^>Tb{p$($g#A)4e1B9s{@lL%?>o@kZ5V1WZ~Qcn zz|bu+Ir<-X<5ugvfemb60~^@D1~#yPwc`H(pHeSaefwW^{L9a%BKPWN%_+ eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/demos/calculator/calculator.desktop b/examples/declarative/demos/calculator/calculator.desktop new file mode 100644 index 0000000..837d710 --- /dev/null +++ b/examples/declarative/demos/calculator/calculator.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=calculator +Exec=/opt/usr/bin/calculator +Icon=calculator +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/demos/calculator/calculator.png b/examples/declarative/demos/calculator/calculator.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/demos/calculator/main.cpp b/examples/declarative/demos/calculator/main.cpp new file mode 100644 index 0000000..cf069b7 --- /dev/null +++ b/examples/declarative/demos/calculator/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/calculator.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/demos/calculator/qml/Core/Button.qml b/examples/declarative/demos/calculator/qml/Core/Button.qml new file mode 100644 index 0000000..f37de48 --- /dev/null +++ b/examples/declarative/demos/calculator/qml/Core/Button.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE: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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +BorderImage { + id: button + + property alias operation: buttonText.text + property string color: "" + + signal clicked + + source: "images/button-" + color + ".png"; clip: true + border { left: 10; top: 10; right: 10; bottom: 10 } + + Rectangle { + id: shade + anchors.fill: button; radius: 10; color: "black"; opacity: 0 + } + + Text { + id: buttonText + anchors.centerIn: parent; anchors.verticalCenterOffset: -1 + font.pixelSize: parent.width > parent.height ? parent.height * .5 : parent.width * .5 + style: Text.Sunken; color: "white"; styleColor: "black"; smooth: true + } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: { + doOp(operation) + button.clicked() + } + } + + states: State { + name: "pressed"; when: mouseArea.pressed == true + PropertyChanges { target: shade; opacity: .4 } + } +} diff --git a/examples/declarative/demos/calculator/qml/Core/Display.qml b/examples/declarative/demos/calculator/qml/Core/Display.qml new file mode 100644 index 0000000..f928d3a --- /dev/null +++ b/examples/declarative/demos/calculator/qml/Core/Display.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +BorderImage { + id: image + + property alias text : displayText.text + property alias currentOperation : operationText + + source: "images/display.png" + border { left: 10; top: 10; right: 10; bottom: 10 } + + Text { + id: displayText + anchors { + right: parent.right; verticalCenter: parent.verticalCenter; verticalCenterOffset: -1 + rightMargin: 6; left: operationText.right + } + font.pixelSize: parent.height * .6; text: "0"; horizontalAlignment: Text.AlignRight; elide: Text.ElideRight + color: "#343434"; smooth: true; font.bold: true + } + Text { + id: operationText + font.bold: true; font.pixelSize: parent.height * .7 + color: "#343434"; smooth: true + anchors { left: parent.left; leftMargin: 6; verticalCenterOffset: -3; verticalCenter: parent.verticalCenter } + } +} diff --git a/examples/declarative/demos/calculator/qml/Core/calculator.js b/examples/declarative/demos/calculator/qml/Core/calculator.js new file mode 100644 index 0000000..7c363c7 --- /dev/null +++ b/examples/declarative/demos/calculator/qml/Core/calculator.js @@ -0,0 +1,91 @@ + +var curVal = 0 +var memory = 0 +var lastOp = "" +var timer = 0 + +function disabled(op) { + if (op == "." && display.text.toString().search(/\./) != -1) { + return true + } else if (op == squareRoot && display.text.toString().search(/-/) != -1) { + return true + } else { + return false + } +} + +function doOperation(op) { + if (disabled(op)) { + return + } + + if (op.toString().length==1 && ((op >= "0" && op <= "9") || op==".") ) { + if (display.text.toString().length >= 14) + return; // No arbitrary length numbers + if (lastOp.toString().length == 1 && ((lastOp >= "0" && lastOp <= "9") || lastOp == ".") ) { + display.text = display.text + op.toString() + } else { + display.text = op + } + lastOp = op + return + } + lastOp = op + + if (display.currentOperation.text == "+") { + display.text = Number(display.text.valueOf()) + Number(curVal.valueOf()) + } else if (display.currentOperation.text == "-") { + display.text = Number(curVal) - Number(display.text.valueOf()) + } else if (display.currentOperation.text == multiplication) { + display.text = Number(curVal) * Number(display.text.valueOf()) + } else if (display.currentOperation.text == division) { + display.text = Number(Number(curVal) / Number(display.text.valueOf())).toString() + } else if (display.currentOperation.text == "=") { + } + + if (op == "+" || op == "-" || op == multiplication || op == division) { + display.currentOperation.text = op + curVal = display.text.valueOf() + return + } + + curVal = 0 + display.currentOperation.text = "" + + if (op == "1/x") { + display.text = (1 / display.text.valueOf()).toString() + } else if (op == "x^2") { + display.text = (display.text.valueOf() * display.text.valueOf()).toString() + } else if (op == "Abs") { + display.text = (Math.abs(display.text.valueOf())).toString() + } else if (op == "Int") { + display.text = (Math.floor(display.text.valueOf())).toString() + } else if (op == plusminus) { + display.text = (display.text.valueOf() * -1).toString() + } else if (op == squareRoot) { + display.text = (Math.sqrt(display.text.valueOf())).toString() + } else if (op == "mc") { + memory = 0; + } else if (op == "m+") { + memory += display.text.valueOf() + } else if (op == "mr") { + display.text = memory.toString() + } else if (op == "m-") { + memory = display.text.valueOf() + } else if (op == leftArrow) { + display.text = display.text.toString().slice(0, -1) + if (display.text.length == 0) { + display.text = "0" + } + } else if (op == "Off") { + Qt.quit(); + } else if (op == "C") { + display.text = "0" + } else if (op == "AC") { + curVal = 0 + memory = 0 + lastOp = "" + display.text ="0" + } +} + diff --git a/examples/declarative/demos/calculator/qml/Core/images/button-.png b/examples/declarative/demos/calculator/qml/Core/images/button-.png new file mode 100644 index 0000000000000000000000000000000000000000..544e51453629b8a4809100c045d077afea3c96b0 GIT binary patch literal 1288 zcmV+j1^4=iP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igP= z0~RRx`G5-m001I%MObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakAa8CUVIWOmV~41B zLjV8-T1iAfRA}DqT1`kRR}}v4otu~hVtAmHmLZWsmjxG3ETYgt>81}i#g!Y;MWL(5 z>&kt*>86_&cU`%CJ0BME7H^@TCRVfvC8ikS#AjZ{r~?`EFKAsu48m`^ycgCHzI0#my{AjgnT}a zVzG$z_4OaJ+3ZgwaZHe400;mW;N5lefB{|Czg${cdY()sQLR>Sd3lMet1Hy&^*aSY zL;wKJIT&LIg+dq{97H%AhG7_3US583div%CW5gJ7l5lRoFo1zQo}Hb|%+1ZgvMijO zoS@NYfQX=Jn)mSgYK$>Bjswm)VzC&65LjJZeVtCHAA{k95x@Wr&JkK%Tx`zF%%D^% z!8A<}5r_yv2yc9!P1T$`!O>_G>2$idwzl>WftniUY+!P7^2Pl8{D+2NpjxeZH!;RQ zMBtoz*Z0wVrr>=#jssoS6XkOGJ+or|!G#cCEG#U1Zki^}&(GU#aC;Ca<_9OGgp?9O z2#k-9e=UTt#l*zKvsf&KLZQ$m{9Spke*;LRn=0S%@Gw%T)MsLBZ0u9pwmsug>DB3B zL9!cHL-BYVx~{K?WHJfcwxMZS+n<60K$S&x*HTJPL*Z~3j~+dONF)-lEUQg@{&5h1 zxsFH$q>jVkFnA;qX``4cxZi^X#b*2tN?kU@-_c5)fuPY%ooL1w1m_%@rgnHJeS8%Vijb@rrM3Y<#7bmiSfbrrGYQaN#z? zzm0Oo$HyoX3Mdwf-|*|}>-CkD71*|oR;%R+?z(JOYjiarXhq&KWDis_Y9AI~M z_azZEH2}3zsq`b~d}(NC2m=EHP*a0$6-2k!p-xHRcZI(U!$3BhMK+s#d31F2GZAfS z00(1e=5o2$7Z(>#+%l+0Bm&O4m)F!Z&AaYK@06}r!MO~n)oR$^-$y2s!RF@Xt9(BH zJ%C>UkOmOI89?~0R4Qfm_V(ULDL-koT4=Re5JDgn3f&9U7-Nu9qF%3~TCL*n@DMvY zJJ{OV!uIy|(@LfC9f05A)z7)5bZ=|U7!iHI82dPtO8qi2GV*>j8bv%F@3=SW_KNRn y$#EQ5mIceQV4CK)rfIH9DgOj+D&~j-koXJAj4m%p2j}Ym0000 literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/calculator/qml/Core/images/button-blue.png b/examples/declarative/demos/calculator/qml/Core/images/button-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..5f92de32d0fbce073b5161bc54b1b31a42f4dfd0 GIT binary patch literal 1565 zcmV+&2IBdNP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igP= z0~0cN?2R-4001I%MObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakAa8CUVIWOmV~41B zLjV8;Z%IT!RA}DanoDS$RTRg6=iEEVqz_xGwlUfYRVyyUg^!ALq4-#+2%;jW;6g-D z7qu?LrJx%(F4U#2L~tR3SX5A3iuPfmsBLYnNn_JA&&k8QI+@IOkBj?#UuLW*2yJHO z!VNQlZ)X1Y|3Ck8?>SchL z2$&iDzyHSInLjx6-JUmp>Dm7dW~YsS00tnCKP4hy(ti2oEf2i(%4;8Q?Apfo^q)*l z%`tm+iL+-HFDM8z13*<#fkLsshSjSm7Cqyq`}p9!Hy<1y8QzTs(cmnQq+kTpxcQ;S zp6Y)1iDwy~T4Z2wjD^K25OC`94_~PvCR8opoUo>&NU;s}eE!k!fv-Qg8DU5)!azg{ zPd@WP<=*=rr*CkA(b5zl#MSZ66AU1%D42{n2}V#TIAKk(jc@mSI&kpI53dbE#ffP9 zZMWaC`_ZRf+}bxV&gjGpYJv!eD2Cz1AR=Fpi5Vs_6vSd!lRzcF#;&dFCdSTeoSqyy zuFeF(#8wlDab zZr!n~t>Ys4PY&k*{vM1CF~lt!gG6uuhH%NHo9Nnd&0YTb8@Jy%JHNa-3}?dw8YJKEmXK{W}eYMrFA_Zj*XXD0m(xmrxq zL?3d=c{3xR*%Qkvk^YU8HiFCyLr{qaL{a_3lCFp8NF zEZ|fl00k`MVeLf(Q6pw0%OB18X&{RhFqCIYit?ma$V0v&=gE!Kw9YcBCd|Ef79fO$}DSNNZfjf86we= zLsE^*%+Jr)(bc#ylP)TPiK1%xZHA@F5|wfpKRG@^+q%xC*wVy)Ot$dR5X6ki!VL4X zQ}|Q8huL<^6-@vn>uDNTAUjPefj_54nH(KJf9l?kb1t{LMxI&mrPg^Xl?tViAx2O4 z@6}%peDTQm@F^C7K*sp_liFYTnzu?nYxQ%?wi1aQt{=eZX3Pfg)}yL>cu<|M~@_Hndl-&aHZ$KS>5 zpaVq-l~cVx56@0dJh*!8#du$&*wK!N!>1pr&LgVlZBirU+Lm|@)OkdpyfDLwBi;Pk zy@w;;f4z6`%d|1jFVlZlk`wP=u+i|&MUXQfAOZx zmlr!$v1;vlLQ=ip89(duCrQHm>=bh|(@al{ygXeR`OHGn2kDJDQy}mc8&Z4>pi6!} P00000NkvXXu0mjfvD)Jf literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/calculator/qml/Core/images/button-green.png b/examples/declarative/demos/calculator/qml/Core/images/button-green.png new file mode 100644 index 0000000000000000000000000000000000000000..36c93914c7d2eedb05116dc561f09096b3be488a GIT binary patch literal 1543 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 Q`v3p{07*qoM6N<$f_)pyM*si- literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/calculator/qml/Core/images/button-red.png b/examples/declarative/demos/calculator/qml/Core/images/button-red.png new file mode 100644 index 0000000000000000000000000000000000000000..3b335891aea798c5fadf4c3d61c74ca7ad79ed8d GIT binary patch literal 1586 zcmV-22F>}2P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igP= z0~Zv}jm^yf001I%MObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakAa8CUVIWOmV~41B zLjV8;gh@m}RA}DanoDS$RTRg6=iED)Nux&FYHE>Ii}kT^A^1kY7a~{`bfa!uDuPfI z1o!Gf5I4FNL=h3(DToGNRIpmaN40U%)}}Q{lT4aSo9BFU?{RUznM{fzD9t=BT#}hg zlJo!m=YP(*_Z$Hb5e!2NL=iK&?4Fx$eD2;`Z`!+a+okNeLL&r)J2i zXQ-_%Z72vcOLnP41)M9=KePqc*U#vwSzdYP{XHita~}(cAQlNZ7y(3Xcw*0<@1J_; zL9&@CDkqK+mKKQ-T)`2Iwk}nOSsldFf58BuIKX>feLeZX{sT84Oo)Mi;x!hYdGxW` zU* zF6irHx-#7aaJCpbVKwYAOCeX)AcBj5ZCf{U^|qnA{B74%b;zl__FKf`=qHG0+wWqV09N7{G~OF&U<+&2%B^D0z?emx_dXz_l2w zLi4q#v>iyprshM9DevUpLP&|jn;B|xoygWFt2O;}N+3w~q#)&5-uF&~f)naF+Efpv zuTF&c4-o<~#EqPv%f zBxXbe*X?Lj*T8i9Qou{Jo&aNY%bCebn6B20wrGY9$|e6f0MJtEcfD@B&^rO3SC~nf zL3#rWf)^EhhZU3mb@>J(y}?YcxLHFpPP;#vrSpvIjU2P4nLsLOdZhxO2iWn5_Jo^> z2)=pk*)u0ila9Es{D1cyf|p>ZYWKTYu(k6{58z1wKzpH_5kawt`p&1tLf)&1Eq$Xb z&{|u1bv_+#I^54f2!E&gb$y$3*Q|luD>ZjQ^kq@)oMEPwEpyPJtn zt!12ASi=8!{7-gVad}q&!6F3KwOI`1Wc4)1=I7CUzx<4IZY|t(@K($7NnU%28LL^w z#B7D5Gt*z{M+bj<-%2&^fMNgS6Im>h{Pm~)p(B#FX>?Sq31s7LacZ6QJ};0vB;=XQEV5Y%ZJE6JO})|^3T zeh9I|(BauxJ|7+B^YZV*zfMiPY1p?86ccJcj7?5f7S8P1Jg|vU$x|$rZ~{{Bm_?jA zRP>zf##D$j+T*syiiqGe>3Y6au!lS`dj48vPT3ljoX_1NQ>E};Y k=Rc|&MPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igP= z1OzT^Awy^Y001I%MObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakAa8CUVIWOmV~41B zLjV8+I7vi7RA}Dqn!jt@NEFAv@9lUc3~SjK7B+ zDHBMV`~|tr*Tt(8*X2JjB*h(U*kH@H4Ol0QDL7ce}(d3?)!OV!F=-()c?#VT&DGWm|2!gGZm6dg+ z6pEs_a93^u%(Ps?;qYymrZ1V9f9>^p>&`zea>A<3Y+5DZFm&p3Ouwn;a(3!r6?q7RDH`*1GmE#u$`k2_BEfwTIDKLu(C@Bng5bsKx2o zSu$E{k>@#-QXl#7@bGt~6pS(FzFZ~fd272!rj$aKWyrGZ8Cz@r84iai%kqcGL5XUi+B>AAV zehuJ@I7v0h?(XhWt@WFwr6qWtH))4*r_nzf=ya39dG}5mX__KUQyd)~eay1#1%OaW zX^-DvLb%;00KW+#))yBSH|FQ((QdaPgqXBM{cM=C)^OHQmgU4hMxznZG~F=9yazCl zQl9kBxmLR4o-+b)2f%&b_usYK?H)6u)oN89?TVss*K@7)7J$!E%HxhX%K!}i2McMf UnQiA=j{pDw07*qoM6N<$f@Ckji~s-t literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/calculator/qml/Core/qmldir b/examples/declarative/demos/calculator/qml/Core/qmldir new file mode 100644 index 0000000..a926b93 --- /dev/null +++ b/examples/declarative/demos/calculator/qml/Core/qmldir @@ -0,0 +1,2 @@ +Button Button.qml +Display Display.qml diff --git a/examples/declarative/demos/calculator/qml/calculator.qml b/examples/declarative/demos/calculator/qml/calculator.qml new file mode 100644 index 0000000..3e1c650 --- /dev/null +++ b/examples/declarative/demos/calculator/qml/calculator.qml @@ -0,0 +1,158 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "Core" +import "Core/calculator.js" as CalcEngine + +Rectangle { + id: window + + width: 480; height: 360 + color: "#282828" + + property string rotateLeft: "\u2939" + property string rotateRight: "\u2935" + property string leftArrow: "\u2190" + property string division : "\u00f7" + property string multiplication : "\u00d7" + property string squareRoot : "\u221a" + property string plusminus : "\u00b1" + + function doOp(operation) { CalcEngine.doOperation(operation) } + + Item { + id: main + state: "orientation " + runtime.orientation + + width: parent.width; height: parent.height; anchors.centerIn: parent + + Column { + id: box; spacing: 8 + + anchors { fill: parent; topMargin: 6; bottomMargin: 6; leftMargin: 6; rightMargin: 6 } + + Display { + id: display + width: box.width-3 + height: 64 + } + + Column { + id: column; spacing: 6 + + property real h: ((box.height - 72) / 6) - ((spacing * (6 - 1)) / 6) + property real w: (box.width / 4) - ((spacing * (4 - 1)) / 4) + + Row { + spacing: 6 + Button { width: column.w; height: column.h; color: 'purple'; operation: "Off" } + Button { width: column.w; height: column.h; color: 'purple'; operation: leftArrow } + Button { width: column.w; height: column.h; color: 'purple'; operation: "C" } + Button { width: column.w; height: column.h; color: 'purple'; operation: "AC" } + } + + Row { + spacing: 6 + property real w: (box.width / 4) - ((spacing * (4 - 1)) / 4) + + Button { width: column.w; height: column.h; color: 'green'; operation: "mc" } + Button { width: column.w; height: column.h; color: 'green'; operation: "m+" } + Button { width: column.w; height: column.h; color: 'green'; operation: "m-" } + Button { width: column.w; height: column.h; color: 'green'; operation: "mr" } + } + + Grid { + id: grid; rows: 5; columns: 5; spacing: 6 + + property real w: (box.width / columns) - ((spacing * (columns - 1)) / columns) + + Button { width: grid.w; height: column.h; operation: "7"; color: 'blue' } + Button { width: grid.w; height: column.h; operation: "8"; color: 'blue' } + Button { width: grid.w; height: column.h; operation: "9"; color: 'blue' } + Button { width: grid.w; height: column.h; operation: division } + Button { width: grid.w; height: column.h; operation: squareRoot } + Button { width: grid.w; height: column.h; operation: "4"; color: 'blue' } + Button { width: grid.w; height: column.h; operation: "5"; color: 'blue' } + Button { width: grid.w; height: column.h; operation: "6"; color: 'blue' } + Button { width: grid.w; height: column.h; operation: multiplication } + Button { width: grid.w; height: column.h; operation: "x^2" } + Button { width: grid.w; height: column.h; operation: "1"; color: 'blue' } + Button { width: grid.w; height: column.h; operation: "2"; color: 'blue' } + Button { width: grid.w; height: column.h; operation: "3"; color: 'blue' } + Button { width: grid.w; height: column.h; operation: "-" } + Button { width: grid.w; height: column.h; operation: "1/x" } + Button { width: grid.w; height: column.h; operation: "0"; color: 'blue' } + Button { width: grid.w; height: column.h; operation: "." } + Button { width: grid.w; height: column.h; operation: plusminus } + Button { width: grid.w; height: column.h; operation: "+" } + Button { width: grid.w; height: column.h; operation: "="; color: 'red' } + } + } + } + + states: [ + State { + name: "orientation " + Orientation.Landscape + PropertyChanges { target: main; rotation: 90; width: window.height; height: window.width } + PropertyChanges { target: rotateButton; operation: rotateLeft } + }, + State { + name: "orientation " + Orientation.PortraitInverted + PropertyChanges { target: main; rotation: 180; } + PropertyChanges { target: rotateButton; operation: rotateRight } + }, + State { + name: "orientation " + Orientation.LandscapeInverted + PropertyChanges { target: main; rotation: 270; width: window.height; height: window.width } + PropertyChanges { target: rotateButton; operation: rotateLeft } + } + ] + + transitions: Transition { + SequentialAnimation { + PropertyAction { target: rotateButton; property: "operation" } + RotationAnimation { direction: RotationAnimation.Shortest; duration: 300; easing.type: Easing.InOutQuint } + NumberAnimation { properties: "x,y,width,height"; duration: 300; easing.type: Easing.InOutQuint } + } + } + } +} diff --git a/examples/declarative/demos/calculator/qml/calculator.qmlproject b/examples/declarative/demos/calculator/qml/calculator.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/demos/calculator/qml/calculator.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/demos/calculator/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/demos/flickr/flickr.desktop b/examples/declarative/demos/flickr/flickr.desktop new file mode 100644 index 0000000..5c8ce4f --- /dev/null +++ b/examples/declarative/demos/flickr/flickr.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=flickr +Exec=/opt/usr/bin/flickr +Icon=flickr +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/demos/flickr/flickr.png b/examples/declarative/demos/flickr/flickr.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/demos/flickr/main.cpp b/examples/declarative/demos/flickr/main.cpp new file mode 100644 index 0000000..133f0d0 --- /dev/null +++ b/examples/declarative/demos/flickr/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockPortrait); + viewer.setMainQmlFile(QLatin1String("qml/qml/flickr.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/demos/flickr/qml/common/Progress.qml b/examples/declarative/demos/flickr/qml/common/Progress.qml new file mode 100644 index 0000000..b928554 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/common/Progress.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE: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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + property variant progress: 0 + + Rectangle { + anchors.fill: parent; smooth: true + border.color: "white"; border.width: 0; radius: height/2 - 2 + gradient: Gradient { + GradientStop { position: 0; color: "#66343434" } + GradientStop { position: 1.0; color: "#66000000" } + } + } + + Rectangle { + y: 2; height: parent.height-4; + x: 2; width: Math.max(parent.width * progress - 4, 0); + opacity: width < 1 ? 0 : 1; smooth: true + gradient: Gradient { + GradientStop { position: 0; color: "lightsteelblue" } + GradientStop { position: 1.0; color: "steelblue" } + } + radius: height/2 - 2 + } + + Text { + text: Math.round(progress * 100) + "%" + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + color: "white"; font.bold: true; font.pixelSize: 15 + } +} diff --git a/examples/declarative/demos/flickr/qml/common/RssModel.qml b/examples/declarative/demos/flickr/qml/common/RssModel.qml new file mode 100644 index 0000000..0c1c834 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/common/RssModel.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE: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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +XmlListModel { + property string tags : "" + + function commasep(x) + { + return x.replace(' ',','); + } + + source: "http://api.flickr.com/services/feeds/photos_public.gne?"+(tags ? "tags="+commasep(tags)+"&" : "")+"format=rss2" + query: "/rss/channel/item" + namespaceDeclarations: "declare namespace media=\"http://search.yahoo.com/mrss/\";" + + XmlRole { name: "title"; query: "title/string()" } + XmlRole { name: "imagePath"; query: "media:thumbnail/@url/string()" } + XmlRole { name: "url"; query: "media:content/@url/string()" } + XmlRole { name: "description"; query: "description/string()" } + XmlRole { name: "tags"; query: "media:category/string()" } + XmlRole { name: "photoWidth"; query: "media:content/@width/string()" } + XmlRole { name: "photoHeight"; query: "media:content/@height/string()" } + XmlRole { name: "photoType"; query: "media:content/@type/string()" } + XmlRole { name: "photoAuthor"; query: "author/string()" } + XmlRole { name: "photoDate"; query: "pubDate/string()" } +} diff --git a/examples/declarative/demos/flickr/qml/common/ScrollBar.qml b/examples/declarative/demos/flickr/qml/common/ScrollBar.qml new file mode 100644 index 0000000..dfe3cbf --- /dev/null +++ b/examples/declarative/demos/flickr/qml/common/ScrollBar.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + + property variant flickableArea + + Rectangle { + radius: 5 + color: "black" + opacity: 0.3 + border.color: "white" + border.width: 2 + x: 0 + y: flickableArea.visibleArea.yPosition * container.height + width: parent.width + height: flickableArea.visibleArea.heightRatio * container.height + } + states: [ + State { + name: "show" + when: flickableArea.movingVertically + PropertyChanges { + target: container + opacity: 1 + } + } + ] + transitions: [ + Transition { + from: "*" + to: "*" + NumberAnimation { + target: container + properties: "opacity" + duration: 400 + } + } + ] +} diff --git a/examples/declarative/demos/flickr/qml/common/Slider.qml b/examples/declarative/demos/flickr/qml/common/Slider.qml new file mode 100644 index 0000000..edccc7d --- /dev/null +++ b/examples/declarative/demos/flickr/qml/common/Slider.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: slider; width: 400; height: 16 + + // value is read/write. + property real value: 1 + onValueChanged: updatePos(); + property real maximum: 1 + property real minimum: 1 + property int xMax: width - handle.width - 4 + onXMaxChanged: updatePos(); + onMinimumChanged: updatePos(); + + function updatePos() { + if (maximum > minimum) { + var pos = 2 + (value - minimum) * slider.xMax / (maximum - minimum); + pos = Math.min(pos, width - handle.width - 2); + pos = Math.max(pos, 2); + handle.x = pos; + } else { + handle.x = 2; + } + } + + Rectangle { + anchors.fill: parent + border.color: "white"; border.width: 0; radius: 8 + gradient: Gradient { + GradientStop { position: 0.0; color: "#66343434" } + GradientStop { position: 1.0; color: "#66000000" } + } + } + + Rectangle { + id: handle; smooth: true + y: 2; width: 30; height: slider.height-4; radius: 6 + gradient: Gradient { + GradientStop { position: 0.0; color: "lightgray" } + GradientStop { position: 1.0; color: "gray" } + } + + MouseArea { + id: mouse + anchors.fill: parent; drag.target: parent + drag.axis: Drag.XAxis; drag.minimumX: 2; drag.maximumX: slider.xMax+2 + onPositionChanged: { value = (maximum - minimum) * (handle.x-2) / slider.xMax + minimum; } + } + } +} diff --git a/examples/declarative/demos/flickr/qml/common/qmldir b/examples/declarative/demos/flickr/qml/common/qmldir new file mode 100644 index 0000000..adc2479 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/common/qmldir @@ -0,0 +1,10 @@ +ImageDetails ImageDetails.qml +LikeOMeter LikeOMeter.qml +Loading Loading.qml +MediaButton MediaButton.qml +MediaLineEdit MediaLineEdit.qml +Progress Progress.qml +RssModel RssModel.qml +ScrollBar ScrollBar.qml +Slider Slider.qml +Star Star.qml diff --git a/examples/declarative/demos/flickr/qml/flickr-90.qml b/examples/declarative/demos/flickr/qml/flickr-90.qml new file mode 100644 index 0000000..31b1d91 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/flickr-90.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + width: 480; height: 320 + + Loader { + y: 320; rotation: -90 + transformOrigin: Item.TopLeft + source: "flickr.qml" + } +} diff --git a/examples/declarative/demos/flickr/qml/flickr.qml b/examples/declarative/demos/flickr/qml/flickr.qml new file mode 100644 index 0000000..740ee35 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/flickr.qml @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "common" as Common +import "mobile" as Mobile + +Item { + id: screen; width: 320; height: 480 + property bool inListView : false + + Rectangle { + id: background + anchors.fill: parent; color: "#343434"; + + Image { source: "mobile/images/stripes.png"; fillMode: Image.Tile; anchors.fill: parent; opacity: 0.3 } + + Common.RssModel { id: rssModel } + + Item { + id: views + width: parent.width + anchors.top: titleBar.bottom; anchors.bottom: toolBar.top + + GridView { + id: photoGridView; model: rssModel; delegate: Mobile.GridDelegate {} + cacheBuffer: 100 + cellWidth: (parent.width-2)/4; cellHeight: cellWidth; width: parent.width; height: parent.height + } + + ListView { + id: photoListView; model: rssModel; delegate: Mobile.ListDelegate { } + width: parent.width; height: parent.height; x: -(parent.width * 1.5); cacheBuffer: 100; + } + + states: State { + name: "ListView"; when: screen.inListView == true + PropertyChanges { target: photoListView; x: 0 } + PropertyChanges { target: photoGridView; x: -(parent.width * 1.5) } + } + + transitions: Transition { + NumberAnimation { properties: "x"; duration: 500; easing.type: Easing.InOutQuad } + } + + Mobile.ImageDetails { id: imageDetails; width: parent.width; anchors.left: views.right; height: parent.height } + + Item { id: foreground; anchors.fill: parent } + } + + Mobile.TitleBar { id: titleBar; width: parent.width; height: 40; opacity: 0.9 } + + Mobile.ToolBar { + id: toolBar + height: 40; anchors.bottom: parent.bottom; width: parent.width; opacity: 0.9 + button1Label: "Update"; button2Label: "View mode" + onButton1Clicked: rssModel.reload() + onButton2Clicked: if (screen.inListView == true) screen.inListView = false; else screen.inListView = true + } + + Connections { + target: imageDetails + onClosed: { + if (background.state == "DetailedView") { + background.state = ''; + imageDetails.photoUrl = ""; + } + } + } + + states: State { + name: "DetailedView" + PropertyChanges { target: views; x: -parent.width } + PropertyChanges { target: toolBar; button1Label: "View..." } + PropertyChanges { + target: toolBar + onButton1Clicked: if (imageDetails.state=='') imageDetails.state='Back'; else imageDetails.state='' + } + PropertyChanges { target: toolBar; button2Label: "Back" } + PropertyChanges { target: toolBar; onButton2Clicked: imageDetails.closed() } + } + + transitions: Transition { + NumberAnimation { properties: "x"; duration: 500; easing.type: Easing.InOutQuad } + } + } +} diff --git a/examples/declarative/demos/flickr/qml/flickr.qmlproject b/examples/declarative/demos/flickr/qml/flickr.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/flickr.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/demos/flickr/qml/mobile/Button.qml b/examples/declarative/demos/flickr/qml/mobile/Button.qml new file mode 100644 index 0000000..74a7dbb --- /dev/null +++ b/examples/declarative/demos/flickr/qml/mobile/Button.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + + signal clicked + + property string text + + BorderImage { + id: buttonImage + source: "images/toolbutton.sci" + width: container.width; height: container.height + } + BorderImage { + id: pressed + opacity: 0 + source: "images/toolbutton.sci" + width: container.width; height: container.height + } + MouseArea { + id: mouseRegion + anchors.fill: buttonImage + onClicked: { container.clicked(); } + } + Text { + color: "white" + anchors.centerIn: buttonImage; font.bold: true; font.pixelSize: 15 + text: container.text; style: Text.Raised; styleColor: "black" + } + states: [ + State { + name: "Pressed" + when: mouseRegion.pressed == true + PropertyChanges { target: pressed; opacity: 1 } + } + ] +} diff --git a/examples/declarative/demos/flickr/qml/mobile/GridDelegate.qml b/examples/declarative/demos/flickr/qml/mobile/GridDelegate.qml new file mode 100644 index 0000000..8f01292 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/mobile/GridDelegate.qml @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: wrapper; width: GridView.view.cellWidth; height: GridView.view.cellHeight + + function photoClicked() { + imageDetails.photoTitle = title; + imageDetails.photoTags = tags; + imageDetails.photoWidth = photoWidth; + imageDetails.photoHeight = photoHeight; + imageDetails.photoType = photoType; + imageDetails.photoAuthor = photoAuthor; + imageDetails.photoDate = photoDate; + imageDetails.photoUrl = url; + imageDetails.rating = 0; + scaleMe.state = "Details"; + } + + Item { + anchors.centerIn: parent + scale: 0.0 + Behavior on scale { NumberAnimation { easing.type: Easing.InOutQuad} } + id: scaleMe + + Item { + width: 77; height: 77; anchors.centerIn: parent + Rectangle { + id: whiteRect; width: 77; height: 77; color: "#dddddd"; smooth: true + Image { id: thumb; source: imagePath; x: 1; y: 1; smooth: true } + Image { source: "images/gloss.png" } + } + } + + Connections { + target: toolBar + onButton2Clicked: if (scaleMe.state == 'Details' ) scaleMe.state = 'Show' + } + + states: [ + State { + name: "Show"; when: thumb.status == Image.Ready + PropertyChanges { target: scaleMe; scale: 1 } + }, + State { + name: "Details" + PropertyChanges { target: scaleMe; scale: 1 } + ParentChange { target: whiteRect; x: 10; y: 20; parent: imageDetails.frontContainer } + PropertyChanges { target: background; state: "DetailedView" } + } + ] + transitions: [ + Transition { + from: "Show"; to: "Details" + ParentAnimation { + via: foreground + NumberAnimation { properties: "x,y"; duration: 500; easing.type: Easing.InOutQuad } + } + }, + Transition { + from: "Details"; to: "Show" + ParentAnimation { + via: foreground + NumberAnimation { properties: "x,y"; duration: 500; easing.type: Easing.InOutQuad } + } + } + ] + } + MouseArea { anchors.fill: wrapper; onClicked: photoClicked() } +} + diff --git a/examples/declarative/demos/flickr/qml/mobile/ImageDetails.qml b/examples/declarative/demos/flickr/qml/mobile/ImageDetails.qml new file mode 100644 index 0000000..9d1464e --- /dev/null +++ b/examples/declarative/demos/flickr/qml/mobile/ImageDetails.qml @@ -0,0 +1,186 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "../common" as Common + +Flipable { + id: container + + property alias frontContainer: containerFront + property string photoTitle: "" + property string photoTags: "" + property int photoWidth + property int photoHeight + property string photoType + property string photoAuthor + property string photoDate + property string photoUrl + property int rating: 2 + property variant prevScale: 1.0 + + signal closed + + transform: Rotation { + id: itemRotation + origin.x: container.width / 2; + axis.y: 1; axis.z: 0 + } + + front: Item { + id: containerFront; anchors.fill: container + + Rectangle { + anchors.fill: parent + color: "black"; opacity: 0.4 + } + + Column { + spacing: 10 + anchors { + left: parent.left; leftMargin: 10 + right: parent.right; rightMargin: 10 + top: parent.top; topMargin: 120 + } + Text { font.bold: true; color: "white"; elide: Text.ElideRight; text: container.photoTitle; width: parent.width } + Text { color: "white"; elide: Text.ElideRight; text: "Size: " + container.photoWidth + 'x' + container.photoHeight; width: parent.width } + Text { color: "white"; elide: Text.ElideRight; text: "Type: " + container.photoType; width: parent.width } + Text { color: "white"; elide: Text.ElideRight; text: "Author: " + container.photoAuthor; width: parent.width } + Text { color: "white"; elide: Text.ElideRight; text: "Published: " + container.photoDate; width: parent.width } + Text { color: "white"; elide: Text.ElideRight; text: container.photoTags == "" ? "" : "Tags: "; width: parent.width } + Text { color: "white"; elide: Text.ElideRight; text: container.photoTags; width: parent.width } + } + } + + back: Item { + anchors.fill: container + + Rectangle { anchors.fill: parent; color: "black"; opacity: 0.4 } + + Common.Progress { + anchors.centerIn: parent; width: 200; height: 22 + progress: bigImage.progress; visible: bigImage.status != Image.Ready + } + + Flickable { + id: flickable; anchors.fill: parent; clip: true + contentWidth: imageContainer.width; contentHeight: imageContainer.height + + function updateMinimumScale() { + if (bigImage.status == Image.Ready && bigImage.width != 0) { + slider.minimum = Math.min(flickable.width / bigImage.width, flickable.height / bigImage.height); + if (bigImage.width * slider.value > flickable.width) { + var xoff = (flickable.width/2 + flickable.contentX) * slider.value / prevScale; + flickable.contentX = xoff - flickable.width/2; + } + if (bigImage.height * slider.value > flickable.height) { + var yoff = (flickable.height/2 + flickable.contentY) * slider.value / prevScale; + flickable.contentY = yoff - flickable.height/2; + } + prevScale = slider.value; + } + } + + onWidthChanged: updateMinimumScale() + onHeightChanged: updateMinimumScale() + + Item { + id: imageContainer + width: Math.max(bigImage.width * bigImage.scale, flickable.width); + height: Math.max(bigImage.height * bigImage.scale, flickable.height); + + Image { + id: bigImage; source: container.photoUrl; scale: slider.value + anchors.centerIn: parent; smooth: !flickable.movingVertically + onStatusChanged : { + // Default scale shows the entire image. + if (bigImage.status == Image.Ready && bigImage.width != 0) { + slider.minimum = Math.min(flickable.width / bigImage.width, flickable.height / bigImage.height); + prevScale = Math.min(slider.minimum, 1); + slider.value = prevScale; + } + } + } + } + } + + Text { + text: "Image Unavailable" + visible: bigImage.status == Image.Error + anchors.centerIn: parent; color: "white"; font.bold: true + } + + Common.Slider { + id: slider; visible: { bigImage.status == Image.Ready && maximum > minimum } + anchors { + bottom: parent.bottom; bottomMargin: 65 + left: parent.left; leftMargin: 25 + right: parent.right; rightMargin: 25 + } + onValueChanged: { + if (bigImage.width * value > flickable.width) { + var xoff = (flickable.width/2 + flickable.contentX) * value / prevScale; + flickable.contentX = xoff - flickable.width/2; + } + if (bigImage.height * value > flickable.height) { + var yoff = (flickable.height/2 + flickable.contentY) * value / prevScale; + flickable.contentY = yoff - flickable.height/2; + } + prevScale = value; + } + } + } + + states: State { + name: "Back" + PropertyChanges { target: itemRotation; angle: 180 } + PropertyChanges { target: toolBar; button2Visible: false } + PropertyChanges { target: toolBar; button1Label: "Back" } + } + + transitions: Transition { + SequentialAnimation { + PropertyAction { target: bigImage; property: "smooth"; value: false } + NumberAnimation { easing.type: Easing.InOutQuad; properties: "angle"; duration: 500 } + PropertyAction { target: bigImage; property: "smooth"; value: !flickable.movingVertically } + } + } +} diff --git a/examples/declarative/demos/flickr/qml/mobile/ListDelegate.qml b/examples/declarative/demos/flickr/qml/mobile/ListDelegate.qml new file mode 100644 index 0000000..0773547 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/mobile/ListDelegate.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE: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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Component { + Item { + id: wrapper; width: wrapper.ListView.view.width; height: 86 + Item { + id: moveMe + Rectangle { color: "black"; opacity: index % 2 ? 0.2 : 0.4; height: 84; width: wrapper.width; y: 1 } + Rectangle { + x: 6; y: 4; width: 77; height: 77; color: "white"; smooth: true + + Image { source: imagePath; x: 1; y: 1 } + Image { source: "images/gloss.png" } + } + Column { + x: 92; width: wrapper.ListView.view.width - 95; y: 15; spacing: 2 + Text { text: title; color: "white"; width: parent.width; font.pixelSize: 14; font.bold: true; elide: Text.ElideRight; style: Text.Raised; styleColor: "black" } + Text { text: photoAuthor; width: parent.width; font.pixelSize: 14; elide: Text.ElideLeft; color: "#cccccc"; style: Text.Raised; styleColor: "black" } + Text { text: photoDate; width: parent.width; font.pixelSize: 14; elide: Text.ElideRight; color: "#cccccc"; style: Text.Raised; styleColor: "black" } + } + } + } +} diff --git a/examples/declarative/demos/flickr/qml/mobile/TitleBar.qml b/examples/declarative/demos/flickr/qml/mobile/TitleBar.qml new file mode 100644 index 0000000..f283307 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/mobile/TitleBar.qml @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: titleBar + property string untaggedString: "Uploads from everyone" + property string taggedString: "Recent uploads tagged " + + BorderImage { source: "images/titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 } + + Item { + id: container + width: (parent.width * 2) - 55 ; height: parent.height + + function accept() { + imageDetails.closed() + titleBar.state = "" + background.state = "" + rssModel.tags = editor.text + } + + Image { + id: quitButton + anchors.left: parent.left//; anchors.leftMargin: 0 + anchors.verticalCenter: parent.verticalCenter + source: "images/quit.png" + MouseArea { + anchors.fill: parent + onClicked: Qt.quit() + } + } + + Text { + id: categoryText + anchors { + left: quitButton.right; right: tagButton.left; leftMargin: 10; rightMargin: 10 + verticalCenter: parent.verticalCenter + } + elide: Text.ElideLeft + text: (rssModel.tags=="" ? untaggedString : taggedString + rssModel.tags) + font.bold: true; font.pixelSize: 15; color: "White"; style: Text.Raised; styleColor: "Black" + } + + Button { + id: tagButton; x: titleBar.width - 50; width: 45; height: 32; text: "..." + onClicked: if (titleBar.state == "Tags") container.accept(); else titleBar.state = "Tags" + anchors.verticalCenter: parent.verticalCenter + } + + Item { + id: lineEdit + y: 4; height: parent.height - 9 + anchors { left: tagButton.right; leftMargin: 5; right: parent.right; rightMargin: 5 } + + BorderImage { source: "images/lineedit.sci"; anchors.fill: parent } + + TextInput { + id: editor + anchors { + left: parent.left; right: parent.right; leftMargin: 10; rightMargin: 10 + verticalCenter: parent.verticalCenter + } + cursorVisible: true; font.bold: true + color: "#151515"; selectionColor: "Green" + } + + Keys.forwardTo: [ (returnKey), (editor)] + + Item { + id: returnKey + Keys.onReturnPressed: container.accept() + Keys.onEnterPressed: container.accept() + Keys.onEscapePressed: titleBar.state = "" + } + } + } + + states: State { + name: "Tags" + PropertyChanges { target: container; x: -tagButton.x + 5 } + PropertyChanges { target: tagButton; text: "OK" } + PropertyChanges { target: editor; focus: true } + } + + transitions: Transition { + NumberAnimation { properties: "x"; easing.type: Easing.InOutQuad } + } +} diff --git a/examples/declarative/demos/flickr/qml/mobile/ToolBar.qml b/examples/declarative/demos/flickr/qml/mobile/ToolBar.qml new file mode 100644 index 0000000..d8abb14 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/mobile/ToolBar.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: toolbar + + property alias button1Label: button1.text + property alias button2Label: button2.text + property alias button2Visible: button2.visible + + signal button1Clicked + signal button2Clicked + + BorderImage { source: "images/titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 } + + Row { + anchors.right: parent.right; anchors.rightMargin: 5; y: 3; height: 32; spacing: 30 + Button { + id: button1 + width: 140; height: 32 + onClicked: toolbar.button1Clicked() + } + + Button { + id: button2; width: 140; height: 32 + onClicked: toolbar.button2Clicked() + } + } +} diff --git a/examples/declarative/demos/flickr/qml/mobile/images/gloss.png b/examples/declarative/demos/flickr/qml/mobile/images/gloss.png new file mode 100644 index 0000000000000000000000000000000000000000..5d370cd93d62ed8c17f43a5d5dc7ed20b4edb5a1 GIT binary patch literal 1236 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 VqK)QbrHcRn002ovPDHLkV1mrKo*@7L literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/flickr/qml/mobile/images/lineedit.sci b/examples/declarative/demos/flickr/qml/mobile/images/lineedit.sci new file mode 100644 index 0000000..054bff7 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/mobile/images/lineedit.sci @@ -0,0 +1,5 @@ +border.left: 10 +border.top: 10 +border.bottom: 10 +border.right: 10 +source: lineedit.png diff --git a/examples/declarative/demos/flickr/qml/mobile/images/quit.png b/examples/declarative/demos/flickr/qml/mobile/images/quit.png new file mode 100644 index 0000000000000000000000000000000000000000..5bda1b6e0d0effbabf53172040f0ed2eea78e34a GIT binary patch literal 2369 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/flickr/qml/mobile/images/stripes.png b/examples/declarative/demos/flickr/qml/mobile/images/stripes.png new file mode 100644 index 0000000000000000000000000000000000000000..9f36727ea424cd0da94bd5a7cee4082447275eeb GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgga4pBxq@gGdLS%5-~o-U3d5|`(m z-N<{$K*aT;^vADLPxXoJET5>DG2xP-Q1*siVN6aag0$kQzm$|0%E+I; z#Y!4I)=g1)z4*}Q$iB}`v_QR literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/flickr/qml/mobile/images/titlebar.png b/examples/declarative/demos/flickr/qml/mobile/images/titlebar.png new file mode 100644 index 0000000000000000000000000000000000000000..51c90082d052a94af34488ca9a13842122f7d7a4 GIT binary patch literal 1436 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 M07*qoM6N<$g3{N*E&u=k literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/flickr/qml/mobile/images/toolbutton.sci b/examples/declarative/demos/flickr/qml/mobile/images/toolbutton.sci new file mode 100644 index 0000000..9e4f965 --- /dev/null +++ b/examples/declarative/demos/flickr/qml/mobile/images/toolbutton.sci @@ -0,0 +1,5 @@ +border.left: 15 +border.top: 4 +border.bottom: 4 +border.right: 15 +source: toolbutton.png diff --git a/examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/demos/flickr/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/demos/photoviewer/main.cpp b/examples/declarative/demos/photoviewer/main.cpp new file mode 100644 index 0000000..f718dc2 --- /dev/null +++ b/examples/declarative/demos/photoviewer/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockPortrait); + viewer.setMainQmlFile(QLatin1String("qml/qml/photoviewer.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/demos/photoviewer/photoviewer.desktop b/examples/declarative/demos/photoviewer/photoviewer.desktop new file mode 100644 index 0000000..0ff4d15 --- /dev/null +++ b/examples/declarative/demos/photoviewer/photoviewer.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=photoviewer +Exec=/opt/usr/bin/photoviewer +Icon=photoviewer +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/demos/photoviewer/photoviewer.png b/examples/declarative/demos/photoviewer/photoviewer.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/AlbumDelegate.qml b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/AlbumDelegate.qml new file mode 100644 index 0000000..9001033 --- /dev/null +++ b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/AlbumDelegate.qml @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Component { + id: albumDelegate + Package { + + Item { + Package.name: 'browser' + GridView { + id: photosGridView; model: visualModel.parts.grid; width: mainWindow.width; height: mainWindow.height - 21 + x: 0; y: 21; cellWidth: 160; cellHeight: 153; interactive: false + onCurrentIndexChanged: photosListView.positionViewAtIndex(currentIndex, ListView.Contain) + } + } + + Item { + Package.name: 'fullscreen' + ListView { + id: photosListView; model: visualModel.parts.list; orientation: Qt.Horizontal + width: mainWindow.width; height: mainWindow.height; interactive: false + onCurrentIndexChanged: photosGridView.positionViewAtIndex(currentIndex, GridView.Contain) + highlightRangeMode: ListView.StrictlyEnforceRange; snapMode: ListView.SnapOneItem + } + } + + Item { + Package.name: 'album' + id: albumWrapper; width: 210; height: 220 + + VisualDataModel { + id: visualModel; delegate: PhotoDelegate { } + model: RssModel { id: rssModel; tags: tag } + } + + BusyIndicator { + id: busyIndicator + anchors { centerIn: parent; verticalCenterOffset: -20 } + on: rssModel.status != XmlListModel.Ready + } + + PathView { + id: photosPathView; model: visualModel.parts.stack; pathItemCount: 5 + visible: !busyIndicator.visible + anchors.centerIn: parent; anchors.verticalCenterOffset: -30 + path: Path { + PathAttribute { name: 'z'; value: 9999.0 } + PathLine { x: 1; y: 1 } + PathAttribute { name: 'z'; value: 0.0 } + } + } + + MouseArea { + anchors.fill: parent + onClicked: mainWindow.editMode ? photosModel.remove(index) : albumWrapper.state = 'inGrid' + } + + Tag { + anchors { horizontalCenter: parent.horizontalCenter; bottom: parent.bottom; bottomMargin: 10 } + frontLabel: tag; backLabel: qsTr("Remove"); flipped: mainWindow.editMode + onTagChanged: rssModel.tags = tag + onBackClicked: if (mainWindow.editMode) photosModel.remove(index); + } + + states: [ + State { + name: 'inGrid' + PropertyChanges { target: photosGridView; interactive: true } + PropertyChanges { target: albumsShade; opacity: 1 } + PropertyChanges { target: backButton; onClicked: albumWrapper.state = ''; y: 6 } + }, + State { + name: 'fullscreen'; extend: 'inGrid' + PropertyChanges { target: photosGridView; interactive: false } + PropertyChanges { target: photosListView; interactive: true } + PropertyChanges { target: photosShade; opacity: 1 } + PropertyChanges { target: backButton; y: -backButton.height - 8 } + } + ] + + GridView.onAdd: NumberAnimation { + target: albumWrapper; properties: "scale"; from: 0.0; to: 1.0; easing.type: Easing.OutQuad + } + GridView.onRemove: SequentialAnimation { + PropertyAction { target: albumWrapper; property: "GridView.delayRemove"; value: true } + NumberAnimation { target: albumWrapper; property: "scale"; from: 1.0; to: 0.0; easing.type: Easing.OutQuad } + PropertyAction { target: albumWrapper; property: "GridView.delayRemove"; value: false } + } + + transitions: [ + Transition { + from: '*'; to: 'inGrid' + SequentialAnimation { + NumberAnimation { properties: 'opacity'; duration: 250 } + PauseAnimation { duration: 350 } + NumberAnimation { target: backButton; properties: "y"; duration: 200; easing.type: Easing.OutQuad } + } + }, + Transition { + from: 'inGrid'; to: '*' + NumberAnimation { properties: "y,opacity"; easing.type: Easing.OutQuad; duration: 300 } + } + ] + } + } +} diff --git a/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/BusyIndicator.qml b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/BusyIndicator.qml new file mode 100644 index 0000000..7b28930 --- /dev/null +++ b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/BusyIndicator.qml @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE: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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + id: container + property bool on: false + + source: "images/busy.png"; visible: container.on + NumberAnimation on rotation { running: container.on; from: 0; to: 360; loops: Animation.Infinite; duration: 1200 } +} diff --git a/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/Button.qml b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/Button.qml new file mode 100644 index 0000000..29f2bb7 --- /dev/null +++ b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/Button.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + + property alias label: labelText.text + property color tint: "transparent" + signal clicked + + width: labelText.width + 70 ; height: labelText.height + 18 + + BorderImage { + anchors { fill: container; leftMargin: -6; topMargin: -6; rightMargin: -8; bottomMargin: -8 } + source: 'images/box-shadow.png'; smooth: true + border.left: 10; border.top: 10; border.right: 10; border.bottom: 10 + } + + Image { anchors.fill: parent; source: "images/cardboard.png"; smooth: true } + + Rectangle { + anchors.fill: container; color: container.tint; visible: container.tint != "" + opacity: 0.25; smooth: true + } + + Text { id: labelText; font.pixelSize: 15; anchors.centerIn: parent; smooth: true } + + MouseArea { + anchors { fill: parent; leftMargin: -20; topMargin: -20; rightMargin: -20; bottomMargin: -20 } + onClicked: container.clicked() + } +} diff --git a/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/EditableButton.qml b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/EditableButton.qml new file mode 100644 index 0000000..06f8062 --- /dev/null +++ b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/EditableButton.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + + property string label + signal clicked + signal labelChanged(string label) + + width: textInput.width + 70 ; height: textInput.height + 18 + + BorderImage { + anchors { fill: container; leftMargin: -6; topMargin: -6; rightMargin: -8; bottomMargin: -8 } + source: 'images/box-shadow.png'; smooth: true + border.left: 10; border.top: 10; border.right: 10; border.bottom: 10 + } + + Image { anchors.fill: parent; source: "images/cardboard.png"; smooth: true } + + TextInput { + id: textInput; text: label; font.pixelSize: 15; anchors.centerIn: parent; smooth: true + Keys.onReturnPressed: { + container.labelChanged(textInput.text) + container.focus = true + } + Keys.onEnterPressed: { + container.labelChanged(textInput.text) + container.focus = true + } + Keys.onEscapePressed: { + textInput.text = container.label + container.focus = true + } + } + + Rectangle { + anchors.fill: container; border.color: "steelblue"; border.width: 4 + color: "transparent"; visible: textInput.focus; smooth: true + } + + MouseArea { + anchors { fill: parent; leftMargin: -20; topMargin: -20; rightMargin: -20; bottomMargin: -20 } + onClicked: { textInput.forceActiveFocus(); textInput.openSoftwareInputPanel(); } + } +} diff --git a/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/PhotoDelegate.qml b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/PhotoDelegate.qml new file mode 100644 index 0000000..5948b5d --- /dev/null +++ b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/PhotoDelegate.qml @@ -0,0 +1,188 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "script/script.js" as Script + +Package { + Item { id: stackItem; Package.name: 'stack'; width: 160; height: 153; z: stackItem.PathView.z } + Item { id: listItem; Package.name: 'list'; width: mainWindow.width + 40; height: 153 } + Item { id: gridItem; Package.name: 'grid'; width: 160; height: 153 } + + Item { + width: 160; height: 153 + + Item { + id: photoWrapper + + property double randomAngle: Math.random() * (2 * 6 + 1) - 6 + property double randomAngle2: Math.random() * (2 * 6 + 1) - 6 + + x: 0; y: 0; width: 140; height: 133 + z: stackItem.PathView.z; rotation: photoWrapper.randomAngle + + BorderImage { + anchors { + fill: border.visible ? border : placeHolder + leftMargin: -6; topMargin: -6; rightMargin: -8; bottomMargin: -8 + } + source: 'images/box-shadow.png'; smooth: true + border.left: 10; border.top: 10; border.right: 10; border.bottom: 10 + } + Rectangle { + id: placeHolder + + property int w: Script.getWidth(content) + property int h: Script.getHeight(content) + property double s: Script.calculateScale(w, h, photoWrapper.width) + + color: 'white'; anchors.centerIn: parent; smooth: true + width: w * s; height: h * s; visible: originalImage.status != Image.Ready + Rectangle { + color: "#878787"; smooth: true + anchors { fill: parent; topMargin: 3; bottomMargin: 3; leftMargin: 3; rightMargin: 3 } + } + } + Rectangle { + id: border; color: 'white'; anchors.centerIn: parent; smooth: true + width: originalImage.paintedWidth + 6; height: originalImage.paintedHeight + 6 + visible: !placeHolder.visible + } + BusyIndicator { anchors.centerIn: parent; on: originalImage.status != Image.Ready } + Image { + id: originalImage; smooth: true; source: "http://" + Script.getImagePath(content) + fillMode: Image.PreserveAspectFit; width: photoWrapper.width; height: photoWrapper.height + } + Image { + id: hqImage; smooth: true; source: ""; visible: false + fillMode: Image.PreserveAspectFit; width: photoWrapper.width; height: photoWrapper.height + } + Binding { + target: mainWindow; property: "downloadProgress"; value: hqImage.progress + when: listItem.ListView.isCurrentItem + } + Binding { + target: mainWindow; property: "imageLoading" + value: (hqImage.status == Image.Loading) ? 1 : 0; when: listItem.ListView.isCurrentItem + } + MouseArea { + width: originalImage.paintedWidth; height: originalImage.paintedHeight; anchors.centerIn: originalImage + onClicked: { + if (albumWrapper.state == 'inGrid') { + gridItem.GridView.view.currentIndex = index; + albumWrapper.state = 'fullscreen' + } else { + gridItem.GridView.view.currentIndex = index; + albumWrapper.state = 'inGrid' + } + } + } + + states: [ + State { + name: 'stacked'; when: albumWrapper.state == '' + ParentChange { target: photoWrapper; parent: stackItem; x: 10; y: 10 } + PropertyChanges { target: photoWrapper; opacity: stackItem.PathView.onPath ? 1.0 : 0.0 } + }, + State { + name: 'inGrid'; when: albumWrapper.state == 'inGrid' + ParentChange { target: photoWrapper; parent: gridItem; x: 10; y: 10; rotation: photoWrapper.randomAngle2 } + }, + State { + name: 'fullscreen'; when: albumWrapper.state == 'fullscreen' + ParentChange { + target: photoWrapper; parent: listItem; x: 0; y: 0; rotation: 0 + width: mainWindow.width; height: mainWindow.height + } + PropertyChanges { target: border; opacity: 0 } + PropertyChanges { target: hqImage; source: listItem.ListView.isCurrentItem ? hq : ""; visible: true } + } + ] + + transitions: [ + Transition { + from: 'stacked'; to: 'inGrid' + SequentialAnimation { + PauseAnimation { duration: 10 * index } + ParentAnimation { + target: photoWrapper; via: foreground + NumberAnimation { + target: photoWrapper; properties: 'x,y,rotation,opacity'; duration: 600; easing.type: 'OutQuart' + } + } + } + }, + Transition { + from: 'inGrid'; to: 'stacked' + ParentAnimation { + target: photoWrapper; via: foreground + NumberAnimation { properties: 'x,y,rotation,opacity'; duration: 600; easing.type: 'OutQuart' } + } + }, + Transition { + from: 'inGrid'; to: 'fullscreen' + SequentialAnimation { + PauseAnimation { duration: gridItem.GridView.isCurrentItem ? 0 : 600 } + ParentAnimation { + target: photoWrapper; via: foreground + NumberAnimation { + targets: [ photoWrapper, border ] + properties: 'x,y,width,height,opacity,rotation' + duration: gridItem.GridView.isCurrentItem ? 600 : 1; easing.type: 'OutQuart' + } + } + } + }, + Transition { + from: 'fullscreen'; to: 'inGrid' + ParentAnimation { + target: photoWrapper; via: foreground + NumberAnimation { + targets: [ photoWrapper, border ] + properties: 'x,y,width,height,rotation,opacity' + duration: gridItem.GridView.isCurrentItem ? 600 : 1; easing.type: 'OutQuart' + } + } + } + ] + } + } +} diff --git a/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/ProgressBar.qml b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/ProgressBar.qml new file mode 100644 index 0000000..a0756ae --- /dev/null +++ b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/ProgressBar.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE: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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + + property real progress: 0 + + Behavior on opacity { NumberAnimation { duration: 600 } } + + Rectangle { anchors.fill: parent; color: "black"; opacity: 0.5 } + + Rectangle { + id: fill; color: "white"; height: container.height + width: container.width * container.progress + } +} diff --git a/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/RssModel.qml b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/RssModel.qml new file mode 100644 index 0000000..15bb67f --- /dev/null +++ b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/RssModel.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +XmlListModel { + property string tags : "" + + source: "http://api.flickr.com/services/feeds/photos_public.gne?"+(tags ? "tags="+tags+"&" : "") + query: "/feed/entry" + namespaceDeclarations: "declare default element namespace 'http://www.w3.org/2005/Atom';" + + XmlRole { name: "title"; query: "title/string()" } + XmlRole { name: "content"; query: "content/string()" } + XmlRole { name: "hq"; query: "link[@rel='enclosure']/@href/string()" } +} diff --git a/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/Tag.qml b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/Tag.qml new file mode 100644 index 0000000..9358975 --- /dev/null +++ b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/Tag.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Flipable { + id: flipable + + property alias frontLabel: frontButton.label + property alias backLabel: backButton.label + + property int angle: 0 + property int randomAngle: Math.random() * (2 * 6 + 1) - 6 + property bool flipped: false + + signal frontClicked + signal backClicked + signal tagChanged(string tag) + + front: EditableButton { + id: frontButton; rotation: flipable.randomAngle + anchors { centerIn: parent; verticalCenterOffset: -20 } + onClicked: flipable.frontClicked() + onLabelChanged: flipable.tagChanged(label) + } + + back: Button { + id: backButton; tint: "red"; rotation: flipable.randomAngle + anchors { centerIn: parent; verticalCenterOffset: -20 } + onClicked: flipable.backClicked() + } + + transform: Rotation { + origin.x: flipable.width / 2; origin.y: flipable.height / 2 + axis.x: 0; axis.y: 1; axis.z: 0 + angle: flipable.angle + } + + states: State { + name: "back"; when: flipable.flipped + PropertyChanges { target: flipable; angle: 180 } + } + + transitions: Transition { + ParallelAnimation { + NumberAnimation { properties: "angle"; duration: 400 } + SequentialAnimation { + NumberAnimation { target: flipable; property: "scale"; to: 0.8; duration: 200 } + NumberAnimation { target: flipable; property: "scale"; to: 1.0; duration: 200 } + } + } + } +} diff --git a/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/images/box-shadow.png b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/images/box-shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..431af8545d342d1d1451d3052c6161703531eb75 GIT binary patch literal 588 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/images/cardboard.png b/examples/declarative/demos/photoviewer/qml/PhotoViewerCore/images/cardboard.png new file mode 100644 index 0000000000000000000000000000000000000000..1847ab528ddfd234db7bdc8399ddf975d95685fa GIT binary patch literal 8844 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 + + + + AlbumDelegate + + + Remove + + + + + photoviewer + + + Add + + + + + Edit + + + + + Back + + + + diff --git a/examples/declarative/demos/photoviewer/qml/i18n/qml_fr.ts b/examples/declarative/demos/photoviewer/qml/i18n/qml_fr.ts new file mode 100644 index 0000000..9f892db --- /dev/null +++ b/examples/declarative/demos/photoviewer/qml/i18n/qml_fr.ts @@ -0,0 +1,30 @@ + + + + + AlbumDelegate + + + Remove + Supprimer + + + + photoviewer + + + Add + Ajouter + + + + Edit + Éditer + + + + Back + Retour + + + diff --git a/examples/declarative/demos/photoviewer/qml/photoviewer.qml b/examples/declarative/demos/photoviewer/qml/photoviewer.qml new file mode 100644 index 0000000..0f59c64 --- /dev/null +++ b/examples/declarative/demos/photoviewer/qml/photoviewer.qml @@ -0,0 +1,110 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "PhotoViewerCore" + +Rectangle { + id: mainWindow + + property real downloadProgress: 0 + property bool imageLoading: false + property bool editMode: false + + width: 800; height: 480; color: "#d5d6d8" + + ListModel { + id: photosModel + ListElement { tag: "Flowers" } + ListElement { tag: "Wildlife" } + ListElement { tag: "Prague" } + } + + VisualDataModel { id: albumVisualModel; model: photosModel; delegate: AlbumDelegate {} } + + GridView { + id: albumView; width: parent.width; height: parent.height; cellWidth: 210; cellHeight: 220 + model: albumVisualModel.parts.album; visible: albumsShade.opacity != 1.0 + } + + Column { + spacing: 20; anchors { bottom: parent.bottom; right: parent.right; rightMargin: 20; bottomMargin: 20 } + Button { + id: newButton; label: qsTr("Add"); rotation: 3 + anchors.horizontalCenter: parent.horizontalCenter + onClicked: { + mainWindow.editMode = false + photosModel.append( { tag: "" } ) + albumView.positionViewAtIndex(albumView.count - 1, GridView.Contain) + } + } + Button { + id: deleteButton; label: qsTr("Edit"); rotation: -2; + onClicked: mainWindow.editMode = !mainWindow.editMode + anchors.horizontalCenter: parent.horizontalCenter + } + Button { + id: quitButton; label: qsTr("Quit"); rotation: -2; + onClicked: Qt.quit() + anchors.horizontalCenter: parent.horizontalCenter + } + } + + Rectangle { + id: albumsShade; color: mainWindow.color + width: parent.width; height: parent.height; opacity: 0.0 + } + + ListView { anchors.fill: parent; model: albumVisualModel.parts.browser; interactive: false } + + Button { id: backButton; label: qsTr("Back"); rotation: 3; x: parent.width - backButton.width - 6; y: -backButton.height - 8 } + + Rectangle { id: photosShade; color: 'black'; width: parent.width; height: parent.height; opacity: 0; visible: opacity != 0.0 } + + ListView { anchors.fill: parent; model: albumVisualModel.parts.fullscreen; interactive: false } + + Item { id: foreground; anchors.fill: parent } + + ProgressBar { + progress: mainWindow.downloadProgress; width: parent.width; height: 4 + anchors.bottom: parent.bottom; opacity: mainWindow.imageLoading; visible: opacity != 0.0 + } +} diff --git a/examples/declarative/demos/photoviewer/qml/photoviewer.qmlproject b/examples/declarative/demos/photoviewer/qml/photoviewer.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/demos/photoviewer/qml/photoviewer.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/demos/photoviewer/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/demos/rssnews/main.cpp b/examples/declarative/demos/rssnews/main.cpp new file mode 100644 index 0000000..ad57596 --- /dev/null +++ b/examples/declarative/demos/rssnews/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/rssnews.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/demos/rssnews/qml/content/BusyIndicator.qml b/examples/declarative/demos/rssnews/qml/content/BusyIndicator.qml new file mode 100644 index 0000000..e305cbe --- /dev/null +++ b/examples/declarative/demos/rssnews/qml/content/BusyIndicator.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE: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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + id: container + property bool on: false + + source: "images/busy.png"; visible: container.on + + NumberAnimation on rotation { + running: container.on; from: 0; to: 360; loops: Animation.Infinite; duration: 1200 + } +} diff --git a/examples/declarative/demos/rssnews/qml/content/CategoryDelegate.qml b/examples/declarative/demos/rssnews/qml/content/CategoryDelegate.qml new file mode 100644 index 0000000..c4fa8cc --- /dev/null +++ b/examples/declarative/demos/rssnews/qml/content/CategoryDelegate.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: delegate + + width: delegate.ListView.view.width; height: 60 + + Text { + text: name + color: delegate.ListView.isCurrentItem ? "white" : "black" + font { family: "Helvetica"; pixelSize: 16; bold: true } + anchors { + left: parent.left; leftMargin: 15 + verticalCenter: parent.verticalCenter + } + } + + BusyIndicator { + scale: 0.6 + on: delegate.ListView.isCurrentItem && window.loading + anchors { right: parent.right; rightMargin: 10; verticalCenter: parent.verticalCenter } + } + + Rectangle { + width: delegate.width; height: 1; color: "#cccccc" + anchors.bottom: delegate.bottom + visible: delegate.ListView.isCurrentItem ? false : true + } + Rectangle { + width: delegate.width; height: 1; color: "white" + visible: delegate.ListView.isCurrentItem ? false : true + } + + MouseArea { + anchors.fill: delegate + onClicked: { + delegate.ListView.view.currentIndex = index + window.currentFeed = feed + } + } +} diff --git a/examples/declarative/demos/rssnews/qml/content/NewsDelegate.qml b/examples/declarative/demos/rssnews/qml/content/NewsDelegate.qml new file mode 100644 index 0000000..cf88f4e --- /dev/null +++ b/examples/declarative/demos/rssnews/qml/content/NewsDelegate.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: delegate + height: column.height + 40 + width: delegate.ListView.view.width + + Column { + id: column + x: 20; y: 20 + width: parent.width - 40 + + Text { + id: titleText + text: title; width: parent.width; wrapMode: Text.WordWrap + font { bold: true; family: "Helvetica"; pointSize: 16 } + } + + Text { + id: descriptionText + width: parent.width; text: description + wrapMode: Text.WordWrap; font.family: "Helvetica" + } + } + + Rectangle { + width: parent.width; height: 1; color: "#cccccc" + anchors.bottom: parent.bottom + } +} diff --git a/examples/declarative/demos/rssnews/qml/content/RssFeeds.qml b/examples/declarative/demos/rssnews/qml/content/RssFeeds.qml new file mode 100644 index 0000000..37c4b69 --- /dev/null +++ b/examples/declarative/demos/rssnews/qml/content/RssFeeds.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +ListModel { + id: rssFeeds + + ListElement { name: "Top Stories"; feed: "rss.news.yahoo.com/rss/topstories" } + ListElement { name: "World"; feed: "rss.news.yahoo.com/rss/world" } + ListElement { name: "Europe"; feed: "rss.news.yahoo.com/rss/europe" } + ListElement { name: "Oceania"; feed: "rss.news.yahoo.com/rss/oceania" } + ListElement { name: "U.S. National"; feed: "rss.news.yahoo.com/rss/us" } + ListElement { name: "Politics"; feed: "rss.news.yahoo.com/rss/politics" } + ListElement { name: "Business"; feed: "rss.news.yahoo.com/rss/business" } + ListElement { name: "Technology"; feed: "rss.news.yahoo.com/rss/tech" } + ListElement { name: "Entertainment"; feed: "rss.news.yahoo.com/rss/entertainment" } + ListElement { name: "Health"; feed: "rss.news.yahoo.com/rss/health" } + ListElement { name: "Science"; feed: "rss.news.yahoo.com/rss/science" } + ListElement { name: "Sports"; feed: "rss.news.yahoo.com/rss/sports" } +} diff --git a/examples/declarative/demos/rssnews/qml/content/ScrollBar.qml b/examples/declarative/demos/rssnews/qml/content/ScrollBar.qml new file mode 100644 index 0000000..f20f0aa --- /dev/null +++ b/examples/declarative/demos/rssnews/qml/content/ScrollBar.qml @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + + property variant scrollArea + property variant orientation: Qt.Vertical + + opacity: 0 + + function position() + { + var ny = 0; + if (container.orientation == Qt.Vertical) + ny = scrollArea.visibleArea.yPosition * container.height; + else + ny = scrollArea.visibleArea.xPosition * container.width; + if (ny > 2) return ny; else return 2; + } + + function size() + { + var nh, ny; + + if (container.orientation == Qt.Vertical) + nh = scrollArea.visibleArea.heightRatio * container.height; + else + nh = scrollArea.visibleArea.widthRatio * container.width; + + if (container.orientation == Qt.Vertical) + ny = scrollArea.visibleArea.yPosition * container.height; + else + ny = scrollArea.visibleArea.xPosition * container.width; + + if (ny > 3) { + var t; + if (container.orientation == Qt.Vertical) + t = Math.ceil(container.height - 3 - ny); + else + t = Math.ceil(container.width - 3 - ny); + if (nh > t) return t; else return nh; + } else return nh + ny; + } + + Rectangle { anchors.fill: parent; color: "Black"; opacity: 0.3 } + + BorderImage { + source: "images/scrollbar.png" + border { left: 1; right: 1; top: 1; bottom: 1 } + x: container.orientation == Qt.Vertical ? 2 : position() + width: container.orientation == Qt.Vertical ? container.width - 4 : size() + y: container.orientation == Qt.Vertical ? position() : 2 + height: container.orientation == Qt.Vertical ? size() : container.height - 4 + } + + states: State { + name: "visible" + when: container.orientation == Qt.Vertical ? scrollArea.movingVertically : scrollArea.movingHorizontally + PropertyChanges { target: container; opacity: 1.0 } + } + + transitions: Transition { + from: "visible"; to: "" + NumberAnimation { properties: "opacity"; duration: 600 } + } +} diff --git a/examples/declarative/demos/rssnews/qml/content/images/busy.png b/examples/declarative/demos/rssnews/qml/content/images/busy.png new file mode 100644 index 0000000000000000000000000000000000000000..664c2b1491498ee0158cb7674602265cc5f5c70c GIT binary patch literal 2629 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/rssnews/qml/content/images/scrollbar.png b/examples/declarative/demos/rssnews/qml/content/images/scrollbar.png new file mode 100644 index 0000000000000000000000000000000000000000..0228dcf9ebb52f89ef1ee1ba502649abd78e23d9 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^EFjFm1|(O0oL2{=7>k44ofy`glX(f`uqAoByDx`7I;J!Gca%qgD@k*tT_@uLG}_)Usv{ +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/demos/rssnews/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/demos/rssnews/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/demos/rssnews/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/demos/rssnews/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/demos/rssnews/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/demos/rssnews/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/demos/rssnews/rssnews.desktop b/examples/declarative/demos/rssnews/rssnews.desktop new file mode 100644 index 0000000..ba6110f --- /dev/null +++ b/examples/declarative/demos/rssnews/rssnews.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=rssnews +Exec=/opt/usr/bin/rssnews +Icon=rssnews +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/demos/rssnews/rssnews.png b/examples/declarative/demos/rssnews/rssnews.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/demos/samegame/main.cpp b/examples/declarative/demos/samegame/main.cpp new file mode 100644 index 0000000..d70b1d3 --- /dev/null +++ b/examples/declarative/demos/samegame/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockPortrait); + viewer.setMainQmlFile(QLatin1String("qml/qml/samegame.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/demos/samegame/qml/SamegameCore/BoomBlock.qml b/examples/declarative/demos/samegame/qml/SamegameCore/BoomBlock.qml new file mode 100644 index 0000000..afda29c --- /dev/null +++ b/examples/declarative/demos/samegame/qml/SamegameCore/BoomBlock.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import Qt.labs.particles 1.0 + +Item { + id: block + property bool dying: false + property bool spawned: false + property int type: 0 + + Behavior on x { + enabled: spawned; + SpringAnimation{ spring: 2; damping: 0.2 } + } + Behavior on y { + SpringAnimation{ spring: 2; damping: 0.2 } + } + + Image { + id: img + source: { + if(type == 0){ + "pics/redStone.png"; + } else if(type == 1) { + "pics/blueStone.png"; + } else { + "pics/greenStone.png"; + } + } + opacity: 0 + Behavior on opacity { NumberAnimation { duration: 200 } } + anchors.fill: parent + } + + Particles { + id: particles + + width: 1; height: 1 + anchors.centerIn: parent + + emissionRate: 0 + lifeSpan: 700; lifeSpanDeviation: 600 + angle: 0; angleDeviation: 360; + velocity: 100; velocityDeviation: 30 + source: { + if(type == 0){ + "pics/redStar.png"; + } else if (type == 1) { + "pics/blueStar.png"; + } else { + "pics/greenStar.png"; + } + } + } + + states: [ + State { + name: "AliveState"; when: spawned == true && dying == false + PropertyChanges { target: img; opacity: 1 } + }, + + State { + name: "DeathState"; when: dying == true + StateChangeScript { script: particles.burst(50); } + PropertyChanges { target: img; opacity: 0 } + StateChangeScript { script: block.destroy(1000); } + } + ] +} diff --git a/examples/declarative/demos/samegame/qml/SamegameCore/Button.qml b/examples/declarative/demos/samegame/qml/SamegameCore/Button.qml new file mode 100644 index 0000000..140b196 --- /dev/null +++ b/examples/declarative/demos/samegame/qml/SamegameCore/Button.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: container + + property string text: "Button" + + signal clicked + + width: buttonLabel.width + 20; height: buttonLabel.height + 20 + smooth: true + border { width: 1; color: Qt.darker(activePalette.button) } + radius: 8 + color: activePalette.button + + gradient: Gradient { + GradientStop { + position: 0.0 + color: { + if (mouseArea.pressed) + return activePalette.dark + else + return activePalette.light + } + } + GradientStop { position: 1.0; color: activePalette.button } + } + + MouseArea { id: mouseArea; anchors.fill: parent; onClicked: container.clicked() } + + Text { + id: buttonLabel; text: container.text; anchors.centerIn: container; color: activePalette.buttonText; font.pixelSize: 24 + } +} diff --git a/examples/declarative/demos/samegame/qml/SamegameCore/Dialog.qml b/examples/declarative/demos/samegame/qml/SamegameCore/Dialog.qml new file mode 100644 index 0000000..e1f3900 --- /dev/null +++ b/examples/declarative/demos/samegame/qml/SamegameCore/Dialog.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: page + + property Item text: dialogText + + signal closed + signal opened + function forceClose() { + if(page.opacity == 0) + return; //already closed + page.closed(); + page.opacity = 0; + } + + function show(txt) { + page.opened(); + dialogText.text = txt; + page.opacity = 1; + } + + width: dialogText.width + 20; height: dialogText.height + 20 + color: "white" + border.width: 1 + opacity: 0 + visible: opacity > 0 + Behavior on opacity { + NumberAnimation { duration: 1000 } + } + + Text { id: dialogText; anchors.centerIn: parent; text: "Hello World!" } + + MouseArea { anchors.fill: parent; onClicked: forceClose(); } +} + diff --git a/examples/declarative/demos/samegame/qml/SamegameCore/pics/background.png b/examples/declarative/demos/samegame/qml/SamegameCore/pics/background.png new file mode 100644 index 0000000000000000000000000000000000000000..3734a277449c0937552dde79ed2fdeb54f0b8234 GIT binary patch literal 313930 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 _jDoO)^e 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%0ACyXFIT$gT!z54fI#}1<;OuZ{Q{oR-to0S33 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

&!-hkmHkXxn1MjnYt8%3oO(w;;Dg?u*_Q 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%0A1(~k&!6&efyQ9Af0*A1C{p)EbT zQCeM0o7@gasirO;($QMRo-ANldj&#gR5es_|)&Idhnv8H@*U>kjj^Yrpw zCIBvoF)r8EePpmcD=S!1fu>OBSlA0@v_p+qc&f>4w_6gVloE(^YqHLk^;5^}sXM6} z`eW|}P?^T&wnGP)$q$x^?$*_=5vAvUhwm@l(!KTE zHav<#?%U(}njE=8Jv#gaC}krIfW|R(&@kUib`!!J^!l8^!M-mCqyq zL>+*p&0?CUkdk1eIXjgrj3jSP-w>%o-%RR6R0(3<_@&$E9jL0Hg_aH0?iUR1VucCb zpVQTA9DV0fy;XEjl{1~PihPKrNZ_C1R7Ux!XK&xT)H_b1%*;>;=}Y?Z|J?rPuk>HO z)ug_hfb6Tb4YHN}$w%(iqN^Lw%_JF?RB;LV*9MnW7~qbb zfTL7|o!@ww3Ky{#9=BJ%CAnOuE z&)pju6=vk`WB0UrUN2QsEGR>$TG<2KFq}}V^{2^Lg@DGv_C<=#|KEkEm2G9OP8E@q zQvHOdvu=*(`{);yPzMqSrY^b|$Oof9g06UKwTGX&XXE7+nwvOx_SNY5*uJXE)bIAvpwLxyK+@+Lb&&R=% z!PV-#C;)6p>h!@XLpcH=08S8aIK6+-Qpw;&o?;s#i!@6TOu7@_5&%#u)V;*>bF|l) zLhFfX8{^wiz3KPra^d;t& z!CE4#6&6MYKwB(ke}=v*9c6#;aqyt+3Ogf6O@|)CBvp$?aVAvt_;ra;HP{1YeN|Vt z+8QuI7aO`=6RhgSR$3swuvAznxst30k3){kBiEWJVVA73kfpFdYQJbLMlZ}1$yEth z15znHB()GO9^D#I@uHYo4U1l8D+;2 zsUgt@4U%^scd>MpHdcj6J`V2N@i_M9c06-Aj^XhaN1}G8fF768i_xj3U*Q0b9ZQ=7 zs9%DxU_u(f^Sa*Xb~IiXaOlLVIzr=YH2sQCZ3c|n{mYk+ujzKD1=D2;b=urrOGBb5 z)Eu@Gwx_Dj*KkiMH4a}uNY45B<3Ic3XFm3(`sq(lCj+&BKo#uP7eSMxZ)1qG#scG1 zB=v;7GaoFZK7{mBVad7dTRDy%U=gsImm91$gwvczae+n=QU2>Qo`TvJUx}+}HYISq zP4ef`UyVTrLf%Xd{cYg##@8}9>Wxa2)JI0ZCD4E6DTim2-*{Dls9;pKE7z*X3j<_? zp5auZn9i!!+BxP4aXpenVo>5csyt6w6`M1UNiB=@kAHjae}?YmyanJ>oO>|)NP>I1 ze@ox~JN@?uK9-w#?%j*d&y9HW3f}6eR*)(t1Xa;SltYe3e(c=c8;=X98VbgOp~4%} z|LOg=ibg&Chu%)%fU7+mE%sFC6JAqQk{YnG=|{;TIZI}Z1&~}ym6_&Aqc#VA>Csm# z)z;d8Z}raC$E_Wx=us7FmeDtC&Lp<>T58A9u->){BGpMk(JDeUg;F7@^+zaqTDnGMU|3L^;RXMq3nct*k+oq*pO|St~lapWJy7IUaF*MRT1Emx3giAS9ePit3z zj^PTX>~x;C31-yzoh~lIhcPmyHCLm*$*wvluiO;wV%=KAUhCuQsZhGzKE8ZSA72uD zMK(sPQw!4V84e=L7f!C)l#%N#A|a()uL}{9$K&VY$KS`}!IF(qu72>hlxo$g?;Hoj zo!r_Kz}QbKAKZB)mR$Cuzk4em%ua?g zczgP%r-zgvN>kRYRzKgyH^Hl!Ax6T4jzy4 z*vhT~|4+*+7LDPXtg2PGt*pAvC0yDuBcZCIPshjYfi3y0nCR8G3+{S?XlG zNXgQ4oTZxitJ$xN7z*}4)=H%HL{tT&(R}@B$Vo?t$DFDYLNbAcNqXXdeu3tCD`T_j z;yu(5uFQOtV=vp5ACFR9Q_rJpd)adjlvTk~oRU~iZn`WWSa+m5kZ@TfUSeIn7^Ui+eu0LM6JnUG6VG z-n6}jLpa6#gyzdr2g@wNT!p7u?N#kkVPW2nvhU2<%a9=&KSnSW zufP-Dh~^igA%mgN&!MS-m+x5S*Q9!bkj&i{r|tz;y3LbEJfZ%yQTub_-S|7vdh6=Y zKjA_#V9$-Kj4{@S8`A6(KhPA|%pg*nFk$ga)`=XdS*YI6NxMLu`+V)*?T*>rQC?fA zpe3qU04^s#PdfqphdA}@F8W8kXR%@ek_30${z~8e>-OLGbdNuMn}yalM^2kH;AJ36 z7vf40RzH5-Z4TyN<+1Tu44(=_4YP}M!0S*})CwDobu#_evVarszl*GzX(FNpxe%_l z8))ew;gUe9GMM^tsdiSCstv6PtTUOl7no}5Tj^=ox5-gqD7A@*e)^?ar)Dd_kV7`< zwwj5zQ~-9jMcsf3Gg)%Ud)c|%2Ld62jT&$qB8yYWZIQ|QB)&V0Re7RhniB&sJitm-PWL4 z)q_LJmz4U%o*9*1w;g|Kc7VYz=xtLpy*<5F!mxx$^Upf^1=zy0kj5N&+t`O#GD;ePV*m- zgzCn&sQbLWVKDQjTGi07zPkNv*_d4a@Cd-J*b;y?{g?J{zdEe?f4zVsj zq5`QSB#o3(N+D|AYD*g>OJ`xVOc#I@6KFlRF9DY;VLXLz(P&Zu|2~%S>QkqIi%4e9 z<=D%C`4e^Hf)lI$D?8*e2OL)Pgh`R$(Hcnb;!wlajTmTHw@+ zcuB%Qy<}@HYdLC#KBenmd&QB=Y_egq>d0g2RqJ7f%;ngRZQq~U@jUvtzm!ZF_9?H| z60hWSkzkW*wX(Z_-dy)8B`WcY0b%eff~otmc-a{PPDKJQMTm0BeYun^Q)_^9yWc;) z+-`UMV5P?>i=b%P!!j-&FRBs^FpR%$RYSU^gj>nS^T+=_zyFd|@dhkF6ZJlw+j8HscUk_Prc?IgTcue?3ZsN&nRl*3?A7SAF{we_WfD z+GH5fJl|ks;DwYnfF%h2hT>bAcp5(ta%}F<5gdt*<9__J zI2BP|)o*h3UPAytaL4_x^w(eMzix7~q$R~4ZXC8Wi`!yEShnrcI}%BdnSb)vvph#M zm8^oa1x3T0Y~WPdd?i#35>;UhQDTvW*kxDE&vYgWuxREKRMkG*c_G2(fwj=oI^wTh zD=DRd)LdrNR67jFNTGm`NQxEZuzX9=7Ra86KGtb!*%eU|8zxm#(;|{efAOW+w(6jN z-^#I-$MbkT^K&bYtvvU#9Xx7hY^&Xxv2VI`s{c8hk*cv;y*oCXv%h z#BW_#S2}wl^L^6LhgRJeA-14uJ=nl7chg}ntqcGirOvG#Ep-YViKMDYO?@a;WuvJ| z16qDpQjJ`!iUC5T7&RhV!$xXRs;$iovToO&N5A-~01X z@?mUk%M#t@Bz2rQkRL}>f~p%vA6{y2>x}L{gq*h%rLdI!$otl@@_8lLS%km2@pavt zB|xxncT-~voSVxLj1=7{lP16J6fMP4H@JdColOFsTCB0&8Tz`G%Vwre{KMbFHAd3X zo2Y<`WY}}bBZGHuiIQE9jBh*@9jJ#@PJT`U0B9}^k~mbV$@(2sREV}6&ON5*{Rlb7 zoqlPZgEMwZ_ZXqx{&oKs90HP0RY6Rt7<8C-bbzT zN1B$c4==PjW@$pHyXemSSNZuY&%&~j{dg(-kzftQ>E59vBdgePdZyrp#O5gE%rxqK zvs9^tsyZcUq@hjXZ^<1{`#|lS>e2nxGG8;QvXqfgq4Z0wVyMT8O-?wW3jq3zw=*)* zL#T8oyrOeT$GX+^m3bWH*z>lPZR4+J*|z*^E04WwJCCCrvmv(Uo{n)p)i_n70*Iab zt62q?kbj=6Hm1-@@Af`Y(v0_(5g}&2ng_42*>tAt(B+80@SK4Opw>gR=TB+m2&G;K zJ=ZvNN4KOp(``wj;1H~8_|`CID{~!35A*_nPBo?>cT0^Rlh#@!{pm-Pf2wV&;~a;Y zL6P&ZA7$TanE$aId2i!>7WHWvz7*51&=4H-?d74`^7-jw3Qh8ivS6Fi9ejNK&j-!KA z>&?>tr4g{aBRqwTp*kPMse@_^SP@ZqZd``Z*?3}H!Zn?VwSJ9qRZMz<>~Ok8eu7W^ zM+n!OsL~W`;swhrQGjYRyAOuYL>!#(iqrECW@0PeqEsoWq*?=ju57XACLf@wCkRwq zrYf5c3>s?8N+YxU<9zB$d-MDxgm)goDlc%u?MwRdSNiLY+u~txqkpB2AaskY*Pq&V zM@=M&MUhkge{lbie{S3g3(v1pESj$cRfosg^_o-7sjE=cva4r8RiT{__j=7mwzxo5 z7g6L|=mV2*=l3}PVrek3&eNMYsg$m-F64+=Qyt*a1BR?l(^b@E4_+Uc&v45I?QY+F+kG>pbPA!zP~lKc@lI$N`%}XthTC3llE7dY{3+eoE98C z)QXM0QjwYH=BM5Z0By-Ctm&t-+)7*e0aLS5D}Q<9V?WBa9nbA}9(mi3t?;Ol)4(MFgYxSxiQakb*sh)HwzFMQP zs;m`WW=-`<_mA8Co&+wYiu$$qwE_?nN`VTsi)w5YpHz<4wC9oT^+ncZIP!VOU8oH zrPgaKia1rYorpbVBz246xFVcl?8A`B1+~oLnjD)P+{(x!qs0IxxG!bY>0&2mzxix)xV1$0_dEuiW- z0L)p+!6QrQkx%(xX-TVXBPca2jOgZz*{_qzpfGzKdo5!X7K+q#R-zQiN6CjA2fGfn zJRkY_EYB@Jw*1`6b1(bBBbTGXXwDl*BV)srs)@gd^`M+32HAIrKH&8nB;b5S!@4)rkztqHx(@u@nQB)xbGq?RXw&StoXKkE1@?Of3nc13t$IyC)zqux5 zMfy=BoPJA?vJKlsW#poOdmN}9Hm&;9KyT9fE(OAzqgGiea3U`7z=JQymyv=KfvL_~ zwgX_g-BP;u6ACTU@3ob>7{{$biYBb%{<1%Q{`&iWA3y$cY|olSHHs$m!^4ZU>&v6C zltyqg_4AO%Lwdq_uU#gEdCxU!s-3S{azm))I7-evJTIn4L!Krme{$bHO|R`G#rgrk zO2sIN30(EA%8ET{?lc|>yq7$G!CcY|N<+IcBU(SmUFC1s_p!X^&nf=bEPcZ%z#Sid-M)QEUxe_Vn|>!=x9Jmfp*UO{6fJEUl zKYo^R43$jQlB^N2xQ(Ib$YbjHV-CD9ro37fR;SPNtBLjVNCz)F@qMr4!V?BS*!kgM&b?x zq5Wrakubg{x|s+y3eX$8-4MD_9^%5vH1PskRFwegC5ugqD`X)`t>%H$1abgg{jNN@_i)k1Dob7q4?SfTj!NPP)>2|-RR2N}2`{XR1nv-XE{5I>VDrF(19M8v($KU_&9!cbDzw79NS)wz0@huapYsq$B~bk_FoK0 zm6J2($@~Obup8X&w)4YPC`Q{R;**HGoQ)Rfw2ln%!u4h^rzKi266u1AC*pkrBjTxU z;1gr~PxGlQk*WnXy{|ZUx3X5x%$1|)k^{za&l)X(CX}=Q0H2s=hm#h}TSVmu4NOBL z2Lw2R*OiZo-cezG%OSmz+rO1Q^^c;}H}%q=!o1B&^(}q?M zmcL`P%0N(9e(=Z7{B!3)lL7-dU!N9YGG@<0xlp*OVQ~r!7ZKoDQiNiFNtKB~3!OBg z>Yju@TQNSFyV=@|#gRs=qOqzqxO6nHW*&#+gU3;hB6}%0*N!X6S#rg-nK`o@%m;Ik zswf?;t;fM_FWZ*4jr+4~&+^>LbIZ?Xc|OawbKA?dmm`<`s6D7sle4I(U$ckP$f~6F zW?{;0*lb=PjlDr>1Q{mJxQg!hx2IFTMWkj*PW>GZo7)MO`5k`x`Z7`JR0g=Vj4lqQ za#o5}J#iKGjbwkeV$>vwO%I3!0hwAos<}T>8eOY3Otly`r&f#6Y`py_o6HA5DF<^d z`N;d0w>>|$yj2=C=e^DPS;Au>WFh&?+oKXa`yh;NWUo#j-t}fn(&^SR2HdAl=I_@j z<~4ePGq^s;rC=2+BsuGy!P(wBi3*aXl$=Y+m0Z82)V6ukOR{tum|mqZGEem*&inTK z_5Jbp|2}{H$op1G)~eH)Bc-fbcC6SDevNl7Eaj-x$rZVdBX%idF8SE<^SN)&ygkct zR7Zb4_PihEI9PHWt&wg}=4f2)r-sg0!>n(CKHi-3I`$!AfNN4yf+@Ub7tcsj7>Frv z4Ef~+N$Q8$I9EBGb~?S)?R6~x_zaxsL!#8ZcPZfwT=znb35yG+?Wd0_tMk0@6%2$7lD6Vh{*$A|yFcweI@{=7_lDa? z`tldPCM{9LS?7RnLmg?I%2}bbFfv@9eG){Uma=pIk$?UwzjE!Sm#a!_2bm#J(ty}h zIkQ>DLe+&eaqz;;`rRPd*s6Scs@a5%Ty+xhj*>m6408ApX&D}CT$lTOmLF1Hz`$l z8lyJ?w>0`w8xpQBH>Ikrsj#^)=X~V6AIEdck7M7qV>|LQAA3FdRK;qa`p#Mq7u{+= zgW?QiX%7qp69Lr`Q0QJ-cqv9371-;{pB^;O_d!`_KjTR%hG}u7?&$;rm$f1PH{`36)_xAW%_N~J(RpD5k$&y@Tdl-EK*yF=#o6(sDAQnZfKhzRsU~*ip=KlXThAK__ zq#TdbeKRWcs$r%7~iNd>Y9ctSD*W1?*e4G;hv>`IiVW-C^Vf_QN;o5{V zP~=e_-}B$k^2}2B`jh4gRk7|wz{x^?YX6rrp{f@MI5266GOc8S`y#+QtBeLWny(5keO)jIvpm0m6T&Li{Kx$XJb%64$yO8wuqm8~c9?|a#vW!v)eDBCk{ z8@D|_x3V93tKU`G+03J~5r1hltrL}+IsQ1FP*bELbNa9TfQCB7IycoF1c7Sfq?7`V zTp`^i)w>ErM=8LN*P>+ergg`34+GIb4r|b|RrHJll8WOuw>%M%rSn@Nwe&jwh}EU^ z{^NBHfZ03!nwV-6ybe`!-YWsgmI{^TFdz*ummt!iECe;iUrNcx_IUjK{_Ds8K7ak# zpO2DvmJuAH1YcAF9+(U^H|(AX^)-^99dU9gxg2}mp2zk)o{zk3dEZMu*hB*DdRK?V z2ynIJNf@1Jf`;L zJ4${m@7ka)H9~y`sp5sBM_r;`pNc<2sjg3c+K2l7d1xGvlccZd+ZTLIq0YkV$j!4{ zxtz4W3MP_uuq=nO$2IHEcn%3J4)NM4ti}- z)$%-$)n|_>#j}z~{gMdx-j69~m#g${(pn0TrRi3WvLBLGp~a+3{YO3vNH-CJG<=p2;$@a*bvNryRywS=R(#?x3cZDA5s!GrNXwekV4cgG1N5j0_wqCZV<(%`e=VLGX zQQ>J5!@KTBoM7|0vf4z^l}QI&$=U*?MMZa-1Ub<&6<~^$Pc#43sD!Hr%luq?!M?$~ z-Z#W=@s;&X9gwcITBj1fHK&c6BQF(KWBsd@ROWr=YaqjTHhGhygS4w|a^yP;82)k)N9^Bz(WK(I^lE2FpmuT)^jx6u~N}l=gJ%4|c$HDCOh>NxQ zLM$FY)d1`xrr&G<-u!8ZMH}!QtJ<~(tbjP8h7A_xg~rJ1?x->WW}H5St*umAAb)QE zJ~EG7a%EnRDpc)AG?!f1{whoEodShpS7A%M($uMAO9@f2nOg_-LCso=TuceDw1fTj!Ks2lAGn5 zWvo&%V)VhLQmwePjBz%)@)sgVl#(Ph=T+y*stZPnu;rfRava=`O~h zCZrclD4o1MY$}{f^IOsJd*ii>ies|Du@Zz&@m*kGB2(+ZrR0*2+<66nJ@=(&o`Rwlg z@gB_cX@$@|pP-bInRCuZ$yrJ+ESU5*&d0{fXN;v@$u&$_EdT=X=F%wY+*AvwfgY!e z5tlD06N`9b$@~r4ll>Xwe87)4@FOpgu;-XH%!eL{hR34!>V#fv0L+4mmMj8Wgdlhc z`VbIx*M~gMIPxL|<{F0s?f^cbzTSANBI?y{qA;p!Ki_Ld$2!X_RKe*luaq`X^ZHcz zJz4Unl>n#Hgg37279MiP{Y(0Qq`8v9Ry}#$rx9?>YXxg*+?WVKbx9-h_>q77$Um0G zRJ>ZN8N$0o)q{00yn?D8OS&XgM=TrDRA{SG@7Mxq#|fHZ3eJ~IdsTksqp!Gb$q+T7 zYuiZU-|D8(6av-SkV}ie%(=3#EJS8g8J31|TWljuOpijJGTGBrr{}&{lp#t(RxIR} zg1po|W%Bhg_bsgy)x~K)pU7VknSr|DUfH6IC8#4ZJNlpUf^kO-JVVnMUe&7IT$M9f zB(sV-s{5__mN0OG2w70tw_<)|k}Q8H-Ry$G(!j>)%s6;URQ1A01}O$G1cjwB%uATxyZYly#7hTP39k_76v|5feD&mo5w=VLjd){ zuTP#mg20TUG&WskM0mxEbiAEf$9?KQNJ>c3e>>@7|B4(`&Nrg_vf!4+pnM7^XIWYb2r+bSI&yBckU&}%^g+e zH_a*4my>xlRV!6)&(e-Gr;KBeVr)YOmZ6%<+w$e8_U^I@)j*SmXeGfSGeQu`rP1mM zN}z5cJe~9N)y8+dp(6l{D=whFlEnYc@wlI$(;zQif|?;pH4hD(>TBp2OH|K+&f7u( zDkJ^drQA!_f^Dc=ORI1JcIQlHWk0EHc)HP8KUg6uPHpWNe2t9zGHLQt|FlpwJgZOw z2iqs0t_G_g__*VqR7(%FhSKl;6x}nb=bPpa{48!1Z~iKezw_U}%CCdRiJswH?X@mk z-Kij9L7j)SJd3H4m8LNOQO9z5O2*kn2*xf z@ltY@OxBLw`nQcuXM?1LD9oism1SWr2kQeK`QV<*zUPKe_v3lw>Y3Z}u^%Pp@tBP* z8*s2i^{W_zk!0nNC{ntmgao9zL8abE(_rh^wQe`uq)#i%QyTBq`KbS33&W$2`MEcq}zbn0T569-=&sA6e@9#>a#KW^;#*z&&T zeXFQ6A6vZpU)IiWx zg}xi6_5xbqV(wqxy;N^&n23Ag%tv)e5X*V?0HW!sNe(*)PiqHj+#ChkQQZqohUy4f zRJNE|&#gKGJ^35}3NiRpv4x8njZtH|1;)h+Zs_Q}orr2~ou>k8 z3GQMCn!wg{Gj$>>uXsR9zq4+=P|#n$U9 z)t{>))RYpWhbt%+dEjUxX3*_rW}v{gwgIoG_pw`;7_zzUNwOxI7ApyrH*6n}D~!-x zT~w-db105@6x~Pcv@^zssI?U4W43{CSo@8!z&%9O@@F%6r~E+#ORR~?jJBZ5KeSHS zvMh{vS(k99Upp`K&Wixx)nyc|f3Nu1caaKToO$}vd96!mTlXoYuj+{|0v!5GzZXi@4*Hq!;4}2utW^}Os#QpuR9hX$Nt9unphDU->aPat%zke^^ALWs) zGF9HXL>xuykNv)U0B3!w(Vrl|w7M-5G2!ZK@pp41_0xk2SKjN;q7N5PoO{7BgZthRruI_yn$mw9+fnvh_Prcc15lWYkj%Xlvv<8(HA|XN z?zNU6K`P0ZfLlV6lx}qzeru!uly0qHv&v69<)~~_y;!lWFsbQP(`X$?1`u~U8cs(k z?nW2_0JCyJk6*(s#`crlDoj;^Lq=f(&ZO1`0$ZHZbmu=A&IhV4a%ymH zya4^DGD|o%^9`O57dj$1cXZu~i+Zjq8X=WFb*y8A#~1PQ-~N63m#gyoN1za%_VeCP%$yZg;ig1jz-5(4RwfPSS-#yy%n{hR$ zK|Bm9m6_hkxqs2k{0$>(VXd+6$GROln7-ur_?8!(Q>yDVL7kH{TBPXHahEbMTRY-P zDMb$!Z2%x_^#i$w%2sHP|terDnBvjjSH)PruZ#8I7raho?xmNriJ2s&-1X zF{zk_YcW0W1H-X*vvlTkQk5-2RTl=C{~af@iZ`)b{4@{0V$S(KQaFL#S5~UpCGudM0MS$ zYu{QhOml%$!B=aWrIxZ|Nw+~*>uNFaTf=+Laxt`Ly>wcgn2Xj-rojaY?JOGq5UHFH zLbZNmrl=~B2E3=_8sh}D0D}_ZHJ>U=rOpWl8=~XZ1g7eG#KxGt$u^n*Wk8z0TfDCLO%<^y zuO$Y9>gerq?l_vBv*e%U=YNj>jH1+veE?qGLxR(rjB)tCUqOv@<6^-wCcr3E)niXD zLbZvTcIVV!RY_1seX8GUG`LdvI(7~@H#&E-MmZ)rX@*ALN~}<|rJwd%&N)*wLR4qs z5B_k76RfJhgrd?G{W$po)LU^8)O?XHtkUFF0FaVf;54S&^G9afFJi)Lpb(9Qwo`~F zreqh3fdEz>FuYdD@9~{m?Q$yexgBm|5ovn;K%%l0eWk#)#2ty-9Us1VU_UzCmoZu=ZWT z2VuDZp3^}h5>dDz7cK&!@Y>k-@+@+~h^vqW1=bxS_i8HsDUj;Me_a_Q&}As$8-oi< zcTJO3C8=^jg{nDTtf72swCf6qHN4s_ z=~Ee{M*Sb;|A(aM*|WVI8Ps>Cg%APhj(e+rmh-w+SJon~reust6QyLyKl9K3|wXb2cG~244F|fpM0A|a>s3TNnVC^ZV ztlI?*F&UUT*;05^T_hu>hI+tnXQuSrkyir{2A--Mf2SW#HQ$F$quyEtEyZ-*Ln65~LI~>5vsz>7$X2>h3hGgNS)Q!gW?*aRNXCz?tsVr>a!N5Ksp{lgYBI=jWGURWMnT5<^w5*dJGQ zycgrsm*|S}v~exL9Xa3=pm2fs!sp^LNm1`Gl-5BVh(iMG#q${9@HlYt-P;f+&~>4j zhSj-)RLQlfy!|<-LM^z|Q`t*h@u@Tun9t5zK66}w1jXmLl3Sc{&^6#hSlfm~4;jarOUz@(;vm@NGH%_HM zC~<>lRaa}j*mie)@J9eioqhld)3T1quudounnFO4Gx-y3yOXkFDR}7z^qoZQ#{cfc zR}t%EfCr@8u(+ZCUQBNgDGRTQr1c^Mqm_4UBCj&tx~p-Nyf{e|o+2MSAY*ynO{r6t%8-(H318 zh~kG}u>GP-Ngs5nF~<22R}It?6MIo=49d-$Lwmxty&h1C9uG~$Fnm!#70$-=2+DTw znh$>q04%kV5;s&`_`}~qDqJRe!&WF-$P?@fcFxEbBCpG9on9$Mo6>*!^e@Ok$l1X8 zoui{001uNiM2{i6g|$XXN~Yw3TzQGHt`2SZ6&>7gD(sN)|B_Ng@P5BVy`O%%b#Kc& z4#`DIZ2^F!b)^Y>r**DiYlshmeSxMGL1bKl!xXa3qi ztQy7@tALQ_oUH6B3~vGyyv(b%dYfa7nWs&}}MyA0M1YK?>aSt6r-Z){}y)e>#$ z%=%+fHjp-8TQzcuV5!y>ytAJ2Y{`4${6({y;#41ig-6B8RTIisf@O$1(>&o=CehhA zTob8ah*@B5*j-FoF25|PujhJIE7LJW>eT&&aG(*1sJCxwQPT~;t@-quqo`$wCbS&? z8Pzf>v!HBea2F0;TC>;u^liQ$joeurnp~@0H@b{LwWLa*x2HjTG;_Svk_v81PrKP* zT(mS_O#;kq3S08Q-`NRxHUxclJnTn5q1^{(0Ac};8nU9tY$G5Q*C;8N(cDraX;S|E zM%(*(T3iOyu4PNAbefUYMw^$d&pw7LRjWKMr^L7vExIUGoQgWv4gWWA0x$E{@lrqV z`;_WB&0?3Dcji1HY-JHAm&GX}j3qG;Kh;M-<-HY9b@^7PrU643^Cd$Y=vD0Iug>YL z$*Bbgdk+t#g=mXn8hCC{(R?ai)2M%lQst}OFZ{-em!;Io&CG*RYTjYeIV)pJ8)qPz zxr>Mt$y?dJm+$|{|M`)BJospuRL-d$bnoLrr$LAI;oP6 z`%v}CmtMy-C&H`m${P!GPOE2n)o^fCrDBb7UZtK4YCMK2kI{@$PfNjw3ZH8s&Gu3Sk`WlfmNqPRl`O+`>aG`)npn>g3`@RR4FFA8 zId!xVL{U_3Dlj7O;iK>ESYc??RlJ0|kgGGl>NKT$iPA0MmU>pG8s@3-Ep_RQzFDZF z#~Kx-zGmR%3aqJD8k!>#N9yTdyi^-0OsD%YSMYH>E-SSn@LR&7bD!kgy`pQ)YBPVGIh_wM&Cb~}R1f!C}Vmk5@CM>gar7A^)VGOcSEczPl zuW{$h&xBev`}n}ntN_KsQ9o1h$(e}U_pW|9)_a9Np5MnAeN-=Y{Y!?&dX>21aa;^-KfT)CY&UJ+Yr_Q3|_@aA50P$JI2=YQQ{OJQwWmR_`JNJV}sr)ib ztO&J#NHqrSvOml7NB;SD{`-6W{;T}jWUKCePrd7DW^j84E9*(r#OeLO)p2=Z1PoZ! z(FYZD(kb*2b*tJ(>AV-bP}Tz8)wYGWGXq#y8l2P6F{9HtZ7vnh4soiE(`8}f;-dqKT!yn0ArhujZ}!2Z<&vlFJAf^SwLw4$zzw$^9eS%dsE{I#Osf=%rlbN&u%!S^tUepd{-w37pba2F>}0K=4u5|S>9H!Lb1MB+y+97kO$fZIf&zIFyB8$pgi-dg{P)dO`#s(Q_Ke^0{g z@3K<#Vm`&ILKCY?jV>izS?*sAeEopagM{12FE}lXq7yNP?3e*O;|fbqv2M8 znxxtJ?m5R}GG)&q=IA=j zTqcadrq}8`HN%w-3fu?YlH#*$EH{{%MNCb|DADX+P6r6%y?$@M>Q+edAM6H~GurNq zgHCj|#x9AOrxOjMX(@G%`T3M^RKGU88F&mEAApk%DVXmNgBlc;qD!bxu1Z zHVv3606#Y~b!efS7E5E*=~J8w0H8NX;0!x{LZ~XyjQvFq)Tb#`_^Qb&PMsf~3cp+8 z2jBKruK^HnIX)|=v^0OO*E+m#mmHF;M0>T-OEu%&5lYl*`ul0tyCnX2smJ? zOv1H@6tYkXZ~wmkE363NpC9_ma^N_N8F(+6VR^W|z>+LkN`;{tw?}zC_;{4ZgO5k~ z^(c==`SmOR`pI8E@{b?+$FK79XZiIgkF9J5p#~l-vkWp;;;gzZT-IMNkRiUl5dt>E zeE@E#9#;VPo1izl(~XI3ZP9{HLqrT+9)XiHvBD#kVe(t}D-{zxu3d6Wd$U_C4+yR) zE}trSwwz8|9jCqby%Sz|)%(9VQDd!JAsk4x<3-i5?q>RQW<2;H-DOG&8v+5WVUg2@ zJWt!rg4F>mJ*8?Qc9hV7S~9&%AYFb%4X9u1tGu+bN^AXO(+=xMyTRw-YM5fn=4n+Arznz+`3 z3aai6@lji&cUK1l=uj5h&?+uINklBSx}s7|40F{0AY=^?{JhaN_gBC zSEFXeXVyasGkfekOpd190q&+#qc&2vWn0<$8rv&7`~rF=i^ ztdZ%Ym{b-{MhY-{D~1zQ&M4AFKmZ>JU?Neq_>SI(G3i)US)_2PtYz@iTPzXbvQW-*OVe* z09GwjombY>arF=i8vlzIaf_SOOF*XHYWui)rM`hkKl|WkeZxib-|0<>xSs#(h~f8j zE{Ml!o&t#4p>d(Ebhj2g)gF&IVGN+YWf}`2(PCB@QK`zu6<=PA#nNDyRjW0C=3;{& zDjR8_UKIkC!B~r-gE?fWrwYO>fq>iycDH3rNT>RGg(pI>>{b51xtFg=S$r0(te4M7 zr!uNvEE8xfBcb<<;&{!shOh4($jTVjVCvd{+0SZn*t9%;aJx}C^PO3&~v#dPJt}c z#q~;cqA6l*pXboPSW7jd>tXUzZ4Ni^`n(bb*bQprlvk2(H;rXm@~IDF0=UzCfMG8oh-m2A~g|@stHZy zOJJx`W>WSLrx*qhoB;^>LQk#7^@hPys252iLEswpzgYi31SjG6I)lQ+{M-(}OWtBV zS4F4Ys4G@8pTtS)tGa>}uyYJ)fHtho6Dl7-p+ERKr>RxdDF7?b^D_`xwX6!N&)j1e z0RtjAkEIquh4tdZUCOE8-gek-W)bl*XwfL}RSD9YnGa`I<0a<&96(u8Wu>S6*H#mg z+i}L?$5`r8t{S{@;1tPo&9Mv->Is^%Hh)-^{pCB)wF1EOQyTQC&dBNkzOI1SROXC*zhV=;WBo*SCbO#M>3Pb-(&03V?yNEUY}0croD z>YC#6PIq+K31A6gL~S`Qe6<;!)q-Z;uZRP41!3ad`dA(DR5DdXZZn)Xx@(kYM2VHj z@ER~EjVeEZ0v%^(WbmnHjwY^E^M8<1b%Fnse{fa3P?r3|mw6(l z?TI`3a4Ji^5L^geYIDi%MxMrFoZh!lNJdz}D#4-7#|11CG(;Kzi#twf6|Cx`=|g8E zK?tV*B*c}e&e`hgcoEvKL692-J&zK47iNI`c|Kk+r$bx8sF0{xr;TM1SVEBe z%4DAgm(kf+x(5*mK;VX^>ueQnW~}mAL^V!{Z5e=NUDJ>Y&;_3vSlh+XGf975yIl-Q zuB6xe;yT+;H>8^+)Es|cUVkW{=#DOgH7HQkzf!fUT*CaP^1-w4fNDGIl?CqH{GF}gjKXDfn%B}&tUJ0b zxDU?erh?QWHD|Y4b#e&WQFS8~v>)1pQo*!VO)?fkIbaL9D~)F(|K|hJtUh-2z>=_K z@~W2jJALOH^WTYF^_7Rox4`nnrSQ%Zthgz{K5tlzF1a+@>Q&#i)V-kgn(?=W%zS4c zNIZIlWa32rFbD_%Qs%|(Aa79Ka*-q!WHUDoVHD>TQ=_WBRCnBmAJ6>V)Tg>8$3?Po z$}RpO!1`w%Y-MQqM_wIIH2}&>?t0s(h3b$NDSkt`;eN;Mj*ol#_`tpY_TGBNWnk8M z^)Ho2vHhQ?ApmQ}5d$lM%`sT~RGuVd;CdA`IhLkl=SRwU>Q&#boUkny|39iRuTqk{q#Rp-8seuA8)Twp)PkPk= zM#z#Jp_!YWUPYONvZ$^nBRlawuj#<#l-Sjr)LRnVaFbiQbyKdS&K_cxsSeW;;(}1l zmL8h4IQmVo170l!fQ~ntD%5sOj^H#CbJi?_-511uf?B1hCYg;Yj%wx+nZn;DO`1@- zJwU|7o9K*B;mskx;pdvEuBC7B*C58xT4jReG+@WohLqGNEKYI};g@x~36Q0#N?Kl# zHa01EgW2nA*Yn_Z2Aql(IGM<)psEq3>U@dreNX}*1!@N$8mw6`YD?J7Avow+g3c|J zVfFJLsH(yYppI)BPlNK`KTPRx+|);65yib+&g#U-x5|GkEkf%m6chcR<(lfmf!E3c zI_imbV<29t6g=+klP>Cv&Q(w8sz`Xzn&g0ElGmoNQ)AL+{nK0ea@p6)l?6K+XvbFrad zMIa2w(=}ew&u%G!i`)Gc@o2%RlY))Hic{&I4?Yq28eqNp2+dx+d@KEZ#dikx>(e{e zKgLPXhbcwUAzKoTXx(zA+vsHLHZ;i9F%t08&1jJO}4W3 z)R9L;tJl*Ke)op87*K+vrQXzE%5V_1!FO$$suBQm$fGuAO=~?SGITV>R8^ok0qu05 z4&R3cXsu)(n>)vZK)Dr~1c~aV9jp5pan8O-N9!r(9J8Mw9_ndo6B&6dG~dbS*@m`zv8KvS&hptaPa zRzyUP3t=M%M>TpPFbDGc3!7378dPjPraz2$oEPReXW80st6=ZkBKgyg}wbv0)0G`ikEz)C;v3pk7Wqttr_%DPIP;u zjS3Ii@LaTwF&Dx$jv;IpA(o6MSrq_^^al{r?vqblN2QLaQQA}_MmFtM+|(mSYnH(1 z1E^5bGqt*_X^>q^_9APPX%ZydZt0ffhE(lSNlE`0ACG5(O0?BMfy}iZ!^|Z(Av{$$ zuP>SCMtWUSFt6ERIvlu`)EgAT9l5=0skx7p#+I}vFs-MNwY7p)EW_|#3+`d9ziG*c zpJ7sQMG3@$CFqM1p+mqSR+B*i-%2e@2L+**-f@M)U}Cu0xIZAO(;H4JS|DpA+sYIt z(WZZs=L-|Kv5Iq{V-cE{(5cq~lNp@I;e6jXZ&y7dcYMIyHNSb9hk7nl#rY`s)$sa_ zDZG*=t1LjA$iz;r`?n*d7LV5A>qQU@^B!+}MbX626fZv_6Yt+vgJIzx>%_`!UjkM; z_dl~_xUDhTVgCdG3`L-bFel$ZE_@%`z6nzhqzDej19aUXkR;u4|ALP%w{Kt5w{Pj| zNBX$qmeMUrmCf}tIHx8l;RZ>!bh}slid(M})|*nK#IgJ-PiJF+dlqLpfzyQurU*C) z-mr|)>EtfZ5fNvZS;_( zkBUw!j&C#>k2DDfkSbb*?+>HQ7=N*!gjQF1I7Jn;Yjw{$?+P7&QVCRaHY(}G15t9U zy5QSSokY70;q)+JfpDnK`K@rv*_-uV=1@QnMXEdmYn9&cAz==_{e8f*!YW!|rV3Ef zdM$#6<1*opthU8sG!!f%S5;G`lXb)vP5H8cAWvXv0!+TUVH&M8&Zh44buiGbeaDNlOh&ySoK zz{*Lyk#2w!=XqZbgA$bs9ZvKEw7I|A;v;tZvQ=c}QpFOE<>*4W6b}97KNocpT;8Pj zrc)>Cf!{}~jIK0$km&t5xFLO{kFV+Lx7)XG>FbyDal^f>E*zaVah6#h0;L;LlG{Dq zZgq}1=A$kMTdZ3r-c!6Cb+OqY40j1q)$JgSi+U0++Mkvgd*`B=-PN>xbiqf$=*s;B z3%i~{o%Y>Zt!*gjnInH;)Np=Yw23cRqyPx2%3)f%t!9=m)^n_vi{W$Faze$FOT>@4_ku0A1RPXF^RYO>&wwO=q!vL{Pk`w**kC}4ZP^%s z{GiWlThl+h=Y+%*Y=Lyl30sL3$3qjYhIjg+?2F znJ29O3)|SHLy5&l`K*~QQx2fKwpybCSot>W$lqvi+}&ubUoOW^XWs=8hV$GOuPpsK zKZ*QbKDJA1(RmocKNJXjqV{rCnapEM>IdJ~sx~++zy)!!y2}{~8CC*>?^+f#3sCp*ZU|5{+dofk~C$Emt z@xws_86frc1z*0UuitLpzN9ZV-1RzXT_ZkJLQTip%9N09a=(pO#MP&uCq2$YE~iu< zofgr+LwiS_jOv$}zJI{Qu44rCpgtZVnxyu3Nf}u#KT6tmRI01=RYxnhvNihMU_>MP z+cgMA=m(e+oN8i`8c16X5bI&wPsZ0gLw8~DjQj(P*&_nfFw=Kqd@^~iJ6N*;Jxswo4W2a$U+aAnBty z=dQi>@C=kP7v&MC%3jwCQR944RbX(mG1DZGDqKFn?$CerWf=*UeOp&%`mSfXEBo?9 zkM~yII_Tr6k$VLO?gNkS5a{wwj~FN?^LHQrsaaA+`D^3THdRo1oNk&;^|)M#24D@e z3b<;S%-k>r3{{pX_!prUBBOKdwdY#Tpj8JxeHAt+7OpE`)l=Bh8rLF#NE$Zx4g&FT zR)WO5H*!@!3q?h|R`oaL{u1tim^Hbuf~6C-7putqCI7YrRuUIMNy`}j?Rhdn*(;Zf znJbVA-5JtT`b(Ip?2@%#yu{nT@Bg|!vp4|p`xndaU_-oONI!QK|1qKJf?UTfSV8Jv z>94Qp+Z`XbmJx2QQs|FdCq?R&liJ5pg92_z5@!tfirNsKQRSj~IU+bieU#P6gc}P^ zr3Uf7Lm@u-dBl@{f8u;`sJT2_X{sA<6xDjD5Ah~ks~i_dAZ?ixw<(H0Te!@50O5^m zPYAvqOl_Kw^>e_IJLaLPtSvYgLvolX#ZbyRz;jY@&AyyhpM2D9)BZl84ldBrQd3H) z{^`JQ(Baj=HPkpYs>%Qaln>3dpkkvaE@_25yrTMCJHM!|)7hEYzkn(bD$e}nh$hv? zA&!L84t0{*DBI(z+AUjTqDnE13U(FGV7%_@8>pY7D_A|fh0T3|=;UjM5=-Z)-@cbd zdqlNoY8(!i3<^~OJo`um?uci5)*?NXc>#mdq=vA7j?4~phi;^>2th5I4EU0*@!<3` zdNqVGg;oe!x7ME&nuMh*UG?)DIFN{i6I3!B1Utv&^yyRRLxX+3A-8&aFH(!4cFUbU z-igkZSI~sPCKEP#o#ZA}x-2MT;s!mXyN&WUUeZAu&xoD)&r3Vub;zm~L8m`8WTlJE7 zsH#c3lUPlJ7c_fPK{)siQd?IYtSrmWnf^6aCQu}bGZ;z=cW3f^eQ{8XDlMO4f^JEJ z^~_8Yr!z-aHp-JQyhtD+#u-cdrrD1B^Y?LXDS`4MSVa-bK)lle4yz)jtSku%C5F(G z#W4&}6V-Wj)q|GC5EL6R-nP>z@9g$0leFI@;AkK<;f92+&O}mHRhUGn<+D`jOyfT4 ze5Nt+)5kr+NA6O?N|kiL=y;{-sFWZ;{YkO&cwN=f-ceHLX*Q@jf$@X{p$&N2J-cGp zXavHl5je_n)oKgLGWb+nZ}UJHQnU{Bqk2?GbTw-ydsKL08&Lg8O1uzY$#tLzfsfsQ7o@s6htW}s>EhGMRc&k-M=CYRUthd&kpbo;=N29%#69I7FuPpB z{m`kQz~DiY`#4x?`NsqRZ}0e@#1&32;i?i&H~e#|?UL+W>e(4WkTV1;S9mxa{bT*S zVJlGNBLANhmNxERjg_Wgy{}fd8hEQ*D#R2V$6^v?&i-krda2h4HKD)t==eR;_r=^; zaFg4Y)IjPD_n3VSl3>IoS&gfKp4&ttjR;C9EZt~g#e{efAi-!jU9rKk?jTr;OyJHb z4B~m+p-zwBOFg_zhU3dA;>G71odQE~rvzyKRfOXO*^Ko7VJw;u+hc!vK-To&8{?1V z?C&-q73}SKDq58)Jk9FztCF(Rsky%k8Hbz4LY;kNNoZfOhI$T2LW0~XJiYbOsXF|g zv|$TqwcZ-a((9nIrUH?imIN3r=jm0u!Jp)$6ja~*Sf%zFt0~hvrJJHw42Il3~WIZbj1J$U^PEq zhs-wfz@@5cljNK>c)7z8pXx)ZBEbiI1#32606$rY)LFma#j@bHvOWjiW6K9v#phBgULXWa>(Dkp+deN!*g z!Fy8R-{2?TITZa<@BSYbDco@TNFU$Qx3B5j9XAL-5U(yf1nHT}8f#YI)HftH>cS3f zo%$7*{O@vPyBJz51!ul?3a*QDy(96)*!>I;f^W?2V{Y}N0QmGl6p6b+RXVz6`j2Kh z9*k1hB;8_h3r!Z@a09dH4Ia-Cy z$9JXKw9p~}kaVk=ska+?JBH>Y9XI2L>eJw_V)!e-QaY^Jg$1V#RS*xVy)2Kul2Q&hMX+xz>2JrfC zta~xF3LD;PqkWYyDXsA5;FU}@f*a5e?AE|n@9wgq=Xt89etQvDbpvO+xXsP#XZ3J# z2Hpk=uPXrFPX2i_(#o{Xsu+f={biAp;yS(9FlDbRjQ>9n07#Vo&(EUG^#Jgj-mmi_>KZ{+ z-Tfc9clj7!Jj{g|ZIq%g;11f%hb&Txl$qDKjtb79AJ?E$p7mjiw>-ej?71A5d6AJg z*jROs0466G}X%x@G~B2I<$!Z zlU}~~1@E2P8Tcu+#MSPiH$JXU$Y!5GQ4@b&Y8;@|JvtG?kTOfo{~36)%0B-8KvKq^ z+oz$XD|Pt8ng1d{oB02A`|BfpBuN+*-EZb*=qpLv2TYlc5yU4+B2px0DIEGT{bofA z{1sYVXXkP{xj&itD-+G>eZliRu_yU}BH_z<83u>T62NBfbC0<=HtO6~s)geSwKL@neCii^g1nyG>LB zj>p~PW$h&Xz@|-!6^{RiTV1ay;GBEF6{Difu6ThMVI~#!M~ul3U%h(r^L(u~vYL@eag!E7qYl)_u+46f5 z5k1O@o-0no*FWLgXNc?TpMfb0@71V5=fY$CaNwu^Yati!7!+MCA|m^y1Q1?So7{i35;QqOeB$4#OY1(%f594WddlEfuMD zY^MY*eC@2_DPR>}G_vw@Z=$8;Aas&TvG79dSyZJbQt`Z0#IajuL*P8Z z_OG^lYB+;g=v6)L;Gg}-UqE}DGjk_`VmUpI{7xKeaEaoE+n4n9Tl)5a59ms|S6G-% zL&#uu513L7@r(hAlq{ua41;Kxf_GGnuqso3S-Ga)fLaz8aum;4R`>H*q?FRce56FjACMJlqY4wdPO&oFiaqswHr-K)+m?DP|FL5Y6!TYE z7adP4#)1k!N4$EDq($||+mX(z#FT5pqh-ax_icGZSz-nXk6j-L36jz+RjqbE@4#l| z_UGhmBn7J=)E47VO__(GuznrAfCqB{R-yVdOyoEe4Dkb1np_J|;iO_adCUG`(FFnY zS3w;#Ku+$rW2>Ygqf@C;#aiH0BXfS(UuFtcCRv}e*zy@4HH`Hd36>yxG=??z7_*XJ z_3YiNjw?3pNoEI?xOh~jw^V8Xi=YADg<(~m;=asO1I*HU7&xl{x~oyigY=80CMgk#_16LECMMYKF-kSRi7wM@TBSF3u<=jUzA>yO3I1o9npN; zE)@`)V=N4Ds+`lLSR##1k_*cmuTjnBxC#JX%#01O8jSU??fJ@FMIpjlM_$Wt{y9GniDw@a9eNaK z;0DbL4@Os&s%Wfe3N==o%CmM^yM+x{W+hwdbE7&X1L6BTZS;!6q~3+xPi=BxY5CYt zx$E-Dbgh)YQ&#OU=y@JYh|2C@;joJhGnEnsR-m3z%}h(5>9nFN1#qGf+F?1NKg+f=ahf2nKY`E@w|PM&+&aK4|T-(JE}31|SS8FkS~Rc`x-z#Tlz z8)N?;5ryOXQsD*#qu+E|mP)Jyo2@x9mN$8V z!ptL&?E$u)4KuJCpZQsJ?)k* zt`RT_Vpv@T2xeD0p$0(%AEO5f8sU_BXNif#A|dHsb?7c0MjzbV>KQ~#5K*B+dt}Zl z(J46`NT4`asyzMXTA|Js5Y~rIqbRl7rvwSN8P?NM_~@?&%-f1k2e|f!gZ-h&w&wiP z_O2A_Nqmp|)5|q|0x4wDowHG`d#8+=V}e>=O*#~wbLpSpl_P?HdODX>(y+2>={kYs zIT$UAc<*ql8n}ub`Y(wK_SAebnF&SP3m%lv%((OoPli=12ZI{mahojh6#h`Ah(L^|XDk`_Q$kANPjJX-{zii1s@ z5dJ^r-fgjwBufrF<^hm-tLmO<=|v;${{IJRw=xNY>A`R3=79i{tX57*ot4ETfk1@2 zxgEPis7g;Uf(h-I#@x6D*CP>t(_Hca;fZ6q>NI><=MLH9z&r~eFpp-TZF3+c&c}Ib z4i6#II!hJ#Y#GNoMb#FGd9PFKxIdrxuL#I6dZ3cQw&!o5Pjyd4+GDEo%JD!8@_SHq zb(+EZm^ZA!?^7=gf(tIMczrFe8#bYftPjt`BYzzZ#~cDb4zK_1&ih^Ntpt+J;v(=s z?72o`3LY`2c;;g~)uGIXAKrXi=oZeSql_~`dG5y2l0g18b4pbgFS@140ay4ER)fyM zQsH(V>Rxgq01%(dJr~LZegqkV*>`AVW61h~!hWM=%6&{pqiLOCPouqlig}&twK?y# zyr?DFmm;P9ni4zGP|K=-bXcSsxjCc(t&W?bb*&B2?(KE<%>Ne3I)?L|yKQ1t4zCrf zP5`qVWt zeMHo_^<~*;QiZ$Vpo(ri-_AGNslY$xQ?ZbNFbD3E8I3;rS7^#gTW%lSf&Bef2q{uF zT)vdoYk4V3ny$V(&O8v~i6(4+SnBT#PsT3y8*jVpJDGlhx<ttAz;lCAb#NU5_@ zwJuMJR?FBbeTtAvrI2%%e|FPVMK6^`od*8-6)m_5GJXC18BqkK3Am2_EtQh0cv>iZ z!SL%TeFDX#s5XkrhJKVr7*8E*`h!(kts7~m?+K@Z(}!m$@0cVGswGl57||p?n?xsR zCKX6pQY|)wI0hdUdbuO#$WVnvOHgf6NCXKJUSdXJI1g+HMuX`x7Mq!>20SSB%n9Qy z*CiqaZcyLEG?4ZvnNU@y2@pL9LE59L7Cl;0B+XKG5n;+O-jq*0K6I?Q9TW`u5R1|pd>>;LIVr@|fejMJEoOT|c^h{Eftg;udQguu@pBfF@vkD$s z`OSNTDM*iBWaVjIzZ%3?_TMv1hdd)pC-T5HDL#_HAWKge4mjooT|)vOjB^Y-~EFs>2lOHOZbT6$*Y z6YEMVsHv=9Cz#F6XR<5~CXK`9PcG@J6Y3uLgc12Yq1X{`Nt?82%F$ZI172 z!e9*}tS8muvLt+WG8qq90geK(-vke~VcTqQmgIOZELjnCVW4FwZuR;cu>v&~!R!!y zYE&F*10vJP1Ro*)IanPDbP-uU0F%z$&v$~*WEvRUk?qF+uNZ@7|Lgz$gyI*Yo&@g}!B@6=A)pv8t9B>e_A z&V#jqREX@cel3q=G*B6*6*)}AeoEXdapWt(W)L#w;2{YY=k5Pf=nlVxW!Zp^oQzXf_vi@xwfLGD;CIu)3 zTR{PA2&~VYrxH)8%1cccQSS`4mPx(Qy>psu=4jD8C}cKXS6X(T9BDt@p`9sk-foj;RtAv`zQL3{j+^x02=*nLMJ6N3HpIrXdlJ_j<{y>wEx? zJL$L@Bc~2<;8h={^il%`wpF29XoR6g*>KZsEdywY7VT9O70NnmQB@+g-6SFUpbGcj zOx4x=LgVWa%=Tr>vk0`)-c-b@zE&Sn0uALY{DyVzi}U|F-9Ut@aE~C|GL=JBc(+G> zekad3tMYQb_d*dQ6TEm&BI_DQGWm8*yC+{Aa#0q102Xs|6poS8oc3x7e?J5dkh=T2 z=HCT-FtBIAr{ctgp)FQjr>}nKuh@Ua1Lo=c?e;9Nu8CCFa(%(eCYxvLTnfqw9~Jdw z)Jj7waJRis6_ivy^~T%2N||7?7uoBGMabImwVQ6M15BRXf;8hTU2!@he?`_-i!(0` zB8EOp$JUwHR04OCSTo|VLM{5?2Zab9TNgt=NX3EPJ1|`ShWFB~uu0D)Cy#uCy;t1W zbg?%2EHAI4Fxpk)hl??onpowO8rIO%Qc6J)C_8QGkA!l0crPt9hSG=%8uW3F-}aW! zKCmgJMOA63>2xo0b^-W%mwkw@npdg#QyA^4ZL*uG17cqJ5mKd@Jk1(ab5a~{-TkaZ zy-%8K$J#$t|9M7sbyS$=*fbyt1CSoRk+k!M761V5YrGC~_ITQ$NSG|QG&E-)ZHp6dM6kVuEw#^F}MIs2&p zUgiN2?gOP(oIs9l2|j4)G2)PQw{*$~y^l~kOghb#UXUpEpJX4io!~6frrt7*9wg@T zW>*PkXd#tUQqQIXp|&`x51F8wGud3l7rm)#Tbuj6Mggl~`o|Hg?hJA=upeiX1kVEN z+KKam>q~hlEr(nrxEB4CfRBlWLx+9TB!aTv_;!=q?(|^`Oe*VVosxE+9fahtdn>MDb&Xp-^t7h;4QzN14p`6o{0C)SmzU3;=<-Y5vtTBHqr3U*~GS#T% zXuBNLv6+4pXC`BITcEuI+0onxRBv+7mI0uhS9DOcH?Pi@!S1CR-YSyXCS}r9{W*xE z87tmiT}zEl70W-@je(nxpUuH^Jv~Rladq~Pu&92v{l5>F+%=Sp!8r< zgTzJOo3Dh}5RQKIo!n>=Q)RtVCe(_0=38;6Zi>{RgC2oJ-&pDgyr$HPsw{Gz-b|bp zoNb9Z7ND&M#rhC!{FeXIS!i#6)tN^r(i=IT-kAaOMj!lO+KnTV?Yxy8+*==yvJQgx z{NjSsjC6%E0K+FijrkD;Pa9`oWX#Gr%LCszR<%h{kvIv+zMkxYj#If4LN#9cKvU9; z%2?#5$|65&HBHVS4IahK{vKMDv*_={H(HVS2fs??Q*nJMSA|n`24grajJfnjQleRM^Cl5c5{$iRmX5-nGLgz=2JAtYRT{_3s=C=}^ z8kPzUo13R>{OCe;*C+giJKy9wRhR*pxQYlrlnIBV9xufa^nuL0pd}`;NOlp0V61~W zsmimf2JH`4RTH~&Kd0DE%7Ri`r|KT4HrS%Xm5d2jhIfR@by84-VHiK60yHJr^E@~J z>|QO`(?G;&FBr5GHFSh)L4`J7i4E7HRsx8sp%NtxP?WHi;f!8^NuN?{;i%)5lh%v` zoYJb__6|~2Gprmmfn;bQhWofsP@nLhDpN6|&ybBapz2;n4wS9`^%_jLDo`zQ9hN?+ zWML_aLxk-f8jmz}`BUZQUB3Oy=pd3@g*mJ5OeJ-fe3@7h3aub$jV2H+ifErb0aL3A z+ZJHBK&S@eGO_7aux&NoSlYk#-^?Qo-xkAR2{borxjSNK+Tgn*uK1RN1LG3Doj#7#WJrSfi+H*1XWeJDJAbhuw$@UtQhKJ&3v>+uU-uANU!lH5n@`GI#Ym6jmszc#8>njV-N-`;qm z>^$@G-}5ZufpFo_`xsF9bLR>yj>u`QF>{cYO_n?l2>;bc>ZbJQD95RE+rhM#tTRWexdh}iK_07fA& zIh#^YuobDw)Y92ls>-dbqM~neLnvAstlBO~vF1F*qbhF*Wp8e-UW+QjEY&DcHWGD) z_iNBed&1J0se@{DYbNcCE}qlW?m(J{p`lum)J@xF%NLvfrG1_H{BAN^>Ysu6zi!TV;IsEE)~OSH9ICN*icF-TPdYJWP0n{Ncm*h1g{NiP z213PFY9hyMjzcN6l%uqNMJb82Li5mx_})Rjm0Xof#z9YPgioSXE+nB&dri@eB>;9n ziNB0dG45n@I*g4Fq&!`{?m6vCX=)cr{x zP6RK2<&kXV%+G&MjViFob}5&^r$S{l>K=2Ke6lg^PXg8wM| z+HK-6i8VCm7(-~~izbbpo@R3Fkq{P*yGV7rV}Iv#^*aH8#EWLHZ;RF%e1qbZAV85) z%2u~W+iq11jItVEeU{L6)h0cdW_wso$eiF$wjJF2Q9@7I`#?-*^tUgdVmFhalP%v^|@1mTa~rys$-?$^^Q%qt&*l?yzzdi zsd!hRpmfAue^b=ARagpfl9$v~pD>>gc@w=j8&w|tcp9yy*eLEWM$R%0M+~hnJhDBX z7*ULqy=|?{jyup!eo@j;IOTdhachLyajHHm%P0N9L2v5A4}weS>hFX-{RWfD>_&M4 zB&Q$a@!TIMS6r`Z?yrnHkW}!&EI)yHc_G|UIrJ~pf7^v`{B`47*QatRiZD3>eD{Z= zf-acw9ykmQd;h^|QO^5tClpD16_Hi-!}w(Mj~r9xg;m}&m8az+rd}br2MNESQ-UAK zo~)JD1T$P;ef|?7Suvmk5oullg8(3@pc2I=8z2cQESQKgQS|m?V)UJ`C_gs!%}9DG zwJLBbtq8h%h`o!TC9L{ogu^z?IW^xaL)qe(%pwgkQ##Suw%lK$=Q)kMw701WEiXG0 zSsi<1>+Bn6h&i7b6ohvd`d^>7v>M%L#bnNLYk??t` zYj`Tg5mZVk*tV@~+vU1lF59+k+oj>N7LvAME2RTjU@Kc?6N{Y+jQNY@NvA!EGlk8} z2b_G&&&+6qs=CX~n7X8Zs>;|(8fOwQbb6|ZcI`?BGy=6;8bX~ZRnTjb5>HSUhD?hX zHh4TbgM4%F=bJ~fod#2suaZX|j7qth1L6tnfTZ0i`<`^P$}-X%=dlZwdx{z%oZ9Dm z>xt7k%~?NDSCM@mv8k3x{hX!0tuzwzyDf7@k$^byXq$;KH0@4M)dJ&SrsO#A!} zL_s{Q2H^3Hc9d0;Fv7`1T&(^Rc{3G)PsrshWdZ}FW3)7JI?I7|+1W_mAEE`^8Lj+0 zhi>GU9;jSbq{LjWXlWVacS@*R)%%n`IRvOKVt_-1rj1WU8H@y#Rj)HoRANnzj8Y#? zq>2Hk9RH+WRfgIWqd=KXnW@3xBO#NZ2@+E6oIT|bBUDH4vILe}FJs*=Q;{XG;l zNX zwwFoF^0N;tGys$nWr#IvAvf%aJYAG{$emd@?HP|az+^aa%o!5>`#+u-+vS)(>S4LF znm7+~lpSg&b*E6z`bCfXt&R87e&HCW;*@kC{c|49t3Ntd)ss)}C{|^5;yK`B>-~Sh z<)vH-F4pGBaJ*Z<6CS30B5dC||Gv@pOeX*TiTwS&-aNI@7(OY~%t{hCxpKAPG%>6}N-(sxJ3#BxE7lVU@@XMjt zuvd@&miNEyZ<@nu_*-EXJHZB0neUQXTa}|}#-fh^bOQ?9yJkkIf=MB$oa(Hy+S#z?G-$z??Q5a2L6TOO!GRxx zqYF(BV3GqSfos+-HK0aNhxE!rGr+v6>z-De3 z78tgwDS5bz3&sDTDfEM@-+*~8CsfiXw$iBERt7@dE{!$R)M8(<$L8MD%mXmCQTSF7 zZGE>zk~J_Y8LIdNZaia?s!T>fCgXyROdWDrPDD=$=oM)+SCg|?+K^3sP;+^e6MF{gR!S`=_5S7u;oVug3&=d@lB8 zHuQfiR7G0Ta`X|SMyOuO^@0ohNFGYCH-#cx=~FX?6?sUKdQ1VK+~n;S-)_9~(6^hs zt(nA$4??R8NKBj9XO6;We{OpJ3{nj%P#Q^N@7~a<{jq6Y&!Y7RU;9e^#L{WykYzlD z@TNb`vtIRG{+0J-Mm`t3B?&{T`N(9agFt;NP(* zjHL-8!wO6ZDL#V2$RpgQ7>hW$4 zAFgHw56RF!HNP9Hqj~sXhu842XhuW;s6lZgK4m7El)4&UlzNfy#m;SDL zFq0v$>0&ydWUJZ|KXacZDxO%5u=+!IvKGNQJ}B3zY;Y?P3k;2+tKcq|vK4HXqWV`Y zn`(?1bAh5sUDZM>s#sOPdwyd3s^4KA$W=`_B%B~jw^7? z2oGE%)N~niObku}>m*>PnN8d5MJa}4E&%O>yoi*;$McXPBCA}g<2o%IR^++@$}pV# zpf|y+=!i!=-?^WE)&vHDph&ska>WHrq6#OR8Qh(5YXe6hHCd?bV`)AF{^GA+`>(s) zS0lr9YgY__mX8Ol=^Zku-1lvF$<1h#QD$2tk{o6t=9&VT(^%tFSg4CUYCODvq^HDP z?nRDCDgwvxs5X4xbe@)P|BEzRLWi2h&Q>sLQncX;F^B@nLE+H7HH6nqvU{pg3Us_~ z+YCdu5{>qD#{0WI0`o}%JrtGR$HX~K?-BqixUXXXCfIFMDReHDwn=p-mv2zS;j~99 zEDn~7(V|5YpGt#sJ3y@&s2!EgDZeyEMHb=`k18L`CKXqghp%Pspsb4%K9(Mc{Qx%1 zAL?)fbEh@11c8)N%68c<*Rowoxu6sy@zFH_CP<0O^~5?nrw&@J*7)h7v7`P#7K^%t zm2)rMhHDgSZ=+HUE&4($C#o@U)g0_9m#f*~=IAfjF4GzX9R#K^yRKFWx?n>EaAblE z*gT=?#Mz7R2Y-q_j{Y^)%f;mGFkSp1z3NKK9tsRhr*Tr*p(P-Q^?ZSOWm!i(m5@xu_BjElKu=T7y^&x&(&6Wd(#FGJ~PXeD0lNBs_$5w)EY#pcS z!KtB%x;CD&h8`lhV1i-nYx`mDy#M5{H@@AuGdcJjCmA3^KA%=4CcpC$tzVU$4=vL3 zJf#|W8=6|tB)Z?`jK^GlEe?P-TgEolWU&h?&T-@cSJ}3@n6=F!US6 z2aj~HTE;qr(*JV-wyj()W1u0{zvh~1-7=(1kETrobk$)<~!zR$xf?X2INa2f4kCx)-60JfRTis^NQXa)Drs%6aTb_;C+bOT-Q^qY7dCJ;Bvu+JUD7BVbBVYq+56K z(zswO>WJyax1am38{arhR9I8Xd~iW||4(K-F)9f+A9C%(^nFJP=WBjk`ifS5Y8BYnL29A6O<(lVTC z{D9_GBf`K4h}zAea!%&R2**n8bK)HOYd&^>K2+D#%XYbRMd_d_eNU-YY|s2QP^{q9 zSTWlVsi!QC!%G+?=<3rMKMVs}6`Iu(`0HdH)*;%0p%yOvoNOs&YgP;<{ zg1rmrfS@`v3jMh<9tsb}%e~qqP^XwBc5R{RmZ@DPJl&b1kXTc7D&JN3#MizDr($g~ zLV(t(n;W@&`QusuAP-pir(Nw>9gV`$Tm)O$E>cJTw$=tZB~L_kgybF>SWCRFl1rdEjet{ z`ICxOPQ`LHeZZ&6LGX(B)cx?FM%!POhekV#g4nPsLwA_9{f<26exP z>NDt=mD&U~Gdc`KJyH!Wmu)N3$W)*5Y|jiLn&GwK0*=0&p}-2(Qv_uY{dA_Oh4yl_ zYd-EyeME&qm=NBx)z5V?JcJReP)H3_X&(I%6Ea2kTyOMhVFNK4GGFx3a4={r{3dOR zbfEUsDE+aBEZg8tFshWkiWpP4k=kF3~r|9Jf+kXoTKQ4W3w{fWo^DONJ;z(5Y z|G2RKuaJyPOYYl#`^legeA~J60S);S(`?WRW4pAyLTS3yN`DJgMDrlq?g+Ck|G4&0 z!uo2F$I?f(72?Cj5##=~T|-ZCyhKh?u$o5@JS&OFOKO?@-h&Ds|6;=Skk2VJ@5$j0 zW?KFfi&ZGHSp5u094*nOGPC@_Lq*u5>X9W6CgJ-wQT4r2vwQ|8>le8 zYtf&Ms%M5OmveT1E%-I`tP;F1bq+Y=Sb`XrjW^Gv_&bxD8dc=Jov0K{7gP0+!WZ$` zHscN%M?)zRwfW>nhYHCapR4w?@}|P3L)A2DTVz05J_!eal8bWpGh5b5R*}x=%BVW{38@$&(}>KVm15LEPsoc;M>IAh&6NXXasZC~CkdUL>!`P>F@9Dd6YFgZcMJZ^27@roTdJI@Uj=jw_0I2O8 z$hmL8DEP2Q0D43ktJ2Fi{`zbG>yS)+$kRV_qQudaRXP~ER3?~HvRT2Apwdy(XQuxE zGW>_dR)_><4%0+}yNv$d{7ju2BayL9rqKf6y^3EPKbtumwG$B7qr4iC6M+bbxw2e` z!XS;eM%u1BY`-R2h{JDOhDsGJ!F=FL4&-VJr(j5lc9A*FNQ)vpgwZ)&YH{^Rwa;wV zGc|N+!RQy5e`)*`h?NJ-Vcd)dcrZ;fL;PU6a%4y2PpI-;4;L9edj~R{%$UqV)pNuJ z17kk>M0&&ce2Sea!w`hp5CiCtBGFd&vR$_8b=xk$*1Ybpr%H#tls1~hEh8u`TOM&P z)N=~htE!+-26RH)uuHk2q>2?7#(p#r0iabfnb3W_ZWB#2%2dY$V<6bF63+JD`7 z=Q~GsPk!oHo}$)F`9azMviWq*+rr2x&z(voD&BzQY&zIC%)G~D(Yp|b1=0;KR>j*V z5dU|xJDhO&QE-ULj36CxKH_5F+5nVlVI~8sqDIqmH9uG+2h}{148siFH!zNYW*hoT zfsP+TU($1GzPXnmUcqB`KQNo8Hylg|_Uf&&DgE`zbrubsO;wUq%C5Iks!Ppj?GkTN zn8b;BDzrn&`G$1IK-k~JM!KF^EAXBT0lCmC={s9l9CJO*V(9O6Hac+{6Ejc93Hxk! zFj{I8>a}c}l+sxGPAzIc+f02uAGAKtBDNc94)#s%K+~k^)ayEt7s|fVjgW2by1gpS z%s&V5VflipGlgnsRi-Kj{%l?wO2M|_aw#yHD9m(l>UafOIjUH*096;P1N+k|CRXjw zp@?C~!3%>JA8sH0pg0hVJxQ!G2(wpet0x{K=M)I9f56J=z^qG6ts0RY&`eLM+R?v8 zy_!7b@z#!mxGpNlF3Xl!XPiA0Uj#_`UOts;yctOy1=4jw43e|n$FiyiDX((GKQAEn z64k1QV#8KOx`$DDz}%3UMdKqXTKy!7+n#Uj9u!?tnDa83=iN<8!0w z7`TiTv>i|t=LX`dqY3fI$-{0k1Z9dnOSkQ@dQg&4xu935&oBR*pBPM}=ZIQ3k)$SQ-x`MPJ+ zgL+r1fc}rLRmr33)U)m)tR)rM_DhItrIbD?$r3RM034JGeEiiR!+V$8PyYIA|LgX| z#9!XM@lcK)o1=u!ry&&<4_v<4G1>aOOdw{d1`%8+l=Ax2JVxB@j8O>?CzruAG$Adp zQaU_wCGoJ57AcGsZ`g(A?tn#m?W|Yt2o>oKp_op%8w%iK(E!kxEmNwlLpXbI`aDLV z4^`b^P-y|6kYYUPRrINelKE{^;(u>+qwzJUSo~q2jZcY_yxO=@699hZp<1AG_Qou` z+aIPWn%2DYT+rdedMxOZ1dIj-7C^i;^s~8$0dN$mp<_|XRxagoEv2YPDceso$JIs8 z62y>)UJ%nh%Q9suiT<`pz2}Fc)S~kn!*l`E2!2>8D0-dhm~d8Q=aJ?8zPv$?zr8)gluBAS;qv;o9lh2?8)M4}pRR-|eHq zbCYt%FA)hU!AE}7Si{x>_7*46YEC8An1}BDC{kP{>EOs`AY7eF@@z)cjklls&%gNd z#Di!}vybahjCTk&Ps`{LkSZ)?mKz-%d#VGN5}g1I6l?8MHNk!g z<;$FnyOdN#-41f0%;TDaKfVFAE2`(xKtOu?7eW7wIniSsEp(EyXelZjB2e@$Rc*C- zMf1l{outRa0;R^Lnx55(ut%>Kp_)3>7B?@+^s~bzOzCP{48@U7pcN7B zjVD8>li_664Q+jkN?MlBt0gDEcOIqp{Cy(b3PT~t4>2TH8OJ%LNd5sp(RcS z5g}XBAGu8`t^V0UnbEl@nH7zu3IR@a}(rAsWBUoT+RaKIxY6MWT4#@2N-TkT?#Hoq7 zN?obkSrz$3j80oxwbx?-KoDoXYoNFY6~O7;a-pk9x&x12!ZU;*4&;zH`??QjFZifj zs`#3b&lvUf;0LGur|IUd`+wq*+eGy#BFBebV#j9d(bBf8m7xC?Ll z+h6=k8T{SO`iW@uxjgxgXLS);#KRnIIon2}e={>i?>P1JiEZ_RM4$?@L(=_JEM5k@ z;-8aZUz7ijkFz;|@X&z)+(A@UkDijxF7o)eBRpy^&>W;+z?s{Mq#Pp)l z*hiRwP<8iG5xeG-H<^lO2KfA)hZ$=bPJTLZXPHEIX=96%lcckji>QIW`_GdWEVY1Y zWTy5C3SG>iVXhLaO*T=D;dPn=!j(iBSPE7sBO0eQ4#|(FOfb4S+11ReTm_;Y|4#gu|Mioz%hu{Q2M7C4{mgrniwB| zI-}oHM+VGT$4~#^_gWomeFT>!w5$w>F*pU)9{8NY>Y>Fy`;dGC0(H2=j5RRHxYQ$U zjd6_R0-Bl`t2xY#%qJ9DjF15Kv>(%N zZZZQ^sg4*lFs@H9D(y1^po~al%q?J2$`CdJJYrldwK^zuy5iFeqAr*$|Fk0el1F3t z6reDzaCs+wVx%2@!`gl(Xy#;6{0HLHRjcX(77pV!)h55_Aovid!)z$^en@=a91DBY zewY2u`#zf$)kF%$Ln*2{uQDUM?032U;;*0k&!79xUwpgsM%l%)YoCZ#`Ba#E)R}xZ zmiGS8ILC1huj_=eG-p3$`v8BF3mVI51j!Uqf4DBQ)QRqZiS7_sVqq4-hx}PNJzdGq z9Ip3UK^`gGj`tbJ_cg@;?uZ%FgQRe-9Wzk`Da5Fd%&ewm^%wl%?Nb#&qS#N9S7|N0ZGzT#i=`u#Na`^ zG?%8v6LWtQh0Uz~G zY(J$GU~3588PN)i@KlZRp_{X;aouT?gV;Ps}(r_wt%*h zh(&7(3~ot%1k}>`0r*N$Nqp@;l~T&K$ySV_Ky0GEt@&u*pdxje>{+{hh0fLfsbT{8 zDTL+DDx-s4i&PxGSV^HQpN(}u`7m)F(Cb`DbIxAb1{S%sKtI5Mkmi9jh zvpkl=J{O1t6_Wblqe;(EJ4nuU!)<8;KQ<|+jkm;VewL7Edc~&ZsMrTA-3G!W=SwvQ z^=>LCenaEq+E3k$EfiOwkj4(y(Y|6<`xz3JupJQsVE_CyiX9=V>Omow4W)1vD7gA8 zk^FGAe7X{SryBYBf#WlId=g*NAEuaXv4-l*sdzqf;6ev$YFP=aaop(v);JZA z+Ll@_p4+o_CEtil%XZEOV~SZR;wgXKP+CXq^>!~~?tj-k5YS*p1sBdrfie!nh{7Uj z$XY~{Zq*3~+G%m>9MC;xHL=EoNHxP?0m#u%1uEPc603Db?aZ!Htg`71V>=C-);8|4 z@ALfEFN;Z}HMHy;(o?IAV_I?^q>2M|lrOjfjz){e!}{|mW2g|sNpdtE0L~=;92B}T z0o;VhB1$6B%v#R-m`dZ3Mk0CLAF5A1z9?b#t{-rUar=GTJUeBfS3au8Ka)v!!2^$9 z-`JWA;3l^lZ*P2isC6n;`V=p%p0#@c$&e8XK8O|6 ztoc*BiMyK?sj6z-HwQ6|akA7n!=oF)j<@E71}b>0S{cJ~Ddl2j;B%Ue5xnG-1X6r7 z-7KK0*Q|`HDEq3+E-q4}w7p^9_nqX3uF_+Em7~>6Tm3)>oisJWUk9HHGj<+_p&{Qf zkae!BrS`vJ+bULV4oLLYgSs106tf2vyEuUF1mvx|%?ST(hnPMOfclD6qlfXQY6-hL z0ANvi7NP*~fFFZia5JR_m}Xq zVfoYpa1C9Hq!}*y2th3A>+C0Bp%%g6r=`&VfjR8PLBgKs*>qGP8bG7QTO>^RkH-5@ z4#Sq6-Y>PTBemZh!!|YRftLKATJ`gG(MB@%$kS0%)osb+yiHL+jZC4Mib{E z{r&|lj=tC*3@KtQ|Fi*fGuxH34YkQPP0E}Dschf5S3L>2v$m)9t(`Oc3a~u_6Bt9q zb76T+ zQUAX>^xrvp->l}pPc`Bct!KvCQ!%rdKivOX5(Gg3budTZnQ1mx7RBdH9Z7{N7D9#O zh2g1z>ZA8A%j$GZ2?G*E?05`ZK7mg?xCrq3$YTcRcYkq>vbfL&eEKgo7qR~*0nhUW zo0VQ9f%KJsPR7@ny=qle`(YZ|*q*U!V1f@8PdZC5*K|Q@&F~B>wPmAE{^{(;p{`0S z;9Vq<_G-g0PSPW7JPbF;=l&1Q?u@J|{mvH|>5&S)I*dP+jf~)Cvh@Rfo5h&>YpBLx zsACu)69oO`w~5GJO=Y6|C%4%X{aqxKda{S!piM+MQvRWBUMBh93If7yGWe-kZ=iZm ziLlnO{mAC@&wtXRXU%!*&Sv;A1-cQbu0X0-O=A|eVNOtHU~hc=b52@BwLSIQsD>|X zJz&b7NMjw<0I&85rJDBF_NE!w1dGN;U}>A%_wTTC-|sE<%&#Jms(>O)dwB1xCT%rT zF8IRq{WO?LTaRpydaYHXj4ad{DF@D#kgC8yuch@mjf+!ypfLg+V457}>W3}_ntZCH z;eNf=4wB@Q`{ZgT7FFNrU;*to*L5U3y!($CgMi`Wlmap)twMAd`yqm|AOUicyai4o z)JHgq(=tvQBE!|T)?e30^QjM!CLUmQJh7fW3$75hCs{XCJx8*BFix}+G*>Yf8jb(H zUpW7PF+;BJH&liD7a?=V4=Cci-@2eEHjFcptiyZ{Z}x}lvp3k*bBWV4v>0#0kN?eF z#D~7b+|x(bYu)e_M%l5GLWS+cUb2QXN&LnJLinOOvt zOy#3}CfQQh?cu_+^Z{Z=$@*mCHO-4cVyiK=&qE|oHFMVk|4b*Siu^~xww1CqcYN?k zDl)&0F-lKva_7>qY?N8dTW?U#d>aUA@oEvwZj4fIqC5B9P=;_Buu@yH2G;hn+XABr zEDFSkhCxuC8_WoU_HSkCA4>!BQp!-OE7d(AWxTN>1B23(uU5fn?~Jye0zFiPt-9*M zUEW(LmFS~}Cn7|$wrX+RS!O@*OP6)eM*&+C=_5v8FR?)Qy>YwEo?a}?95(u2B(+N+ z|2u&HffkysaFBKd1IZ4AGnVSdd-$aGZCYnKs(yr1@!O#0!195d`NZcEg9k_%4?@tg z6GHrs{GFGEd~|MvfeJsJcjSK{JB^1pl?&s}hkd9SLi7rxL!2t2t>%&xqQcm!B2Kjy zWm8CHF|ye%B~{svuqyZ|ZkD8)MLgluKp{6}Yx@^1VuFHYG81=r;FWPQ8xnYeiZdOA z<^WNq8MO?XifWvtreVFbii40w&QxiFujV6N~gBn__%ExrKlA1iXppDxGD<-KYeC@9<)OAC#M4PQcAT_A^9r=WpK+*q%-LM z9**S~9arLE^8RPmKZM*HP7Q4>@N;{!2_UH4dj({2F7)Rs2*HgeFV?FC{9 zc(?4qzHW#*kti8z8vMUDgYgPwA&UUQc8oVdsAVya9|AuN^dLdQc2htu2F`CRy<(vlPMu}4XP6i^$f0#$j6&6 zr33CUT$iEc9a^L*0I+j`*kKLRMmq}XK-(5JW(0f9btJ{b2+nWLaN4(bqe*YzGO zxC9=I^2Cmz4zeyY^(GFeJfj>IEP+(~LGZr07@Z4i!#GFhA#3o+&6ZEUku8TIE1c>Z*)0wYI2C5|wT`Ko!f8@gI|i$aYPq14StL4mBO8W^nSaqu z_evG2AI%Z4j}A$VhNT%HiwH{L&ZCSfv@hkjVi0F{|f^>xy7ExN^}b zu!H;9ew|OWvg7?@RW_U~;J2t4JT6zvxm2Fr^C6Fx>&JV!l|~%@TwV8oqc~bQTzX)9;0HsNi;R4fght}B^T<#Om za;RP5`U}Pzt3Ab~8nZx3wf-xQ5|x?DcKKO3yVz=JT3BMv59;x)_OhMp0c#BNv@KOy zhyp)c34?Ellj0}za5ur7#s=vL-Ft<{QXjPu#flN=8XqLWyY=@aTw_10%GPO#PNHG%?E?&Zr&ZCtUH>`otsY0n$ITTew@w(SkXMrFl9_%2uH&84jb3=wB24zRj<|7JVHsX zGZy0GAnZ^2yKw4i)E7s<^oHn=a(Tju5&$u@3dvX_o%^eF{{*cn(dwjpOLw-T^b%5=##%(D`%i|f zb}|hZ>R)piA6qr~_a7%_V#1x=-}Zf%`bG1*6%q6Kmj+YOwV~)$5*Vp=fFbu4C@B`R z6ldr%QTyJ})N0_=q^Ve9oVKj1*Bz+km4*foAy`bDTMQrLzVm*^u6>A>=LeEZVkd0Y zGcQMErgJ%Xa+k{$l|i~`u;S9@BqtmMO{t;_+o<8H4)IrcXDMQkLec&&R2&;cq~z8pb@-+l_%i(RUTJ$(< z%!G*z{meMkQvsj+pct$L}Hf(BB z@~J~KZepr1b4y{Q1A}BPrO4>xMgLk`&Z?*XYV2=h2|5X>o~fi%OJAvkr&v8J@3(!w z>vIh>rCKpAdJ#dJ0CAR6VGM9BNN!}Y_JPs#l&db&mYN3Zem4gE`OI+`uG%udo zv{FM3s;^OF4Aq@FGyeyuC3)}N2a`S4KrY0WsXl{14(iob^PlQDUl3U80^`(JJ%HW= zyt@3l@Y{UNjK2UfO2s2sNc2OYm3IPq4Qe6`LITs%DT@y!W`r1a5YES}2vK1nbR z_|#l$xz4djFTI7g=-&+OG%~ z6DrJWKq%U9E2PIzN!182*e#ux&`_RAq1x8hf?3Nd&kQ0b?WFN_k3F{Xq+6#{duT#JvJdX8RODK=%eGx# zE?-_>zkdJvk00OvlMU<#oGWFWa?jTPfSNZ5y^K1GrvauGcTGFJE3> zzP?<)Y}<8u-_sl1BJH3kkD$~2DPUE1Ztf2?_k<31P)~l%Qr$XIZ{S{pEiqpuvO+bb z^|`Db=KIB9kg|>RESd!7zE@>xpN!PQ!g%L}_8qsX)SevNLQ=JtUn^r&SEy3d4&S%B z8dQ&!7+Bu2Siw>oi$~oRDJYy}s=YY4#Q?<(jEAhY%X>Bl&xKQ}N7KGLS*Y_t%d@emJ5l-!vG3sA!724V#Ay z*(`E>JZV1Z(T7QwSly`UGpK1kq%(Pev+zA>c%`n*!?9#UsSJnq3TOfXKnZJY7wZ)M z_O~+7sq!}P@QFtV>N1d1<+fsK8#*D{VJx*|2UKDK^@FICsH7aa%^bv~L1=x@k46(B z9HT>|yK~$e0}|Ky}XpN_3WG#2!z>gyDj z9w0c_{h{$3v_&c*s8XbAdT=4`vGna_qO+yk5^nyc$=q6TLMP(@RGP|+re5;0_9S!| zorSbLK`nkwAC7b){kQw5jyByS84#IV6rY8-9tI|z%~b!$x%;CoU{VjF4te!YK&X!i zXDkH3?<7-sdhYK%!@{iB)LNz>qUZi;sH&U#n^ApWbR_%1Vnm(Ev%&Q0WO`rPz=4xU zk*kAxJh+=HXRPQgW`^;IY#J%#=y6h}tmWMfjcn)o-RYw;B5+^?c8trNmQ46$Z@(JB z3s#k@U!_|qUoPlwK>w46exSQ^a`3NhT#$@;6}Q6cy{?qu$2SpTN{+$hBo6?#a(TIa z{r>eIfBx~WKYsk{>(@Un+e@u$?m1k$_u-V;w(Ir!dcC}svQ?-$OI(?^ zIRxa2Fs{g+U0p*J$X0Pc6(a$(D4>cO05EL*%B=58v8Fl@1>nr*?^LMk#!?pgb`S0M z`@Y|}-)R&o4tc?{eQfzumGwdyc>-2t+RgY%BpX_gF!k5%)tWMd((bD=+SD}VUjMz+ zKnVDfhj3{K-B=nJ%7&fHWuqWxU1VqWEZpt^je&_228G!inEc>80tuk&mw@r3G_bTb1$D`@@1p{9Qg3>ybMBy|w=N z9~MPGIVjCMWL4kaq>7}F+MZ_-=8IW}>Kdoc_X8(7b5p&DQ)3L1L$JE5RXKQacRFO< zZj$g&q{za;w;Z=n*5?|k=9O8_33#0Wj@_d;jFk=_(4()l(MPatCSuF4l0$%}J*Xj^ z!~_7UJ<=zM3Wg!73dI|C?L$eLU2IBHl}-V2Fo;nnfL7ni<7EOsX^#7b8)v~4-95wf zu>#7rU0+|m{`mgSKY#qU?_d9MdHJ$+n|x&fDZ5hM8b8Z`bp2XYX04R%dcD4G+ojIB z8&r)k9Z1_SGfq@|C6)ORji5tRau$%k{I@nzTtAcUyfxKrPqJj271*@klRkg&E(P%}_F2 zs(Cz_1w_tMLvk4KcPOdWJLXp_WHr$&k^?yuY+KpT04k~Rv0-iUj4J?_?fT{A>yPjM z@yCyUef{#swq0cB-UEpMB?o~us3@nHGp$te73K1Bc`4hKve%x__z0+xvcyMiyhsL1 zf5@(ybAKObri-fJ#=WeGsF|u`4%{EsECoixdzJ&v@$x?6oe&5GUf>0Kv z4EivXs!AO|DFf^jtGyjVZiB#J*}_o~0v*^&o1Z^DVU;>69G^NVMaULSKun#0o>vUP zP7|~C<&-9Pgd+RS`(5_E=Kg}tD`k?Y`cyz2ND*Sr02_=o-?5#M`DZENMNMVhYeB|L>mrFUUR*vS>tMPuH710aAI|esrqA_Jc?NSfN5_i)IE=`KcdlY{$s? zTr56%KE+uF8WN9is${m|6;72zoGQU3;a$Gr`1MFX`|vCjWTBx-H@I+C9}eY2DE}e> zZvG3CVQrL79rcc^?i{93gXCY{UWx!I_xBW>CoZ70br4gU1&o!4JSTc4im)DnXKfe9PA3y%vx7Y8b z6xNcY%J~%tQA*GEB0HWpLs;V`R1F4|61-erx9zg;_kF)}_fQpxBAHNGY!d%t%ap<_ z(2@R1!aB90wq#9a)l-pTTuBXznf$4qyJaA+0tKRAJ%(|dXnvj|O5z+|&7v>F*3GMiQ7EuU9|6Y&}>ol#blp>Lswpm)qH=)MtZ~_Up9MkT= ziqyd0lS{QiZBcUyUzuyG1Q#ujp9QFKLTG>$lez*3?}4p&G{2RU zqrEn?p{fLoydv1*&0RBJJ7`Y{ecWGA8k1Ug`(VXV`=GrjKq=eH^~?8f|M>IAe|~xW zQA*jlqa_$r>$ylNZQtNdlj_cat!Dk#lx%_1n6z!%1*Po!eZSv!?)?X7KoY4_iN;6! z^g=AdswxXyqZMH09j<7U>`H+eZ{HHC%FHw!E-Q@6`xz~2h&}zA(h3;vyx;fRo%_8V zVv0NG4lrH15vv$fBR$P`v{cO-LEHUBr!Ub5;SG@{3_aFQU_IkaKdgftt=bRHC{!iO zo?xHj8$hFt9{O6EREFfv{l4>l=iWf7Sh>eA>4ScLrMuveKHY#TU9#sQxWwH&B6Kz< z0QnY99TNpaq-RZ2DcXZa4kp2PoZMAqHDN^yi*8cGX#|VE_4emsFe)n-d7oCKdm~~d zkWKkLYNw7`nJ?)7j-3B=%W`}0+DY&^n3X4JqQ|jd@5E!za=`|nc59U|1E!x6Q}vil zOE1dP+6b(xR~?aV2)sK|rV0R+i?zwvgf_Nf_YrjEGUi!McczOPXW77eya z1JLtMq<-#;37)06j6S;A1#~^Cs3SvfV9MajB6R4V2U{!{UDG58Y#lnSbf&Il;0URCnDjtS_7AI;)#qYNNTmD%&9 z=44;M0yk&T<-R?$ekbp|-K*e1^P=^Y7i-&^u~bDI-gkwTWrVXqbx`Rse;HmtF!pXj zhyMFO<6-$z;p?3ctrAipcOi#sPH1k{nMl=M+unVBJNNz0{l4Gt-0!keVl`D4#6q++ zQWANw(ODwQzO;)&l8Slt6n6`Ks7PHLpz$chU-CWx%eWfADnS^K9k1;xNYbw!ut{)* zr;?;3u9H`_B4E*iJg52aK?ml4xT1mK)WCluPCbC3Sj;L@?7}?${BuVCa!zP~Gr;WQ zE%(Vp7`mI>>e}S^xQ1$`XiNtQR7c zvRyB)-@pFj&+q?vy?jyOts;f8H^0mv=ep#rMu5_Ym~CiNkjW5IDkoLSCcu4vyWifr zr^@emCg{l`Qt=U0P&M<09TL}VEUt($)R+pgctcbSy`S&V&;QcQ5o#XF@s**9oqU)rdHyXs9S)5|i z#-q-r1C!I>hV=2<7;+H0vKiLTj-W6NP4$4HZ@nsIF_CvRuS~OH`h2In3MnoP;8Rh* zy#@kEWsmWX)WuO<#Gdljji|v~~scn#GKxGEsAXKw_*FB65xSDe#R}vC>gZ zk-~#4lE1E}K4)ap|LnS{gQ}d6uP8p6p&%m0zZ?h&bTiuG;e57yf?fxOPPC}-Me$HW zf)c^Yd$nj3t9lW-BbfF)fnE^@^KIFO{?l+Yr2&Q{t)f6ePIfMjf`hVQE2XePD(=F@ zSs@dRB#0fjY}c=^KYo1w*SD`fij;~hdLU6J8F$?g+OB)UCbFANe%QvkL#Fsz8)1uh zE!_9p?bm(3Rh6n2#l@%1+=FoXR5*s!`}^Hj!E`xM^{B#xHjw)iQOxgDw9^Zw7rw`L z?bRD}-}gJ)=Q4=Sm$q*g4 z-LSCOzfco%xl{ICxXZqiJL^n;=iY|h}uYW7a!a(RxnY9ZhAQ^USf<;$n zJn-ruJ7YHUb1NIPV0WP<{6oy{b<$J|Mvc54v3=ku&lNT^Yxc*0nzO_rc1KYzgkx;u z$ltwe^QvslA`qQbq4)JLh&ACc|8{-qc_6DuoiVdumfrO_wM(ns&v)X_-^yY-L#C=% z+AABKt?PvBOLFV^qz_z{i|k)BN+*>%q7Su{dK89eD%p}OPjX=%dtwj zNUvu0YAC-F!(+$^;Lxtyb^8F(h{dyaNtqc^iP1}#?v}L{wWg)kDLhAj{uH?|A7u0? zXW3pZuiwA^^N;WUylyW$fPG@dw)7IynZ6IxRBdc#$bukLH85{(vmOHK$5TotXVr&ZqCAid(oQWW)IHN7D*CCah~&_I+nd9^1L!s|dCI{~QFWPNG;S{Cuc|PxF-M7oY$EZi!`4 z17?EGs#OcgB&#FVbnYclAyC?Eq!HUeMbt==bovEYAu;kvjJt9WS9z6G16Y7NAA>m& z3{_dn>AW&~speegBg=Za-L+Y%+4^5Rfm87baOQwam4vcEP;$}k+4y*Fm51>1Il#)# zGcje?&>lD`CWux(Pua_m$?$kO{m6lZeEM(sRJzcbIE+SYt*l5a(X z(nlZoia2S1-+j5bZZ7=*IK2BFA7a#vgRo>`^-&+$x7+FIm%?k*N`Lwdrea1?~itSF}aZAMY_M$r_m$QzxF&eVQQX_ z%5Vp@EUGUrU;p^=pI=}9Xx0}QY60q+8XX-ow^epQtm0m1SRCi)R3vBtQ1<)n*V|wF zexv4`%{bH@6;*x{ZT^2CO5xG~Ox&quB9)Lr;D)ioR7UQ1R&umLvCbKC@8weaedm3@ z@7!-Y*$}Fk>ATAeu+>#B6Cs${gZGIKaHqR5L_~@LX;jiz zOR4skMT1tQ2cykPM+5KM{Xz@CdNe^8bTK0lhYE+z%W8>L%O_yb-H9-aRyP!#%^!Y` z^^Hn8F(&6Vbp@1BFaf$U0G;VniDCL@$f93LF(&aVf)GI;tS3`StG2NCa?u2-0dD+@ zF_FL~#d_D3B?td~et%grg6W@IffbNz-S`=}FaJ?d3GkR8mcxRf_rJQhEB7S?Gu$IW z`VYqTIAlwY80K@M|MU?tcl~m{ZmPk>J2kQtDpTnV9Zrjcp$*}ziC#7wwz6{IGq*;v z4m@z4#o{X*5cHDPoQU)OQ_lFN@a)vV-jmi%<<`x>kQlXvVz#MDUm*|YO*3`KzB1~K zk{T;4u8>n_W(5p}X@6+{S6g~7`(#6@G*38rbR)6-<;!;c`ugXOZ~uI`yb5Qa6z!S{ z7bf1Y4|Y~LEa`T5Rbk|&(@ooqA|eH4=l=Hg*X{PkT652&mPy3MrPgz=I3s_#Cf%3$=TDJ*8%0jM*Og5pPJ)RpQs9R=-HDx^~*V5DiiM|cz+ zQTNM<`*5HQ!Z6b{WX(oEkVc3Y-p}lq@YY!4lsBqUXtKfuP{FoY8G91~T7+Ngf^$iw z;YH2Ba=XA%kczIeRgDB`!>NlIkfcT-Xnf7L^hF994%ntvrSx#sJW~g<{paOBj&iqt zlPG=1Utfbbn{n*k`X{lK4n^=0iaq=Oek%mv00Tnj;ILXavfRqg3L!{Gxj6GiR*zhm z?u+Ez$3BlJvDG-cjnR~OupB(Zm{0v1^mfO1>6t&Bi3%onmWo!akxz1a`|H=+&z<*v4$z}cIH?C*)~YXoQu$EE#Wj3K zGh0>E+~1I_6Rs37ek^@CNsdpnoe==`D5fd)uDr2|$FP+^Ep&igh&trFeQJOL(4;H@ zwCrrV#6^KUQ-Lw$LgQj~zLu6w8!mrBpRN?VWun=UsLP>VP|OJ1KhcC9kqyBKC1)hC zPzVI6B)ojs&~x;`q;o+h!i^Uf!2$SUe$u=R4YDCvNB$>AD(bk`^>=Dq1Ll ze1O&MUn3ic8frTbsiLcZwdJ9|uMvjaL)SnXgpn)VU`?u)ajL)D{`=*>1Nda&;^C%+ zL%uS;8JTM~K5^)OVD`^6p(j8xo^uVo7r*L5@X*Nl`8q%KwLEr%-~>tS_gf;hAUW4k zzNBdz6eNvGb&>$*(Lu;>%=lDQs%XBReof8aJ(lng`J(-3&W_}2oQ>6A-d7?c{ztsC zarpud)VN3<@o@XNI(Jf?xEcSlC1bR1DpA(X@hHr3be>G6PoBnj0!n79R8d#bV|%7z z0r3MJAOOxQ=&#uz^#*g+fFiTf0ZHfn?LV|^|F8f2_WB*AklpgzU;R!_OS{XL?M3kS z-YKw(C4;Wifr(=)00h5ozuw;d|NH$;qpA(P#5M%Sg+0J(1G4&50Kr_;&?qz`YbjbI z4^X;Ar8}=BU}5c5T)MWt4J(W63PgYPgpM9ciru6`bFtLeqT40)9#s5zy_ zO24(HU&=^s8tF-+olv}px!Wk}n>eM6D8c?bH=5T-C##!|=CgrhrxHYOIg2AQhbt{_$`5lUY*4GNQy z7T8}XR~W@M7Q`Rn5uG*(n#;KTkC*=eqXqgq5$kDE7S^?k1SiJ3;^QXRE3)Spd}Z_3 z&kHY2YOjWo1G;zZ?=e(8A&HP9Jp#-;9kP7&NbBv~k3l;34?R&1r_QB=#wVPGq$=+u zlHT|DN*`qeFEKw?19K)=A33**GpDKSbA>nq!()a#UtpM)?yg#3MWRK|ak95ZAa+P0&>@tsn@SRzWwv{`h~+RB_h(&sF0irfx^bP?hPeN50(n2eE75{by5IoL#W(tzkdGu z|L*sJ7Q05g&p;KhJ(pEHWf0# zW)Wd4t%9v3ZJ$F2P`cEos0y~09Hu2E{WQ`iz4T)dm7mEzNzhszT~JN;;17v&yKzLZ zud*NuDlrdc^JPh#0kLsx#&Mch1{g|JXeZGvoZoK&lcda)l&XQ%x_%7ls1q`MjK9sE zax*zhesugATu^x!`sC*JHVNkSmeXS@%(RQI#6fI>!?b7EaROS+UzYrcAK}T z`8DH>rV0e$FGE}x2#Ytdx++=~Fb-rB6?2&SNinrDWO}AvKZTeks&C)F{Nr-{g67UD zrb8EvYn!^$=Y619#l zy97+avDUMiFaT|+w+#S2-&AQFO>L^u{8W+YsQhT89*LflFz%QBFU9GJbmbJ3f)pmj z)*`)myqZX;z>th6@YsdMaO2b(u#9P`pK^8d%#njB7>MkuimD@>24+1i^^bg?$J2ee ztxbU^B$aH(1emmixhotpTsh8mbOd_}43)3i61+qC= zfrueieKCQ!x>sLwW!(A*?p%%dDIsYA`iJ_vHGy`04B(=2+gEJ=&&&TRQZ{U30zpvz zjlT}6HIZ@Mp;+>RVAnC}c+7}B7pjWizgCB@3r=U}M=kv94^tk-R3VK=3Xk%V14O7@ z1hT&?D}8FL05G#5g*(kdnvH_Y&t#TZkJKi^; zm7U^|y1;+bNgVR=X$tvOna*l8TT>^H+Q5K?fI@A6!zPW$5_VqG9acwLS98^ zow9?}k*($fvBhZUNN!MCxBLCq&;Q-hsbt}!iqx9;aQe_92cM^Fai@<{ZS`3;H9(oS zH6hv{r|l2$FG{p%qM%T$eh5;i)d(z7iY~NLIH_1G`{cKDFIsJRonVdXUDId|J;yDs zOjQ&c-)T_LB&#ZrFbuowqUOmlLY2>C;;xW`?N0YdeVr{oIIMI83=`|pk6f^|5&lGg z2e|2fSNbyX*Slh|F zl$3X9#m~U@i;|*Kgmx{BhZ?2!#rm7|8WHkOT_rokZ+=$Eg&RozeHWB84j7pXzBTpg`{T+h2bT zoXSKn10>Ir(WJ(bD)`s{OOL_K`;Cia#=aN(l&kT$pt|O1YyT$rD{6p`QZGddyDdsm zslIngaNf^O#`qeY*RgAC~c)JRNl3a{4X84PPL6CX_V%>MoeiD zIBW(+x{)JcBA9(avgCOwmyUb@MreRWWmH8|x_ngYjK$8rWmPNXzfy&P%z9dTb85mw zGw>rg(kKxm2@@S^)KOn6hL}u;^%zWZnEc1^|NaHauLe)JsGtnm?l?H>m58q!P~?DDSV{nIato7e}LO}p7;uL^OK6N-~qtRaMR7QNcUSFcEe96!^lShDUxYBLL0jH*! zej~NO+8>3h_jaUbM&O$~|7i7K|EIZY+m0JYk{L;|%H6a31vCHudD}Nxk|hzb4QzN>Jjd!0!zr)i5Ypt^~ ztjsh<+V7$tj+#%$Q-zKFh3T<(1JHL+;y9r{d)5(!WRbG9r^_x*-MC@JUa9GI1sGx$ z!iTMo^J!YH%WoS_?IV73JrSaU0`Uq6prUC&%32BweM+XuVe)yBHLj-SDJdYY>+AFL zgW*$$`K!V$u6xwlk)i!g|Hfu&!N6)nNo%C8UAlkn zX6ye=|5^U+rwSWX#TIq)^Kj~sVDSjKw#_@eivhRY_& zQOWRG0)V^V_#v5^XOWsoSwd4KsZ67f%8wK!mBK}fd-4tkbN_smvb5K@Sw+^hl`V~D zyPXX7^{p~pN!1~&jDQj;w@c$fLWY2Gev&Bz`zs;EKTDZr|3-|upw6!E<(BmF2Y1NH zaI$eA>pYT`?A|7^s@92mq<`}Ke4`Qk8oo=xh$dkd`MUd^;uVWG3x4Uibg0L7;a?@zk~3Wl@QZ&$p9FwWEF)aqQ>*E_~I{RJ&|Y1FmH<{iKW@uYKrSqb>K)03TUU-@YN# z-VmX%t-1T!t%e{3xPx37s+o}tmCPj9a<1(0T=p{TVYucFsZDEi#T%8u4AKGD+gm|x z7*246Gi{yZSeooPRKL#zBP8-+^cdGy0Fuy_as4sKFut1$cd!}*jn4iUaUacA_Lbd< zC&;p*oX0CNJ4T!8Ny^amZO8de7wZ#GF(@T4Znxo5Uc(dEm(7aFs7Cu80g;4A24Hcj zhpK=`k@B5~4BSS4arlbUEcCB>)dwgO$TA131`Z`6+AG&&fN;&2cV|@l3|+ zk>ZHY+nEozJ-N3b24s@c!MpDD@$P0<4wH6%i9nI?@aAiY{pLw&<#QNv?tr7T+L0t3 zbrR@fcOEESJ528L_Ml57F!$kRlPe+GyWl$1Am^p0pe2c8jpOCcA5K(8d5xhTQcl$*P2rQUEg! zGE^&va%vfvLo@XlDm~$;0drNvDEg$5G}E)TztLu&3&ZywASFS{iGz`1kh&(tB*Wld zwEl=j``eCOxNPPSRTJ|0Z7c=E*Hgp!`9^l$jrL_g{1W=B&@!mUNQ5rDfy1d{?aTm$ zh2{Kt*^M}82;Pl~%n|06f{F^9`}LESEnaUvwy(fUYk6*p4` z{JJrGGVn~DYG(4u+#d;6bzDQJxpD0_flrON7EZxLiH2kkBhe2$5~equ+1#Vbz^tm=B3hoLh`MNocaRd5``7#uZ~m^u~Zrd)gS{`38LGG;)=btk!*`LJ=S7N3Zr8 z=udwbf#K?MpUaeR?(e>f`$?2r zizvh_68+h=bvrZ}>@HO;TuX}}Fs3?&a!KE^C^hJx^8E7k>FMF^?WMH*RMX>WZkE8O z3UUx?8C!U1X}kYaqC?++9Gjf#ivrqw6DC*7Nz`d=*@jTHN}&3!bm^=i_qQ(Bd%x6v zw8Ye+0ima&%Mx zjp!=QKX5CH4pu4Qx*7wf^GZ)oG$#KUW%L1);06`q*xsNmpl^eARxJyz_n)Z{flRv| z2$Mn;lL{27s_>%*KOKV&^xZc&9bz&#_IFEON__e=4H4^ZqpGpf=$EPzt=A)$i*7ql(j#jLXao{7bNvG#t`tzLtP8|98Ij7X3 zIUXb{oxU?TaADcpe;CVL+E}rOUvWJ5r+b1~2X200@$TIgB-_XxXac-n z;dZSXGtbXRSX;J}-`&MLAoK2|$H|pIN#nk{#>I~QNtiWmk@4OrRYQR^hV*pd1!!J-km?360}TVk}X98V#1o|Z3{-!IGWIw=R+3w_8a z_oh@Q(_Q&0EPLp`9f|K5BYVjVw>MVw+E*w5mh$xN;rZLc`u0LPP{L^W_cxw@-Us_X z;3*ncKm`|^TAlkNa;=f0gnt3tj^7%wERM`VUN^z7C^OC&;ym551uOJAOnB9&ReZGT z4l-&_Go`ovO3{t}<9@9UNh*ppov2}hRIg5M5*t^uYt4OZD3%iZi5Q~U4&AdoA!%^6 zJLb-^dmY)>nK&c`rS6+FRnH*dS6mCsP#J2pp;Z@P%vxeeTXVVEE?pO6Rb}dviYlf_ z=LyS%W!7cEJj*iaGGm@FPcm;CTiv-{6>EHIc~V3)UZk4=TihDv2BD8&`wd(Ji#ja^ z!=o$H&xs(%sqH8HVoEjTb1<5YUAH^$0Focd^xhN+$jyrTBb8=8Km(+%b8KbaqpOodlo}QnKyH-zc>J5k$_#0&4HqER2POd> zsSf6l;TO4qJWWR@aUXr2PYn<{Zrr37H^rJI{F40Hfelo?lDzHeNSP! zze%ZkO6Gfmdj(*zR+fBK^|F-0B9x7j+?-N{EJdmsl^nAMw#!SQ)szm00M73kqdw7T zzAo1<%fBX_gcK>({Iqp;nt=rZNlunh*1}cBCSf|6p-|vm;?Y51<-;m`xLfjQo*ZaX&a|>#{wHP-7TKlC{7I3 zuXZ~NX;1>#W2fBR5)*)Ix0HB@Bt|wn)H1OqUYZdrbIsU>J>3;ecTX7_*<7$ga7l(k z9SPfZNOAc;SW*X1yd?--g;KJvz%+-7sZC8z{gI!{=p>2kq!*2@K#MXxiK8J8K$jAho#hFoXNGv*o7#@ zQb#q5prsl_UdX)?PBQED9;S%Z#yv(`TY^*ly~AHXsp3{~QudIr0}(NXj?aW$M=7fB zo^alPaX&u&_nN$|QKnl*6UD@5v8udsTeFj$Y5f08#s*;L%$2+#1Rpv zI>|3i^{HNqWff)z=AF!*pYM)%r#;`@VXYus@=&bf%kmhdb%f%Tq$l?F(|g~u$xPC| zZtVVC9)Z~*wD>2wxc=I5lH2y^V!?_05_NO_(I!=g_?r$@TFX?a#wkV`RraP>zeMkp zB%(wa_iXLzv=H;OTrR&)^EHrZr49f&?v?gaT1qLUylsXWny#s)J8P_$xctlhgnNB` zdU*Wv<>jfAHRcfvICaod!1=Na;574VXOoh_ykGyMW1VVeV=K2xp*kEa7NFE2q*|S> z#$`wC-wsI%u0_O21INiw1O={l!(W8P#Nl{}PLRU!uQ=@e=&kMaZzEm3YEq!uM`*g% zL~I!v-QDl*m#cG^LY8No8Oi_$rifbB#s4#i%sc|e^a zWH;tb6Xpratd|R}3oeT;GnNUnVp2>Mk4}ndl4-)Em?up21@i=LnbJnEW<#hT(zd~B z8Dd`w>T)j3f}{>v&~UbqR;{-v*rO6at_~*`l0({`4QGd?j)~Mj1rqA0N4t zTCmRn*!P5oe(<0jV*J?VY465;qqr5HaaPaiJIIJ}ZVdg0jTYpfvkVyF7KSD`Bb$j~ zQ{uBjTzLS!sejaq$ylppehkxt2Zd;eE>k4)y=^JL$aLFaJyh7Cve zt<6>w9M@kV5bA^7z8~xM|JzhO5UdDxVC>`9 z)jIz-g49O5gF`u%0M+#`0W<{Xb=rQ$J)LU0E?+M5Z-9&XgRq#0A#G6xRSQR!wY-(W zA|t&0^p6_&@xzn`A}etoqjDltuNQ9$nHI3C}Gcz>rHN1#iMsMNKm zT2{l1J@aTPbPSe{-y~7y|4# z5}s`PxULiHBZRt%V`9b1XY)a&3Nl+p+$Zen7D@^i6Ca4_+r#*rcJ%>1ofMJA9<28^ zq|CYXJ*s!nq-m6?!Niq{rN*jKS3(6>&9v8zO~5o`ne@8o<)YVFms#dLPgzu5aaAz> z13OxsCYclyYPW7Zr(Q5qD+PSRmjqGoF7oIyHuoDP5#>EbLWd}=u+gq}Le8h!-7AHw ztUu5Dk9$$q_-9X{eCq7_9Mzp5ymyRN@qr)H3V`+ni1c2AQGtpQN2{a2Q#>c;2o!q?)n3YH{0F;^L)8pzRZ|*t)g_Ji`FZu^b&5? ztF^4YO*7eOlT!yT+#5(1qG{N+50w8^Us*6_- z`U30M$M6CJPU*FA^#`dKa6p?5X=4V4zPi{>S?jFebKqj$n;S@@Pt9SGp})=tww)Nb zf0)3E(aW^GPbF0*iZx&+XO5}0RpOudDhFUUoLuC^fK>esoim+VxK|` z!NVp;RUz}Fo3K^eU@-K%I#ZziYQVu_;#`LY*;dZdW4egLb7%AzW($4?P6gL3dF1E+ zhda=mILnE1xF4{0AK_!iEmKKgSaA8rBABR@RZ^aK zGWQ=YUm}r30VZsE45*4ljj7*ZXtV+jP%k6RfdqlU@Q+DhUPg-M);r!Dt0x2ok&~|X zDOC>d(07=$;!TC)T@vhjjh2z&xp%gcaeO0fE>zWy(nLY+xlr4eyI#NkQvWxg)+b#FbYn+>+Y*_OY&W%~nU zS-Gz3+7LX494WS2gMGZX2=XBi!KYMsRv;7=L@5o z4$UQH9R%ARbQ1>XZWknd`mHk4#8rneu_bPq_eqr{SsR1>B!D{ZG-VS^s;Vs>=-d;8KGVW;_j=?|SmP zaBAc&CHnMZ4P%V-k8JChAfD&{$2S?HH%C$^KmX$h4THxXy-?;L76J(o;O`Der~mNf zgShkDr?DNHIMBgpCsYkom7Vq6v8J$nNuiX= zhHih@Oi?vgs`94WNUDwdrO8yyl>fY}8h#Vk9yk`lVO*W)N9O~d4v|UcWxme3uvNYL zCizlZi8chgDN{>XMMPLCUQ#=>b+Qs~q8GvI>(ke-e>{DASl8F=$uh($j2%?YR29b| zh^9x+r~0{m(lr&P{;F^VJg9VY&-_sPqkYc~yw`H)sUdz&(>J|rJTzPi#SVZO(5I_N zO(-qD2_^EHVn^Fn_gL8bz(z`m)XWS-7}{ztOg_MHXOah7Y4kx)h$Ey8)5b6X0%CWW znIVobvyn&*lYW}~dxtM2Wb*HXraSdW@$PX+m0y6vPuv8lx-5FV=$A#O8LHtrtCVX` zo`ln;xXc4<6O>5-m8lL{8TVazyPqkQb)jl1jzad3vwlRo)eE7u{>aofIK-(&awkQ~ zFQZgXz!I{@m`{77B_BQ*ZSjsKDSS5>`a?r^oMQUMH)9LW@#|k=_{7Ice2<+wj*qz) zr!uj~ALLRE{j4XcRY^}(w@}DHtYTmb%#I(oq~?jnl{FzV&^ zZA)&2b;364;nsT|qVKV#3^Ynb;#4L#yum%8v^zYd6xosJhR7OnEtE}DX}+u&bWfF% zn%FO;W>1w0fA_=QDyD8uket+%URpPBss})yhesVU&&#rWQB~6NBdis6n{|C-SW78o z93cUC$^)AW1Je?Ee%!fs!1?3K@H=6pR;Os zQ-OC-*^Wq`|GqPkwck`5-c{BZ{|ahBc4$tsfu$h$^*03Ef`S~4jBP{;@!hQ9Y9>YD zI{DhPo8w}zhxo^*q(!T(1`6R(SLX)Ux%LEjj8@kFyH81B;jc9Urp93fRB@U0 zdeQ4e=c%@%iT7`9Xmk%HFu_mQEK^C7!3M=u0mY=Sr-%~f2(1M$1QNi-PPpg^TG}X! z-=d>;FoYrW^FRG(`8Q5+st8vpE7xBi_K z%k0SAxGRwgs@;$1ZBnrmdpP*9tO3Uixw*!8_r-9-&`Y4j<`(Ex*0;j9vaW0ryFT#)ea20*{qNNRTW0F>KM#+8eEarwEpJr{ zjHI2RHx0xaI*IWYN%E)MAKE{vN2u<_Mwr?lrq3BNdHc46l^ammLr*)|tGVv@%HnPM4iLh$ zLV`gi!#4Uaddq@KPsb1$9!`}7RguH9mi6sIwXC4A!Gk77$~e<$>z_m#XlykPMtiD5 z1FA)x&1lu^RthY$UN3rCbe?3R_G!{)j67Mw-=e1aghCMPn;WZA5UA+3>F(VoXi5Sn zhjuW6VexTtRXa(bgP}%mlNi%I4ShGC`ZKLm_Y;gK7>D61|Fr7*8(B_AbN73HSN;gG zDhEeKqDErhCFeG@PdjoqLe(wsJ16hbaOkv;9f)j{485ryrvk~w2ceT18K;W0#}$Xl z1!fZvCm%LT3-3uh#Ze$=yqIVtOtDn^2rlA0`V`Xq;~bj%-gna@y@zVK2Tg^-5dmw4 z*t9o*uitDB=jQCE&4UC%Za{XEpPKmn?th|~+|vp@>xxG}=#VP#R)B!y^ULGI;~!7Y53g@8 zEX7rM2Jbq=CufGj4WFX#a-B@=sdfH)U;ja1sg=$X4#Bh*%kEim zG3m{puj84v374?jPDPOQ0IgcWq`D>xY}GB$riuA$ahy@LFn?|`5HtMWJ5uZWa?d#q zqMCj`iQ9THd@>|9Oc{Dvyd$kscfO}6*}GZ#1E!aLT=@IX)=;{n?Bt=2jHaLa_sc1U zl(b(>o$SN(mWin9JWtnUx?Xfvwy8x2y9#rM?G~?E)GHz1tjTkrE**xo)C#I1Qf#Y; zYj7D-BtfeMAD&@NHOBtQ@5HI=o4ox>oGQnI?4vJ{16STj-n<)V z$+02oQ}FM1;(M=Ef=Qcas7sP_77QPCCgs>MmUXD7*8=ijstl)!DG3^#PjQZq-X)zZ zV`F;2kcZ_h`Z$n;nB*|J%ufgouIPJ*{yd_uksj$gV=GRhI{R9dhyrN3@ zVA&xa_t)(YSSAIEG$cg-qcvhO9@yaj-&(3_=oG{t*Y<4g>;5i8rNkL%K#z3kTS&wa zzK9ngl{-c|gnNxnu)7IrivY7;rs-0vr#j)Wfz(po*0L6|JMg+A2V$?_{mI1kXoT?P zlK)UhLr;z{ja4e!tXL!55EoRny+|$3XIMo932X2SiRb#ATc}-c ztaAsn4Q0JDrwNw@*9(?ebb`{ZQm#2#%rge;x!(OT7FPPe<_e*zTjWEP+`ESeT)i2( zU2tQ5JFDuYz_fytPF5fpg`$>>X^67LZJa71tCUrKu9fQhrvDr++cCvBv+v+zJ_<6N z`JG3M8Ef@JWGZv27U+*GAoF4Tl#;4LXmWe*KMEf)v=+rY7)c!Zh-dy}jFAEW_I4#n>={S*~bDceJ?>2yPaP zCz#xwEMC9p;edalNeJ$z$fl_+MIiGu&$>u^hEfPwOIgbs%UX6l1LBww?(}rekP1YF z{Pz0v@c75$SU1n-DxWI)GyUDD#^~cgwkq?{#}0%(RZNpE({#B^*NdnD$|@piB+dILq1C)fXx4?tvb5>a-I;(& z#FpkMwRr?i9T7{wgKKiqmm+WOUpb zcw{jAF|^9}M5Vqj@IUE-{BaUG+jn~TBx_&j$27VA&>6nXr-Cw|(zuo-fYQ^jz}Uv< z3t^l=ckIUT+((@E18xWxZnNEXLDNNFzm1VhgV91AMh!MC_F+W&jHddc*Iw2Og|kODQ6l=Vj6vs-O_unAE~`Evw1TH1eVC^OSxG zRUPQY(#Xr})5F96eSP}#+so5h-h8lsK zVABEp*_|9!5_kHs6HUnB*0eipcs`j--fvK7c5?i-; zI=kuhM^^h7cyruvqHbXYLe6@*E?;JycYne*?k}t9-n7HOcAe6IEYv1~dF9L3r@tN^ z|NQpycmPskg7Hu*={%Kiy>GsgI0T?NoN6gn3s^hVWw^BV=u}fSWoN;bylpFhii_^w z|4$X{bI}bH>=&)J%RWLn&`=F_gQgU-7(ZCpkX^tR0|ZmO0_>lNyoW| zIX~@X#YUzwN^DF{aTJ4}3}_BEi(!IOrz`M1Mo#uI;9S~7eTB6ZLz)#``>w`XOk=Z@ zXGs+Z4t}2oRr|@tto)vHwdc3Z(-!70lRCvMy!Q;FE4V+}k-))?+OZh3j_1Lx@Inf^ zBMGKxJG2kD$Dxnr7hgJI7bJxdkPp(=5ReQJ$o~U=`eJL$0GfsX0000QL70(Y)*K0-AbW|YuPggab^#VK=9w-El|Z3so-U3d7N_rC zQsg@nAi#2gy-8t#_yO@0VHvi=oK>A%=bB%rzABJeBo*YzBo*#x5HG;=r|He9n{)5Z zJbCH8*6J#;*^+L*F5hT6IQ_NqngZA0Cy}=!9Tk>GB=njj6tbpsG^vSa#^bTibzjz6KM#AK@$qyVr5tJLNayIR{jKl6thJ74`Ah8o z60nTf43U6XOKNK#e&ivZf9?waY;0_=y!hSM9(wuZw@?1r=e~5t()5T5%xX9K-QWAf zxrZM<{l3$l zeC(-ze&$zRedYYe&E&`KyXVg1tEoB#6P+yDBF=YDYN)NRlF!efvA$%i)>vD^-BKEC#AHy>O5)aK^!;nSz@=IkS9c;L*P+;PV(tgS6$23N0+ zIe&hGm;dK&o`3!vufFmcA=qn8SV`XJP2o4ZZ z&crs;w3(*KG||X7%E2;g>qiOYVMe38J{@lVdd}4$6aNj7kP*FMh@JSmdYHWfAS>zW zU#Tp8_SlIt@>6FY;r<8j=E(7N21^5qGT?&)5wbx_MiVntotRdM$t*ISCdSiD%#LEP zjD}UlV`VbB`Y3657Ps{Gh-?2}fR?WOrLg*2hmPLMUH6^g_ESI3@}U)cDDc7IyhBtw zxZJ_jb!J*+CbP(B5*aRxSpy~o$p(xkLN%S7vUKHMaZCSzxOgpc*M^gD*FJm#Y4}-e z@OZg;7bkANn_E9}D@&`(xDZh95T_tYW)5f6jWMkglUZUkjSMF(!*S&5q-8YiY))$< znxl!H$rNHeIxRLiggfxH{XFfHg928cv6TNt%RAia(K|SL%Lxt~T*egv4GwV*w1+cj z6Erb1YckU+F`6YtlgQOc4>^g9XOYn~GMOf3wb3MDRtZg=$?cW1BJFq3;`M#{;NHGu z!D96n5^gR0@~xByk7A)@76spAT$PcK$S%?%R1pSMCIrPf0fU%~rp?Ui$aEH&%o5`& zGpUV9Ys`|6+<;@$otVxNlPWQ(GtqxOo6i*dFTSJ-*RVKScD?)8T8KGzt=M>d$u9S@!yLMC6 zsjuqHw8>0bW7-;35?b+4EF*(;q&-fq-~N=NRH<_w3W>scd8?(l!qERPkO)y^|!RVSc#0X7SUd9ZM&374FM#_`;0l3gj5*#jgeBsg10h=lrAzAl8vS0$rB4D@m z#cVy4kVQci^$wQ}%!p=K&X6490^$dtVU;{RV&X1$2GeX_z9nI>EE*8!x`~3r7akux zJ~({QeWu<)->gl9EM41Qhy@uiQP7O2;yjqSzL|A^U9x6UO#OTw5$`O{Lbqh_sOx7H zMAT40T))y?NJl6-lc8{g;PBqzyx_EJFY^`yU}lJds39t-Dyj*Uei23&+MKbJvFOO! z8AjC*zZ(uO;oyAMDdKhzj_4dPxXxT~9a!NgdPwgT@2|nB$ZktD>mYMBQc_~dI2BaV zwXWOSGoQ&`Q77cSjY_dvAr3G+8s@WBz?&lJlqj8@-l7kkwIVo*9yA1pcir~pR1jSV zvGs+Ljg&Gj3QlAs)Fk+1%J(A z(T@-u!FM}|bAs#v=mcd_R9elbr2Y(SSXOd$WS_|1k({8K5olP@Yh0J?iP#Uo%9g0yVZ4onHc4I@T8qjlFAhv{a5PVlCWl+jO85E8| zsT6%qb-8B!fz@zLw`*7r+_v39oC;!z+|Ed|9ny4TlB@SVZFy$hnPma69lo~Tg?Nkl z{@-p_Z~EJKaMh6xpfsGRGa_x$Molo4+5Njsem`5)aL!?)>eF- z!qJ~A%0dT&z+m7hOW%Rb`(kf2?B=1-Z?(jfY1%|xH&oM#$#BSUdy^|0-)HB0PyYGj z!nb}O2n&B@To+`wk3H9)v7y&(&450V)AQeU9mJM3%6@)UctU^8QMQ$UJz}J z)OAZWtC&v4jIQi(d25qP@4h;|^wO9AaCqUl&jV#IB`*Np(4h981z-Ry&#LBdJ^bH| zm3;9H5xK?u@^K%6cxN~@RB~UDiJTKLwlqykT{p~T71POt(QwGl_70mrc!!HGKmFpy z3t#%v;pXe#1eSLH0P4=YKLq(f28$l@K;5*fS1)h1Y3KE~@|CwoO*K7~@GCekU|3G1 z7>R95RoBdB6_fFl;c&#ItxH@u|9XDsyHCCQ{pY^;6l>$lx|bnWWe}w8+BdT z=*s1E`Qp2?t#{6C>|FTXo8!wDUap(;p1}^?xB^@SM!*=Tdf>PSDIZ|4oErpI`f;!a zJ>s1ncghJBJ)u4v74@qI0W-2$onteKZL^g#?`L=)*aWtFuwf512Btk+yN7I90pqj3JkICVdEZVdjV{2Yt}=}tu30nVTkv(nnj!Qu?W1h zV0NVkpKt7K4>8`y)P8xlH}`G`xHsIg$EsV%(|N9z{d=)cbn~lzy=r@tJ|I72Z13y;06xb|fg~w+umAu607*qoM6N<$g1PYW4FCWD literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/samegame/qml/SamegameCore/pics/greenStar.png b/examples/declarative/demos/samegame/qml/SamegameCore/pics/greenStar.png new file mode 100644 index 0000000000000000000000000000000000000000..cd068547198be068e337176857026a1f29e7202b GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPggab^#V~1tp6FFQCvwPZ!4!i_>>6 zDe@f(5Ma5$-lVWVe1(364BO$vTLp5L;#iJ*DopiVaV*qihCT;lonzV4H|O4+Ns%lM z^__VvZP~R&3OOyosb zjPAsJJGb#bZ2+6U*f&P2$Dj1t6&0^#)N=_kJ(Q{`|8EzR^ye!>B##b9*@MOLK*uq7 My85}Sb4q9e09G(v)c^nh literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/samegame/qml/SamegameCore/pics/greenStone.png b/examples/declarative/demos/samegame/qml/SamegameCore/pics/greenStone.png new file mode 100644 index 0000000000000000000000000000000000000000..b568a1900c3c656039afe3e6271a469b4b2f7603 GIT binary patch literal 2932 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 #?4kbOf9x1)YLbkap0(F02g!D* zNh8ESh>>OnrU^{jZ#ii}H7&R+u#|v*Mk6a$xTk1Bh%(oE@`oW+|iT*c{{0V7nB@H8qA=~0&Zj%(lA#??VLfuOL{M99CdTwbIWc=!NS5O%Bs~g zc{T%-1lVoE&~24D}GV>B>dkWrFyo>twqwp7{Z7;euz z;(cZ|C|8=8v^VyC$Q|WGa5hWs+2t_nfyV3}YT7C$1|&3yugQFkgk~2GXxiJ(nPZd- z2F9}u#N{&QVwBgbkdjt3wSrlgX9Z(zhGbpHI^a6sW`Oti!33CkA;uyiSfCS|oinpcB3}^$e@Pax`G)06Ty)7UOcrx{&u;$eD_ZfIjWV*6p|) zql)v9Jca}(sfeON8KLlmT=)k&?`G!rIxF1pk*^LtpK4r6B|EEX0b^YP%3Hu4$ZR(c z(boRY)NA)>Rfqu-J(-4`PJyP-jy#ls^SN+&-eI|X-fpFq@X}_@r^XI^dlqtl6_fIA z2G?DJPCu!cyr~F>W5bpDX1G`{Y4d1RK ze|e|j(`yF2ZO;eBrsZVa1lH*%$eD^eAT6M;!By#*>_Uq#kx(Hq5`ZGYMgwK!wH3!J ziw4@g`tJP?_GfUo!{@Rke)$p0p~C{vkN|cR>_Vrv3!1lKmbM;ehSl2Ls`d>uvwSs# zkZji-4>xNj*T;Nz8qfzU|M!M_o|!hDI%t3MSQh^N2-rip&=ZR_HcjC2q*~sEP78dW zr z?x+haHRbf+JEh*bx^(oihYv5^au(O{-GUR^S_`D=4SvbV5^%nNBB+CS$gS zTfDuw$ye@_7ykH`{lcYf|F59E7Ra~W;Q`3^QZR2J`=Kfaw}+GFjo80>iQZ^Z`~A7E z_hqENWqee8@c5>osisuZg0dJh9uK*mTXu8yx>YFFSp@?@pdw?j1Tl=yz9pJ(D{p zs*$R$_3mU6u5FK}=eH)eE)L5p?-cbVt?KJ&*aS9#EnpiM0b`(Sf&DzByoZ7_pV|lZ zwfAxhx+>NkRp*WwV~*v*p-f}|nyD&LwW@=Tnh-aL@dg@hpn4m)+ky>Ss4-BqaMhfO zx)P~5SOHcMIoLkS+c7Fs$1Tj=Ik1^p(-vx`+PrcP4e?^DnOAdm z&ja`7l-<{YXYKEs7Gk`IQhVjyV(vW@a53DnpsJnAQ#a?tX1;b-bfE>P<`in?R0<1f z>0T}7y#N>A%O2on4{%}OOf&})_W*f7vBm5E0IhF_Ml((E_5c6?07*qoM6N<$g6)ir A8~^|S literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/samegame/qml/SamegameCore/pics/star.png b/examples/declarative/demos/samegame/qml/SamegameCore/pics/star.png new file mode 100644 index 0000000000000000000000000000000000000000..defbde53ca489900adbd2eb6b6c83a97cab11e80 GIT binary patch literal 262 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 yti-$%;KA#12)G^sE>j8|1c`@$yiKu#+y4T!p= maxColumn || column < 0 || row >= maxRow || row < 0) + return; + if(board[index(column, row)] == null) + return; + //If it's a valid block, remove it and all connected (does nothing if it's not connected) + floodFill(column,row, -1); + if(fillFound <= 0) + return; + gameCanvas.score += (fillFound - 1) * (fillFound - 1); + shuffleDown(); + victoryCheck(); +} + +function floodFill(column,row,type) +{ + if(board[index(column, row)] == null) + return; + var first = false; + if(type == -1){ + first = true; + type = board[index(column,row)].type; + + //Flood fill initialization + fillFound = 0; + floodBoard = new Array(maxIndex); + } + if(column >= maxColumn || column < 0 || row >= maxRow || row < 0) + return; + if(floodBoard[index(column, row)] == 1 || (!first && type != board[index(column,row)].type)) + return; + floodBoard[index(column, row)] = 1; + floodFill(column+1,row,type); + floodFill(column-1,row,type); + floodFill(column,row+1,type); + floodFill(column,row-1,type); + if(first==true && fillFound == 0) + return;//Can't remove single blocks + board[index(column,row)].dying = true; + board[index(column,row)] = null; + fillFound += 1; +} + +function shuffleDown() +{ + //Fall down + for(var column=0; column=0; row--){ + if(board[index(column,row)] == null){ + fallDist += 1; + }else{ + if(fallDist > 0){ + var obj = board[index(column,row)]; + obj.y = (row+fallDist) * gameCanvas.blockSize; + board[index(column,row+fallDist)] = obj; + board[index(column,row)] = null; + } + } + } + } + //Fall to the left + fallDist = 0; + for(column=0; column 0){ + for(row=0; row=0; column--) + if(board[index(column, maxRow - 1)] != null) + deservesBonus = false; + if(deservesBonus) + gameCanvas.score += 500; + //Checks for game over + if(deservesBonus || !(floodMoveCheck(0,maxRow-1, -1))){ + gameDuration = new Date() - gameDuration; + nameInputDialog.show("You won! Please enter your name: "); + nameInputDialog.initialWidth = nameInputDialog.text.width + 20; + if(nameInputDialog.name == "") + nameInputDialog.width = nameInputDialog.initialWidth; + nameInputDialog.text.opacity = 0;//Just a spacer + } +} + +//only floods up and right, to see if it can find adjacent same-typed blocks +function floodMoveCheck(column, row, type) +{ + if(column >= maxColumn || column < 0 || row >= maxRow || row < 0) + return false; + if(board[index(column, row)] == null) + return false; + var myType = board[index(column, row)].type; + if(type == myType) + return true; + return floodMoveCheck(column + 1, row, myType) || + floodMoveCheck(column, row - 1, board[index(column,row)].type); +} + +function createBlock(column,row){ + // Note that we don't wait for the component to become ready. This will + // only work if the block QML is a local file. Otherwise the component will + // not be ready immediately. There is a statusChanged signal on the + // component you could use if you want to wait to load remote files. + if(component.status == Component.Ready){ + var dynamicObject = component.createObject(gameCanvas); + if(dynamicObject == null){ + console.log("error creating block"); + console.log(component.errorString()); + return false; + } + dynamicObject.type = Math.floor(Math.random() * 3); + dynamicObject.x = column*gameCanvas.blockSize; + dynamicObject.y = row*gameCanvas.blockSize; + dynamicObject.width = gameCanvas.blockSize; + dynamicObject.height = gameCanvas.blockSize; + dynamicObject.spawned = true; + board[index(column,row)] = dynamicObject; + }else{ + console.log("error loading block component"); + console.log(component.errorString()); + return false; + } + return true; +} + +function saveHighScore(name) { + if(scoresURL!="") + sendHighScore(name); + //OfflineStorage + var db = openDatabaseSync("SameGameScores", "1.0", "Local SameGame High Scores",100); + var dataStr = "INSERT INTO Scores VALUES(?, ?, ?, ?)"; + var data = [name, gameCanvas.score, maxColumn+"x"+maxRow ,Math.floor(gameDuration/1000)]; + db.transaction( + function(tx) { + tx.executeSql('CREATE TABLE IF NOT EXISTS Scores(name TEXT, score NUMBER, gridSize TEXT, time NUMBER)'); + tx.executeSql(dataStr, data); + + //Only show results for the current grid size + var rs = tx.executeSql('SELECT * FROM Scores WHERE gridSize = "'+maxColumn+"x"+maxRow+'" ORDER BY score desc LIMIT 10'); + var r = "\nHIGH SCORES for this grid size\n\n" + for(var i = 0; i < rs.rows.length; i++){ + r += (i+1)+". " + rs.rows.item(i).name +' got ' + + rs.rows.item(i).score + ' points in ' + + rs.rows.item(i).time + ' seconds.\n'; + } + dialog.show(r); + } + ); +} + +function sendHighScore(name) { + var postman = new XMLHttpRequest() + var postData = "name="+name+"&score="+gameCanvas.score + +"&gridSize="+maxColumn+"x"+maxRow +"&time="+Math.floor(gameDuration/1000); + postman.open("POST", scoresURL, true); + postman.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + postman.onreadystatechange = function() { + if (postman.readyState == postman.DONE) { + dialog.show("Your score has been uploaded."); + } + } + postman.send(postData); +} diff --git a/examples/declarative/demos/samegame/qml/highscores/README b/examples/declarative/demos/samegame/qml/highscores/README new file mode 100644 index 0000000..eaa00fa --- /dev/null +++ b/examples/declarative/demos/samegame/qml/highscores/README @@ -0,0 +1 @@ +The SameGame example can interface with a simple PHP script to store XML high score data on a remote server. We do not have a publically accessible server available for this use, but if you have access to a PHP capable webserver you can copy the files (score_data.xml, score.php, score_style.xsl) to it and alter the highscore_server variable at the top of the samegame.js file to point to it. diff --git a/examples/declarative/demos/samegame/qml/highscores/score_data.xml b/examples/declarative/demos/samegame/qml/highscores/score_data.xml new file mode 100644 index 0000000..c3fd90d --- /dev/null +++ b/examples/declarative/demos/samegame/qml/highscores/score_data.xml @@ -0,0 +1,2 @@ +1000000Alan the Tester0x00 +6213Alan12x1751 diff --git a/examples/declarative/demos/samegame/qml/highscores/score_style.xsl b/examples/declarative/demos/samegame/qml/highscores/score_style.xsl new file mode 100644 index 0000000..670354c --- /dev/null +++ b/examples/declarative/demos/samegame/qml/highscores/score_style.xsl @@ -0,0 +1,28 @@ + + + + + SameGame High Scores + +

SameGame High Scores

+ + + + + + + + + + + + + + + + +
NameScoreGrid SizeTime, s
+ + + + diff --git a/examples/declarative/demos/samegame/qml/highscores/scores.php b/examples/declarative/demos/samegame/qml/highscores/scores.php new file mode 100644 index 0000000..3cceb2d --- /dev/null +++ b/examples/declarative/demos/samegame/qml/highscores/scores.php @@ -0,0 +1,34 @@ +"; + echo "SameGame High Scores"; + if($score > 0){#Sending in a new high score + $name = $_POST["name"]; + $grid = $_POST["gridSize"]; + $time = $_POST["time"]; + if($name == "") + $name = "Anonymous"; + //if($grid != "10x10"){ + //Need a standard, so as to reject others? + //} + $file = fopen("score_data.xml", "a"); #It's XML. Happy? + $ret = fwrite($file, "". $score . "" + . $name . "" . $grid . "" + . $time . "\n"); + echo "Your score has been recorded. Thanks for playing!"; + if($ret == False) + echo "
There was an error though, so don't expect to see that score again."; + }else{#Read high score list + #Now uses XSLT to display. So just print the file. With XML cruft added. + #Note that firefox at least won't apply the XSLT on a php file. So redirecting + $file = fopen("scores.xml", "w"); + $ret = fwrite($file, '' . "\n" + . '' . "\n" + . "\n" . file_get_contents("score_data.xml") . "\n"); + if($ret == False) + echo "There was an internal error. Sorry."; + else + echo ''; + } + echo ""; +?> diff --git a/examples/declarative/demos/samegame/qml/samegame.qml b/examples/declarative/demos/samegame/qml/samegame.qml new file mode 100644 index 0000000..ab49c04 --- /dev/null +++ b/examples/declarative/demos/samegame/qml/samegame.qml @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "SamegameCore" +import "SamegameCore/samegame.js" as Logic + +Rectangle { + id: screen + width: 490; height: 720 + property bool inAnotherDemo: false //Samegame often is just plonked straight into other demos + + SystemPalette { id: activePalette } + + Item { + width: parent.width + anchors { top: parent.top; bottom: toolBar.top } + + Image { + id: background + anchors.fill: parent + source: "SamegameCore/pics/background.png" + fillMode: Image.PreserveAspectCrop + } + + Item { + id: gameCanvas + property int score: 0 + property int blockSize: 40 + + z: 20; anchors.centerIn: parent + width: parent.width - (parent.width % blockSize); + height: parent.height - (parent.height % blockSize); + + MouseArea { + anchors.fill: parent; onClicked: Logic.handleClick(mouse.x,mouse.y); + } + } + } + + Dialog { id: dialog; anchors.centerIn: parent; z: 21 } + + Dialog { + id: nameInputDialog + + property int initialWidth: 0 + property alias name: nameInputText.text + + anchors.centerIn: parent + z: 22; + + Behavior on width { + NumberAnimation {} + enabled: nameInputDialog.initialWidth != 0 + } + + onClosed: { + if (nameInputText.text != "") + Logic.saveHighScore(nameInputText.text); + } + Text { + id: dialogText + anchors { left: nameInputDialog.left; leftMargin: 20; verticalCenter: parent.verticalCenter } + text: "You won! Please enter your name: " + } + MouseArea { + anchors.fill: parent + onClicked: { + if (nameInputText.text == "") + nameInputText.openSoftwareInputPanel(); + else + nameInputDialog.forceClose(); + } + } + + TextInput { + id: nameInputText + anchors { verticalCenter: parent.verticalCenter; left: dialogText.right } + focus: visible + autoScroll: false + maximumLength: 24 + onTextChanged: { + var newWidth = nameInputText.width + dialogText.width + 40; + if ( (newWidth > nameInputDialog.width && newWidth < screen.width) + || (nameInputDialog.width > nameInputDialog.initialWidth) ) + nameInputDialog.width = newWidth; + } + onAccepted: { + nameInputDialog.forceClose(); + } + } + } + + Rectangle { + id: toolBar + width: parent.width; height: 58 + color: activePalette.window + anchors.bottom: screen.bottom + + Button { + id: newGameButton + anchors { left: parent.left; leftMargin: 3; verticalCenter: parent.verticalCenter } + text: "New Game" + onClicked: Logic.startNewGame() + } + + Button { + visible: !inAnotherDemo + text: "Quit" + anchors { left: newGameButton.right; leftMargin: 3; verticalCenter: parent.verticalCenter } + onClicked: Qt.quit(); + } + + Text { + id: score + anchors { right: parent.right; rightMargin: 3; verticalCenter: parent.verticalCenter } + text: "Score: " + gameCanvas.score + font.bold: true + font.pixelSize: 24 + color: activePalette.windowText + } + } +} diff --git a/examples/declarative/demos/samegame/qml/samegame.qmlproject b/examples/declarative/demos/samegame/qml/samegame.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/demos/samegame/qml/samegame.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/demos/samegame/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/demos/samegame/samegame.desktop b/examples/declarative/demos/samegame/samegame.desktop new file mode 100644 index 0000000..e9e79c6 --- /dev/null +++ b/examples/declarative/demos/samegame/samegame.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=samegame +Exec=/opt/usr/bin/samegame +Icon=samegame +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/demos/samegame/samegame.png b/examples/declarative/demos/samegame/samegame.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/demos/twitter/main.cpp b/examples/declarative/demos/twitter/main.cpp new file mode 100644 index 0000000..b3b58df --- /dev/null +++ b/examples/declarative/demos/twitter/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockPortrait); + viewer.setMainQmlFile(QLatin1String("qml/qml/twitter.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/Button.qml b/examples/declarative/demos/twitter/qml/TwitterCore/Button.qml new file mode 100644 index 0000000..a1fc2a2 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/Button.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + + signal clicked + + property string text + property bool keyUsing: false + + BorderImage { + id: buttonImage + source: "images/toolbutton.sci" + width: container.width; height: container.height + } + BorderImage { + id: pressed + opacity: 0 + source: "images/toolbutton.sci" + width: container.width; height: container.height + } + MouseArea { + id: mouseRegion + anchors.fill: buttonImage + onClicked: { container.clicked(); } + } + Text { + id: btnText + color: if(container.keyUsing){"#D0D0D0";} else {"#FFFFFF";} + anchors.centerIn: buttonImage; font.bold: true + text: container.text; style: Text.Raised; styleColor: "black" + font.pixelSize: 12 + } + states: [ + State { + name: "Pressed" + when: mouseRegion.pressed == true + PropertyChanges { target: pressed; opacity: 1 } + }, + State { + name: "Focused" + when: container.activeFocus == true + PropertyChanges { target: btnText; color: "#FFFFFF" } + } + ] + transitions: Transition { + ColorAnimation { target: btnText; } + } +} diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/FatDelegate.qml b/examples/declarative/demos/twitter/qml/TwitterCore/FatDelegate.qml new file mode 100644 index 0000000..896abbe --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/FatDelegate.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Component { + id: listDelegate + Item { + id: wrapper; width: wrapper.ListView.view.width; height: if(txt.height > 60){txt.height+10}else{60} //50+5+5 + function handleLink(link){ + if(link.slice(0,3) == 'app'){ + screen.setUser(link.slice(7)); + }else if(link.slice(0,4) == 'http'){ + Qt.openUrlExternally(link); + } + } + function addTags(str){ + var ret = str.replace(/@[a-zA-Z0-9_]+/g, '
$&');//click to jump to user? + var ret2 = ret.replace(/http:\/\/[^ \n\t]+/g, '$&');//surrounds http links with html link tags + return ret2; + } + + // Strip away paranthesis + function userName(str) { + var user = str.replace(/\([\S|\s]*\)/gi, ""); + return user.trim(); + } + + Item { + id: moveMe; height: parent.height + Rectangle { + id: blackRect + color: "black"; opacity: wrapper.ListView.index % 2 ? 0.2 : 0.3; height: wrapper.height-2; width: wrapper.width; y: 1 + } + Item { + id: image; x: 6; width: 48; height: 48; smooth: true + anchors.verticalCenter: parent.verticalCenter + + Loading { x: 1; y: 1; width: 48; height: 48; visible: realImage.status != Image.Ready } + Image { + id: realImage; + source: userImage; x: 1; y: 1; + width:48; height:48; opacity:0 ; + onStatusChanged: { + if(status==Image.Ready) + image.state="loaded" + } + } + states: State { + name: "loaded"; + PropertyChanges { target: realImage ; opacity:1 } + } + transitions: Transition { NumberAnimation { target: realImage; property: "opacity"; duration: 200 } } + + } + Text { id:txt; y:4; x: 56 + text: '' + + ''+userName(name) + " from " +source + + "
" + statusText + ""; + textFormat: Qt.RichText + color: "#cccccc"; style: Text.Raised; styleColor: "black"; wrapMode: Text.WordWrap + anchors.left: image.right; anchors.right: blackRect.right; anchors.leftMargin: 6; anchors.rightMargin: 6 + onLinkActivated: wrapper.handleLink(link) + } + } + } +} diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/Input.qml b/examples/declarative/demos/twitter/qml/TwitterCore/Input.qml new file mode 100644 index 0000000..b15f0d5 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/Input.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE: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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +FocusScope { + id:container + width: 220 + height: 28 + BorderImage { source: "images/lineedit.sci"; anchors.fill: parent } + signal accepted + property alias text: input.text + property alias item:input + TextInput{ + id: input + width: parent.width - 12 + anchors.centerIn: parent + maximumLength:21 + font.pixelSize: 16; + font.bold: true + color: "#151515"; selectionColor: "mediumseagreen" + focus: true + onAccepted:{container.accepted()} + text: "" + selectByMouse: true + } +} diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/Loading.qml b/examples/declarative/demos/twitter/qml/TwitterCore/Loading.qml new file mode 100644 index 0000000..afeafa0 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/Loading.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + id: loading; source: "images/loading.png" + NumberAnimation on rotation { + from: 0; to: 360; running: loading.visible == true; loops: Animation.Infinite; duration: 900 + } +} diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/MultiTitleBar.qml b/examples/declarative/demos/twitter/qml/TwitterCore/MultiTitleBar.qml new file mode 100644 index 0000000..bc8e0de --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/MultiTitleBar.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + TitleBar { id: titleBar; width: parent.width; height: 60; + y: -80 + untaggedString: "Latest tweets from everyone" + taggedString: "Latest tweets from " + } + states: [ + State { + name: "search"; when: screen.state!="search" + PropertyChanges { target: titleBar; y: 0 } + } + ] + transitions: [ + Transition { NumberAnimation { properties: "x,y"; duration: 500; easing.type: Easing.InOutQuad } } + ] +} + diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/RssModel.qml b/examples/declarative/demos/twitter/qml/TwitterCore/RssModel.qml new file mode 100644 index 0000000..276df62 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/RssModel.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { id: wrapper + property variant model: xmlModel + property string from : "" + property string to : "" + property string phrase : "" + + property string mode : "everyone" + property int status: xmlModel.status + function reload() { xmlModel.reload(); } + XmlListModel { + id: xmlModel + + source: (from=="" && to=="" && phrase=="") ? "" : + 'http://search.twitter.com/search.atom?from='+from+"&to="+to+"&phrase="+phrase + + namespaceDeclarations: "declare default element namespace 'http://www.w3.org/2005/Atom'; " + + "declare namespace twitter=\"http://api.twitter.com/\";"; + + query: "/feed/entry" + + XmlRole { name: "statusText"; query: "content/string()" } + XmlRole { name: "timestamp"; query: "published/string()" } + XmlRole { name: "source"; query: "twitter:source/string()" } + XmlRole { name: "name"; query: "author/name/string()" } + XmlRole { name: "userImage"; query: "link[@rel = 'image']/@href/string()" } + + } + Binding { + property: "mode" + target: wrapper + value: {if(wrapper.tags==''){"everyone";}else if(wrapper.tags=='my timeline'){"self";}else{"user";}} + } +} diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/SearchView.qml b/examples/declarative/demos/twitter/qml/TwitterCore/SearchView.qml new file mode 100644 index 0000000..effab30 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/SearchView.qml @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +FocusScope { + id: wrapper + Column { + anchors.centerIn: parent + spacing: 20 + Column{ + spacing: 4 + Text { + text: "Posted by:" + font.pixelSize: 16; font.bold: true; color: "white"; style: Text.Raised; styleColor: "black" + horizontalAlignment: Qt.AlignRight + } + Input{ + id: fromIn + KeyNavigation.backtab: searchbutton + KeyNavigation.tab:toIn + onAccepted:searchbutton.doSearch(); + focus: true + } + Text { + text: "In reply to:" + font.pixelSize: 16; font.bold: true; color: "white"; style: Text.Raised; styleColor: "black" + horizontalAlignment: Qt.AlignRight + } + Input{ + id: toIn + KeyNavigation.backtab: fromIn + KeyNavigation.tab:phraseIn + onAccepted:searchbutton.doSearch(); + } + Text { + text: "Search phrase:" + font.pixelSize: 16; font.bold: true; color: "white"; style: Text.Raised; styleColor: "black" + horizontalAlignment: Qt.AlignRight + } + Input{ + id: phraseIn + KeyNavigation.backtab: toIn + KeyNavigation.tab:searchbutton + onAccepted:searchbutton.doSearch(); + text: "Qt Quick" + } + } + Button { + width: 100 + height: 32 + id: searchbutton + keyUsing: true; + opacity: 1 + text: "Search" + KeyNavigation.tab: fromIn + Keys.onReturnPressed: searchbutton.doSearch(); + Keys.onEnterPressed: searchbutton.doSearch(); + Keys.onSelectPressed: searchbutton.doSearch(); + Keys.onSpacePressed: searchbutton.doSearch(); + onClicked: searchbutton.doSearch(); + + function doSearch() { + // Search ! allowed + if (wrapper.state=="invalidinput") + return; + + rssModel.from=fromIn.text; + rssModel.to= toIn.text; + rssModel.phrase = phraseIn.text; + screen.focus = true; + screen.state = "" + } + } + } + states: + State { + name: "invalidinput" + when: fromIn.text=="" && toIn.text=="" && phraseIn.text=="" + PropertyChanges { target: searchbutton ; opacity: 0.6 ; } + } + transitions: + Transition { + NumberAnimation { target: searchbutton; property: "opacity"; duration: 200 } + } +} diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/TitleBar.qml b/examples/declarative/demos/twitter/qml/TwitterCore/TitleBar.qml new file mode 100644 index 0000000..19da491 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/TitleBar.qml @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: titleBar + property string untaggedString: "Uploads from everyone" + property string taggedString: "Recent uploads tagged " + + BorderImage { source: "images/titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 } + + Item { + id: container + width: (parent.width * 2) - 55 ; height: parent.height + + function accept() { + titleBar.state = "" + background.state = "" + rssModel.tags = editor.text + } + + Item { + id:imageBox + x: 6; width: 0; height: 50; smooth: true + anchors.verticalCenter: parent.verticalCenter + + UserModel { user: rssModel.from; id: userModel } + Component { + id: imgDelegate; + Item { + id:imageitem + visible:true + Loading { width:48; height:48; visible: realImage.status != Image.Ready } + Image { id: realImage; source: image; width:48; height:48; opacity:0; } + states: + State { + name: "loaded" + when: (realImage.status == Image.Ready) + PropertyChanges { target: realImage; opacity:1 } + } + transitions: Transition { + NumberAnimation { target: realImage; property: "opacity"; duration: 200 } + } + } + } + ListView { id:view; model: userModel.model; x:1; y:1; delegate: imgDelegate } + states: + State { + when: !userModel.user=="" + PropertyChanges { target: imageBox; width: 50; } + } + transitions: + Transition { + NumberAnimation { target: imageBox; property: "width"; duration: 200 } + } + } + + Image { + id: quitButton + x: 5 + anchors.verticalCenter: parent.verticalCenter + source: "images/quit.png" + MouseArea { + anchors.fill: parent + onClicked: Qt.quit() + } + } + + Text { + id: categoryText + anchors { + left: quitButton.right; right: parent.right; leftMargin: 10; rightMargin: 10 + verticalCenter: parent.verticalCenter + } + elide: Text.ElideLeft + text: (rssModel.from=="" ? untaggedString : taggedString + rssModel.from) + font.bold: true; color: "White"; style: Text.Raised; styleColor: "Black" + font.pixelSize: 12 + } + } + + states: State { + name: "Tags" + PropertyChanges { target: container; x: -tagButton.x + 5 } + PropertyChanges { target: editor; focus: true } + } + + transitions: Transition { + NumberAnimation { properties: "x"; easing.type: Easing.InOutQuad } + } +} diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/ToolBar.qml b/examples/declarative/demos/twitter/qml/TwitterCore/ToolBar.qml new file mode 100644 index 0000000..4ef92ff --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/ToolBar.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE: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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: toolbar + + property alias button1Label: button1.text + property alias button2Label: button2.text + signal button1Clicked + signal button2Clicked + focus:true + BorderImage { source: "images/titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 } + Button { + id: button1 + anchors.left: parent.left; anchors.leftMargin: 5; y: 3; width: 140; height: 32 + onClicked: toolbar.button1Clicked() + focus:true + } + Button { + id: button2 + anchors.right: parent.right; anchors.rightMargin: 5; y: 3; width: 140; height: 32 + onClicked: toolbar.button2Clicked() + } +} diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/UserModel.qml b/examples/declarative/demos/twitter/qml/TwitterCore/UserModel.qml new file mode 100644 index 0000000..013b827 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/UserModel.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE: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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +//This "model" gets the user information about the searched user. Mainly for the icon. + +Item { id: wrapper + property variant model: xmlModel + property string user : "" + property int status: xmlModel.status + function reload() { xmlModel.reload(); } + XmlListModel { + id: xmlModel + + source: user!= "" ? "http://twitter.com/users/show.xml?screen_name="+user : "" + query: "/user" + + XmlRole { name: "name"; query: "name/string()" } + XmlRole { name: "screenName"; query: "screen_name/string()" } + XmlRole { name: "image"; query: "profile_image_url/string()" } + XmlRole { name: "location"; query: "location/string()" } + XmlRole { name: "description"; query: "description/string()" } + XmlRole { name: "followers"; query: "followers_count/string()" } + //TODO: Could also get the user's color scheme, timezone and a few other things + } +} diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/images/gloss.png b/examples/declarative/demos/twitter/qml/TwitterCore/images/gloss.png new file mode 100644 index 0000000000000000000000000000000000000000..5d370cd93d62ed8c17f43a5d5dc7ed20b4edb5a1 GIT binary patch literal 1236 zcmV;_1S|WAP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXV} z1RN8~lD~8S00dM?L_t(|+U;D~QX4T4Y^|4I%x&WY2)X$GFUv=G^5Ah$39VMg=va`d zC|s_Uy=qPO^vntr5k28JNc(~Dd+K$Gc~DBB#W4cV?@SptZ+lM}i&GQx%xh!kfrzL@ z07n4B%%VsG*ail9fPugbdiNd?H5ZBF1TYj4iBs382}&wQ#5p&F7|Gfo>XGL|IoG0; z1uP$``hsYsb4?IO?WU#{5*!)YwFid`gn;j)_=(b`K|DnsEHq1Al=0ai^Fno!0I1TD zXlC0`VV|R1%Dh+^C>Dukw$*P~l5(k3MGBpBMdRqutrW_s0#uy?Kf71-G085oJGaoo zl<|!K!#7DyZiqCUb=rnTi_b!b8Qm%w!H}l2En!IPddta1%qyCjC*kj;!SFHHF?3GW zL|b{5>hDw}RZ}xI1#a3q5JTx~mS;*x?^2TuGH7rRus(DiJprT05-z9S#kRxXXkY}@ z&n}Zpjt)twNR()YDS=J1+MF?hs>pD|Su2f%dCvOTWs+&4?v2%voC{6W(y02`q-~C7 zW{#vG-qwowKGUiIvWB!)<}EVMv?@N)vZP8Q$EN+qz-5wa>DC-|LUb!u?|hsE*~+t0 zyB-_CQ;W(m&nZ_^**5gyO=*jf(hd`Q);t3E3t;a7VvVLiEam3fVIs1lh)6MbKLMN@ z7aWXka_Vsl{j(+K&D~Sz_j$cmTIq2C;5UG+<--xN&>Ux7a)BQ;PZ_n_DGGmSQJ8Dj zOCJ~#2T@J*`PU5K1MJ5zN>C?PLA+aN1{K@v;OA{xR=#Ht zuN`fxTA4Rjato*Jj2>G}LSB}Ju z2c1zmS|sO*pSxlZN7lq=O%ro0Dkg%(bUEAUKTQ*F8N|DpNNk1T-XIn^f672!vf18p z-P{6IlfW-}0-8ZQXQRDmKvf|y#QkKIGx(Y=UITb!eOwjltkg5fnSfk#BtCE%I5b)Z z%b4U$Kn`rScbYcVY=YLwwgS<3#+iE0nR;lges1$`G3~V8@z14&)>SH$=E1Yj`iiwt zr*#$kvMBH@wBB;I-Z-k5Y#r}Kf@kS5UIX~X+IUu|(!k=uGeBHx2K-#uT<2*?HAv|% zoLn9mP=ySAzYhnVCBZx}h-N8Ruamqm5cL+>r4*e%1$ah_Y>Q*Z`{Ki!-g?-{3-p=OCn(Gdpz3e-k%^A>ICwUPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXW1 z1sp18KZTY6000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000EyNkl^_M)OMqYwHdLJ>s}eN&%{;FDDU1^oxa z7nPzff|n{76#7tuptM>qwY6%kY0}0t>Ez5g`}=&DOiXMwNlBU%`@!bG%sywZNPmU@yB5~XvhKv!26k>*eX&bbw5aXw&G#TbLC zA|i}k8f7#)N6$bH1z+HgV`usG{a=Q?E!s!7KC!vxy=C(31Wd&|ecvMJ3*;m7aD5HC*jIC@bW7P5Ig-Q0^y^q_fw-J0m zj6kelw5houE82_#qG*u0YpWrOL||gWgF7E!_uyWV$r+*^k1tf(Nzyug%&@zEC#Vp+ z-0V1`zZa3St15$kvK(nl2r0Q-Ol?bzPe1yE_Wn-16qKwXbQZd~X=oG9`UMY4vl+b0 zEnCN`x?~q=^<8j}D4GBshPtXa^+Ya*&qxsw>eJKYeXeO|nvjp$2uVtm%P$GQ)!16A z-IodyiE^a&f9@ zg^NzDgk`h4nq^mljWq?lp1@rd!^XPn3-G$v@IS#B>(;l1*FD3=7z6=p7QBqiqj*h# z&EKk9S5?Jwoz)G%Hvs=H0AE)=yzUq_#^Q+=c-?wn*BH}0|MpiYT>j7{ndOr+G4IzOEFes*|GuptD@Dn(UGS#&L;j-B|1 zsH2&U*y-tMthY=|O)&E12&puhdPbUwrL2)l&@_WansDUHBbW#pjRtn=iwR<%r@Xbo z>xbXq$gvR+AQ*y%t9FW(r2eak2q6SQ2y>BZ>oaQ{Si`}O4l?}XFokNK^g@Dj-o4ke zx%6ClbA{3AKREpPVMralr3&30T?m4~tjYp3#x%Xv+RLJ=pMU$6*WP`Vw?2HE(vDvG zH&!`)=oDr{dBY=Z1JVB4{)cKwd%}h9#u+~`PH(A~qAgOS0~=d(nRpiqz_Tp7ET(F) ztO{e7&NJ@D=)I{#d25;Rqi31?qW*%Z4h)(!4G(v0E53Nwle=ndLj^P#M$e4Wn3_Q* zQyOG=?^iU63Yz`vea1jnUk`=u9Qi_#^Iu=!_@Se(6#5Gc0r98Q=HtI=(yw9^-MaUwHRW)2O7;H&o=HewTo|>XD7CtH6S$fJB{J3#O{sI^e VqK)QbrHcRn002ovPDHLkV1mrKo*@7L literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/images/lineedit.sci b/examples/declarative/demos/twitter/qml/TwitterCore/images/lineedit.sci new file mode 100644 index 0000000..054bff7 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/images/lineedit.sci @@ -0,0 +1,5 @@ +border.left: 10 +border.top: 10 +border.bottom: 10 +border.right: 10 +source: lineedit.png diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/images/loading.png b/examples/declarative/demos/twitter/qml/TwitterCore/images/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1589c5d42b913859b4e2e061455cb60689d56 GIT binary patch literal 813 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/images/stripes.png b/examples/declarative/demos/twitter/qml/TwitterCore/images/stripes.png new file mode 100644 index 0000000000000000000000000000000000000000..9f36727ea424cd0da94bd5a7cee4082447275eeb GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgga4pBxq@gGdLS%5-~o-U3d5|`(m z-N<{$K*aT;^vADLPxXoJET5>DG2xP-Q1*siVN6aag0$kQzm$|0%E+I; z#Y!4I)=g1)z4*}Q$iB}`v_QR literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/images/titlebar.png b/examples/declarative/demos/twitter/qml/TwitterCore/images/titlebar.png new file mode 100644 index 0000000000000000000000000000000000000000..51c90082d052a94af34488ca9a13842122f7d7a4 GIT binary patch literal 1436 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 M07*qoM6N<$g3{N*E&u=k literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/images/toolbutton.sci b/examples/declarative/demos/twitter/qml/TwitterCore/images/toolbutton.sci new file mode 100644 index 0000000..9e4f965 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/images/toolbutton.sci @@ -0,0 +1,5 @@ +border.left: 15 +border.top: 4 +border.bottom: 4 +border.right: 15 +source: toolbutton.png diff --git a/examples/declarative/demos/twitter/qml/TwitterCore/qmldir b/examples/declarative/demos/twitter/qml/TwitterCore/qmldir new file mode 100644 index 0000000..84d85c2 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/TwitterCore/qmldir @@ -0,0 +1,10 @@ +SearchView 1.0 SearchView.qml +Button 1.0 Button.qml +Input 1.0 Input.qml +FatDelegate 1.0 FatDelegate.qml +Loading 1.0 Loading.qml +MultiTitleBar 1.0 MultiTitleBar.qml +TitleBar 1.0 TitleBar.qml +RssModel 1.0 RssModel.qml +UserModel 1.0 UserModel.qml +ToolBar 1.0 ToolBar.qml diff --git a/examples/declarative/demos/twitter/qml/twitter.qml b/examples/declarative/demos/twitter/qml/twitter.qml new file mode 100644 index 0000000..74bab37 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/twitter.qml @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "TwitterCore" 1.0 as Twitter + +Item { + id: screen; width: 320; height: 480 + property bool userView : false + property variant tmpStr + function setUser(str){hack.running = true; tmpStr = str} + function reallySetUser(){rssModel.from = tmpStr;rssModel.to = ""; rssModel.phrase = ""} + state:"searchquery" + //Workaround for bug 260266 + Timer{ interval: 1; running: false; repeat: false; onTriggered: screen.reallySetUser(); id:hack } + Keys.onEscapePressed: screen.state="searchquery" + Keys.onBacktabPressed: screen.state="searchquery" + Rectangle { + id: background + anchors.fill: parent; color: "#343434"; + + state:"searchquery" + Image { source: "TwitterCore/images/stripes.png"; fillMode: Image.Tile; anchors.fill: parent; opacity: 0.3 } + + MouseArea { + anchors.fill: parent + onClicked: screen.focus = false; + } + + Twitter.RssModel { id: rssModel } + Twitter.Loading { anchors.centerIn: parent; visible: rssModel.status==XmlListModel.Loading && state!='unauthed'} + Text { + width: 180 + text: "Could not access twitter using this screen name and password pair."; + color: "#cccccc"; style: Text.Raised; styleColor: "black"; wrapMode: Text.WordWrap + visible: rssModel.status==XmlListModel.Error; anchors.centerIn: parent + } + + Item { + id: views + x: 2; width: parent.width - 4 + y:60 //Below the title bars + height: parent.height - 100 + + Text { + id:title + text: "Search Twitter" + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: 20; font.bold: true; color: "#bbb"; style: Text.Raised; styleColor: "black" + opacity:0 + } + + Twitter.SearchView{ + id: searchView + anchors.verticalCenter: parent.verticalCenter + width: parent.width; height: parent.height-60; + x: -(screen.width * 1.5) + } + + Twitter.FatDelegate { id: fatDelegate } + ListView { + id: mainView; model: rssModel.model; delegate: fatDelegate; + width: parent.width; height: parent.height; x: 0; cacheBuffer: 100; + } + } + + Twitter.MultiTitleBar { id: titleBar; width: parent.width } + Twitter.ToolBar { id: toolBar; height: 40; + //anchors.bottom: parent.bottom; + //TODO: Use anchor changes instead of hard coding + y: screen.height - 40 + width: parent.width; opacity: 0.9 + button1Label: "New Search" + button2Label: "Update" + onButton1Clicked: + { + screen.state="searchquery" + } + onButton2Clicked: rssModel.reload(); + } + } + states: [ + State { + name: "searchquery"; + PropertyChanges { target: searchView; x: 0; focus:true} + PropertyChanges { target: mainView; x: -(parent.width * 1.5) } + PropertyChanges { target: titleBar; y: -80 } + PropertyChanges { target: toolBar; y: screen.height } + PropertyChanges { target: toolBar } + PropertyChanges { target: title; opacity:1} + } + ] + transitions: [ + Transition { NumberAnimation { properties: "x,y,opacity"; duration: 500; easing.type: Easing.InOutQuad } } + ] +} diff --git a/examples/declarative/demos/twitter/qml/twitter.qmlproject b/examples/declarative/demos/twitter/qml/twitter.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/demos/twitter/qml/twitter.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/demos/twitter/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/demos/twitter/twitter.desktop b/examples/declarative/demos/twitter/twitter.desktop new file mode 100644 index 0000000..afe52c5 --- /dev/null +++ b/examples/declarative/demos/twitter/twitter.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=twitter +Exec=/opt/usr/bin/twitter +Icon=twitter +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/demos/twitter/twitter.png b/examples/declarative/demos/twitter/twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 zcmV-O4Y%@%P)ht(u000b3 zNkl+r+m%F_C;*wliAId+l;Bw~NnREVgX6DSfv+(~Ms$%J>UH~1TiKG?i==6q;ABhC^ z?Fa;PP1zvRpk{yshy{xNzW=_}wlshM$8bMz0ywE)|E?{*$bARG!R}74&+E~=fBGSCH_q~3rZLE`kFZF`Zg5p_(F9S`V+!f^EBN1AfbVO>l zV*?2wmM7*K$N;DTgsUiqL8d@0kV=|_n&`jpzizedO9)tWdFTh8K`^#$^77P!9khgW zY!Rx>mStcADTf#t1$7O$0t|o*0XKn3gatG^hba2{-neB1+ztE?*sLjd^k^HO+7rUI z#U<*@0G0o{w7eb^h!lqynFTclTrU#CporX1FqyNMH+0Ern&N9m&#V&xj_U(F2mB2J zt<46%_t{NEnvD|IFZF~~d&Uw1T_g&S##v*=ONjw)029C*A{l`GV{0SE$m`(;jw}{N znskEx<>q}Q<12YZEl*LE3Ih306gaq~kqj^oOalLlQhy0dt;u@8$p7^Lt&4>oL!oPx z#8s8=%aut5!dB!t3TKe~K&L~H1lMXjK+#OKRHI5GD|IzkUH?i3OO@}-LaMj9G8lz# z%l5CTmMR6d2)5Xi&TXYMH@9`QFE#2K3&XXz*HoZoHYmE}} z2gzCqV(C$)Qa4CsW6qOGtI%%!WV`fQi$l5ySZr*mjmtm*mMy$LnBc~UpU3Zbir>EL z5q7k1!|(B;ltK`4R+^dg2p6W_d^>jD_u(zaPCr^^8@hrk3G%j4n9z3e5I$h zHt*%PdcQ(f^FBoE0!itt&AS&D@SD9H-ToBEcllZB+s zk=+N-HEn5kb?LNr0_tj96^ef~kie^2ICbnKhHki|lDRofU;aApOn#Gh#$V=lzx5aV z$Jx^^nO%`X>~HULygE0g(X z`b{py-oel{4)1Lt5=ryItKVXDcD&f3()r}32l444EK3-kNE2=Dpl9>WCG-onSlD9c zr%N?M8yN>I$G3v%iKcWshT`^}P5k(+E4)4M9*-UV z&4O$+)XU|82r~)zlcQfDWVF&5ZZFgaJuU2x93q*UBV#3rrAM(ON9|alVFXl)&YX@% zrn2~rAcuB*qU@=(8D~0mGavLg@|)W{pqZSz_G=dbK~FOQb~8TtAx|87jOIX-tF6w^ zE}q=qk0lm!nQ>k||12}9;gZF6-KIckC(i%2z(g#|rlvN!+qYIAV1cALUyv7|DWDVZ zX$(wW$FeP#{K4*hcr=|#P$&$|hffa@Fv3e>f?B$+m4Id1%9%neo+H}QK_nQiKtO_= zl`f2u2zU)e(5EpuKSS2cx#Vx(wu^As=Cu#baASJJRhKn0OvcBFC8vpJ=CQ?My|Bz# zz=^_Co`6)^qH{|deviLQGGit4^Rx(EQ~10ZbLj+GD@TChb9=j@^z6)V>N`*Kk5B$J ze{}qdg}TxBWxn^(KOkbGYZ?h_s*YG=wFFc=3zU$c6s9F)Od%3%#;D-BreyPxTM?QD z9z!FUO_9xIol|}uej|j>6Ch{jux$5pqD;~k-A=y!k1x!=$7+wtBz2KR47Sqly&wN$2gymjWt&D)GPzc~L zAmG!PO3acmvt?3VJ(xek7m2e4a;8m_*N@k56OcCJydSwcE%(-LUHTXJ-cXJh2-bmfHU`sYDbPJpf{I$AtTF3d1C zH&IsaGnxn(&H4YF1v8Tqk{O%MaC?~t#L~l6(YG zroAqg9-GOc<1ITrCv$U*#4lBy$A<1jDGgg}EZeNG>nIwv2-NKXBF;O*?VUc}xNw${ z*m#*_PwU-;JgtCDCMW!QFwTLkdpNTDPM6%s!bPT2Hw$NqtmQsLwFSE9^d4klv>kuu zZd!fa1c|QgD-B(7M^6)jQ&;)P2R|#5j5hUhWb30~dpLW3j%=!huYUfIUD+N> zOg@-AL&i!H^y~OMFf=vnYA0y4aPszNc=n-}`150b%a-Pyg-mjzVN^c`m%|q5>GIPZ z)p_a6zw_{cV|2Afi)<>LquYK5zrCH-%oUz{_%43qwmV&I49%Y7;>=qpG@632BkJd8 z7tS&=JI>a~=7L-}5GEW5uWK#(MxIsFk7E1)e|s&!n>Mz1-0J+_UopfA-KH za&OO}CBYF)r*3lQ+IL8s3xE?@_8p8cZ(Za0(=T#kW(3nRvBe^5rI<=y=iJzj8B1J2 z)xTk_2vt0wIwK;&mJTnEe7cPvy!#3vUx24S_hs6eA~m`ZMiwsd)1j9bUbs-$5k#P~ z)x#6V+ZdaEotMsDX783=1ie1uxfx>V5#reyZ0s7Z)YeMCilGpJ-Ccf~Lpndd_+765 z+a;d7>m;AnImz;OWWy}P>n)oTRnX!^lEY3ZF{6#Dc zP3eWtdbxc=2v{URq3CS&v1OCaF9zOYVEn2}rp4FECpsQLQ$~gR152@@J>5iMHTEp9 zmbgOTwypq)+ybwkf6Hx_(&+2{0*~+cD~@)35x?GCF?F^=+yrLVZhq-;c$IqD0$m+m zc5U(T@;g7`=FF(8-fuK>pz}eFZ2dewBe?pGiugIGL}Lk9BRn3({hx|39KXWzKl+!7 zC&mJ5-bPt0t45OC0A2y;?_2xbL3dhw4R4!7U~7k$#~*0t+{M#;_4_fNIQ%GkqPqzC z{Fru@iNqkLopCayuA3jF3DBx@F$?M&px$p>POu^EIL3&;mUb_j@9_{%y~nH9KjiJH zFn*68OEP4v6sDamNuAY`{8WHU0^b1jB8W8VcDg$bSTz|%BSf72I~;Uwcw}XkOeQa- zN>|#7#+$$bFbQ%K=Z5G-Q2zs*1I$KV%`Xz*a{tmd#PwW{T{?%<;++x}lOt6OjpN+* zyh-s&?Bdn?QBX0Q%hnAW@#+Lr-J9yYq*QhOS|x@K=8e3ZH*^eS1|bPb`j36QKfG8Z zAP&3?+zy0mKT_2r@`lPZFbrxaZ{(t(qreQ11hK(Sf8VPgtFe^{`1WNu)oTGS0vV9M z1KO%TqAZ*rM@-}VIAYK-Qmz0)j`740Nr19ZN&5TVzSVZtAOOgdU;^L7B5vsF1ravm zc*acLs3D53I|MQUY8q4m3!7f(?^>Tb{p$($g#A)4e1B9s{@lL%?>o@kZ5V1WZ~Qcn zz|bu+Ir<-X<5ugvfemb60~^@D1~#yPwc`H(pHeSaefwW^{L9a%BKPWN%_+ eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/demos/webbrowser/main.cpp b/examples/declarative/demos/webbrowser/main.cpp new file mode 100644 index 0000000..cd08611 --- /dev/null +++ b/examples/declarative/demos/webbrowser/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockPortrait); + viewer.setMainQmlFile(QLatin1String("qml/qml/webbrowser.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/demos/webbrowser/qml/content/Button.qml b/examples/declarative/demos/webbrowser/qml/content/Button.qml new file mode 100644 index 0000000..2da1c11 --- /dev/null +++ b/examples/declarative/demos/webbrowser/qml/content/Button.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE: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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + property alias image: icon.source + property variant action + + signal clicked + + width: 40; height: parent.height + + Image { + id: icon; anchors.centerIn: parent + opacity: if (action != undefined) { action.enabled ? 1.0 : 0.4 } else 1 + } + + MouseArea { + anchors { fill: parent; topMargin: -10; bottomMargin: -10 } + onClicked: { + if (action != undefined) + action.trigger() + parent.clicked() + } + } +} diff --git a/examples/declarative/demos/webbrowser/qml/content/FlickableWebView.qml b/examples/declarative/demos/webbrowser/qml/content/FlickableWebView.qml new file mode 100644 index 0000000..6f4e09c --- /dev/null +++ b/examples/declarative/demos/webbrowser/qml/content/FlickableWebView.qml @@ -0,0 +1,195 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +Flickable { + property alias title: webView.title + property alias icon: webView.icon + property alias progress: webView.progress + property alias url: webView.url + property alias back: webView.back + property alias stop: webView.stop + property alias reload: webView.reload + property alias forward: webView.forward + + id: flickable + width: parent.width + contentWidth: Math.max(parent.width,webView.width) + contentHeight: Math.max(parent.height,webView.height) + anchors.top: headerSpace.bottom + anchors.bottom: parent.top + anchors.left: parent.left + anchors.right: parent.right + pressDelay: 200 + + onWidthChanged : { + // Expand (but not above 1:1) if otherwise would be smaller that available width. + if (width > webView.width*webView.contentsScale && webView.contentsScale < 1.0) + webView.contentsScale = width / webView.width * webView.contentsScale; + } + + WebView { + id: webView + transformOrigin: Item.TopLeft + + function fixUrl(url) + { + if (url == "") return url + if (url[0] == "/") return "file://"+url + if (url.indexOf(":")<0) { + if (url.indexOf(".")<0 || url.indexOf(" ")>=0) { + // Fall back to a search engine; hard-code Wikipedia + return "http://en.wikipedia.org/w/index.php?search="+url + } else { + return "http://"+url + } + } + return url + } + + url: fixUrl(webBrowser.urlString) + smooth: false // We don't want smooth scaling, since we only scale during (fast) transitions + focus: true + + onAlert: console.log(message) + + function doZoom(zoom,centerX,centerY) + { + if (centerX) { + var sc = zoom*contentsScale; + scaleAnim.to = sc; + flickVX.from = flickable.contentX + flickVX.to = Math.max(0,Math.min(centerX-flickable.width/2,webView.width*sc-flickable.width)) + finalX.value = flickVX.to + flickVY.from = flickable.contentY + flickVY.to = Math.max(0,Math.min(centerY-flickable.height/2,webView.height*sc-flickable.height)) + finalY.value = flickVY.to + quickZoom.start() + } + } + + Keys.onLeftPressed: webView.contentsScale -= 0.1 + Keys.onRightPressed: webView.contentsScale += 0.1 + + preferredWidth: flickable.width + preferredHeight: flickable.height + contentsScale: 1 + onContentsSizeChanged: { + // zoom out + contentsScale = Math.min(1,flickable.width / contentsSize.width) + } + onUrlChanged: { + // got to topleft + flickable.contentX = 0 + flickable.contentY = 0 + if (url != null) { header.editUrl = url.toString(); } + } + onDoubleClick: { + if (!heuristicZoom(clickX,clickY,2.5)) { + var zf = flickable.width / contentsSize.width + if (zf >= contentsScale) + zf = 2.0/zoomFactor // zoom in (else zooming out) + doZoom(zf,clickX*zf,clickY*zf) + } + } + + SequentialAnimation { + id: quickZoom + + PropertyAction { + target: webView + property: "renderingEnabled" + value: false + } + ParallelAnimation { + NumberAnimation { + id: scaleAnim + target: webView + property: "contentsScale" + // the to property is set before calling + easing.type: Easing.Linear + duration: 200 + } + NumberAnimation { + id: flickVX + target: flickable + property: "contentX" + easing.type: Easing.Linear + duration: 200 + from: 0 // set before calling + to: 0 // set before calling + } + NumberAnimation { + id: flickVY + target: flickable + property: "contentY" + easing.type: Easing.Linear + duration: 200 + from: 0 // set before calling + to: 0 // set before calling + } + } + // Have to set the contentXY, since the above 2 + // size changes may have started a correction if + // contentsScale < 1.0. + PropertyAction { + id: finalX + target: flickable + property: "contentX" + value: 0 // set before calling + } + PropertyAction { + id: finalY + target: flickable + property: "contentY" + value: 0 // set before calling + } + PropertyAction { + target: webView + property: "renderingEnabled" + value: true + } + } + onZoomTo: doZoom(zoom,centerX,centerY) + } +} diff --git a/examples/declarative/demos/webbrowser/qml/content/Header.qml b/examples/declarative/demos/webbrowser/qml/content/Header.qml new file mode 100644 index 0000000..88e3000 --- /dev/null +++ b/examples/declarative/demos/webbrowser/qml/content/Header.qml @@ -0,0 +1,150 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + id: header + + property alias editUrl: urlInput.url + property bool urlChanged: false + + source: "pics/titlebar-bg.png"; fillMode: Image.TileHorizontally + + x: webView.contentX < 0 ? -webView.contentX : webView.contentX > webView.contentWidth-webView.width + ? -webView.contentX+webView.contentWidth-webView.width : 0 + y: { + if (webView.progress < 1.0) + return 0; + else { + webView.contentY < 0 ? -webView.contentY : webView.contentY > height ? -height : -webView.contentY + } + } + Column { + width: parent.width + + Item { + width: parent.width; height: 20 + Text { + anchors.centerIn: parent + text: webView.title; font.pixelSize: 14; font.bold: true + color: "white"; styleColor: "black"; style: Text.Sunken + } + } + + Item { + width: parent.width; height: 40 + + Button { + id: backButton + action: webView.back; image: "pics/go-previous-view.png" + anchors { left: parent.left; bottom: parent.bottom } + } + + Button { + id: nextButton + anchors.left: backButton.right + action: webView.forward; image: "pics/go-next-view.png" + } + + UrlInput { + id: urlInput + anchors { left: nextButton.right; right: reloadButton.left } + image: "pics/display.png" + onUrlEntered: { + webBrowser.urlString = url + webBrowser.focus = true + header.urlChanged = false + } + onUrlChanged: header.urlChanged = true + } + + Button { + id: reloadButton + anchors { right: quitButton.left; rightMargin: 10 } + action: webView.reload; image: "pics/view-refresh.png" + visible: webView.progress == 1.0 && !header.urlChanged + } + Text { + id: quitButton + color: "white" + style: Text.Sunken + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: parent.bottom + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + font.pixelSize: 18 + width: 60 + text: "Quit" + MouseArea { + anchors.fill: parent + onClicked: Qt.quit() + } + Rectangle { + width: 1 + y: 5 + height: parent.height-10 + anchors.right: parent.left + color: "darkgray" + } + } + + Button { + id: stopButton + anchors { right: quitButton.left; rightMargin: 10 } + action: webView.stop; image: "pics/edit-delete.png" + visible: webView.progress < 1.0 && !header.urlChanged + } + + Button { + id: goButton + anchors { right: parent.right; rightMargin: 4 } + onClicked: { + webBrowser.urlString = urlInput.url + webBrowser.focus = true + header.urlChanged = false + } + image: "pics/go-jump-locationbar.png"; visible: header.urlChanged + } + } + } +} diff --git a/examples/declarative/demos/webbrowser/qml/content/ScrollBar.qml b/examples/declarative/demos/webbrowser/qml/content/ScrollBar.qml new file mode 100644 index 0000000..19309fa --- /dev/null +++ b/examples/declarative/demos/webbrowser/qml/content/ScrollBar.qml @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + + property variant scrollArea + property variant orientation: Qt.Vertical + + opacity: 0 + + function position() + { + var ny = 0; + if (container.orientation == Qt.Vertical) + ny = scrollArea.visibleArea.yPosition * container.height; + else + ny = scrollArea.visibleArea.xPosition * container.width; + if (ny > 2) return ny; else return 2; + } + + function size() + { + var nh, ny; + + if (container.orientation == Qt.Vertical) + nh = scrollArea.visibleArea.heightRatio * container.height; + else + nh = scrollArea.visibleArea.widthRatio * container.width; + + if (container.orientation == Qt.Vertical) + ny = scrollArea.visibleArea.yPosition * container.height; + else + ny = scrollArea.visibleArea.xPosition * container.width; + + if (ny > 3) { + var t; + if (container.orientation == Qt.Vertical) + t = Math.ceil(container.height - 3 - ny); + else + t = Math.ceil(container.width - 3 - ny); + if (nh > t) return t; else return nh; + } else return nh + ny; + } + + Rectangle { anchors.fill: parent; color: "Black"; opacity: 0.5 } + + BorderImage { + source: "pics/scrollbar.png" + border { left: 1; right: 1; top: 1; bottom: 1 } + x: container.orientation == Qt.Vertical ? 2 : position() + width: container.orientation == Qt.Vertical ? container.width - 4 : size() + y: container.orientation == Qt.Vertical ? position() : 2 + height: container.orientation == Qt.Vertical ? size() : container.height - 4 + } + + states: State { + name: "visible" + when: container.orientation == Qt.Vertical ? scrollArea.movingVertically : scrollArea.movingHorizontally + PropertyChanges { target: container; opacity: 1.0 } + } + + transitions: Transition { + from: "visible"; to: "" + NumberAnimation { properties: "opacity"; duration: 600 } + } +} diff --git a/examples/declarative/demos/webbrowser/qml/content/UrlInput.qml b/examples/declarative/demos/webbrowser/qml/content/UrlInput.qml new file mode 100644 index 0000000..0468b64 --- /dev/null +++ b/examples/declarative/demos/webbrowser/qml/content/UrlInput.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + + property alias image: bg.source + property alias url: urlText.text + + signal urlEntered(string url) + signal urlChanged + + width: parent.height; height: parent.height + + BorderImage { + id: bg; rotation: 180 + x: 8; width: parent.width - 16; height: 30; + anchors.verticalCenter: parent.verticalCenter + border { left: 10; top: 10; right: 10; bottom: 10 } + } + + Rectangle { + anchors.bottom: bg.bottom + x: 18; height: 4; color: "#63b1ed" + width: (bg.width - 20) * webView.progress + opacity: webView.progress == 1.0 ? 0.0 : 1.0 + } + + TextInput { + id: urlText + horizontalAlignment: TextEdit.AlignLeft + font.pixelSize: 14; + + onTextChanged: container.urlChanged() + + Keys.onEscapePressed: { + urlText.text = webView.url + webView.focus = true + } + + Keys.onEnterPressed: { + container.urlEntered(urlText.text) + webView.focus = true + } + + Keys.onReturnPressed: { + container.urlEntered(urlText.text) + webView.focus = true + } + + anchors { + left: parent.left; right: parent.right; leftMargin: 18; rightMargin: 18 + verticalCenter: parent.verticalCenter + } + } +} diff --git a/examples/declarative/demos/webbrowser/qml/content/pics/display.png b/examples/declarative/demos/webbrowser/qml/content/pics/display.png new file mode 100644 index 0000000000000000000000000000000000000000..9507f4382e988a8269e0b2300eca93fcdd7b932c GIT binary patch literal 998 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igP= z1OzT^Awy^Y001I%MObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakAa8CUVIWOmV~41B zLjV8+I7vi7RA}Dqn!jt@NEFAv@9lUc3~SjK7B+ zDHBMV`~|tr*Tt(8*X2JjB*h(U*kH@H4Ol0QDL7ce}(d3?)!OV!F=-()c?#VT&DGWm|2!gGZm6dg+ z6pEs_a93^u%(Ps?;qYymrZ1V9f9>^p>&`zea>A<3Y+5DZFm&p3Ouwn;a(3!r6?q7RDH`*1GmE#u$`k2_BEfwTIDKLu(C@Bng5bsKx2o zSu$E{k>@#-QXl#7@bGt~6pS(FzFZ~fd272!rj$aKWyrGZ8Cz@r84iai%kqcGL5XUi+B>AAV zehuJ@I7v0h?(XhWt@WFwr6qWtH))4*r_nzf=ya39dG}5mX__KUQyd)~eay1#1%OaW zX^-DvLb%;00KW+#))yBSH|FQ((QdaPgqXBM{cM=C)^OHQmgU4hMxznZG~F=9yazCl zQl9kBxmLR4o-+b)2f%&b_usYK?H)6u)oN89?TVss*K@7)7J$!E%HxhX%K!}i2McMf UnQiA=j{pDw07*qoM6N<$f@Ckji~s-t literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/webbrowser/qml/content/pics/edit-delete.png b/examples/declarative/demos/webbrowser/qml/content/pics/edit-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..df2a147d246ef62d628d73db36b0b24af98a2ab9 GIT binary patch literal 831 zcmV-F1Hk-=P)R5;6h zl}l(-K@^6Q=FtdACA#^NDs^{Lp)6)L zgDB5eX;UdG_4H6F7*yIgXmIAu0!5NyOCtSU7G=!;6%|3j{gliox-!pOK?G(o&X({YLK$5)lC7F{VZbo703UCXA=&? zO>Nu>w#%A8Rp;5oKacEBBT*BGX+{#I_yE%2i8f!~SeeejbP6SvLH5VQ-~o6A-hwe1 z-+)oOG3-#N-p|7H3rxph%DcJ`E`ihFDtIo2X&L#)9#wa!-__Ey=>18UreVqnx(m*O z14e_~1JA$~|`2HhU^Ra!WRl)GgiU zYU$BXh#q3R4$gpm?mF#|Br$YH!gK>%1c$VCx82fBJaI+hxwpFb)g=^Dbv{zQc<7+k z9t8>W67osVx3S=)K2n#oseNr$I`ov*vgsc2h}xyrpv>h+JHeJUF8ZjWkj` zH1UE>PMpf&iLCQ!iioCJ)~Hi?YjvJaK8_pg59Au!plIt&?SDO~mzDzYD;xj-002ov JPDHLkV1h`%ho%4k literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/webbrowser/qml/content/pics/go-jump-locationbar.png b/examples/declarative/demos/webbrowser/qml/content/pics/go-jump-locationbar.png new file mode 100644 index 0000000000000000000000000000000000000000..61f779ce2bf0c468f3c2e72c8b0d6cd15576be62 GIT binary patch literal 408 zcmV;J0cZY+P)=6A zNtD}P!MXXTj0QTumrDxf^Y0b8H3quGH)kw&M%3&Z!Vt# ztp0P)=8v%5p)27NN&e7YR|;DU2J;QYTZXGJT=WqD0000S literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/webbrowser/qml/content/pics/go-next-view.png b/examples/declarative/demos/webbrowser/qml/content/pics/go-next-view.png new file mode 100644 index 0000000000000000000000000000000000000000..a585cab80c1435972d12fc8e4eabb631a116101f GIT binary patch literal 1310 zcma)4X;6~~5Dg%T)Qd9$R-hn=L5fhWihvMK6@dUzTMJf8y(!REKnFiFaw7t{B5HkXuoebvA_CZiws;@&-$dk8lW%nTu1kM|c^mq~ z5pR?4W^!v@4_Y1hUc!7nna3x&jii5kR%NrSu$HV9$vmSoSbMns?88JA$!{fvV$v_} zkaN(E0s)y?M*6ZceWFt9L<2&}pl?jNjceF(A?XpZOV~E(y)lJu_ep7kRwb)wB3A`} zStshR7fap4cN$qb>^;)3hE2HmeNo>g6^f*8%pD8NmhjHVjOljl-9^rRTjm*CRkg^B z=yvtuLG21RCvfc{k{i)G2LD_nRw1PkiKmdE%ZseTB$sTlHhtE;8DA05nZUmyaD87Kq798&c_h;0}&@&2=0{5oS zJ&INZu8c!9g+@7^zQD{2@CP8jjYA?#K7&ew+;+%rL;VyZ_c8GlqG6mFf~`AV-~Pb2 zF_A2qB3)N!mVuGJrSa^As}1KQQ7iox%-1vez!XZ7@!28erw=$I$=M8mK83z}()R-RKpl@PlFv}}GxoukWdtV)A zM&0#CYjwxgJB3M+N{PE6OaDRtuIG*lO@gcB-+O~i9j!BqS1hJmi_T~g;@E5!>)M4z zs+eKY#d$n7snIYr491Zi`_=_zWX|SsntfKfx*iytUNgPe;d52Hr1S5nw6xD|l?vs> z6RVtrjOG5{Wvc#5WAJz`p3Xh7MYdP^(y7U*f`*}Tm7gRdb)#;huf5=qaYf5kW%Tr= zhuJQ}{mwF}bl7_QJhh(O3?d*t$=uvDBYuDA+~}p`h}g<8IXjfO`}vIC4>m(*^HVQb zXm*EG)buVgv64IO>l=_ui%RI*AC$(6JIakCBJP%y@f?zqT?Q`wDmV1vRK^8HhFlIC zD)Dk>tahwmk4i&+DPSG7+CR%Z*Wkydnig?aNY>hIrDfb|{kDdS_H-+A{fK2RU*0tB zYaKB%Hy@R@>)sFZFf%jru$>qB(M6}G=H?YmQ908am;sWsloSc$S)O2ysqblJ0Kw;1 c={cR&`R7T_c+c>)8tpgH!h<83qQFGX|LB5QfdBvi literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/webbrowser/qml/content/pics/go-previous-view.png b/examples/declarative/demos/webbrowser/qml/content/pics/go-previous-view.png new file mode 100644 index 0000000000000000000000000000000000000000..612fb34dced693312ee764ee325acaea71c45766 GIT binary patch literal 1080 zcmV-81jqY{P)PC^SxR?!STv26R?J#y8(2mz&}=g z6xe(W$Sdn20W(|$eslns;{w)rC{f-80%rIYhHdZyX$8Q9&wzK`z}6=%V20P#YQT3T2m$`lxhA)=`DQDy@1h}~D)647Qm|fI?~^=M;KVf>Do}jDuh+4ZyX#rj zBS21#A=4SV&H(C!3|1gYNt7J)>-FEW5*pw-3lyFLwh7x!PX0aK#<81K({2SRV3jDX z_UryzMqgD+$}RwV8w}js^;Ldg|0STBafe79g;o247O+Z`dHs6RPn`TZPx4NUzRzd+kqFY4^dZlRP*{5s z9SMZW3VO?g{mDQwDAtkiV$$rjn>{s+zx?_;@PKf9H*sdxI{rSG#F7{?fJBK*ul6K5 zT78&=N2*XVjEo?o$=K-Fk&_bMT(!ef)6n+EpQ-{4_t>Ib{x*(`A*0A}GDO59M54P@ zqNCNTvV}{yLna^=}^ODEk44ofy`glX(f`uqAoByDx`7I;J!Gca%qgD@k*tT_@uLG}_)Usv{| zxA&jf59DzcctjR6FmMZlFeAgPITAoY_7YEDSN2=1T&xO``W#zIfI^Zbt`Q~9`MJ5N zc_j?aMX8A;sVNHOnI#zt?w-B@;f;LaKt(2=E{-7@=abi@JFx2fzsNE}f@7tEPD3J_ zWSh`6r#9U$h3uw0OZ)TPnzVdP<8h`6LEIzuhC4yd2O)78&qol`;+06950 A9RL6T literal 0 HcmV?d00001 diff --git a/examples/declarative/demos/webbrowser/qml/content/pics/view-refresh.png b/examples/declarative/demos/webbrowser/qml/content/pics/view-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..afa2a9d77403a12cf6808fd4e551f8582e2599d6 GIT binary patch literal 2182 zcmV;12zmF3P)Dnz#_!jKNQq7A*Lpp`badk2@PWXqYX-|G^Br&q=F$>Qi+zP5MsM!mpA*k zuf20;?#!HXoIAVOWm%yVoA{l4@5#OM_&bhbJb6n1`H5BQ;7S*8aYsrg z(%8Ii3;uED#FnEM{<>~)`;y+z_k9UfuL=Wd3^^--)HY-9vi9Yh?_cu(n!Jfy$zTS8 zFo2)}vyvn?9M|-r={nrdg{hj@bLQ6=E!AfxklAj3tAllJUis0Fqv}*~qbQ*$kCrho zG=SmJ;ke;A=O|2uVNMJp+ zu;cEWP$ayjH}ek0J-mASRn(kXt0W9x0rd%pBpxKBqw^{10_ z%oVjGo>@EUS*iKf;$&9;O=?7MYMcQXV9*`JiNOiUq?uH19(+43b^r%Qh*N0-8PySL@{C>NTq zmAl*&&j?%;7m=-I(Us~#EHN?vgcGQQ0hk0J4Qw(qsrZhsSEW?J(B&a8Ns-d@z$hB4 z&i!^|7&j3whr5FWPw_8BZN)_edGBODPKjlmU)OlN& z4dJ>|3B=t!-WZQFVw^yzWIt}A)jJn2p(fkv>~xUJ=8+4c!VW>LUW;RQ#vRl~YN%eT z0!}M&0-I$B!U~}7K&Z}?pjDR^9 zW{w1fBn%*okZ2@|Mo`dfPy?U|ddU}J(~;eB;yI9g(5#EJY7>RVjYkxMPzh1xRX_*Q zgGN}L>lt#-?Jo$$M-mwReI4(mI02!^YNO`Zp&|eVz{136M>f%FB&97#EC=ugZbOBQ z1{xQHVXx5y)hVYs5kve(BsILL3O2L2eVrEoM3QY?Kgcb3@949XR>=y| zN9HIt>tOA)An!&l_%Kg4mvO7o?ddELGctBk@|Iqbzuk#2Bo z&hBJ8ZldsmjWTmA?MYAi&~*-)hk2IVeh$Mc&Y~^q*Rk^U(roGHs0>XDKJW)w2D&} zLr@aI9y*b6*=b_SODgY>+mHwoplwY`2+TZC2}AP}PN!W?UpF;VD9pM2G~W zv=zcESwU4AVsN?%Clyk$t6K5CULaO>RB3=w+Hwq`F$PVc@dDDMA*^l<0R@VEwgoBC zK!`SB>s*LjR9s;~MEqP3GO_+i2^oFJ_AnvesgxX9l+N^$J}LPp={csqlMPa&i2+9F zj44oKhzaYFr6Ez$U5wc-8i@dIWNt}C(P%E(pO2sm(K&6A^9rN6E-jV4e5RI?33*KZ zT*_Gq#1IGMUb2DoFS?k2bZmYj#*0&+QxLHOlOr$$LS29}0T6%)0v1HT&Bz{0YhaLo z5K{6CO^Wlcm!ukdMp#^1ui8avBL6 zumS>~gG4_FIunN4<@%g)A+7>w`9$QyDB!r +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/demos/webbrowser/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/demos/webbrowser/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/demos/webbrowser/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/demos/webbrowser/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/demos/webbrowser/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/demos/webbrowser/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/demos/webbrowser/webbrowser.desktop b/examples/declarative/demos/webbrowser/webbrowser.desktop new file mode 100644 index 0000000..26da1fe --- /dev/null +++ b/examples/declarative/demos/webbrowser/webbrowser.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=webbrowser +Exec=/opt/usr/bin/webbrowser +Icon=webbrowser +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/demos/webbrowser/webbrowser.png b/examples/declarative/demos/webbrowser/webbrowser.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/i18n/i18n.desktop b/examples/declarative/i18n/i18n.desktop new file mode 100644 index 0000000..8dd6e34 --- /dev/null +++ b/examples/declarative/i18n/i18n.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=i18n +Exec=/opt/usr/bin/i18n +Icon=i18n +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/i18n/i18n.png b/examples/declarative/i18n/i18n.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 zcmV-O4Y%@%P)ht(u000b3 zNkl+r+m%F_C;*wliAId+l;Bw~NnREVgX6DSfv+(~Ms$%J>UH~1TiKG?i==6q;ABhC^ z?Fa;PP1zvRpk{yshy{xNzW=_}wlshM$8bMz0ywE)|E?{*$bARG!R}74&+E~=fBGSCH_q~3rZLE`kFZF`Zg5p_(F9S`V+!f^EBN1AfbVO>l zV*?2wmM7*K$N;DTgsUiqL8d@0kV=|_n&`jpzizedO9)tWdFTh8K`^#$^77P!9khgW zY!Rx>mStcADTf#t1$7O$0t|o*0XKn3gatG^hba2{-neB1+ztE?*sLjd^k^HO+7rUI z#U<*@0G0o{w7eb^h!lqynFTclTrU#CporX1FqyNMH+0Ern&N9m&#V&xj_U(F2mB2J zt<46%_t{NEnvD|IFZF~~d&Uw1T_g&S##v*=ONjw)029C*A{l`GV{0SE$m`(;jw}{N znskEx<>q}Q<12YZEl*LE3Ih306gaq~kqj^oOalLlQhy0dt;u@8$p7^Lt&4>oL!oPx z#8s8=%aut5!dB!t3TKe~K&L~H1lMXjK+#OKRHI5GD|IzkUH?i3OO@}-LaMj9G8lz# z%l5CTmMR6d2)5Xi&TXYMH@9`QFE#2K3&XXz*HoZoHYmE}} z2gzCqV(C$)Qa4CsW6qOGtI%%!WV`fQi$l5ySZr*mjmtm*mMy$LnBc~UpU3Zbir>EL z5q7k1!|(B;ltK`4R+^dg2p6W_d^>jD_u(zaPCr^^8@hrk3G%j4n9z3e5I$h zHt*%PdcQ(f^FBoE0!itt&AS&D@SD9H-ToBEcllZB+s zk=+N-HEn5kb?LNr0_tj96^ef~kie^2ICbnKhHki|lDRofU;aApOn#Gh#$V=lzx5aV z$Jx^^nO%`X>~HULygE0g(X z`b{py-oel{4)1Lt5=ryItKVXDcD&f3()r}32l444EK3-kNE2=Dpl9>WCG-onSlD9c zr%N?M8yN>I$G3v%iKcWshT`^}P5k(+E4)4M9*-UV z&4O$+)XU|82r~)zlcQfDWVF&5ZZFgaJuU2x93q*UBV#3rrAM(ON9|alVFXl)&YX@% zrn2~rAcuB*qU@=(8D~0mGavLg@|)W{pqZSz_G=dbK~FOQb~8TtAx|87jOIX-tF6w^ zE}q=qk0lm!nQ>k||12}9;gZF6-KIckC(i%2z(g#|rlvN!+qYIAV1cALUyv7|DWDVZ zX$(wW$FeP#{K4*hcr=|#P$&$|hffa@Fv3e>f?B$+m4Id1%9%neo+H}QK_nQiKtO_= zl`f2u2zU)e(5EpuKSS2cx#Vx(wu^As=Cu#baASJJRhKn0OvcBFC8vpJ=CQ?My|Bz# zz=^_Co`6)^qH{|deviLQGGit4^Rx(EQ~10ZbLj+GD@TChb9=j@^z6)V>N`*Kk5B$J ze{}qdg}TxBWxn^(KOkbGYZ?h_s*YG=wFFc=3zU$c6s9F)Od%3%#;D-BreyPxTM?QD z9z!FUO_9xIol|}uej|j>6Ch{jux$5pqD;~k-A=y!k1x!=$7+wtBz2KR47Sqly&wN$2gymjWt&D)GPzc~L zAmG!PO3acmvt?3VJ(xek7m2e4a;8m_*N@k56OcCJydSwcE%(-LUHTXJ-cXJh2-bmfHU`sYDbPJpf{I$AtTF3d1C zH&IsaGnxn(&H4YF1v8Tqk{O%MaC?~t#L~l6(YG zroAqg9-GOc<1ITrCv$U*#4lBy$A<1jDGgg}EZeNG>nIwv2-NKXBF;O*?VUc}xNw${ z*m#*_PwU-;JgtCDCMW!QFwTLkdpNTDPM6%s!bPT2Hw$NqtmQsLwFSE9^d4klv>kuu zZd!fa1c|QgD-B(7M^6)jQ&;)P2R|#5j5hUhWb30~dpLW3j%=!huYUfIUD+N> zOg@-AL&i!H^y~OMFf=vnYA0y4aPszNc=n-}`150b%a-Pyg-mjzVN^c`m%|q5>GIPZ z)p_a6zw_{cV|2Afi)<>LquYK5zrCH-%oUz{_%43qwmV&I49%Y7;>=qpG@632BkJd8 z7tS&=JI>a~=7L-}5GEW5uWK#(MxIsFk7E1)e|s&!n>Mz1-0J+_UopfA-KH za&OO}CBYF)r*3lQ+IL8s3xE?@_8p8cZ(Za0(=T#kW(3nRvBe^5rI<=y=iJzj8B1J2 z)xTk_2vt0wIwK;&mJTnEe7cPvy!#3vUx24S_hs6eA~m`ZMiwsd)1j9bUbs-$5k#P~ z)x#6V+ZdaEotMsDX783=1ie1uxfx>V5#reyZ0s7Z)YeMCilGpJ-Ccf~Lpndd_+765 z+a;d7>m;AnImz;OWWy}P>n)oTRnX!^lEY3ZF{6#Dc zP3eWtdbxc=2v{URq3CS&v1OCaF9zOYVEn2}rp4FECpsQLQ$~gR152@@J>5iMHTEp9 zmbgOTwypq)+ybwkf6Hx_(&+2{0*~+cD~@)35x?GCF?F^=+yrLVZhq-;c$IqD0$m+m zc5U(T@;g7`=FF(8-fuK>pz}eFZ2dewBe?pGiugIGL}Lk9BRn3({hx|39KXWzKl+!7 zC&mJ5-bPt0t45OC0A2y;?_2xbL3dhw4R4!7U~7k$#~*0t+{M#;_4_fNIQ%GkqPqzC z{Fru@iNqkLopCayuA3jF3DBx@F$?M&px$p>POu^EIL3&;mUb_j@9_{%y~nH9KjiJH zFn*68OEP4v6sDamNuAY`{8WHU0^b1jB8W8VcDg$bSTz|%BSf72I~;Uwcw}XkOeQa- zN>|#7#+$$bFbQ%K=Z5G-Q2zs*1I$KV%`Xz*a{tmd#PwW{T{?%<;++x}lOt6OjpN+* zyh-s&?Bdn?QBX0Q%hnAW@#+Lr-J9yYq*QhOS|x@K=8e3ZH*^eS1|bPb`j36QKfG8Z zAP&3?+zy0mKT_2r@`lPZFbrxaZ{(t(qreQ11hK(Sf8VPgtFe^{`1WNu)oTGS0vV9M z1KO%TqAZ*rM@-}VIAYK-Qmz0)j`740Nr19ZN&5TVzSVZtAOOgdU;^L7B5vsF1ravm zc*acLs3D53I|MQUY8q4m3!7f(?^>Tb{p$($g#A)4e1B9s{@lL%?>o@kZ5V1WZ~Qcn zz|bu+Ir<-X<5ugvfemb60~^@D1~#yPwc`H(pHeSaefwW^{L9a%BKPWN%_+ eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/i18n/main.cpp b/examples/declarative/i18n/main.cpp new file mode 100644 index 0000000..66b3ffe --- /dev/null +++ b/examples/declarative/i18n/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/i18n.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/i18n/qml/i18n.qml b/examples/declarative/i18n/qml/i18n.qml new file mode 100644 index 0000000..219deda --- /dev/null +++ b/examples/declarative/i18n/qml/i18n.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +// +// The QML runtime automatically loads a translation from the i18n subdirectory of the root +// QML file, based on the system language. +// +// The files are created/updated by running: +// +// lupdate i18n.qml -ts i18n/base.ts +// +// Translations for new languages are created by copying i18n/base.ts to i18n/qml_.ts +// The .ts files can then be edited with Linguist: +// +// linguist i18n/qml_fr.ts +// +// The run-time translation files are then generaeted by running: +// +// lrelease i18n/*.ts +// + +Rectangle { + width: 640; height: 480 + + Column { + anchors.fill: parent; spacing: 20 + + Text { + text: "If a translation is available for the system language (eg. French) then the + string below will translated (eg. 'Bonjour'). Otherwise it will show 'Hello'." + width: parent.width; wrapMode: Text.WordWrap + } + + Text { + text: qsTr("Hello") + font.pointSize: 25; anchors.horizontalCenter: parent.horizontalCenter + } + } +} diff --git a/examples/declarative/i18n/qml/i18n.qmlproject b/examples/declarative/i18n/qml/i18n.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/i18n/qml/i18n.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/i18n/qml/i18n/base.ts b/examples/declarative/i18n/qml/i18n/base.ts new file mode 100644 index 0000000..82547a1 --- /dev/null +++ b/examples/declarative/i18n/qml/i18n/base.ts @@ -0,0 +1,12 @@ + + + + + i18n + + + Hello + + + + diff --git a/examples/declarative/i18n/qml/i18n/qml_en_AU.ts b/examples/declarative/i18n/qml/i18n/qml_en_AU.ts new file mode 100644 index 0000000..e991aff --- /dev/null +++ b/examples/declarative/i18n/qml/i18n/qml_en_AU.ts @@ -0,0 +1,12 @@ + + + + + i18n + + + Hello + G'day + + + diff --git a/examples/declarative/i18n/qml/i18n/qml_fr.ts b/examples/declarative/i18n/qml/i18n/qml_fr.ts new file mode 100644 index 0000000..365abd9 --- /dev/null +++ b/examples/declarative/i18n/qml/i18n/qml_fr.ts @@ -0,0 +1,12 @@ + + + + + i18n + + + Hello + Bonjour + + + diff --git a/examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/i18n/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/imageelements/borderimage/borderimage.desktop b/examples/declarative/imageelements/borderimage/borderimage.desktop new file mode 100644 index 0000000..35f4d2b --- /dev/null +++ b/examples/declarative/imageelements/borderimage/borderimage.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=borderimage +Exec=/opt/usr/bin/borderimage +Icon=borderimage +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/imageelements/borderimage/borderimage.png b/examples/declarative/imageelements/borderimage/borderimage.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/imageelements/borderimage/main.cpp b/examples/declarative/imageelements/borderimage/main.cpp new file mode 100644 index 0000000..1cd6d0c --- /dev/null +++ b/examples/declarative/imageelements/borderimage/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/shadows.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/imageelements/borderimage/qml/borderimage.qml b/examples/declarative/imageelements/borderimage/qml/borderimage.qml new file mode 100644 index 0000000..53e35f9 --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qml/borderimage.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "content" + +Rectangle { + id: page + width: 1030; height: 540 + + Grid { + anchors.centerIn: parent; spacing: 20 + + MyBorderImage { + minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 240 + source: "content/colors.png"; margin: 30 + } + + MyBorderImage { + minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 240 + source: "content/colors.png"; margin: 30 + horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat + } + + MyBorderImage { + minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 240 + source: "content/colors.png"; margin: 30 + horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat + } + + MyBorderImage { + minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 240 + source: "content/colors.png"; margin: 30 + horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round + } + + MyBorderImage { + minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200 + source: "content/bw.png"; margin: 10 + } + + MyBorderImage { + minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200 + source: "content/bw.png"; margin: 10 + horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat + } + + MyBorderImage { + minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200 + source: "content/bw.png"; margin: 10 + horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat + } + + MyBorderImage { + minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200 + source: "content/bw.png"; margin: 10 + horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round + } + } +} diff --git a/examples/declarative/imageelements/borderimage/qml/borderimage.qmlproject b/examples/declarative/imageelements/borderimage/qml/borderimage.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qml/borderimage.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/imageelements/borderimage/qml/content/MyBorderImage.qml b/examples/declarative/imageelements/borderimage/qml/content/MyBorderImage.qml new file mode 100644 index 0000000..96495cb --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qml/content/MyBorderImage.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + + property alias horizontalMode: image.horizontalTileMode + property alias verticalMode: image.verticalTileMode + property alias source: image.source + + property int minWidth + property int minHeight + property int maxWidth + property int maxHeight + property int margin + + width: 240; height: 240 + + BorderImage { + id: image; anchors.centerIn: parent + + SequentialAnimation on width { + loops: Animation.Infinite + NumberAnimation { + from: container.minWidth; to: container.maxWidth + duration: 2000; easing.type: Easing.InOutQuad + } + NumberAnimation { + from: container.maxWidth; to: container.minWidth + duration: 2000; easing.type: Easing.InOutQuad + } + } + + SequentialAnimation on height { + loops: Animation.Infinite + NumberAnimation { + from: container.minHeight; to: container.maxHeight + duration: 2000; easing.type: Easing.InOutQuad + } + NumberAnimation { + from: container.maxHeight; to: container.minHeight + duration: 2000; easing.type: Easing.InOutQuad + } + } + + border.top: container.margin + border.left: container.margin + border.bottom: container.margin + border.right: container.margin + } +} diff --git a/examples/declarative/imageelements/borderimage/qml/content/ShadowRectangle.qml b/examples/declarative/imageelements/borderimage/qml/content/ShadowRectangle.qml new file mode 100644 index 0000000..839ecf1 --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qml/content/ShadowRectangle.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + property alias color : rectangle.color + + BorderImage { + anchors.fill: rectangle + anchors { leftMargin: -6; topMargin: -6; rightMargin: -8; bottomMargin: -8 } + border { left: 10; top: 10; right: 10; bottom: 10 } + source: "shadow.png"; smooth: true + } + + Rectangle { id: rectangle; anchors.fill: parent } +} diff --git a/examples/declarative/imageelements/borderimage/qml/content/bw.png b/examples/declarative/imageelements/borderimage/qml/content/bw.png new file mode 100644 index 0000000000000000000000000000000000000000..486eaae96ee3a1842fb842ad1927636431f5d147 GIT binary patch literal 1357 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 a%X|Sp(8DzP)HQkl0000 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/imageelements/borderimage/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/imageelements/borderimage/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/imageelements/borderimage/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/imageelements/borderimage/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/README b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/README new file mode 100644 index 0000000..421e6e3 --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/README @@ -0,0 +1,6 @@ +The Debian Package borderimage +---------------------------- + +Comments regarding the Package + + -- Daniel Molkentin Thu, 18 Nov 2010 16:13:09 +0100 diff --git a/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/changelog b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/changelog new file mode 100644 index 0000000..77071e0 --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/changelog @@ -0,0 +1,5 @@ +borderimage (0.0.1) unstable; urgency=low + + * Initial Release. + + -- Daniel Molkentin Thu, 18 Nov 2010 16:13:09 +0100 diff --git a/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/compat b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/compat @@ -0,0 +1 @@ +7 diff --git a/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/control b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/control new file mode 100644 index 0000000..4bdc93e --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/control @@ -0,0 +1,13 @@ +Source: borderimage +Section: user/hidden +Priority: optional +Maintainer: Daniel Molkentin +Build-Depends: debhelper (>= 5), libqt4-dev +Standards-Version: 3.7.3 +Homepage: + +Package: borderimage +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: + diff --git a/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/copyright b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/copyright new file mode 100644 index 0000000..e1c7a29 --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/copyright @@ -0,0 +1,40 @@ +This package was debianized by Daniel Molkentin on +Thu, 18 Nov 2010 16:13:09 +0100. + +It was downloaded from + +Upstream Author(s): + + + + +Copyright: + + + + +License: + + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2010, Daniel Molkentin and +is licensed under the GPL, see above. + + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. diff --git a/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/rules b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/rules new file mode 100755 index 0000000..3799b01 --- /dev/null +++ b/examples/declarative/imageelements/borderimage/qtc_packaging/debian_fremantle/rules @@ -0,0 +1,91 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/borderimage.sgml > borderimage.1 + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + $(MAKE) clean + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/borderimage. + $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/borderimage install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + # dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + # dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/examples/declarative/imageelements/image/image.desktop b/examples/declarative/imageelements/image/image.desktop new file mode 100644 index 0000000..6103d44 --- /dev/null +++ b/examples/declarative/imageelements/image/image.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=image +Exec=/opt/usr/bin/image +Icon=image +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/imageelements/image/image.png b/examples/declarative/imageelements/image/image.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/imageelements/image/main.cpp b/examples/declarative/imageelements/image/main.cpp new file mode 100644 index 0000000..152d536 --- /dev/null +++ b/examples/declarative/imageelements/image/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/image.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/imageelements/image/qml/ImageCell.qml b/examples/declarative/imageelements/image/qml/ImageCell.qml new file mode 100644 index 0000000..e8a6c55 --- /dev/null +++ b/examples/declarative/imageelements/image/qml/ImageCell.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 + +Item { + property alias mode: image.fillMode + property alias caption: captionItem.text + + width: parent.cellWidth; height: parent.cellHeight + + Image { + id: image + width: parent.width; height: parent.height - captionItem.height + source: "qt-logo.png" + clip: true // only makes a difference if mode is PreserveAspectCrop + smooth: true + } + + Text { + id: captionItem + anchors.horizontalCenter: parent.horizontalCenter; anchors.bottom: parent.bottom + } +} diff --git a/examples/declarative/imageelements/image/qml/image.qml b/examples/declarative/imageelements/image/qml/image.qml new file mode 100644 index 0000000..f00fc18 --- /dev/null +++ b/examples/declarative/imageelements/image/qml/image.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + width: 490 + height: 285 + + Grid { + property int cellWidth: (width - (spacing * (columns - 1))) / columns + property int cellHeight: (height - (spacing * (rows - 1))) / rows + + anchors.fill: parent + anchors.margins: 30 + + columns: 3 + rows: 2 + spacing: 30 + + ImageCell { mode: Image.Stretch; caption: "Stretch" } + ImageCell { mode: Image.PreserveAspectFit; caption: "PreserveAspectFit" } + ImageCell { mode: Image.PreserveAspectCrop; caption: "PreserveAspectCrop" } + + ImageCell { mode: Image.Tile; caption: "Tile" } + ImageCell { mode: Image.TileHorizontally; caption: "TileHorizontally" } + ImageCell { mode: Image.TileVertically; caption: "TileVertically" } + } +} diff --git a/examples/declarative/imageelements/image/qml/image.qmlproject b/examples/declarative/imageelements/image/qml/image.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/imageelements/image/qml/image.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/imageelements/image/qml/qt-logo.png b/examples/declarative/imageelements/image/qml/qt-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..14ddf2a0289e64c686b34712b8754bc4baac2726 GIT binary patch literal 5149 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/imageelements/image/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/imageelements/shadows/main.cpp b/examples/declarative/imageelements/shadows/main.cpp new file mode 100644 index 0000000..1cd6d0c --- /dev/null +++ b/examples/declarative/imageelements/shadows/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/shadows.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/imageelements/shadows/qml/borderimage.qml b/examples/declarative/imageelements/shadows/qml/borderimage.qml new file mode 100644 index 0000000..53e35f9 --- /dev/null +++ b/examples/declarative/imageelements/shadows/qml/borderimage.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "content" + +Rectangle { + id: page + width: 1030; height: 540 + + Grid { + anchors.centerIn: parent; spacing: 20 + + MyBorderImage { + minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 240 + source: "content/colors.png"; margin: 30 + } + + MyBorderImage { + minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 240 + source: "content/colors.png"; margin: 30 + horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat + } + + MyBorderImage { + minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 240 + source: "content/colors.png"; margin: 30 + horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat + } + + MyBorderImage { + minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 240 + source: "content/colors.png"; margin: 30 + horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round + } + + MyBorderImage { + minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200 + source: "content/bw.png"; margin: 10 + } + + MyBorderImage { + minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200 + source: "content/bw.png"; margin: 10 + horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat + } + + MyBorderImage { + minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200 + source: "content/bw.png"; margin: 10 + horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat + } + + MyBorderImage { + minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200 + source: "content/bw.png"; margin: 10 + horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round + } + } +} diff --git a/examples/declarative/imageelements/shadows/qml/borderimage.qmlproject b/examples/declarative/imageelements/shadows/qml/borderimage.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/imageelements/shadows/qml/borderimage.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/imageelements/shadows/qml/content/MyBorderImage.qml b/examples/declarative/imageelements/shadows/qml/content/MyBorderImage.qml new file mode 100644 index 0000000..96495cb --- /dev/null +++ b/examples/declarative/imageelements/shadows/qml/content/MyBorderImage.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + + property alias horizontalMode: image.horizontalTileMode + property alias verticalMode: image.verticalTileMode + property alias source: image.source + + property int minWidth + property int minHeight + property int maxWidth + property int maxHeight + property int margin + + width: 240; height: 240 + + BorderImage { + id: image; anchors.centerIn: parent + + SequentialAnimation on width { + loops: Animation.Infinite + NumberAnimation { + from: container.minWidth; to: container.maxWidth + duration: 2000; easing.type: Easing.InOutQuad + } + NumberAnimation { + from: container.maxWidth; to: container.minWidth + duration: 2000; easing.type: Easing.InOutQuad + } + } + + SequentialAnimation on height { + loops: Animation.Infinite + NumberAnimation { + from: container.minHeight; to: container.maxHeight + duration: 2000; easing.type: Easing.InOutQuad + } + NumberAnimation { + from: container.maxHeight; to: container.minHeight + duration: 2000; easing.type: Easing.InOutQuad + } + } + + border.top: container.margin + border.left: container.margin + border.bottom: container.margin + border.right: container.margin + } +} diff --git a/examples/declarative/imageelements/shadows/qml/content/ShadowRectangle.qml b/examples/declarative/imageelements/shadows/qml/content/ShadowRectangle.qml new file mode 100644 index 0000000..839ecf1 --- /dev/null +++ b/examples/declarative/imageelements/shadows/qml/content/ShadowRectangle.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + property alias color : rectangle.color + + BorderImage { + anchors.fill: rectangle + anchors { leftMargin: -6; topMargin: -6; rightMargin: -8; bottomMargin: -8 } + border { left: 10; top: 10; right: 10; bottom: 10 } + source: "shadow.png"; smooth: true + } + + Rectangle { id: rectangle; anchors.fill: parent } +} diff --git a/examples/declarative/imageelements/shadows/qml/content/bw.png b/examples/declarative/imageelements/shadows/qml/content/bw.png new file mode 100644 index 0000000000000000000000000000000000000000..486eaae96ee3a1842fb842ad1927636431f5d147 GIT binary patch literal 1357 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 a%X|Sp(8DzP)HQkl0000 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/imageelements/shadows/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/imageelements/shadows/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/imageelements/shadows/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/imageelements/shadows/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/imageelements/shadows/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/imageelements/shadows/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/imageelements/shadows/shadows.desktop b/examples/declarative/imageelements/shadows/shadows.desktop new file mode 100644 index 0000000..83acea3 --- /dev/null +++ b/examples/declarative/imageelements/shadows/shadows.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=shadows +Exec=/opt/usr/bin/shadows +Icon=shadows +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/imageelements/shadows/shadows.png b/examples/declarative/imageelements/shadows/shadows.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/keyinteraction/focus/focus.desktop b/examples/declarative/keyinteraction/focus/focus.desktop new file mode 100644 index 0000000..68513b3 --- /dev/null +++ b/examples/declarative/keyinteraction/focus/focus.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=focus +Exec=/opt/usr/bin/focus +Icon=focus +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/keyinteraction/focus/focus.png b/examples/declarative/keyinteraction/focus/focus.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/keyinteraction/focus/main.cpp b/examples/declarative/keyinteraction/focus/main.cpp new file mode 100644 index 0000000..9e5270a --- /dev/null +++ b/examples/declarative/keyinteraction/focus/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/focus.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/keyinteraction/focus/qml/Core/ContextMenu.qml b/examples/declarative/keyinteraction/focus/qml/Core/ContextMenu.qml new file mode 100644 index 0000000..79273ad --- /dev/null +++ b/examples/declarative/keyinteraction/focus/qml/Core/ContextMenu.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +FocusScope { + id: container + + property bool open: false + + Item { + anchors.fill: parent + + Rectangle { + anchors.fill: parent + color: "#D1DBBD" + focus: true + Keys.onRightPressed: mainView.focus = true + + Text { + anchors { top: parent.top; horizontalCenter: parent.horizontalCenter; margins: 30 } + color: "black" + font.pixelSize: 14 + text: "Context Menu" + } + } + } +} diff --git a/examples/declarative/keyinteraction/focus/qml/Core/GridMenu.qml b/examples/declarative/keyinteraction/focus/qml/Core/GridMenu.qml new file mode 100644 index 0000000..263adad --- /dev/null +++ b/examples/declarative/keyinteraction/focus/qml/Core/GridMenu.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +FocusScope { + property alias interactive: gridView.interactive + + onActiveFocusChanged: { + if (activeFocus) + mainView.state = "" + } + + Rectangle { + anchors.fill: parent + clip: true + gradient: Gradient { + GradientStop { position: 0.0; color: "#193441" } + GradientStop { position: 1.0; color: Qt.darker("#193441") } + } + + GridView { + id: gridView + anchors.fill: parent; anchors.leftMargin: 20; anchors.rightMargin: 20 + cellWidth: 152; cellHeight: 152 + focus: true + model: 12 + + KeyNavigation.down: listMenu + KeyNavigation.left: contextMenu + + delegate: Item { + id: container + width: GridView.view.cellWidth; height: GridView.view.cellHeight + + Rectangle { + id: content + color: "transparent" + smooth: true + anchors.fill: parent; anchors.margins: 20; radius: 10 + + Rectangle { color: "#91AA9D"; anchors.fill: parent; anchors.margins: 3; radius: 8; smooth: true } + Image { source: "images/qt-logo.png"; anchors.centerIn: parent; smooth: true } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + hoverEnabled: true + + onClicked: { + GridView.view.currentIndex = index + container.forceActiveFocus() + } + } + + states: State { + name: "active"; when: container.activeFocus + PropertyChanges { target: content; color: "#FCFFF5"; scale: 1.1 } + } + + transitions: Transition { + NumberAnimation { properties: "scale"; duration: 100 } + } + } + } + } +} diff --git a/examples/declarative/keyinteraction/focus/qml/Core/ListMenu.qml b/examples/declarative/keyinteraction/focus/qml/Core/ListMenu.qml new file mode 100644 index 0000000..cefc9a3 --- /dev/null +++ b/examples/declarative/keyinteraction/focus/qml/Core/ListMenu.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +FocusScope { + clip: true + + onActiveFocusChanged: { + if (activeFocus) + mainView.state = "showListViews" + } + + ListView { + id: list1 + y: activeFocus ? 10 : 40; width: parent.width / 3; height: parent.height - 20 + focus: true + KeyNavigation.up: gridMenu; KeyNavigation.left: contextMenu; KeyNavigation.right: list2 + model: 10; cacheBuffer: 200 + delegate: ListViewDelegate {} + + Behavior on y { + NumberAnimation { duration: 600; easing.type: Easing.OutQuint } + } + } + + ListView { + id: list2 + y: activeFocus ? 10 : 40; x: parseInt(parent.width / 3); width: parent.width / 3; height: parent.height - 20 + KeyNavigation.up: gridMenu; KeyNavigation.left: list1; KeyNavigation.right: list3 + model: 10; cacheBuffer: 200 + delegate: ListViewDelegate {} + + Behavior on y { + NumberAnimation { duration: 600; easing.type: Easing.OutQuint } + } + } + + ListView { + id: list3 + y: activeFocus ? 10 : 40; x: parseInt(2 * parent.width / 3); width: parent.width / 3; height: parent.height - 20 + KeyNavigation.up: gridMenu; KeyNavigation.left: list2 + model: 10; cacheBuffer: 200 + delegate: ListViewDelegate {} + + Behavior on y { + NumberAnimation { duration: 600; easing.type: Easing.OutQuint } + } + } + + Rectangle { width: parent.width; height: 1; color: "#D1DBBD" } + + Rectangle { + y: 1; width: parent.width; height: 10 + gradient: Gradient { + GradientStop { position: 0.0; color: "#3E606F" } + GradientStop { position: 1.0; color: "transparent" } + } + } + + Rectangle { + y: parent.height - 10; width: parent.width; height: 10 + gradient: Gradient { + GradientStop { position: 1.0; color: "#3E606F" } + GradientStop { position: 0.0; color: "transparent" } + } + } +} diff --git a/examples/declarative/keyinteraction/focus/qml/Core/ListViewDelegate.qml b/examples/declarative/keyinteraction/focus/qml/Core/ListViewDelegate.qml new file mode 100644 index 0000000..7b63cd8 --- /dev/null +++ b/examples/declarative/keyinteraction/focus/qml/Core/ListViewDelegate.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: container + width: ListView.view.width; height: 60; anchors.leftMargin: 10; anchors.rightMargin: 10 + + Rectangle { + id: content + anchors.centerIn: parent; width: container.width - 40; height: container.height - 10 + color: "transparent" + smooth: true + radius: 10 + + Rectangle { anchors.fill: parent; anchors.margins: 3; color: "#91AA9D"; smooth: true; radius: 8 } + } + + Text { + id: label + anchors.centerIn: content + text: "List element " + (index + 1) + color: "#193441" + font.pixelSize: 14 + } + + MouseArea { + id: mouseArea + anchors.fill: parent + hoverEnabled: true + + onClicked: { + ListView.view.currentIndex = index + container.forceActiveFocus() + } + } + + states: State { + name: "active"; when: container.activeFocus + PropertyChanges { target: content; color: "#FCFFF5"; scale: 1.1 } + PropertyChanges { target: label; font.pixelSize: 16 } + } + + transitions: Transition { + NumberAnimation { properties: "scale"; duration: 100 } + } +} diff --git a/examples/declarative/keyinteraction/focus/qml/Core/images/arrow.png b/examples/declarative/keyinteraction/focus/qml/Core/images/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..14978c2e56e55e8e4fc8b7d944bef836d1d68ab7 GIT binary patch literal 583 zcmV-N0=WH&P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igM} z12+tgH>GL-001I%MObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakAa8CUVIWOmV~41B zLjV8)nMp)JR2b7u%RfjPVHgMC-+PS-8SabWdoQ1Nf{snWPza(!=;GYPv4eX{kO~>Z zK{`lR(MbZ5u~?i7j%}!Qse@S>gj5m;G>{5M$Z+J(uanScf8_bv8keI8nM?-5;SlZn zdw8BF03aeDDF7%UT#h1yVTepRjlYkNK(SQfS-sBDXvE(S5BzX+MBiE()rGusFsflL z2>5z?n_rtvPN!4;YPVV2-zR))Q?ItR`1$gZBsmxiczk+Fqe`Q?U{qP&+~l`rlk@qU zcdZuRR;$cANBGu?QI(BKh3Ab1NivROo;MoQDB?z?!XGy`Op=8CexL7aHRhdTE(ioh z6-HHzYNk{!^Z4Y1B$*@$&+2vddOc1i6Lz~@zT4epxVp;4LLtlr0bo?&TPwb`Fskx$ zeVv~!E=ZEI*^DIF>2&yJXNOBGE6h8W&O3+2Lcx2M&SvpML?n*mk3Vm350{+7i((Of z1_M<0_VE4s8cC9fh|EZWWJ-K%Jpl8kOfn@RlWaE2!-E5Sxw^t#tA+7+?1>2RpMSRy V(!rmu!N<$&1)9p}{ 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/keyinteraction/focus/qml/focus.qml b/examples/declarative/keyinteraction/focus/qml/focus.qml new file mode 100644 index 0000000..e2115d8 --- /dev/null +++ b/examples/declarative/keyinteraction/focus/qml/focus.qml @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "Core" + +Rectangle { + id: window + + width: 800; height: 480 + color: "#3E606F" + + FocusScope { + id: mainView + + width: parent.width; height: parent.height + focus: true + + GridMenu { + id: gridMenu + width: parent.width; height: 320 + + focus: true + interactive: parent.activeFocus + } + + ListMenu { + id: listMenu + y: 320; width: parent.width; height: 320 + } + + Rectangle { + id: shade + anchors.fill: parent + color: "black" + opacity: 0 + } + + states: State { + name: "showListViews" + PropertyChanges { target: gridMenu; y: -160 } + PropertyChanges { target: listMenu; y: 160 } + } + + transitions: Transition { + NumberAnimation { properties: "y"; duration: 600; easing.type: Easing.OutQuint } + } + } + + Image { + source: "Core/images/arrow.png" + rotation: 90 + anchors.verticalCenter: parent.verticalCenter + + MouseArea { + anchors.fill: parent; anchors.margins: -10 + onClicked: window.state = "contextMenuOpen" + } + } + + ContextMenu { id: contextMenu; x: -265; width: 260; height: parent.height } + + states: State { + name: "contextMenuOpen" + when: !mainView.activeFocus + PropertyChanges { target: contextMenu; x: 0; open: true } + PropertyChanges { target: mainView; x: 130 } + PropertyChanges { target: shade; opacity: 0.25 } + } + + transitions: Transition { + NumberAnimation { properties: "x,opacity"; duration: 600; easing.type: Easing.OutQuint } + } +} diff --git a/examples/declarative/keyinteraction/focus/qml/focus.qmlproject b/examples/declarative/keyinteraction/focus/qml/focus.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/keyinteraction/focus/qml/focus.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/keyinteraction/focus/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/Delegate/Delegate.desktop b/examples/declarative/modelviews/Delegate/Delegate.desktop new file mode 100644 index 0000000..9815ded --- /dev/null +++ b/examples/declarative/modelviews/Delegate/Delegate.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=Delegate +Exec=/opt/usr/bin/Delegate +Icon=Delegate +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/Delegate/Delegate.png b/examples/declarative/modelviews/Delegate/Delegate.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/Delegate/main.cpp b/examples/declarative/modelviews/Delegate/main.cpp new file mode 100644 index 0000000..22252ce --- /dev/null +++ b/examples/declarative/modelviews/Delegate/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/Delegate.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/Delegate/qml/Delegate.qml b/examples/declarative/modelviews/Delegate/qml/Delegate.qml new file mode 100644 index 0000000..57048f4 --- /dev/null +++ b/examples/declarative/modelviews/Delegate/qml/Delegate.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +//![0] +Package { + Text { id: listDelegate; width: 200; height: 25; text: 'Empty'; Package.name: 'list' } + Text { id: gridDelegate; width: 100; height: 50; text: 'Empty'; Package.name: 'grid' } + + Rectangle { + id: wrapper + width: 200; height: 25 + color: 'lightsteelblue' + + Text { text: display; anchors.centerIn: parent } + MouseArea { + anchors.fill: parent + onClicked: { + if (wrapper.state == 'inList') + wrapper.state = 'inGrid'; + else + wrapper.state = 'inList'; + } + } + + state: 'inList' + states: [ + State { + name: 'inList' + ParentChange { target: wrapper; parent: listDelegate } + }, + State { + name: 'inGrid' + ParentChange { + target: wrapper; parent: gridDelegate + x: 0; y: 0; width: gridDelegate.width; height: gridDelegate.height + } + } + ] + + transitions: [ + Transition { + ParentAnimation { + NumberAnimation { properties: 'x,y,width,height'; duration: 300 } + } + } + ] + } +} +//![0] diff --git a/examples/declarative/modelviews/Delegate/qml/package.qmlproject b/examples/declarative/modelviews/Delegate/qml/package.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/modelviews/Delegate/qml/package.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/modelviews/Delegate/qml/view.qml b/examples/declarative/modelviews/Delegate/qml/view.qml new file mode 100644 index 0000000..cbe8f06 --- /dev/null +++ b/examples/declarative/modelviews/Delegate/qml/view.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + color: "white" + width: 400 + height: 200 + + ListModel { + id: myModel + ListElement { display: "One" } + ListElement { display: "Two" } + ListElement { display: "Three" } + ListElement { display: "Four" } + ListElement { display: "Five" } + ListElement { display: "Six" } + ListElement { display: "Seven" } + ListElement { display: "Eight" } + } + //![0] + VisualDataModel { + id: visualModel + delegate: Delegate {} + model: myModel + } + + ListView { + width: 200; height:200 + model: visualModel.parts.list + } + GridView { + x: 200; width: 200; height:200 + cellHeight: 50 + model: visualModel.parts.grid + } + //![0] +} diff --git a/examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/Delegate/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/gridview-example/gridviewexample.desktop b/examples/declarative/modelviews/gridview-example/gridviewexample.desktop new file mode 100644 index 0000000..1ba59a4 --- /dev/null +++ b/examples/declarative/modelviews/gridview-example/gridviewexample.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=gridview-example +Exec=/opt/usr/bin/gridview-example +Icon=gridview-example +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/gridview-example/gridviewexample.png b/examples/declarative/modelviews/gridview-example/gridviewexample.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/gridview-example/main.cpp b/examples/declarative/modelviews/gridview-example/main.cpp new file mode 100644 index 0000000..3cf521f --- /dev/null +++ b/examples/declarative/modelviews/gridview-example/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/gridview-example.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/gridview-example/qml/gridview-example.qml b/examples/declarative/modelviews/gridview-example/qml/gridview-example.qml new file mode 100644 index 0000000..85fefda --- /dev/null +++ b/examples/declarative/modelviews/gridview-example/qml/gridview-example.qml @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + width: 300; height: 400 + color: "white" + + ListModel { + id: appModel + ListElement { name: "Music"; icon: "pics/AudioPlayer_48.png" } + ListElement { name: "Movies"; icon: "pics/VideoPlayer_48.png" } + ListElement { name: "Camera"; icon: "pics/Camera_48.png" } + ListElement { name: "Calendar"; icon: "pics/DateBook_48.png" } + ListElement { name: "Messaging"; icon: "pics/EMail_48.png" } + ListElement { name: "Todo List"; icon: "pics/TodoList_48.png" } + ListElement { name: "Contacts"; icon: "pics/AddressBook_48.png" } + } + + Component { + id: appDelegate + + Item { + width: 100; height: 100 + + Image { + id: myIcon + y: 20; anchors.horizontalCenter: parent.horizontalCenter + source: icon + } + Text { + anchors { top: myIcon.bottom; horizontalCenter: parent.horizontalCenter } + text: name + } + } + } + + Component { + id: appHighlight + Rectangle { width: 80; height: 80; color: "lightsteelblue" } + } + + GridView { + anchors.fill: parent + cellWidth: 100; cellHeight: 100 + highlight: appHighlight + focus: true + model: appModel + delegate: appDelegate + } +} diff --git a/examples/declarative/modelviews/gridview-example/qml/gridview.qmlproject b/examples/declarative/modelviews/gridview-example/qml/gridview.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/modelviews/gridview-example/qml/gridview.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/modelviews/gridview-example/qml/pics/AddressBook_48.png b/examples/declarative/modelviews/gridview-example/qml/pics/AddressBook_48.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab7c8eec1381756de32b5f863a6e794c5e8e90f GIT binary patch literal 3350 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/gridview-example/qml/pics/AudioPlayer_48.png b/examples/declarative/modelviews/gridview-example/qml/pics/AudioPlayer_48.png new file mode 100644 index 0000000000000000000000000000000000000000..f4b8689f87c0cf8a46de9782229c2282d5fe2cf5 GIT binary patch literal 3806 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/gridview-example/qml/pics/Camera_48.png b/examples/declarative/modelviews/gridview-example/qml/pics/Camera_48.png new file mode 100644 index 0000000000000000000000000000000000000000..c76b52494597802fdf1dc0840a31510f64169b70 GIT binary patch literal 3540 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 U;C)}W8UO$Q07*qoM6N<$f*gVFyZ`_I literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/gridview-example/qml/pics/EMail_48.png b/examples/declarative/modelviews/gridview-example/qml/pics/EMail_48.png new file mode 100644 index 0000000000000000000000000000000000000000..d6d84a61be6ea9470a792b3435d2a4f9ffc58050 GIT binary patch literal 3655 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 q30&9O+Bht^LrRuPDe;6v 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/gridview-example/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/gridview-example/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/gridview-example/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/gridview-example/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/gridview-example/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/gridview-example/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/listview/dynamiclist/dynamiclist.desktop b/examples/declarative/modelviews/listview/dynamiclist/dynamiclist.desktop new file mode 100644 index 0000000..d056093 --- /dev/null +++ b/examples/declarative/modelviews/listview/dynamiclist/dynamiclist.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=dynamiclist +Exec=/opt/usr/bin/dynamiclist +Icon=dynamiclist +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/listview/dynamiclist/dynamiclist.png b/examples/declarative/modelviews/listview/dynamiclist/dynamiclist.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/listview/dynamiclist/main.cpp b/examples/declarative/modelviews/listview/dynamiclist/main.cpp new file mode 100644 index 0000000..28cc168 --- /dev/null +++ b/examples/declarative/modelviews/listview/dynamiclist/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/dynamiclist.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/PetsModel.qml b/examples/declarative/modelviews/listview/dynamiclist/qml/content/PetsModel.qml new file mode 100644 index 0000000..5220763 --- /dev/null +++ b/examples/declarative/modelviews/listview/dynamiclist/qml/content/PetsModel.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +ListModel { + ListElement { + name: "Polly" + type: "Parrot" + age: 12 + size: "Small" + } + ListElement { + name: "Penny" + type: "Turtle" + age: 4 + size: "Small" + } + ListElement { + name: "Warren" + type: "Rabbit" + age: 2 + size: "Small" + } + ListElement { + name: "Spot" + type: "Dog" + age: 9 + size: "Medium" + } + ListElement { + name: "Schrödinger" + type: "Cat" + age: 2 + size: "Medium" + } + ListElement { + name: "Joey" + type: "Kangaroo" + age: 1 + size: "Medium" + } + ListElement { + name: "Kimba" + type: "Bunny" + age: 65 + size: "Large" + } + ListElement { + name: "Rover" + type: "Dog" + age: 5 + size: "Large" + } + ListElement { + name: "Tiny" + type: "Elephant" + age: 15 + size: "Large" + } +} diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/PressAndHoldButton.qml b/examples/declarative/modelviews/listview/dynamiclist/qml/content/PressAndHoldButton.qml new file mode 100644 index 0000000..d6808a4 --- /dev/null +++ b/examples/declarative/modelviews/listview/dynamiclist/qml/content/PressAndHoldButton.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + id: container + + property int repeatDelay: 300 + property int repeatDuration: 75 + property bool pressed: false + + signal clicked + + scale: pressed ? 0.9 : 1 + + function release() { + autoRepeatClicks.stop() + container.pressed = false + } + + SequentialAnimation on pressed { + id: autoRepeatClicks + running: false + + PropertyAction { target: container; property: "pressed"; value: true } + ScriptAction { script: container.clicked() } + PauseAnimation { duration: repeatDelay } + + SequentialAnimation { + loops: Animation.Infinite + ScriptAction { script: container.clicked() } + PauseAnimation { duration: repeatDuration } + } + } + + MouseArea { + anchors.fill: parent + + onPressed: autoRepeatClicks.start() + onReleased: container.release() + onCanceled: container.release() + } +} + diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/RecipesModel.qml b/examples/declarative/modelviews/listview/dynamiclist/qml/content/RecipesModel.qml new file mode 100644 index 0000000..6056b90 --- /dev/null +++ b/examples/declarative/modelviews/listview/dynamiclist/qml/content/RecipesModel.qml @@ -0,0 +1,129 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +ListModel { + ListElement { + title: "Pancakes" + picture: "content/pics/pancakes.jpg" + ingredients: " +
    +
  • 1 cup (150g) self-raising flour +
  • 1 tbs caster sugar +
  • 3/4 cup (185ml) milk +
  • 1 egg +
+ " + method: " +
    +
  1. Sift flour and sugar together into a bowl. Add a pinch of salt. +
  2. Beat milk and egg together, then add to dry ingredients. Beat until smooth. +
  3. Pour mixture into a pan on medium heat and cook until bubbles appear on the surface. +
  4. Turn over and cook other side until golden. +
+ " + } + ListElement { + title: "Fruit Salad" + picture: "content/pics/fruit-salad.jpg" + ingredients: "* Seasonal Fruit" + method: "* Chop fruit and place in a bowl." + } + ListElement { + title: "Vegetable Soup" + picture: "content/pics/vegetable-soup.jpg" + ingredients: " +
    +
  • 1 onion +
  • 1 turnip +
  • 1 potato +
  • 1 carrot +
  • 1 head of celery +
  • 1 1/2 litres of water +
+ " + method: " +
    +
  1. Chop vegetables. +
  2. Boil in water until vegetables soften. +
  3. Season with salt and pepper to taste. +
+ " + } + ListElement { + title: "Hamburger" + picture: "content/pics/hamburger.jpg" + ingredients: " +
    +
  • 500g minced beef +
  • Seasoning +
  • lettuce, tomato, onion, cheese +
  • 1 hamburger bun for each burger +
+ " + method: " +
    +
  1. Mix the beef, together with seasoning, in a food processor. +
  2. Shape the beef into burgers. +
  3. Grill the burgers for about 5 mins on each side (until cooked through) +
  4. Serve each burger on a bun with ketchup, cheese, lettuce, tomato and onion. +
+ " + } + ListElement { + title: "Lemonade" + picture: "content/pics/lemonade.jpg" + ingredients: " +
    +
  • 1 cup Lemon Juice +
  • 1 cup Sugar +
  • 6 Cups of Water (2 cups warm water, 4 cups cold water) +
+ " + method: " +
    +
  1. Pour 2 cups of warm water into a pitcher and stir in sugar until it dissolves. +
  2. Pour in lemon juice, stir again, and add 4 cups of cold water. +
  3. Chill or serve over ice cubes. +
+ " + } +} diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/TextButton.qml b/examples/declarative/modelviews/listview/dynamiclist/qml/content/TextButton.qml new file mode 100644 index 0000000..f26d775 --- /dev/null +++ b/examples/declarative/modelviews/listview/dynamiclist/qml/content/TextButton.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: container + + property alias text: label.text + + signal clicked + + width: label.width + 20; height: label.height + 6 + smooth: true + radius: 10 + + gradient: Gradient { + GradientStop { id: gradientStop; position: 0.0; color: palette.light } + GradientStop { position: 1.0; color: palette.button } + } + + SystemPalette { id: palette } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: { container.clicked() } + } + + Text { + id: label + anchors.centerIn: parent + } + + states: State { + name: "pressed" + when: mouseArea.pressed + PropertyChanges { target: gradientStop; color: palette.dark } + } +} + diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/arrow-down.png b/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/arrow-down.png new file mode 100644 index 0000000000000000000000000000000000000000..29d1d4439a139c662aecca94b6f43a465cfb9cc6 GIT binary patch literal 594 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
    Xa0J+Cqb@y0X@UA1qxbVygysgL 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

    FZF`jvSR<4M^u{n>eZ4w{*(QWa@(hp~>) z;}xi9k7xHuaSGuaId=0Iv~xcEh{g;#B0ZqoAL$P^T2)Y67wJx3o~#RVnP~{5j==Ze z52v}0^VypxyRG78*+*w-X1<%^1E*N#G7;p2WtNGZqV{--+%^s-_FdN}Mu_2sh$t0! z5Evzyb#jC$+0oN_^<~ALG%#bF%rVg%J0d@FnYl}*f@s8@#tuYu*wqs~XO#V1Ux=~r z^CMsL{b8N{&&cNn(EEv0_)T{Zg&?WzQ47XMrODMvyns11Luw)oFIwFQe_Ho^auj$v zQm@V@U`27VmiD&tpK_&;X9wq8x%UCsw;0c^sjKV7>DGUKg00?>nch`q)lT_5Yhn27 zeJQ;mB)H!Y!E4pTB!!mwPX}rqRlg`#y-|r38z?gNcp%kY7@_Pf#(P}Y8;RiOslIOu zefP}AU#Z|O1HQavM=k$lmIUc6@2m;Pso&yT2u2s^dn(7&F`wg>)MK~iVrRw2qGlZx zCpq|aLt3CStWZs0(-_Y#_sHf^m&zIYm9St{+>;fBR7dhL;|u*H&b#_9S}rqRoefb2 zEd{IGjy;iAMi|Wcjtwsy`EZks1pSXf5v~#96wEr`;&QAtc}?$CPdTxnEx@8{Ss@*} z7%DwVPxwq)zPJR02bHj|Dn^1Sk52wng&7$99YlIUt-i)}_%s-~^_6`y%X`fo&(ylN zkQqH7|9}kTUNlvcX5-T4Hw1gqqmL$2V!qfNiETw_zc_z@hI2#bs|l z1cob=-2l#=b)>p;^{yx2CqtRip>6|p%b!4c)p}kCSiF*AMzvD~A0@k^e2tEGJ!T<= zGkn!6vxZi__VVZe5-Yq#lh57xMg2-h`}*~5E~#RPy8(!wvE~L~jMW5H5KlHxR9Z<9 z(*CN;_NF+|c&HWCatkbbUp)A0H-%>F$sva9`oo4FO-9ve!o;{#d1+!uR7QoPe4Bfm z240;?{TfP9`I9ujTVyd=!E{(*#nSygKX%D>zBDzLxQ?x;_N88L?>FCt{~nWmoi3-A%+dc8^B)rfz?cd!41IIenRT|hM9B8BnkNwG5es?p0pP^kC z;8-rRnzX8I&$G(0c67|Oh`f)E9&*(WVER0B_(dYw9`!tJEE(s8f>`4+=@*wQbQfSs z*G<}w8x{Fu58?_$nLSs<;85wUY^`6lj1{>xIaH zDd*CBuY}F>Q`Fwc+}3^xsA337ck)_%Gb(?(ioWIdRJb%G@1n*#EK zYReB^oMPNe-W#;u{sha0Qf4DOvtWuH@w552Tmp%Nc`f$r8T60d+8amlU*3X2-$UWW TjHpMXLJ%Uz{||!d&CLG-28JV1 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/lemonade.jpg b/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/lemonade.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db445c9ac876ccfb959d8e3c0219e89a1cb2aafd GIT binary patch literal 6645 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/list-delete.png b/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/list-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..df2a147d246ef62d628d73db36b0b24af98a2ab9 GIT binary patch literal 831 zcmV-F1Hk-=P)R5;6h zl}l(-K@^6Q=FtdACA#^NDs^{Lp)6)L zgDB5eX;UdG_4H6F7*yIgXmIAu0!5NyOCtSU7G=!;6%|3j{gliox-!pOK?G(o&X({YLK$5)lC7F{VZbo703UCXA=&? zO>Nu>w#%A8Rp;5oKacEBBT*BGX+{#I_yE%2i8f!~SeeejbP6SvLH5VQ-~o6A-hwe1 z-+)oOG3-#N-p|7H3rxph%DcJ`E`ihFDtIo2X&L#)9#wa!-__Ey=>18UreVqnx(m*O z14e_~1JA$~|`2HhU^Ra!WRl)GgiU zYU$BXh#q3R4$gpm?mF#|Br$YH!gK>%1c$VCx82fBJaI+hxwpFb)g=^Dbv{zQc<7+k z9t8>W67osVx3S=)K2n#oseNr$I`ov*vgsc2h}xyrpv>h+JHeJUF8ZjWkj` zH1UE>PMpf&iLCQ!iioCJ)~Hi?YjvJaK8_pg59Au!plIt&?SDO~mzDzYD;xj-002ov JPDHLkV1h`%ho%4k literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/minus-sign.png b/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/minus-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f233d7399c4c07c6c66775f7806acac84b1870 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6P60k4u0Wb3;FYqWamwl0TmSYg zzPEV)f9L4=uDMg50*&A=3GxeOV9U{Bm1EIh)b!)dNY8G|=4l2>MR>Y6hE&9zJ@3ia zpuppBkxMsqLg3#2p{{ow4y^sCTR&@AtNcZ-!c0XiUIF(fS@*p4-Mvkxubuwr)McGB zHm7G5zmh%w<-tAQYwQ=f{_Q#1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6FmMZlFeAgPITAoY_7YEDSN5AMVr*h!Q?HqR018Q#xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~MKgx;TbNTux3{AeNAlknp4bh#UKVNeKyw z85dYLe3aa%k>K*&_>m!J9*44?cEJw8^_?w@3@_9;nLjU4H38~p@O1TaS?83{1OTR# BJd^+c literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/moreUp.png b/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/moreUp.png new file mode 100644 index 0000000000000000000000000000000000000000..fefb9c9098a4550c504c900edb15808788812e5a GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6FmMZlFeAgPITAoY_7YEDSN5AMVr-)N5C6Th1`0`*xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~P6ex;TbNTux3<5dPyXo^WJwgW&8%|08@- tQxbsSP&$*(oQV^dQYLTM**~%I6;S;)cJ@c9k@`Tb44$rjF6*2UngHSdJrV!_ literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/pancakes.jpg b/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/pancakes.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60c439638e4d183e483a18542fcb2ee6443051bf GIT binary patch literal 9163 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/plus-sign.png b/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/plus-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..40df1134f8472f399adfa5c8c66c50a98d3bacc0 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6y#YQUu0Wa$(6{&=P?uNAhRG|R zPhIi|$63?4Gdn(WDhGy5?S*zvKV>UH^L*-tUX z$Jv{I&ffC7bM{5Qj4e}Ezbj}vVjnSc;_|19_y1onFfAQuu24ykUoZnB3o9G9teS?7 zt9NpGMrLu#@0UVzfU@^IT^vIy;%X<}%xf{=arHKHYQL~@ZfotgwYUG*$MH^!I&%2V z@)sJL`rl4pesV%`$+ja*^=&3!b{Hmgs`72G$lh?~sgSmhV3T|L)#5pvnp5W$R3F&x zq^-&N)%9FO2FOm@bA*rKR&a{^p(h(SexKRzobg)f!S5Tb z0(ReeejodN_$Ob%pPGvI-{X5McZ=;}w|{;sE!Zmj;a8K;+WTSWrcUlO+qsq1zw`F> zL$~g{I69@}|MDjqpAy@zuKLv`b1gzCeQUnq?;S;@b8|k;l-+S#KOj|nW)fHH0-#SB NJYD@<);T3K0RYVY#HauO literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/vegetable-soup.jpg b/examples/declarative/modelviews/listview/dynamiclist/qml/content/pics/vegetable-soup.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9dce33204181c919fd2dcd83bb0df18f456cca52 GIT binary patch literal 8639 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/listview/dynamiclist/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/listview/dynamiclist/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/listview/dynamiclist/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/listview/dynamiclist/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/listview/dynamiclist/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/listview/dynamiclist/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/listview/expandingdelegates/expandingdelegates.desktop b/examples/declarative/modelviews/listview/expandingdelegates/expandingdelegates.desktop new file mode 100644 index 0000000..6113e00 --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/expandingdelegates.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=expandingdelegates +Exec=/opt/usr/bin/expandingdelegates +Icon=expandingdelegates +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/listview/expandingdelegates/expandingdelegates.png b/examples/declarative/modelviews/listview/expandingdelegates/expandingdelegates.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/listview/expandingdelegates/main.cpp b/examples/declarative/modelviews/listview/expandingdelegates/main.cpp new file mode 100644 index 0000000..0de5247 --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/expandingdelegates.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/PetsModel.qml b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/PetsModel.qml new file mode 100644 index 0000000..5220763 --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/PetsModel.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +ListModel { + ListElement { + name: "Polly" + type: "Parrot" + age: 12 + size: "Small" + } + ListElement { + name: "Penny" + type: "Turtle" + age: 4 + size: "Small" + } + ListElement { + name: "Warren" + type: "Rabbit" + age: 2 + size: "Small" + } + ListElement { + name: "Spot" + type: "Dog" + age: 9 + size: "Medium" + } + ListElement { + name: "Schrödinger" + type: "Cat" + age: 2 + size: "Medium" + } + ListElement { + name: "Joey" + type: "Kangaroo" + age: 1 + size: "Medium" + } + ListElement { + name: "Kimba" + type: "Bunny" + age: 65 + size: "Large" + } + ListElement { + name: "Rover" + type: "Dog" + age: 5 + size: "Large" + } + ListElement { + name: "Tiny" + type: "Elephant" + age: 15 + size: "Large" + } +} diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/PressAndHoldButton.qml b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/PressAndHoldButton.qml new file mode 100644 index 0000000..d6808a4 --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/PressAndHoldButton.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + id: container + + property int repeatDelay: 300 + property int repeatDuration: 75 + property bool pressed: false + + signal clicked + + scale: pressed ? 0.9 : 1 + + function release() { + autoRepeatClicks.stop() + container.pressed = false + } + + SequentialAnimation on pressed { + id: autoRepeatClicks + running: false + + PropertyAction { target: container; property: "pressed"; value: true } + ScriptAction { script: container.clicked() } + PauseAnimation { duration: repeatDelay } + + SequentialAnimation { + loops: Animation.Infinite + ScriptAction { script: container.clicked() } + PauseAnimation { duration: repeatDuration } + } + } + + MouseArea { + anchors.fill: parent + + onPressed: autoRepeatClicks.start() + onReleased: container.release() + onCanceled: container.release() + } +} + diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/RecipesModel.qml b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/RecipesModel.qml new file mode 100644 index 0000000..6056b90 --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/RecipesModel.qml @@ -0,0 +1,129 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +ListModel { + ListElement { + title: "Pancakes" + picture: "content/pics/pancakes.jpg" + ingredients: " +

      +
    • 1 cup (150g) self-raising flour +
    • 1 tbs caster sugar +
    • 3/4 cup (185ml) milk +
    • 1 egg +
    + " + method: " +
      +
    1. Sift flour and sugar together into a bowl. Add a pinch of salt. +
    2. Beat milk and egg together, then add to dry ingredients. Beat until smooth. +
    3. Pour mixture into a pan on medium heat and cook until bubbles appear on the surface. +
    4. Turn over and cook other side until golden. +
    + " + } + ListElement { + title: "Fruit Salad" + picture: "content/pics/fruit-salad.jpg" + ingredients: "* Seasonal Fruit" + method: "* Chop fruit and place in a bowl." + } + ListElement { + title: "Vegetable Soup" + picture: "content/pics/vegetable-soup.jpg" + ingredients: " +
      +
    • 1 onion +
    • 1 turnip +
    • 1 potato +
    • 1 carrot +
    • 1 head of celery +
    • 1 1/2 litres of water +
    + " + method: " +
      +
    1. Chop vegetables. +
    2. Boil in water until vegetables soften. +
    3. Season with salt and pepper to taste. +
    + " + } + ListElement { + title: "Hamburger" + picture: "content/pics/hamburger.jpg" + ingredients: " +
      +
    • 500g minced beef +
    • Seasoning +
    • lettuce, tomato, onion, cheese +
    • 1 hamburger bun for each burger +
    + " + method: " +
      +
    1. Mix the beef, together with seasoning, in a food processor. +
    2. Shape the beef into burgers. +
    3. Grill the burgers for about 5 mins on each side (until cooked through) +
    4. Serve each burger on a bun with ketchup, cheese, lettuce, tomato and onion. +
    + " + } + ListElement { + title: "Lemonade" + picture: "content/pics/lemonade.jpg" + ingredients: " +
      +
    • 1 cup Lemon Juice +
    • 1 cup Sugar +
    • 6 Cups of Water (2 cups warm water, 4 cups cold water) +
    + " + method: " +
      +
    1. Pour 2 cups of warm water into a pitcher and stir in sugar until it dissolves. +
    2. Pour in lemon juice, stir again, and add 4 cups of cold water. +
    3. Chill or serve over ice cubes. +
    + " + } +} diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/TextButton.qml b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/TextButton.qml new file mode 100644 index 0000000..f26d775 --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/TextButton.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: container + + property alias text: label.text + + signal clicked + + width: label.width + 20; height: label.height + 6 + smooth: true + radius: 10 + + gradient: Gradient { + GradientStop { id: gradientStop; position: 0.0; color: palette.light } + GradientStop { position: 1.0; color: palette.button } + } + + SystemPalette { id: palette } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: { container.clicked() } + } + + Text { + id: label + anchors.centerIn: parent + } + + states: State { + name: "pressed" + when: mouseArea.pressed + PropertyChanges { target: gradientStop; color: palette.dark } + } +} + diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/arrow-down.png b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/arrow-down.png new file mode 100644 index 0000000000000000000000000000000000000000..29d1d4439a139c662aecca94b6f43a465cfb9cc6 GIT binary patch literal 594 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
      Xa0J+Cqb@y0X@UA1qxbVygysgL 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

      FZF`jvSR<4M^u{n>eZ4w{*(QWa@(hp~>) z;}xi9k7xHuaSGuaId=0Iv~xcEh{g;#B0ZqoAL$P^T2)Y67wJx3o~#RVnP~{5j==Ze z52v}0^VypxyRG78*+*w-X1<%^1E*N#G7;p2WtNGZqV{--+%^s-_FdN}Mu_2sh$t0! z5Evzyb#jC$+0oN_^<~ALG%#bF%rVg%J0d@FnYl}*f@s8@#tuYu*wqs~XO#V1Ux=~r z^CMsL{b8N{&&cNn(EEv0_)T{Zg&?WzQ47XMrODMvyns11Luw)oFIwFQe_Ho^auj$v zQm@V@U`27VmiD&tpK_&;X9wq8x%UCsw;0c^sjKV7>DGUKg00?>nch`q)lT_5Yhn27 zeJQ;mB)H!Y!E4pTB!!mwPX}rqRlg`#y-|r38z?gNcp%kY7@_Pf#(P}Y8;RiOslIOu zefP}AU#Z|O1HQavM=k$lmIUc6@2m;Pso&yT2u2s^dn(7&F`wg>)MK~iVrRw2qGlZx zCpq|aLt3CStWZs0(-_Y#_sHf^m&zIYm9St{+>;fBR7dhL;|u*H&b#_9S}rqRoefb2 zEd{IGjy;iAMi|Wcjtwsy`EZks1pSXf5v~#96wEr`;&QAtc}?$CPdTxnEx@8{Ss@*} z7%DwVPxwq)zPJR02bHj|Dn^1Sk52wng&7$99YlIUt-i)}_%s-~^_6`y%X`fo&(ylN zkQqH7|9}kTUNlvcX5-T4Hw1gqqmL$2V!qfNiETw_zc_z@hI2#bs|l z1cob=-2l#=b)>p;^{yx2CqtRip>6|p%b!4c)p}kCSiF*AMzvD~A0@k^e2tEGJ!T<= zGkn!6vxZi__VVZe5-Yq#lh57xMg2-h`}*~5E~#RPy8(!wvE~L~jMW5H5KlHxR9Z<9 z(*CN;_NF+|c&HWCatkbbUp)A0H-%>F$sva9`oo4FO-9ve!o;{#d1+!uR7QoPe4Bfm z240;?{TfP9`I9ujTVyd=!E{(*#nSygKX%D>zBDzLxQ?x;_N88L?>FCt{~nWmoi3-A%+dc8^B)rfz?cd!41IIenRT|hM9B8BnkNwG5es?p0pP^kC z;8-rRnzX8I&$G(0c67|Oh`f)E9&*(WVER0B_(dYw9`!tJEE(s8f>`4+=@*wQbQfSs z*G<}w8x{Fu58?_$nLSs<;85wUY^`6lj1{>xIaH zDd*CBuY}F>Q`Fwc+}3^xsA337ck)_%Gb(?(ioWIdRJb%G@1n*#EK zYReB^oMPNe-W#;u{sha0Qf4DOvtWuH@w552Tmp%Nc`f$r8T60d+8amlU*3X2-$UWW TjHpMXLJ%Uz{||!d&CLG-28JV1 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/lemonade.jpg b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/lemonade.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db445c9ac876ccfb959d8e3c0219e89a1cb2aafd GIT binary patch literal 6645 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/list-delete.png b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/list-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..df2a147d246ef62d628d73db36b0b24af98a2ab9 GIT binary patch literal 831 zcmV-F1Hk-=P)R5;6h zl}l(-K@^6Q=FtdACA#^NDs^{Lp)6)L zgDB5eX;UdG_4H6F7*yIgXmIAu0!5NyOCtSU7G=!;6%|3j{gliox-!pOK?G(o&X({YLK$5)lC7F{VZbo703UCXA=&? zO>Nu>w#%A8Rp;5oKacEBBT*BGX+{#I_yE%2i8f!~SeeejbP6SvLH5VQ-~o6A-hwe1 z-+)oOG3-#N-p|7H3rxph%DcJ`E`ihFDtIo2X&L#)9#wa!-__Ey=>18UreVqnx(m*O z14e_~1JA$~|`2HhU^Ra!WRl)GgiU zYU$BXh#q3R4$gpm?mF#|Br$YH!gK>%1c$VCx82fBJaI+hxwpFb)g=^Dbv{zQc<7+k z9t8>W67osVx3S=)K2n#oseNr$I`ov*vgsc2h}xyrpv>h+JHeJUF8ZjWkj` zH1UE>PMpf&iLCQ!iioCJ)~Hi?YjvJaK8_pg59Au!plIt&?SDO~mzDzYD;xj-002ov JPDHLkV1h`%ho%4k literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/minus-sign.png b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/minus-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f233d7399c4c07c6c66775f7806acac84b1870 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6P60k4u0Wb3;FYqWamwl0TmSYg zzPEV)f9L4=uDMg50*&A=3GxeOV9U{Bm1EIh)b!)dNY8G|=4l2>MR>Y6hE&9zJ@3ia zpuppBkxMsqLg3#2p{{ow4y^sCTR&@AtNcZ-!c0XiUIF(fS@*p4-Mvkxubuwr)McGB zHm7G5zmh%w<-tAQYwQ=f{_Q#1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6FmMZlFeAgPITAoY_7YEDSN5AMVr*h!Q?HqR018Q#xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~MKgx;TbNTux3{AeNAlknp4bh#UKVNeKyw z85dYLe3aa%k>K*&_>m!J9*44?cEJw8^_?w@3@_9;nLjU4H38~p@O1TaS?83{1OTR# BJd^+c literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/moreUp.png b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/moreUp.png new file mode 100644 index 0000000000000000000000000000000000000000..fefb9c9098a4550c504c900edb15808788812e5a GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6FmMZlFeAgPITAoY_7YEDSN5AMVr-)N5C6Th1`0`*xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~P6ex;TbNTux3<5dPyXo^WJwgW&8%|08@- tQxbsSP&$*(oQV^dQYLTM**~%I6;S;)cJ@c9k@`Tb44$rjF6*2UngHSdJrV!_ literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/pancakes.jpg b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/pancakes.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60c439638e4d183e483a18542fcb2ee6443051bf GIT binary patch literal 9163 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/plus-sign.png b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/plus-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..40df1134f8472f399adfa5c8c66c50a98d3bacc0 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6y#YQUu0Wa$(6{&=P?uNAhRG|R zPhIi|$63?4Gdn(WDhGy5?S*zvKV>UH^L*-tUX z$Jv{I&ffC7bM{5Qj4e}Ezbj}vVjnSc;_|19_y1onFfAQuu24ykUoZnB3o9G9teS?7 zt9NpGMrLu#@0UVzfU@^IT^vIy;%X<}%xf{=arHKHYQL~@ZfotgwYUG*$MH^!I&%2V z@)sJL`rl4pesV%`$+ja*^=&3!b{Hmgs`72G$lh?~sgSmhV3T|L)#5pvnp5W$R3F&x zq^-&N)%9FO2FOm@bA*rKR&a{^p(h(SexKRzobg)f!S5Tb z0(ReeejodN_$Ob%pPGvI-{X5McZ=;}w|{;sE!Zmj;a8K;+WTSWrcUlO+qsq1zw`F> zL$~g{I69@}|MDjqpAy@zuKLv`b1gzCeQUnq?;S;@b8|k;l-+S#KOj|nW)fHH0-#SB NJYD@<);T3K0RYVY#HauO literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/vegetable-soup.jpg b/examples/declarative/modelviews/listview/expandingdelegates/qml/content/pics/vegetable-soup.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9dce33204181c919fd2dcd83bb0df18f456cca52 GIT binary patch literal 8639 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/listview/expandingdelegates/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/listview/expandingdelegates/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/README b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/README new file mode 100644 index 0000000..1ceed78 --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/README @@ -0,0 +1,6 @@ +The Debian Package expandingdelegates +---------------------------- + +Comments regarding the Package + + -- Daniel Molkentin Thu, 18 Nov 2010 17:28:38 +0100 diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/changelog b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/changelog new file mode 100644 index 0000000..5161d7d --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/changelog @@ -0,0 +1,5 @@ +expandingdelegates (0.0.1) unstable; urgency=low + + * Initial Release. + + -- Daniel Molkentin Thu, 18 Nov 2010 17:28:38 +0100 diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/compat b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/compat @@ -0,0 +1 @@ +7 diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/control b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/control new file mode 100644 index 0000000..6993cea --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/control @@ -0,0 +1,13 @@ +Source: expandingdelegates +Section: user/hidden +Priority: optional +Maintainer: Daniel Molkentin +Build-Depends: debhelper (>= 5), libqt4-dev +Standards-Version: 3.7.3 +Homepage: + +Package: expandingdelegates +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: + diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/copyright b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/copyright new file mode 100644 index 0000000..6185298 --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/copyright @@ -0,0 +1,40 @@ +This package was debianized by Daniel Molkentin on +Thu, 18 Nov 2010 17:28:38 +0100. + +It was downloaded from + +Upstream Author(s): + + + + +Copyright: + + + + +License: + + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2010, Daniel Molkentin and +is licensed under the GPL, see above. + + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. diff --git a/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/rules b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/rules new file mode 100755 index 0000000..96213ef --- /dev/null +++ b/examples/declarative/modelviews/listview/expandingdelegates/qtc_packaging/debian_fremantle/rules @@ -0,0 +1,91 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/expandingdelegates.sgml > expandingdelegates.1 + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + $(MAKE) clean + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/expandingdelegates. + $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/expandingdelegates install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + # dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + # dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/examples/declarative/modelviews/listview/highlight/highlight.desktop b/examples/declarative/modelviews/listview/highlight/highlight.desktop new file mode 100644 index 0000000..5348e40 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/highlight.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=highlight +Exec=/opt/usr/bin/highlight +Icon=highlight +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/listview/highlight/highlight.png b/examples/declarative/modelviews/listview/highlight/highlight.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 zcmV-O4Y%@%P)ht(u000b3 zNkl+r+m%F_C;*wliAId+l;Bw~NnREVgX6DSfv+(~Ms$%J>UH~1TiKG?i==6q;ABhC^ z?Fa;PP1zvRpk{yshy{xNzW=_}wlshM$8bMz0ywE)|E?{*$bARG!R}74&+E~=fBGSCH_q~3rZLE`kFZF`Zg5p_(F9S`V+!f^EBN1AfbVO>l zV*?2wmM7*K$N;DTgsUiqL8d@0kV=|_n&`jpzizedO9)tWdFTh8K`^#$^77P!9khgW zY!Rx>mStcADTf#t1$7O$0t|o*0XKn3gatG^hba2{-neB1+ztE?*sLjd^k^HO+7rUI z#U<*@0G0o{w7eb^h!lqynFTclTrU#CporX1FqyNMH+0Ern&N9m&#V&xj_U(F2mB2J zt<46%_t{NEnvD|IFZF~~d&Uw1T_g&S##v*=ONjw)029C*A{l`GV{0SE$m`(;jw}{N znskEx<>q}Q<12YZEl*LE3Ih306gaq~kqj^oOalLlQhy0dt;u@8$p7^Lt&4>oL!oPx z#8s8=%aut5!dB!t3TKe~K&L~H1lMXjK+#OKRHI5GD|IzkUH?i3OO@}-LaMj9G8lz# z%l5CTmMR6d2)5Xi&TXYMH@9`QFE#2K3&XXz*HoZoHYmE}} z2gzCqV(C$)Qa4CsW6qOGtI%%!WV`fQi$l5ySZr*mjmtm*mMy$LnBc~UpU3Zbir>EL z5q7k1!|(B;ltK`4R+^dg2p6W_d^>jD_u(zaPCr^^8@hrk3G%j4n9z3e5I$h zHt*%PdcQ(f^FBoE0!itt&AS&D@SD9H-ToBEcllZB+s zk=+N-HEn5kb?LNr0_tj96^ef~kie^2ICbnKhHki|lDRofU;aApOn#Gh#$V=lzx5aV z$Jx^^nO%`X>~HULygE0g(X z`b{py-oel{4)1Lt5=ryItKVXDcD&f3()r}32l444EK3-kNE2=Dpl9>WCG-onSlD9c zr%N?M8yN>I$G3v%iKcWshT`^}P5k(+E4)4M9*-UV z&4O$+)XU|82r~)zlcQfDWVF&5ZZFgaJuU2x93q*UBV#3rrAM(ON9|alVFXl)&YX@% zrn2~rAcuB*qU@=(8D~0mGavLg@|)W{pqZSz_G=dbK~FOQb~8TtAx|87jOIX-tF6w^ zE}q=qk0lm!nQ>k||12}9;gZF6-KIckC(i%2z(g#|rlvN!+qYIAV1cALUyv7|DWDVZ zX$(wW$FeP#{K4*hcr=|#P$&$|hffa@Fv3e>f?B$+m4Id1%9%neo+H}QK_nQiKtO_= zl`f2u2zU)e(5EpuKSS2cx#Vx(wu^As=Cu#baASJJRhKn0OvcBFC8vpJ=CQ?My|Bz# zz=^_Co`6)^qH{|deviLQGGit4^Rx(EQ~10ZbLj+GD@TChb9=j@^z6)V>N`*Kk5B$J ze{}qdg}TxBWxn^(KOkbGYZ?h_s*YG=wFFc=3zU$c6s9F)Od%3%#;D-BreyPxTM?QD z9z!FUO_9xIol|}uej|j>6Ch{jux$5pqD;~k-A=y!k1x!=$7+wtBz2KR47Sqly&wN$2gymjWt&D)GPzc~L zAmG!PO3acmvt?3VJ(xek7m2e4a;8m_*N@k56OcCJydSwcE%(-LUHTXJ-cXJh2-bmfHU`sYDbPJpf{I$AtTF3d1C zH&IsaGnxn(&H4YF1v8Tqk{O%MaC?~t#L~l6(YG zroAqg9-GOc<1ITrCv$U*#4lBy$A<1jDGgg}EZeNG>nIwv2-NKXBF;O*?VUc}xNw${ z*m#*_PwU-;JgtCDCMW!QFwTLkdpNTDPM6%s!bPT2Hw$NqtmQsLwFSE9^d4klv>kuu zZd!fa1c|QgD-B(7M^6)jQ&;)P2R|#5j5hUhWb30~dpLW3j%=!huYUfIUD+N> zOg@-AL&i!H^y~OMFf=vnYA0y4aPszNc=n-}`150b%a-Pyg-mjzVN^c`m%|q5>GIPZ z)p_a6zw_{cV|2Afi)<>LquYK5zrCH-%oUz{_%43qwmV&I49%Y7;>=qpG@632BkJd8 z7tS&=JI>a~=7L-}5GEW5uWK#(MxIsFk7E1)e|s&!n>Mz1-0J+_UopfA-KH za&OO}CBYF)r*3lQ+IL8s3xE?@_8p8cZ(Za0(=T#kW(3nRvBe^5rI<=y=iJzj8B1J2 z)xTk_2vt0wIwK;&mJTnEe7cPvy!#3vUx24S_hs6eA~m`ZMiwsd)1j9bUbs-$5k#P~ z)x#6V+ZdaEotMsDX783=1ie1uxfx>V5#reyZ0s7Z)YeMCilGpJ-Ccf~Lpndd_+765 z+a;d7>m;AnImz;OWWy}P>n)oTRnX!^lEY3ZF{6#Dc zP3eWtdbxc=2v{URq3CS&v1OCaF9zOYVEn2}rp4FECpsQLQ$~gR152@@J>5iMHTEp9 zmbgOTwypq)+ybwkf6Hx_(&+2{0*~+cD~@)35x?GCF?F^=+yrLVZhq-;c$IqD0$m+m zc5U(T@;g7`=FF(8-fuK>pz}eFZ2dewBe?pGiugIGL}Lk9BRn3({hx|39KXWzKl+!7 zC&mJ5-bPt0t45OC0A2y;?_2xbL3dhw4R4!7U~7k$#~*0t+{M#;_4_fNIQ%GkqPqzC z{Fru@iNqkLopCayuA3jF3DBx@F$?M&px$p>POu^EIL3&;mUb_j@9_{%y~nH9KjiJH zFn*68OEP4v6sDamNuAY`{8WHU0^b1jB8W8VcDg$bSTz|%BSf72I~;Uwcw}XkOeQa- zN>|#7#+$$bFbQ%K=Z5G-Q2zs*1I$KV%`Xz*a{tmd#PwW{T{?%<;++x}lOt6OjpN+* zyh-s&?Bdn?QBX0Q%hnAW@#+Lr-J9yYq*QhOS|x@K=8e3ZH*^eS1|bPb`j36QKfG8Z zAP&3?+zy0mKT_2r@`lPZFbrxaZ{(t(qreQ11hK(Sf8VPgtFe^{`1WNu)oTGS0vV9M z1KO%TqAZ*rM@-}VIAYK-Qmz0)j`740Nr19ZN&5TVzSVZtAOOgdU;^L7B5vsF1ravm zc*acLs3D53I|MQUY8q4m3!7f(?^>Tb{p$($g#A)4e1B9s{@lL%?>o@kZ5V1WZ~Qcn zz|bu+Ir<-X<5ugvfemb60~^@D1~#yPwc`H(pHeSaefwW^{L9a%BKPWN%_+ eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/listview/highlight/main.cpp b/examples/declarative/modelviews/listview/highlight/main.cpp new file mode 100644 index 0000000..6628a67 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockPortrait); + viewer.setMainQmlFile(QLatin1String("qml/qml/highlight.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/PetsModel.qml b/examples/declarative/modelviews/listview/highlight/qml/content/PetsModel.qml new file mode 100644 index 0000000..5220763 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qml/content/PetsModel.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +ListModel { + ListElement { + name: "Polly" + type: "Parrot" + age: 12 + size: "Small" + } + ListElement { + name: "Penny" + type: "Turtle" + age: 4 + size: "Small" + } + ListElement { + name: "Warren" + type: "Rabbit" + age: 2 + size: "Small" + } + ListElement { + name: "Spot" + type: "Dog" + age: 9 + size: "Medium" + } + ListElement { + name: "Schrödinger" + type: "Cat" + age: 2 + size: "Medium" + } + ListElement { + name: "Joey" + type: "Kangaroo" + age: 1 + size: "Medium" + } + ListElement { + name: "Kimba" + type: "Bunny" + age: 65 + size: "Large" + } + ListElement { + name: "Rover" + type: "Dog" + age: 5 + size: "Large" + } + ListElement { + name: "Tiny" + type: "Elephant" + age: 15 + size: "Large" + } +} diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/PressAndHoldButton.qml b/examples/declarative/modelviews/listview/highlight/qml/content/PressAndHoldButton.qml new file mode 100644 index 0000000..d6808a4 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qml/content/PressAndHoldButton.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + id: container + + property int repeatDelay: 300 + property int repeatDuration: 75 + property bool pressed: false + + signal clicked + + scale: pressed ? 0.9 : 1 + + function release() { + autoRepeatClicks.stop() + container.pressed = false + } + + SequentialAnimation on pressed { + id: autoRepeatClicks + running: false + + PropertyAction { target: container; property: "pressed"; value: true } + ScriptAction { script: container.clicked() } + PauseAnimation { duration: repeatDelay } + + SequentialAnimation { + loops: Animation.Infinite + ScriptAction { script: container.clicked() } + PauseAnimation { duration: repeatDuration } + } + } + + MouseArea { + anchors.fill: parent + + onPressed: autoRepeatClicks.start() + onReleased: container.release() + onCanceled: container.release() + } +} + diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/RecipesModel.qml b/examples/declarative/modelviews/listview/highlight/qml/content/RecipesModel.qml new file mode 100644 index 0000000..6056b90 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qml/content/RecipesModel.qml @@ -0,0 +1,129 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +ListModel { + ListElement { + title: "Pancakes" + picture: "content/pics/pancakes.jpg" + ingredients: " +

        +
      • 1 cup (150g) self-raising flour +
      • 1 tbs caster sugar +
      • 3/4 cup (185ml) milk +
      • 1 egg +
      + " + method: " +
        +
      1. Sift flour and sugar together into a bowl. Add a pinch of salt. +
      2. Beat milk and egg together, then add to dry ingredients. Beat until smooth. +
      3. Pour mixture into a pan on medium heat and cook until bubbles appear on the surface. +
      4. Turn over and cook other side until golden. +
      + " + } + ListElement { + title: "Fruit Salad" + picture: "content/pics/fruit-salad.jpg" + ingredients: "* Seasonal Fruit" + method: "* Chop fruit and place in a bowl." + } + ListElement { + title: "Vegetable Soup" + picture: "content/pics/vegetable-soup.jpg" + ingredients: " +
        +
      • 1 onion +
      • 1 turnip +
      • 1 potato +
      • 1 carrot +
      • 1 head of celery +
      • 1 1/2 litres of water +
      + " + method: " +
        +
      1. Chop vegetables. +
      2. Boil in water until vegetables soften. +
      3. Season with salt and pepper to taste. +
      + " + } + ListElement { + title: "Hamburger" + picture: "content/pics/hamburger.jpg" + ingredients: " +
        +
      • 500g minced beef +
      • Seasoning +
      • lettuce, tomato, onion, cheese +
      • 1 hamburger bun for each burger +
      + " + method: " +
        +
      1. Mix the beef, together with seasoning, in a food processor. +
      2. Shape the beef into burgers. +
      3. Grill the burgers for about 5 mins on each side (until cooked through) +
      4. Serve each burger on a bun with ketchup, cheese, lettuce, tomato and onion. +
      + " + } + ListElement { + title: "Lemonade" + picture: "content/pics/lemonade.jpg" + ingredients: " +
        +
      • 1 cup Lemon Juice +
      • 1 cup Sugar +
      • 6 Cups of Water (2 cups warm water, 4 cups cold water) +
      + " + method: " +
        +
      1. Pour 2 cups of warm water into a pitcher and stir in sugar until it dissolves. +
      2. Pour in lemon juice, stir again, and add 4 cups of cold water. +
      3. Chill or serve over ice cubes. +
      + " + } +} diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/TextButton.qml b/examples/declarative/modelviews/listview/highlight/qml/content/TextButton.qml new file mode 100644 index 0000000..f26d775 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qml/content/TextButton.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: container + + property alias text: label.text + + signal clicked + + width: label.width + 20; height: label.height + 6 + smooth: true + radius: 10 + + gradient: Gradient { + GradientStop { id: gradientStop; position: 0.0; color: palette.light } + GradientStop { position: 1.0; color: palette.button } + } + + SystemPalette { id: palette } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: { container.clicked() } + } + + Text { + id: label + anchors.centerIn: parent + } + + states: State { + name: "pressed" + when: mouseArea.pressed + PropertyChanges { target: gradientStop; color: palette.dark } + } +} + diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/pics/arrow-down.png b/examples/declarative/modelviews/listview/highlight/qml/content/pics/arrow-down.png new file mode 100644 index 0000000000000000000000000000000000000000..29d1d4439a139c662aecca94b6f43a465cfb9cc6 GIT binary patch literal 594 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
        Xa0J+Cqb@y0X@UA1qxbVygysgL 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

        FZF`jvSR<4M^u{n>eZ4w{*(QWa@(hp~>) z;}xi9k7xHuaSGuaId=0Iv~xcEh{g;#B0ZqoAL$P^T2)Y67wJx3o~#RVnP~{5j==Ze z52v}0^VypxyRG78*+*w-X1<%^1E*N#G7;p2WtNGZqV{--+%^s-_FdN}Mu_2sh$t0! z5Evzyb#jC$+0oN_^<~ALG%#bF%rVg%J0d@FnYl}*f@s8@#tuYu*wqs~XO#V1Ux=~r z^CMsL{b8N{&&cNn(EEv0_)T{Zg&?WzQ47XMrODMvyns11Luw)oFIwFQe_Ho^auj$v zQm@V@U`27VmiD&tpK_&;X9wq8x%UCsw;0c^sjKV7>DGUKg00?>nch`q)lT_5Yhn27 zeJQ;mB)H!Y!E4pTB!!mwPX}rqRlg`#y-|r38z?gNcp%kY7@_Pf#(P}Y8;RiOslIOu zefP}AU#Z|O1HQavM=k$lmIUc6@2m;Pso&yT2u2s^dn(7&F`wg>)MK~iVrRw2qGlZx zCpq|aLt3CStWZs0(-_Y#_sHf^m&zIYm9St{+>;fBR7dhL;|u*H&b#_9S}rqRoefb2 zEd{IGjy;iAMi|Wcjtwsy`EZks1pSXf5v~#96wEr`;&QAtc}?$CPdTxnEx@8{Ss@*} z7%DwVPxwq)zPJR02bHj|Dn^1Sk52wng&7$99YlIUt-i)}_%s-~^_6`y%X`fo&(ylN zkQqH7|9}kTUNlvcX5-T4Hw1gqqmL$2V!qfNiETw_zc_z@hI2#bs|l z1cob=-2l#=b)>p;^{yx2CqtRip>6|p%b!4c)p}kCSiF*AMzvD~A0@k^e2tEGJ!T<= zGkn!6vxZi__VVZe5-Yq#lh57xMg2-h`}*~5E~#RPy8(!wvE~L~jMW5H5KlHxR9Z<9 z(*CN;_NF+|c&HWCatkbbUp)A0H-%>F$sva9`oo4FO-9ve!o;{#d1+!uR7QoPe4Bfm z240;?{TfP9`I9ujTVyd=!E{(*#nSygKX%D>zBDzLxQ?x;_N88L?>FCt{~nWmoi3-A%+dc8^B)rfz?cd!41IIenRT|hM9B8BnkNwG5es?p0pP^kC z;8-rRnzX8I&$G(0c67|Oh`f)E9&*(WVER0B_(dYw9`!tJEE(s8f>`4+=@*wQbQfSs z*G<}w8x{Fu58?_$nLSs<;85wUY^`6lj1{>xIaH zDd*CBuY}F>Q`Fwc+}3^xsA337ck)_%Gb(?(ioWIdRJb%G@1n*#EK zYReB^oMPNe-W#;u{sha0Qf4DOvtWuH@w552Tmp%Nc`f$r8T60d+8amlU*3X2-$UWW TjHpMXLJ%Uz{||!d&CLG-28JV1 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/pics/lemonade.jpg b/examples/declarative/modelviews/listview/highlight/qml/content/pics/lemonade.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db445c9ac876ccfb959d8e3c0219e89a1cb2aafd GIT binary patch literal 6645 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/pics/list-delete.png b/examples/declarative/modelviews/listview/highlight/qml/content/pics/list-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..df2a147d246ef62d628d73db36b0b24af98a2ab9 GIT binary patch literal 831 zcmV-F1Hk-=P)R5;6h zl}l(-K@^6Q=FtdACA#^NDs^{Lp)6)L zgDB5eX;UdG_4H6F7*yIgXmIAu0!5NyOCtSU7G=!;6%|3j{gliox-!pOK?G(o&X({YLK$5)lC7F{VZbo703UCXA=&? zO>Nu>w#%A8Rp;5oKacEBBT*BGX+{#I_yE%2i8f!~SeeejbP6SvLH5VQ-~o6A-hwe1 z-+)oOG3-#N-p|7H3rxph%DcJ`E`ihFDtIo2X&L#)9#wa!-__Ey=>18UreVqnx(m*O z14e_~1JA$~|`2HhU^Ra!WRl)GgiU zYU$BXh#q3R4$gpm?mF#|Br$YH!gK>%1c$VCx82fBJaI+hxwpFb)g=^Dbv{zQc<7+k z9t8>W67osVx3S=)K2n#oseNr$I`ov*vgsc2h}xyrpv>h+JHeJUF8ZjWkj` zH1UE>PMpf&iLCQ!iioCJ)~Hi?YjvJaK8_pg59Au!plIt&?SDO~mzDzYD;xj-002ov JPDHLkV1h`%ho%4k literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/pics/minus-sign.png b/examples/declarative/modelviews/listview/highlight/qml/content/pics/minus-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f233d7399c4c07c6c66775f7806acac84b1870 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6P60k4u0Wb3;FYqWamwl0TmSYg zzPEV)f9L4=uDMg50*&A=3GxeOV9U{Bm1EIh)b!)dNY8G|=4l2>MR>Y6hE&9zJ@3ia zpuppBkxMsqLg3#2p{{ow4y^sCTR&@AtNcZ-!c0XiUIF(fS@*p4-Mvkxubuwr)McGB zHm7G5zmh%w<-tAQYwQ=f{_Q#1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6FmMZlFeAgPITAoY_7YEDSN5AMVr*h!Q?HqR018Q#xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~MKgx;TbNTux3{AeNAlknp4bh#UKVNeKyw z85dYLe3aa%k>K*&_>m!J9*44?cEJw8^_?w@3@_9;nLjU4H38~p@O1TaS?83{1OTR# BJd^+c literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/pics/moreUp.png b/examples/declarative/modelviews/listview/highlight/qml/content/pics/moreUp.png new file mode 100644 index 0000000000000000000000000000000000000000..fefb9c9098a4550c504c900edb15808788812e5a GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6FmMZlFeAgPITAoY_7YEDSN5AMVr-)N5C6Th1`0`*xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~P6ex;TbNTux3<5dPyXo^WJwgW&8%|08@- tQxbsSP&$*(oQV^dQYLTM**~%I6;S;)cJ@c9k@`Tb44$rjF6*2UngHSdJrV!_ literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/pics/pancakes.jpg b/examples/declarative/modelviews/listview/highlight/qml/content/pics/pancakes.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60c439638e4d183e483a18542fcb2ee6443051bf GIT binary patch literal 9163 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/pics/plus-sign.png b/examples/declarative/modelviews/listview/highlight/qml/content/pics/plus-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..40df1134f8472f399adfa5c8c66c50a98d3bacc0 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6y#YQUu0Wa$(6{&=P?uNAhRG|R zPhIi|$63?4Gdn(WDhGy5?S*zvKV>UH^L*-tUX z$Jv{I&ffC7bM{5Qj4e}Ezbj}vVjnSc;_|19_y1onFfAQuu24ykUoZnB3o9G9teS?7 zt9NpGMrLu#@0UVzfU@^IT^vIy;%X<}%xf{=arHKHYQL~@ZfotgwYUG*$MH^!I&%2V z@)sJL`rl4pesV%`$+ja*^=&3!b{Hmgs`72G$lh?~sgSmhV3T|L)#5pvnp5W$R3F&x zq^-&N)%9FO2FOm@bA*rKR&a{^p(h(SexKRzobg)f!S5Tb z0(ReeejodN_$Ob%pPGvI-{X5McZ=;}w|{;sE!Zmj;a8K;+WTSWrcUlO+qsq1zw`F> zL$~g{I69@}|MDjqpAy@zuKLv`b1gzCeQUnq?;S;@b8|k;l-+S#KOj|nW)fHH0-#SB NJYD@<);T3K0RYVY#HauO literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlight/qml/content/pics/vegetable-soup.jpg b/examples/declarative/modelviews/listview/highlight/qml/content/pics/vegetable-soup.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9dce33204181c919fd2dcd83bb0df18f456cca52 GIT binary patch literal 8639 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/listview/highlight/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/listview/highlight/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/listview/highlight/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/listview/highlight/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/README b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/README new file mode 100644 index 0000000..37e930a --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/README @@ -0,0 +1,6 @@ +The Debian Package highlight +---------------------------- + +Comments regarding the Package + + -- Daniel Molkentin Thu, 18 Nov 2010 17:33:55 +0100 diff --git a/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/changelog b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/changelog new file mode 100644 index 0000000..43e669b --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/changelog @@ -0,0 +1,5 @@ +highlight (0.0.1) unstable; urgency=low + + * Initial Release. + + -- Daniel Molkentin Thu, 18 Nov 2010 17:33:55 +0100 diff --git a/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/compat b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/compat @@ -0,0 +1 @@ +7 diff --git a/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/control b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/control new file mode 100644 index 0000000..0ed2ce2 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/control @@ -0,0 +1,13 @@ +Source: highlight +Section: user/hidden +Priority: optional +Maintainer: Daniel Molkentin +Build-Depends: debhelper (>= 5), libqt4-dev +Standards-Version: 3.7.3 +Homepage: + +Package: highlight +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: + diff --git a/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/copyright b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/copyright new file mode 100644 index 0000000..b795943 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/copyright @@ -0,0 +1,40 @@ +This package was debianized by Daniel Molkentin on +Thu, 18 Nov 2010 17:33:55 +0100. + +It was downloaded from + +Upstream Author(s): + + + + +Copyright: + + + + +License: + + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2010, Daniel Molkentin and +is licensed under the GPL, see above. + + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. diff --git a/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/rules b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/rules new file mode 100755 index 0000000..986e3ee --- /dev/null +++ b/examples/declarative/modelviews/listview/highlight/qtc_packaging/debian_fremantle/rules @@ -0,0 +1,91 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/highlight.sgml > highlight.1 + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + $(MAKE) clean + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/highlight. + $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/highlight install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + # dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + # dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/examples/declarative/modelviews/listview/highlightranges/highlightranges.desktop b/examples/declarative/modelviews/listview/highlightranges/highlightranges.desktop new file mode 100644 index 0000000..57200be --- /dev/null +++ b/examples/declarative/modelviews/listview/highlightranges/highlightranges.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=highlightranges +Exec=/opt/usr/bin/highlightranges +Icon=highlightranges +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/listview/highlightranges/highlightranges.png b/examples/declarative/modelviews/listview/highlightranges/highlightranges.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/listview/highlightranges/main.cpp b/examples/declarative/modelviews/listview/highlightranges/main.cpp new file mode 100644 index 0000000..f77ce15 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlightranges/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/highlightranges.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/PetsModel.qml b/examples/declarative/modelviews/listview/highlightranges/qml/content/PetsModel.qml new file mode 100644 index 0000000..5220763 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlightranges/qml/content/PetsModel.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +ListModel { + ListElement { + name: "Polly" + type: "Parrot" + age: 12 + size: "Small" + } + ListElement { + name: "Penny" + type: "Turtle" + age: 4 + size: "Small" + } + ListElement { + name: "Warren" + type: "Rabbit" + age: 2 + size: "Small" + } + ListElement { + name: "Spot" + type: "Dog" + age: 9 + size: "Medium" + } + ListElement { + name: "Schrödinger" + type: "Cat" + age: 2 + size: "Medium" + } + ListElement { + name: "Joey" + type: "Kangaroo" + age: 1 + size: "Medium" + } + ListElement { + name: "Kimba" + type: "Bunny" + age: 65 + size: "Large" + } + ListElement { + name: "Rover" + type: "Dog" + age: 5 + size: "Large" + } + ListElement { + name: "Tiny" + type: "Elephant" + age: 15 + size: "Large" + } +} diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/PressAndHoldButton.qml b/examples/declarative/modelviews/listview/highlightranges/qml/content/PressAndHoldButton.qml new file mode 100644 index 0000000..d6808a4 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlightranges/qml/content/PressAndHoldButton.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + id: container + + property int repeatDelay: 300 + property int repeatDuration: 75 + property bool pressed: false + + signal clicked + + scale: pressed ? 0.9 : 1 + + function release() { + autoRepeatClicks.stop() + container.pressed = false + } + + SequentialAnimation on pressed { + id: autoRepeatClicks + running: false + + PropertyAction { target: container; property: "pressed"; value: true } + ScriptAction { script: container.clicked() } + PauseAnimation { duration: repeatDelay } + + SequentialAnimation { + loops: Animation.Infinite + ScriptAction { script: container.clicked() } + PauseAnimation { duration: repeatDuration } + } + } + + MouseArea { + anchors.fill: parent + + onPressed: autoRepeatClicks.start() + onReleased: container.release() + onCanceled: container.release() + } +} + diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/RecipesModel.qml b/examples/declarative/modelviews/listview/highlightranges/qml/content/RecipesModel.qml new file mode 100644 index 0000000..6056b90 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlightranges/qml/content/RecipesModel.qml @@ -0,0 +1,129 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +ListModel { + ListElement { + title: "Pancakes" + picture: "content/pics/pancakes.jpg" + ingredients: " +

          +
        • 1 cup (150g) self-raising flour +
        • 1 tbs caster sugar +
        • 3/4 cup (185ml) milk +
        • 1 egg +
        + " + method: " +
          +
        1. Sift flour and sugar together into a bowl. Add a pinch of salt. +
        2. Beat milk and egg together, then add to dry ingredients. Beat until smooth. +
        3. Pour mixture into a pan on medium heat and cook until bubbles appear on the surface. +
        4. Turn over and cook other side until golden. +
        + " + } + ListElement { + title: "Fruit Salad" + picture: "content/pics/fruit-salad.jpg" + ingredients: "* Seasonal Fruit" + method: "* Chop fruit and place in a bowl." + } + ListElement { + title: "Vegetable Soup" + picture: "content/pics/vegetable-soup.jpg" + ingredients: " +
          +
        • 1 onion +
        • 1 turnip +
        • 1 potato +
        • 1 carrot +
        • 1 head of celery +
        • 1 1/2 litres of water +
        + " + method: " +
          +
        1. Chop vegetables. +
        2. Boil in water until vegetables soften. +
        3. Season with salt and pepper to taste. +
        + " + } + ListElement { + title: "Hamburger" + picture: "content/pics/hamburger.jpg" + ingredients: " +
          +
        • 500g minced beef +
        • Seasoning +
        • lettuce, tomato, onion, cheese +
        • 1 hamburger bun for each burger +
        + " + method: " +
          +
        1. Mix the beef, together with seasoning, in a food processor. +
        2. Shape the beef into burgers. +
        3. Grill the burgers for about 5 mins on each side (until cooked through) +
        4. Serve each burger on a bun with ketchup, cheese, lettuce, tomato and onion. +
        + " + } + ListElement { + title: "Lemonade" + picture: "content/pics/lemonade.jpg" + ingredients: " +
          +
        • 1 cup Lemon Juice +
        • 1 cup Sugar +
        • 6 Cups of Water (2 cups warm water, 4 cups cold water) +
        + " + method: " +
          +
        1. Pour 2 cups of warm water into a pitcher and stir in sugar until it dissolves. +
        2. Pour in lemon juice, stir again, and add 4 cups of cold water. +
        3. Chill or serve over ice cubes. +
        + " + } +} diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/TextButton.qml b/examples/declarative/modelviews/listview/highlightranges/qml/content/TextButton.qml new file mode 100644 index 0000000..f26d775 --- /dev/null +++ b/examples/declarative/modelviews/listview/highlightranges/qml/content/TextButton.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: container + + property alias text: label.text + + signal clicked + + width: label.width + 20; height: label.height + 6 + smooth: true + radius: 10 + + gradient: Gradient { + GradientStop { id: gradientStop; position: 0.0; color: palette.light } + GradientStop { position: 1.0; color: palette.button } + } + + SystemPalette { id: palette } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: { container.clicked() } + } + + Text { + id: label + anchors.centerIn: parent + } + + states: State { + name: "pressed" + when: mouseArea.pressed + PropertyChanges { target: gradientStop; color: palette.dark } + } +} + diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/arrow-down.png b/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/arrow-down.png new file mode 100644 index 0000000000000000000000000000000000000000..29d1d4439a139c662aecca94b6f43a465cfb9cc6 GIT binary patch literal 594 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
          Xa0J+Cqb@y0X@UA1qxbVygysgL zmH$4aTW8>HLQSPxZy46Kdb28lrS&+lAwC}wCrAeVLO;?*kMUN&>}T$D(4Bo90gu&hR|p zJShAh1s2RDn5SfEBK36slZy5XI}mMM6T#pd)sjko}}C^e7#Kjwz%gVwv0zWfK+0!iq$nc%4?`{ z_Z|$_Xp}1kAAIfw_SY&|mowu)}$R3f6#DE1-p4hMlu#TnpKB7&RHd-E=S3 zvynJ{J>d`S*z6H?bPcgS{X)H#(T*gWiSdRI#A~p136>;F zY%~`bu)V5Ic+h4UAk#<}gUcsn?lFYwh5#`}aBEyjH44M-4hK0BMJ9@cPIwX;-ODI5 zVCOj}j{qv_DQ+Mp#>&W$ICK7i{__~Y!0x?T_Sb|a!SA~oyIW~_YTj@Gc{l}daRMP! z`SCsNj7p)W1kC1ms~Q_dS}1L3oXU90?(>%Oq=;wi$2U5SY4KLqrN%lj0zWK z3Nl2^`$9vRt2H>EcTdXJo^RGK9_71t#ToKIIbFI8^R_O8HmfWbTTw}0 zmF!UjNo+ZJceC=W>;~}0k3=lqD!Uw4@AEPmOc7e65iC{U=Xt z((z2IO8=c77(xK>2f6CJqBx-ErB101vLKhd(amD`eah1^emro~&_ty3lKnJIS8ZZ> zZBnvPwsBJ_1t?K73`Vy_f4o&h>b?E$m$d2V13I6)(~)iFbfiw6F_&1hj0xA?SFPH~9E@PTD%yyd^5<;(0?&R7nbfSo z$&1ygSKpB^<*oF;Wl=(s#CyExj)GA7DV4&v^;C^s9|qFI2HQMF1B`~}I=v>%TidGH zsef~W5n?+M+HpB$4z-#{+s#j6`6x44rVBNzxbU8@rMShSU*Sf@fdNMjUu|*6kpn0| z6uXw-ZLtVhPLOD&RjA{|ivD$Hm#V96zduuMLDi?}g<7su!uX6LDK=uSd692RSl23% zE4G_^cz6S_tzh}4@4Ij-qzF(^EI;}rB}C>2uD6iM-<1#sq^I8NY!94^i~%(qpJe%8 zOG|uuxaJ#-mg|GkwoBdm{%fH}rsU@Pi}m+e2^}f-=0!Hpz>v`9GhU zPm|&9ZXNwO!ehqU=~JGta*joFEp|5%Y0J0o8(bFFp=>j1B!NDk^o7^@7=a6!75Ynd zY0Q4jatN6R2sx-Aujjs5uBXvw{z7=)j8N6Fc2JO@hj#weZmb4p!DK7dI2l0R<4~Tm zk6(R!kzVB_fiuo_>t;H&FyzNOHfv1@X!X@l$D3pqA#n>J57vBqT_#mAcbUMUtZiD+ z@1)QWdD;8DGHkA0AA5II7|qijoAs@ie*i(`BA2BE>n=Kpv(c{xgrECJ-lD(}%ZbA! zllsv*Xe0F+{FP&wnxWZqk9Pr@Z8h=W4~OCwqeA;Rz>?%4DQkCcS#}mKtbwexwod~& z?6h~>f|UeHZ~Xrx&D0pp)nzrdUWja5hCZzB{Hn6;9O@fznh^A*==pwDFY zxL`_C{snhLr2CX#p#;lmfSrQn`3M9bNa#>&H9DE{@0H@%;da!(mo_fB{v7q7ZtaG;!md0&Guk2!x1HixW-#b_;_-cdx zt3CQ&G(NhzwH(#Vb!|HmniaEfAy{Dos*uVV-OlUC{>T5lsf4!9uCK|PCzvfnv{C`R z+|_-$#8TrA>&2?LtUY!lm=7ry0nUo~kUP|VKm@Vd$lM9!n=A621myQ6bF<35di%#( zHy!q4gTke#ZkvH=8l5rk$60L86{z~w%H9VEmRg(JPWEzG2rr^E4_8#OJ$~2y9DGKA z2xkWY5*Y%IT8A8XgD4u*TgI~oR;gWKaK}Htj3&ZvQj{u+k9>XS6pCFAO!{P4xO=W@ zY%chJS6zNnJm+C5-)4&s9BX7pS1zo7bL&{8S0>xU);HH#5oTi`ykcf>ws42&qeOs zX%doU*}8MdUi+-`BoBg*fF|Fpgum1wEm{xtGV8vB7^Nmk#KuBxfuPfj^8rN(~{ z#oo&!oJN-uXGXLOR*s9HwEt9Wz57+KkyV@TQ1PzQ$_s61*#~6Gjr?Oh z_IKu|zK^e>mdpGjAnd|9m5MrwNh_4qW}l?nh3imBy=kGEXrDH6fSa~mY8-U{#9 zzj0_Ov#zpB>rZeY(azgkZ8TDxMf@$TOg+-CnX9l|kGj;nAJ)&Y8vYz+$&m5Hc)YrY z+M0L{)pbt$)&1?ZKRd z2Pf|*BfpTi%zSGBR?#}Vy{z$u0&n~|+L0v{Aj%LM6yB%@{5iZw>3gfLXIj}0Xa`F$N7o#91`g}1SMqV*ZIm&26A2skF0q&k%-+m%Yx^ZP zaWV7_c|9o;OCJ?if5yC6Azb+)rw8f-LHFc$^<-Cswm+w$EZ^+|%DH#$TIRn*t!pk6 zop%`t`{WIB+mXPZU~ObvpuT{vxXn3mq#kD7{l*1R0RY7%Qf{Whr3z3E!zKAuUp&h5 zg^iXebH`{Vh4$QKS;}FwlWZsj^Sw)x-`50lwJm7MPbfbsigBfDp*-&zainv>Gz8hN z6$>1_o6v7g54>ycPnCT^uC6r^ z_(a);r#{7C&!f*RS8^$}1mJOg{Rkj3d;TqyCqHF(hacUdu9ALYHXEk$QB)3P%Bd9C0c4`^zS)Ur`DgW^?2CXTmb`fzg;{10^T!kn(TIHR+U!;EWOe~o-|3Kv{{!&3+R*F zbX8V=jD61LXX7WId)m(XMcU7b%g_+0b_ix489y<8^d1BcP||n3VJmn1b+TzEyR2si z1!iel2RtxBsOBYR?mE+m8ZP^u^(zuvoz|K?0%#qan%o4v#r_xxtQfDA&VkC43UQR? z%%lm*eyyM|;D{hK7d2e9K)S3&UZXa5;TGY84$nwvf|M@--Eg1Y8%NaPd)a;}uqCrx zfbV&c2$PhmlcL1e*t6#oBB{LHY9Cz zGuQK@n7zJzMYimgwPH5N9~H2Fqu42Xl)zSaB25y;pJ>h+wQLTU>s3D=7WOaRb?DCg zJ>gwa{^h%kNCw$S-j?`}ky-_vk}R!5Z1Enb;(jR5k+-Hg0bao30LLeTTPms*Eh8=P{vTVP^;b$l5S*2-=uh|fr?pLSn>N1Z zr6okD>@GyD!g>zEhjQat@e}D{#gXMF(~wfyKMwx&ZSdEHtu&x69zS}#IWDMuKEPHh zEtJ?&G}Vf?F4+&^Zwfm5h}3n&g9I(BZi)9-b61q65&!@|iu6~t12wlw*S2{X;8(P% zQxyu8DpZ6jRH;%BtIGD3As#^ON-Nq_ga@f<)_Ri#i`#bILFl1WU1Pyl_A4)F&YOm^ ze3hycJ`Y;atC9i1r!T7_b^7#WcAg=#6B>I+I1a%T}HpHzyTThcgk)@rKfTS#X6IZqfgYL_4oA1JMRiU z&es?cj-IXGsHn#*US>;(+0Vg`ekx_ec!xw>sV}yPeH&MIoivlQ^`i|rLSf(pVr;r)Zpa{`j@hT0 z&@NPGXg}v_cR2n?s;2%3Bp~e=Rz9!ZoJ&NF(H(_anDE8g{{WS6Q_k2N_cTg8KWxJ0 z=HY}9(QX0zO-0=W@>v{PW$6_JvPz*O2Th*%QX&0<8tj2F)@Y^NhqcjlZd; zm*N1}+hbsc)zG`@C*z8uSutLXm3Ye~{DCaIFt?Gp@dyS(fpYR_N%FC zN*0z(mYP=$wvM0I^QlcI!K!eFbw>e7GFeII zDnb=`N|hl9S0tIGN|5W=lmSLSGtAUJx1{N=G+kAjTjP);_N7XZWm0NOOwY9jTWS4` zrW4vvdJL&SOM?*+7^O<09*f*U8q_bELR8(`$uf9Z?^0Ge)~ZMb`O+t;rAnm|xyCy5 zO0lWls4H`+RCO(+pW2^Q_0By_{WJdnX*~W^sZ;Hlrx^YQ-PCUbMM2bq0O7Qc=}~tY z-l`M;y>J3^5GhioY>Pby|*W`{v4PpL{UuB7&*N}z3wQeJ}W*=XN|i_(mnN4)oB$vJ73z4UN}YNK3#B2&DpZL4 Zp38=%GpxlqOX`ihzLh-a-5s>884e9?exK+}TkkT{oh^w10@=7rA z`QFip%q&^HnFZVh65YlQqywk|RzXlWF&qUz38@J|j4A)W5 zY+;Z4eBINi897jvbY?$p0u}+Of;}HJA3T>P6)q{cW;&@#(nW;TKB2J{B7D36)rK>9 z=XZr#&vyM0N?N`FSXWr63Y<&)lW#_hi-j{jj7~r5_;Leiu)G1}beIlZKHSz4fTUN6 zc%KKQevUlnpEyb%ii=20ucEXyDk#e{_)_3UdV^^m~ z|Fl;;VQip)y@XXCmaZS2@>^RLpMuKgOf=q-xC%Uf{0SS1xzO~cWM0yApOw8g$VoIJ zA(^g%NLH+NL5X6uz2pw5e3Xbap1#WvPsdcx9|rUoJoNgtFske8T{vK=RfVp({}@Ir za}Uk=%syc<^HX3XPuVBFh&&P^GxQ!E)hofa?)UOgxS@*Gd01uee+zCRE=S&{ORvRY zC9O`#8h-y1PQvbDsT(;DK}O>9*k5BUJ!u1A3vYa0kcRpq9( z{D4ST@O;wTlK@(Ns7|R&bb_($eJ~8>3l2&Q7k7bJ!@A=F6*5Xr`_Csyv5IuN4VKL< z&Rc!hqx*QfI(zEI8vtG+`UG6*;ev#azh1GRIr0-fsxJK*M(J!Q+666Y^RROF-Cb?a z{aJ>%FuD|V-=XJdef9SS@NM$=UN0OeD+-)))xN}oPjO)gj(_!*tTtjgVNHzK7AO>% zxu(9xdX8Xq4S_4+Kkc-s*!yTZaMYbjqZCaO))MdW640=yY@B{EaYIVX=gb=bo&3@A z^IY8L6Uyf!@}sNETuPMU6aF=lz0Mq^uL?DbrG+Q&>5!Trn^rX9ML$QMS;U4PUKieT zgs`ySkaO~F4luY96p0}{;R2b2kzEHv(dtA~TPD5g%HarUU0yQjwl9<&aOv5Hm43fM z)fK`=ksyen&VQ}da4DJ!7L((%Bz$UflN=l+05RzT!VG=wwcFV7o4W_~I|k8hdZrfX z2?aU_x>hWMM-MFQtuF%?%-1YKF?tuF9ZQ0lV|sj2M)v=!`19PUzR;w@HSFN)RgfYs69g!lJa54f)S>@K2-32@Z3)xaI=UbbHid2CacjUdqQM%PLml{P zGSocQ|FpUYRaVdV^dX&(X}x!*er-;-t@UIM^>KAt-i3Ly$%mbtH@$5|e(LgnltV0n zd>cWEqV0Fc-+GfO!C~sxrImZNtZw5M59dKk(IYx2jz6dVIPtw`v-aW2k>wHb0?YKS zPRooanqsDA#nq_qILfo7vDNF5eQYB}i=UII-#Q|aN6ti7*S^9C#gRV7q1zG-NTr7`%6|p2 z2Xk4stJ%hd)==iOziJkiMR{1TXK89){wCyjzc4b>~ zAmz64NEq$Aq%hDG>$?O!4SW-ca4dfT%KX*KN!&jaH!Utv#oUK>vUN~*zL?r~!?2k; zJn3Z;@?ezQf4t5c2t_umL2^TZEbR-xaJ?=*-E7rmjX$ zs#OA#wjK%YqZnDe0mL;F>bSDv2RRj-WsrK$p!QT$`{dgptEwPErsDlQVuJjJqrF#} zmb~R|Po-eR{$AJCj$KHwaMo~-MBLJcZz<WpbOt=7!qaJv1o0TOJBhepgha=XyJV%L2Dlyc-=T& zh}>p!(`~R1h#LO!_&WcIAh02Dedd?}x5Qso_v)j=EMx;WG zUi?x~Po8|_YbhYW{+8S8_n9D9nj6vo^8E})e;(aE3k|?nR_%W8^^=nQ)&iT>6Rp)7 z5|o?uy$Ufm%-Xw`w^w?vS42`A1ZAAVkc$?qM#(FkPd?dRl^a~Y@?TW}7gder1TI49 zzk$7~GLWq{LR>v953W4eyxPV=;Zhx{K2D9`A3kPbP>dm#h7LxCW zRLbfp6urnjvhmZ8^>nUV7UOaVxdEWu?cSi8ykUEWN^z4XL*x(jwY4>JnwnliOrzwC z*UpZs4;n7QE4>fAy<}Rr8awd|`HM32<^^_cN6W^`9=W; z31!L#aZudKbc^+43_^}+@fVwK%Eq;0QoZdjSx;#0?ZyA<5bjDQ-|G?*qSQk@d+faj zo#J{dra?_fA;&qN)H1)9eFxXlVGvxa;|mF(n{<9u)h=`hi=k&olgtqR9-Op>96z|E zyElf)PL6Q3%!_kb=0{~+B&rrzEY`IjBZY*a8fHa4kt;WVeD32j3p!N9aD(%J4Rfyk z*QBw41&pq)CEA2N%zd@oJEh#!*L%Vk^<+b|xE1l3t2^-IY?66s1Sy)_{oIhsJFs~M z`-S0S{Gj!|zn4y#mW4O^mAFvsGO{!C%(Cr0qw-~)Z7}ZG0zI1Z!h^t^$Gk;JY7msj zW(!z?qn(5|J+_q$Dh1qvy%{E=msMx$IL9xf@T^xC3QgLDbCFTo!vZuy?WFI`5MF)D z@bb>7*Yh_35BMcJv)Q}uFh!%Sb4v4YbX;%em2XS$oA#GdEi7KaBWoxv;KyvC=YN9b zhdiV-Rd$%kgR{eVCYlx%d}5p;v-a%O+lY5v)iy6YWED+oo236M#4RLctUya9B#4B- ze=iqLj=pl`aw6uw#3;*R{F^_$_E=69zPnZE(5V5 zwo5~ScAfsl7arC=DE^cvo&7_1Y*o{MnrELM`*iiA<`&~1q~m*|3WUStFIDUwcFyG! z=TBaRVJeT8Z4K*12S6Z2cW{@Kap3U&bE?W+*r6w9&+EEhfo}93TQ8dP3(jc^mgFce zJGHgKK;g3&u63uu9xtT=#~vO$dhN|k!dT2sS~bcga#9(p6-r%*_v*@0;BKyEv@r?h zAehuRgC!rwN%Hoy>gy$_8TB;6bBaJ+eG^fEDNZP>kvqb? zpXMFsR{AraJZZ~&1S!KzpeCc@4O;mf&e9ManFXF<_Y+jLt4E)u@Code&*!m@$qw)J zdW-3SG!ytd992JO-vDAliaboTb~R1yn^%lhP4hQ zRGE6*W_-v2V+FGrqDsz!0u0C;d0RcywSbX);ZAPayS;NbsM*mi^Y_)rNksu2g59x( z$!#|eu~`-N`}M4f=&yY7{>(O2O8yzX-nShb_-Z<=CUfGdUk)ZBv`z&IDOu3F07 zj!CsCS?u)sp`M#lRJNGfQBl5G$(N5}9>s04pSP8DUgYua_W01^@v}&&`XygCZZtPt zk#fk}j?`yT!wUF=61y9Klu%oH)Axtm!9*VW69s5e8s2KUOS$TL0{!z0yvd4PE*&%x zEXpmM!B~o-3HQBySM*)i_cIOuV)XxR6t!<(la00<2%Pci56dZaZm|g?d4ya=ua`RlC3#m!)u?=j{KPRU-EIZBp;65|_EHk99tPu7af zgo?JgFZldg*WAr_G@*?nM*h`qy1W0BhD=Z}Aoznq0Twbf!|MM_=p8HmYA$9oByvE~ z;h~6@Ocu*#tc}GijGUj-cd*8L5hptpz)?QNte)s-rTNvJt-y+}pzupR_wP$W!K`Xm zV{BgFSu;}KZ*A65$dHcTi>=l?D@vkNju<V1;XefT zLryuGG$6k5>E}9lo1TaEGYr)#bH>wZmhaN`99bxhFl5ma0o6g~TROW6eHtI!*)0mM z%7|r*VT-yu6T)fHNdw1y1Wm?6*U@XZXC9CZW% zw|gax2+@A?MgcxpO@;M;*n8rfkH}vX)5EY=)5>?=SbbUHva*tza?E)pxu2%pYUiLZ zac7niQuv$<@ZLvBjeRxRfGJSt*#q;(O=n$M7k)pA{>FFmE?q3!wDnuGN51zf^&^`^ z82-(<4yLr+LN7Tb?i^#Qrj0yu3`h10dluGq7}EqaKyu3Oz}HN7&jOCHW(pHaOTW$Q zbL}`8o@qS3dww5z5xiTu?4*2h+4IbBl~dn5wq=kjkAnMmT3ogD4Zyf}(wgXG^U8o_ zF2p6zw2xrAQDV&T1A<*3Z@{5(k#vZ zugY_fA>QWf9*#MthwCdV*Q`?-~n>}>c(D58Lqp*1C7?z;hKaxG87 zTZoI6n)ygqjT{0ar<6YiMviCNQc-M>;VbdM&N*Okx_5`|bRkII=CPQ9@%rc>1;8Qt zjA`V}b(4;K6%4nnr)z(a|5D3u81pIy0On4sAj8RqPQGB*VGbU0TN}(#j@r&?6cR(D zF#>LUY;dq3|5S3i?ZzEcXEz^lF?KoSUYFx5w&p#)*>bC6Png}eu(kC&J5t8gv6UW z5Ua7Q;L3XciU$fuFj}qi>bn-0TJX>Q8XPtfK{H}Wiur&-vzvpfHAy(=(ib6w_?u>> z`Gh=bUPxpBA**l+R{Zp-T)*`RUUhl5_tSr^QXdoHI|g+i%^I257#Mcz5RP=>_hFbg z8XVEaIM@LV`e3_4$xyJ`*FZIvL5@wu_r_aUKM?wG)1jx{-V#09Es(8H8*iCoMT4$O z75YG_Inw$!1AMX6G=jYc16736A3-f{jy~x;7++2KJNBftMImn+`X3kuZ^%_EeF;Pa z&A7UF$|X5TiXSA}lynscXbbh34*aI2jNi|+d@$58r=JTGv)QZC)krD;QIXt@nvJT* z(SRy{W5t&H{DSpATjAc|6#UHoiR*i;$v_aIgXz&M>}HJDUn~MT@9l-H^SQH z*TM7jU7{$ftyU6#)FU#!Z$<9R(<7Dhb5HDYn4f6i4?R)j`-qg_L-`G9i`Ag~Mr~;# zFIzsTqsmtUPNa9ED0I7&eQ;r)Cm)wjMRlmq4~YaBh^<-&D({>9h|jK|p9nwjD*&DF zD8J+5vi{rl@PxXT)oz6Uv=qJ)DZMyL1I>juxZiIJWC=C94d1%6r_|3%c@A`yPFYDw6 zeapn)IN10LF>YsJ6aMHQ-03C9RhqRAa#(F7juue8O!W0dzvY)!<<^$=dUdF$UA6>g znCA*k2I4)*vH!&rlU<<9<*?}qZz`LoILOPkX~ z*D32iY$1M7N$$Cy~V5UN4O$v>BT zT5ZZ0F`Q1L>ci>W_k$TQcu6cNG0d!#NU-RRA$5pFs?j=b|B~5O6xzn3{mExqGjpRg z$KsCSiUuR)mxR;{onof`R`AojK!wIn77tTApmv_%FF}$79!gV?+C$KSm$sm?Z$BA( zh`CCB+pL#le!lC(-q-9g=3hCK|KW0SoNJZ9Atcf?8kzk!fZ4u-yKdzB zISj7N^hL6{19B?wS2~{$JKFj!MnrE`5~`H62!7Jd*=B#aIu=TmE^>{{o-iXF-WvXw z;+sB+{kTV?&gQ{nV`S`8(({7vyXmb0B?z1~uG{qa@dJ4^aP)*9XCA{if8QR%TM9ban_r)T(Z#wZ$8 z$O7)e)0YHh=RYJF!wwDCm$KY~1GIkXTcgKS@9dafwAxCD(A7e#V}OlSzfuTlW1}xn z2HoS6(|h~#vq|FcqJlq00~_cHYw_S

          FZF`jvSR<4M^u{n>eZ4w{*(QWa@(hp~>) z;}xi9k7xHuaSGuaId=0Iv~xcEh{g;#B0ZqoAL$P^T2)Y67wJx3o~#RVnP~{5j==Ze z52v}0^VypxyRG78*+*w-X1<%^1E*N#G7;p2WtNGZqV{--+%^s-_FdN}Mu_2sh$t0! z5Evzyb#jC$+0oN_^<~ALG%#bF%rVg%J0d@FnYl}*f@s8@#tuYu*wqs~XO#V1Ux=~r z^CMsL{b8N{&&cNn(EEv0_)T{Zg&?WzQ47XMrODMvyns11Luw)oFIwFQe_Ho^auj$v zQm@V@U`27VmiD&tpK_&;X9wq8x%UCsw;0c^sjKV7>DGUKg00?>nch`q)lT_5Yhn27 zeJQ;mB)H!Y!E4pTB!!mwPX}rqRlg`#y-|r38z?gNcp%kY7@_Pf#(P}Y8;RiOslIOu zefP}AU#Z|O1HQavM=k$lmIUc6@2m;Pso&yT2u2s^dn(7&F`wg>)MK~iVrRw2qGlZx zCpq|aLt3CStWZs0(-_Y#_sHf^m&zIYm9St{+>;fBR7dhL;|u*H&b#_9S}rqRoefb2 zEd{IGjy;iAMi|Wcjtwsy`EZks1pSXf5v~#96wEr`;&QAtc}?$CPdTxnEx@8{Ss@*} z7%DwVPxwq)zPJR02bHj|Dn^1Sk52wng&7$99YlIUt-i)}_%s-~^_6`y%X`fo&(ylN zkQqH7|9}kTUNlvcX5-T4Hw1gqqmL$2V!qfNiETw_zc_z@hI2#bs|l z1cob=-2l#=b)>p;^{yx2CqtRip>6|p%b!4c)p}kCSiF*AMzvD~A0@k^e2tEGJ!T<= zGkn!6vxZi__VVZe5-Yq#lh57xMg2-h`}*~5E~#RPy8(!wvE~L~jMW5H5KlHxR9Z<9 z(*CN;_NF+|c&HWCatkbbUp)A0H-%>F$sva9`oo4FO-9ve!o;{#d1+!uR7QoPe4Bfm z240;?{TfP9`I9ujTVyd=!E{(*#nSygKX%D>zBDzLxQ?x;_N88L?>FCt{~nWmoi3-A%+dc8^B)rfz?cd!41IIenRT|hM9B8BnkNwG5es?p0pP^kC z;8-rRnzX8I&$G(0c67|Oh`f)E9&*(WVER0B_(dYw9`!tJEE(s8f>`4+=@*wQbQfSs z*G<}w8x{Fu58?_$nLSs<;85wUY^`6lj1{>xIaH zDd*CBuY}F>Q`Fwc+}3^xsA337ck)_%Gb(?(ioWIdRJb%G@1n*#EK zYReB^oMPNe-W#;u{sha0Qf4DOvtWuH@w552Tmp%Nc`f$r8T60d+8amlU*3X2-$UWW TjHpMXLJ%Uz{||!d&CLG-28JV1 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/lemonade.jpg b/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/lemonade.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db445c9ac876ccfb959d8e3c0219e89a1cb2aafd GIT binary patch literal 6645 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/list-delete.png b/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/list-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..df2a147d246ef62d628d73db36b0b24af98a2ab9 GIT binary patch literal 831 zcmV-F1Hk-=P)R5;6h zl}l(-K@^6Q=FtdACA#^NDs^{Lp)6)L zgDB5eX;UdG_4H6F7*yIgXmIAu0!5NyOCtSU7G=!;6%|3j{gliox-!pOK?G(o&X({YLK$5)lC7F{VZbo703UCXA=&? zO>Nu>w#%A8Rp;5oKacEBBT*BGX+{#I_yE%2i8f!~SeeejbP6SvLH5VQ-~o6A-hwe1 z-+)oOG3-#N-p|7H3rxph%DcJ`E`ihFDtIo2X&L#)9#wa!-__Ey=>18UreVqnx(m*O z14e_~1JA$~|`2HhU^Ra!WRl)GgiU zYU$BXh#q3R4$gpm?mF#|Br$YH!gK>%1c$VCx82fBJaI+hxwpFb)g=^Dbv{zQc<7+k z9t8>W67osVx3S=)K2n#oseNr$I`ov*vgsc2h}xyrpv>h+JHeJUF8ZjWkj` zH1UE>PMpf&iLCQ!iioCJ)~Hi?YjvJaK8_pg59Au!plIt&?SDO~mzDzYD;xj-002ov JPDHLkV1h`%ho%4k literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/minus-sign.png b/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/minus-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f233d7399c4c07c6c66775f7806acac84b1870 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6P60k4u0Wb3;FYqWamwl0TmSYg zzPEV)f9L4=uDMg50*&A=3GxeOV9U{Bm1EIh)b!)dNY8G|=4l2>MR>Y6hE&9zJ@3ia zpuppBkxMsqLg3#2p{{ow4y^sCTR&@AtNcZ-!c0XiUIF(fS@*p4-Mvkxubuwr)McGB zHm7G5zmh%w<-tAQYwQ=f{_Q#1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6FmMZlFeAgPITAoY_7YEDSN5AMVr*h!Q?HqR018Q#xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~MKgx;TbNTux3{AeNAlknp4bh#UKVNeKyw z85dYLe3aa%k>K*&_>m!J9*44?cEJw8^_?w@3@_9;nLjU4H38~p@O1TaS?83{1OTR# BJd^+c literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/moreUp.png b/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/moreUp.png new file mode 100644 index 0000000000000000000000000000000000000000..fefb9c9098a4550c504c900edb15808788812e5a GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6FmMZlFeAgPITAoY_7YEDSN5AMVr-)N5C6Th1`0`*xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~P6ex;TbNTux3<5dPyXo^WJwgW&8%|08@- tQxbsSP&$*(oQV^dQYLTM**~%I6;S;)cJ@c9k@`Tb44$rjF6*2UngHSdJrV!_ literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/pancakes.jpg b/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/pancakes.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60c439638e4d183e483a18542fcb2ee6443051bf GIT binary patch literal 9163 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/plus-sign.png b/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/plus-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..40df1134f8472f399adfa5c8c66c50a98d3bacc0 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6y#YQUu0Wa$(6{&=P?uNAhRG|R zPhIi|$63?4Gdn(WDhGy5?S*zvKV>UH^L*-tUX z$Jv{I&ffC7bM{5Qj4e}Ezbj}vVjnSc;_|19_y1onFfAQuu24ykUoZnB3o9G9teS?7 zt9NpGMrLu#@0UVzfU@^IT^vIy;%X<}%xf{=arHKHYQL~@ZfotgwYUG*$MH^!I&%2V z@)sJL`rl4pesV%`$+ja*^=&3!b{Hmgs`72G$lh?~sgSmhV3T|L)#5pvnp5W$R3F&x zq^-&N)%9FO2FOm@bA*rKR&a{^p(h(SexKRzobg)f!S5Tb z0(ReeejodN_$Ob%pPGvI-{X5McZ=;}w|{;sE!Zmj;a8K;+WTSWrcUlO+qsq1zw`F> zL$~g{I69@}|MDjqpAy@zuKLv`b1gzCeQUnq?;S;@b8|k;l-+S#KOj|nW)fHH0-#SB NJYD@<);T3K0RYVY#HauO literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/vegetable-soup.jpg b/examples/declarative/modelviews/listview/highlightranges/qml/content/pics/vegetable-soup.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9dce33204181c919fd2dcd83bb0df18f456cca52 GIT binary patch literal 8639 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/listview/highlightranges/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/listview/highlightranges/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/listview/highlightranges/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/listview/highlightranges/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/listview/highlightranges/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/listview/highlightranges/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/listview/sections/main.cpp b/examples/declarative/modelviews/listview/sections/main.cpp new file mode 100644 index 0000000..19b2dc8 --- /dev/null +++ b/examples/declarative/modelviews/listview/sections/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockPortrait); + viewer.setMainQmlFile(QLatin1String("qml/qml/sections.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/listview/sections/qml/content/PetsModel.qml b/examples/declarative/modelviews/listview/sections/qml/content/PetsModel.qml new file mode 100644 index 0000000..5220763 --- /dev/null +++ b/examples/declarative/modelviews/listview/sections/qml/content/PetsModel.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +ListModel { + ListElement { + name: "Polly" + type: "Parrot" + age: 12 + size: "Small" + } + ListElement { + name: "Penny" + type: "Turtle" + age: 4 + size: "Small" + } + ListElement { + name: "Warren" + type: "Rabbit" + age: 2 + size: "Small" + } + ListElement { + name: "Spot" + type: "Dog" + age: 9 + size: "Medium" + } + ListElement { + name: "Schrödinger" + type: "Cat" + age: 2 + size: "Medium" + } + ListElement { + name: "Joey" + type: "Kangaroo" + age: 1 + size: "Medium" + } + ListElement { + name: "Kimba" + type: "Bunny" + age: 65 + size: "Large" + } + ListElement { + name: "Rover" + type: "Dog" + age: 5 + size: "Large" + } + ListElement { + name: "Tiny" + type: "Elephant" + age: 15 + size: "Large" + } +} diff --git a/examples/declarative/modelviews/listview/sections/qml/content/PressAndHoldButton.qml b/examples/declarative/modelviews/listview/sections/qml/content/PressAndHoldButton.qml new file mode 100644 index 0000000..d6808a4 --- /dev/null +++ b/examples/declarative/modelviews/listview/sections/qml/content/PressAndHoldButton.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + id: container + + property int repeatDelay: 300 + property int repeatDuration: 75 + property bool pressed: false + + signal clicked + + scale: pressed ? 0.9 : 1 + + function release() { + autoRepeatClicks.stop() + container.pressed = false + } + + SequentialAnimation on pressed { + id: autoRepeatClicks + running: false + + PropertyAction { target: container; property: "pressed"; value: true } + ScriptAction { script: container.clicked() } + PauseAnimation { duration: repeatDelay } + + SequentialAnimation { + loops: Animation.Infinite + ScriptAction { script: container.clicked() } + PauseAnimation { duration: repeatDuration } + } + } + + MouseArea { + anchors.fill: parent + + onPressed: autoRepeatClicks.start() + onReleased: container.release() + onCanceled: container.release() + } +} + diff --git a/examples/declarative/modelviews/listview/sections/qml/content/RecipesModel.qml b/examples/declarative/modelviews/listview/sections/qml/content/RecipesModel.qml new file mode 100644 index 0000000..6056b90 --- /dev/null +++ b/examples/declarative/modelviews/listview/sections/qml/content/RecipesModel.qml @@ -0,0 +1,129 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +ListModel { + ListElement { + title: "Pancakes" + picture: "content/pics/pancakes.jpg" + ingredients: " +

            +
          • 1 cup (150g) self-raising flour +
          • 1 tbs caster sugar +
          • 3/4 cup (185ml) milk +
          • 1 egg +
          + " + method: " +
            +
          1. Sift flour and sugar together into a bowl. Add a pinch of salt. +
          2. Beat milk and egg together, then add to dry ingredients. Beat until smooth. +
          3. Pour mixture into a pan on medium heat and cook until bubbles appear on the surface. +
          4. Turn over and cook other side until golden. +
          + " + } + ListElement { + title: "Fruit Salad" + picture: "content/pics/fruit-salad.jpg" + ingredients: "* Seasonal Fruit" + method: "* Chop fruit and place in a bowl." + } + ListElement { + title: "Vegetable Soup" + picture: "content/pics/vegetable-soup.jpg" + ingredients: " +
            +
          • 1 onion +
          • 1 turnip +
          • 1 potato +
          • 1 carrot +
          • 1 head of celery +
          • 1 1/2 litres of water +
          + " + method: " +
            +
          1. Chop vegetables. +
          2. Boil in water until vegetables soften. +
          3. Season with salt and pepper to taste. +
          + " + } + ListElement { + title: "Hamburger" + picture: "content/pics/hamburger.jpg" + ingredients: " +
            +
          • 500g minced beef +
          • Seasoning +
          • lettuce, tomato, onion, cheese +
          • 1 hamburger bun for each burger +
          + " + method: " +
            +
          1. Mix the beef, together with seasoning, in a food processor. +
          2. Shape the beef into burgers. +
          3. Grill the burgers for about 5 mins on each side (until cooked through) +
          4. Serve each burger on a bun with ketchup, cheese, lettuce, tomato and onion. +
          + " + } + ListElement { + title: "Lemonade" + picture: "content/pics/lemonade.jpg" + ingredients: " +
            +
          • 1 cup Lemon Juice +
          • 1 cup Sugar +
          • 6 Cups of Water (2 cups warm water, 4 cups cold water) +
          + " + method: " +
            +
          1. Pour 2 cups of warm water into a pitcher and stir in sugar until it dissolves. +
          2. Pour in lemon juice, stir again, and add 4 cups of cold water. +
          3. Chill or serve over ice cubes. +
          + " + } +} diff --git a/examples/declarative/modelviews/listview/sections/qml/content/TextButton.qml b/examples/declarative/modelviews/listview/sections/qml/content/TextButton.qml new file mode 100644 index 0000000..f26d775 --- /dev/null +++ b/examples/declarative/modelviews/listview/sections/qml/content/TextButton.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: container + + property alias text: label.text + + signal clicked + + width: label.width + 20; height: label.height + 6 + smooth: true + radius: 10 + + gradient: Gradient { + GradientStop { id: gradientStop; position: 0.0; color: palette.light } + GradientStop { position: 1.0; color: palette.button } + } + + SystemPalette { id: palette } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: { container.clicked() } + } + + Text { + id: label + anchors.centerIn: parent + } + + states: State { + name: "pressed" + when: mouseArea.pressed + PropertyChanges { target: gradientStop; color: palette.dark } + } +} + diff --git a/examples/declarative/modelviews/listview/sections/qml/content/pics/arrow-down.png b/examples/declarative/modelviews/listview/sections/qml/content/pics/arrow-down.png new file mode 100644 index 0000000000000000000000000000000000000000..29d1d4439a139c662aecca94b6f43a465cfb9cc6 GIT binary patch literal 594 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
            Xa0J+Cqb@y0X@UA1qxbVygysgL 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

            FZF`jvSR<4M^u{n>eZ4w{*(QWa@(hp~>) z;}xi9k7xHuaSGuaId=0Iv~xcEh{g;#B0ZqoAL$P^T2)Y67wJx3o~#RVnP~{5j==Ze z52v}0^VypxyRG78*+*w-X1<%^1E*N#G7;p2WtNGZqV{--+%^s-_FdN}Mu_2sh$t0! z5Evzyb#jC$+0oN_^<~ALG%#bF%rVg%J0d@FnYl}*f@s8@#tuYu*wqs~XO#V1Ux=~r z^CMsL{b8N{&&cNn(EEv0_)T{Zg&?WzQ47XMrODMvyns11Luw)oFIwFQe_Ho^auj$v zQm@V@U`27VmiD&tpK_&;X9wq8x%UCsw;0c^sjKV7>DGUKg00?>nch`q)lT_5Yhn27 zeJQ;mB)H!Y!E4pTB!!mwPX}rqRlg`#y-|r38z?gNcp%kY7@_Pf#(P}Y8;RiOslIOu zefP}AU#Z|O1HQavM=k$lmIUc6@2m;Pso&yT2u2s^dn(7&F`wg>)MK~iVrRw2qGlZx zCpq|aLt3CStWZs0(-_Y#_sHf^m&zIYm9St{+>;fBR7dhL;|u*H&b#_9S}rqRoefb2 zEd{IGjy;iAMi|Wcjtwsy`EZks1pSXf5v~#96wEr`;&QAtc}?$CPdTxnEx@8{Ss@*} z7%DwVPxwq)zPJR02bHj|Dn^1Sk52wng&7$99YlIUt-i)}_%s-~^_6`y%X`fo&(ylN zkQqH7|9}kTUNlvcX5-T4Hw1gqqmL$2V!qfNiETw_zc_z@hI2#bs|l z1cob=-2l#=b)>p;^{yx2CqtRip>6|p%b!4c)p}kCSiF*AMzvD~A0@k^e2tEGJ!T<= zGkn!6vxZi__VVZe5-Yq#lh57xMg2-h`}*~5E~#RPy8(!wvE~L~jMW5H5KlHxR9Z<9 z(*CN;_NF+|c&HWCatkbbUp)A0H-%>F$sva9`oo4FO-9ve!o;{#d1+!uR7QoPe4Bfm z240;?{TfP9`I9ujTVyd=!E{(*#nSygKX%D>zBDzLxQ?x;_N88L?>FCt{~nWmoi3-A%+dc8^B)rfz?cd!41IIenRT|hM9B8BnkNwG5es?p0pP^kC z;8-rRnzX8I&$G(0c67|Oh`f)E9&*(WVER0B_(dYw9`!tJEE(s8f>`4+=@*wQbQfSs z*G<}w8x{Fu58?_$nLSs<;85wUY^`6lj1{>xIaH zDd*CBuY}F>Q`Fwc+}3^xsA337ck)_%Gb(?(ioWIdRJb%G@1n*#EK zYReB^oMPNe-W#;u{sha0Qf4DOvtWuH@w552Tmp%Nc`f$r8T60d+8amlU*3X2-$UWW TjHpMXLJ%Uz{||!d&CLG-28JV1 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/sections/qml/content/pics/lemonade.jpg b/examples/declarative/modelviews/listview/sections/qml/content/pics/lemonade.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db445c9ac876ccfb959d8e3c0219e89a1cb2aafd GIT binary patch literal 6645 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/sections/qml/content/pics/list-delete.png b/examples/declarative/modelviews/listview/sections/qml/content/pics/list-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..df2a147d246ef62d628d73db36b0b24af98a2ab9 GIT binary patch literal 831 zcmV-F1Hk-=P)R5;6h zl}l(-K@^6Q=FtdACA#^NDs^{Lp)6)L zgDB5eX;UdG_4H6F7*yIgXmIAu0!5NyOCtSU7G=!;6%|3j{gliox-!pOK?G(o&X({YLK$5)lC7F{VZbo703UCXA=&? zO>Nu>w#%A8Rp;5oKacEBBT*BGX+{#I_yE%2i8f!~SeeejbP6SvLH5VQ-~o6A-hwe1 z-+)oOG3-#N-p|7H3rxph%DcJ`E`ihFDtIo2X&L#)9#wa!-__Ey=>18UreVqnx(m*O z14e_~1JA$~|`2HhU^Ra!WRl)GgiU zYU$BXh#q3R4$gpm?mF#|Br$YH!gK>%1c$VCx82fBJaI+hxwpFb)g=^Dbv{zQc<7+k z9t8>W67osVx3S=)K2n#oseNr$I`ov*vgsc2h}xyrpv>h+JHeJUF8ZjWkj` zH1UE>PMpf&iLCQ!iioCJ)~Hi?YjvJaK8_pg59Au!plIt&?SDO~mzDzYD;xj-002ov JPDHLkV1h`%ho%4k literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/sections/qml/content/pics/minus-sign.png b/examples/declarative/modelviews/listview/sections/qml/content/pics/minus-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f233d7399c4c07c6c66775f7806acac84b1870 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6P60k4u0Wb3;FYqWamwl0TmSYg zzPEV)f9L4=uDMg50*&A=3GxeOV9U{Bm1EIh)b!)dNY8G|=4l2>MR>Y6hE&9zJ@3ia zpuppBkxMsqLg3#2p{{ow4y^sCTR&@AtNcZ-!c0XiUIF(fS@*p4-Mvkxubuwr)McGB zHm7G5zmh%w<-tAQYwQ=f{_Q#1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6FmMZlFeAgPITAoY_7YEDSN5AMVr*h!Q?HqR018Q#xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~MKgx;TbNTux3{AeNAlknp4bh#UKVNeKyw z85dYLe3aa%k>K*&_>m!J9*44?cEJw8^_?w@3@_9;nLjU4H38~p@O1TaS?83{1OTR# BJd^+c literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/sections/qml/content/pics/moreUp.png b/examples/declarative/modelviews/listview/sections/qml/content/pics/moreUp.png new file mode 100644 index 0000000000000000000000000000000000000000..fefb9c9098a4550c504c900edb15808788812e5a GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6FmMZlFeAgPITAoY_7YEDSN5AMVr-)N5C6Th1`0`*xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~P6ex;TbNTux3<5dPyXo^WJwgW&8%|08@- tQxbsSP&$*(oQV^dQYLTM**~%I6;S;)cJ@c9k@`Tb44$rjF6*2UngHSdJrV!_ literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/sections/qml/content/pics/pancakes.jpg b/examples/declarative/modelviews/listview/sections/qml/content/pics/pancakes.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60c439638e4d183e483a18542fcb2ee6443051bf GIT binary patch literal 9163 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/sections/qml/content/pics/plus-sign.png b/examples/declarative/modelviews/listview/sections/qml/content/pics/plus-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..40df1134f8472f399adfa5c8c66c50a98d3bacc0 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6y#YQUu0Wa$(6{&=P?uNAhRG|R zPhIi|$63?4Gdn(WDhGy5?S*zvKV>UH^L*-tUX z$Jv{I&ffC7bM{5Qj4e}Ezbj}vVjnSc;_|19_y1onFfAQuu24ykUoZnB3o9G9teS?7 zt9NpGMrLu#@0UVzfU@^IT^vIy;%X<}%xf{=arHKHYQL~@ZfotgwYUG*$MH^!I&%2V z@)sJL`rl4pesV%`$+ja*^=&3!b{Hmgs`72G$lh?~sgSmhV3T|L)#5pvnp5W$R3F&x zq^-&N)%9FO2FOm@bA*rKR&a{^p(h(SexKRzobg)f!S5Tb z0(ReeejodN_$Ob%pPGvI-{X5McZ=;}w|{;sE!Zmj;a8K;+WTSWrcUlO+qsq1zw`F> zL$~g{I69@}|MDjqpAy@zuKLv`b1gzCeQUnq?;S;@b8|k;l-+S#KOj|nW)fHH0-#SB NJYD@<);T3K0RYVY#HauO literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/listview/sections/qml/content/pics/vegetable-soup.jpg b/examples/declarative/modelviews/listview/sections/qml/content/pics/vegetable-soup.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9dce33204181c919fd2dcd83bb0df18f456cca52 GIT binary patch literal 8639 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/listview/sections/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/listview/sections/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/listview/sections/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/listview/sections/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/listview/sections/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/listview/sections/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/listview/sections/sections.desktop b/examples/declarative/modelviews/listview/sections/sections.desktop new file mode 100644 index 0000000..c11801e --- /dev/null +++ b/examples/declarative/modelviews/listview/sections/sections.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=sections +Exec=/opt/usr/bin/sections +Icon=sections +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/listview/sections/sections.png b/examples/declarative/modelviews/listview/sections/sections.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 zcmV-O4Y%@%P)ht(u000b3 zNkl+r+m%F_C;*wliAId+l;Bw~NnREVgX6DSfv+(~Ms$%J>UH~1TiKG?i==6q;ABhC^ z?Fa;PP1zvRpk{yshy{xNzW=_}wlshM$8bMz0ywE)|E?{*$bARG!R}74&+E~=fBGSCH_q~3rZLE`kFZF`Zg5p_(F9S`V+!f^EBN1AfbVO>l zV*?2wmM7*K$N;DTgsUiqL8d@0kV=|_n&`jpzizedO9)tWdFTh8K`^#$^77P!9khgW zY!Rx>mStcADTf#t1$7O$0t|o*0XKn3gatG^hba2{-neB1+ztE?*sLjd^k^HO+7rUI z#U<*@0G0o{w7eb^h!lqynFTclTrU#CporX1FqyNMH+0Ern&N9m&#V&xj_U(F2mB2J zt<46%_t{NEnvD|IFZF~~d&Uw1T_g&S##v*=ONjw)029C*A{l`GV{0SE$m`(;jw}{N znskEx<>q}Q<12YZEl*LE3Ih306gaq~kqj^oOalLlQhy0dt;u@8$p7^Lt&4>oL!oPx z#8s8=%aut5!dB!t3TKe~K&L~H1lMXjK+#OKRHI5GD|IzkUH?i3OO@}-LaMj9G8lz# z%l5CTmMR6d2)5Xi&TXYMH@9`QFE#2K3&XXz*HoZoHYmE}} z2gzCqV(C$)Qa4CsW6qOGtI%%!WV`fQi$l5ySZr*mjmtm*mMy$LnBc~UpU3Zbir>EL z5q7k1!|(B;ltK`4R+^dg2p6W_d^>jD_u(zaPCr^^8@hrk3G%j4n9z3e5I$h zHt*%PdcQ(f^FBoE0!itt&AS&D@SD9H-ToBEcllZB+s zk=+N-HEn5kb?LNr0_tj96^ef~kie^2ICbnKhHki|lDRofU;aApOn#Gh#$V=lzx5aV z$Jx^^nO%`X>~HULygE0g(X z`b{py-oel{4)1Lt5=ryItKVXDcD&f3()r}32l444EK3-kNE2=Dpl9>WCG-onSlD9c zr%N?M8yN>I$G3v%iKcWshT`^}P5k(+E4)4M9*-UV z&4O$+)XU|82r~)zlcQfDWVF&5ZZFgaJuU2x93q*UBV#3rrAM(ON9|alVFXl)&YX@% zrn2~rAcuB*qU@=(8D~0mGavLg@|)W{pqZSz_G=dbK~FOQb~8TtAx|87jOIX-tF6w^ zE}q=qk0lm!nQ>k||12}9;gZF6-KIckC(i%2z(g#|rlvN!+qYIAV1cALUyv7|DWDVZ zX$(wW$FeP#{K4*hcr=|#P$&$|hffa@Fv3e>f?B$+m4Id1%9%neo+H}QK_nQiKtO_= zl`f2u2zU)e(5EpuKSS2cx#Vx(wu^As=Cu#baASJJRhKn0OvcBFC8vpJ=CQ?My|Bz# zz=^_Co`6)^qH{|deviLQGGit4^Rx(EQ~10ZbLj+GD@TChb9=j@^z6)V>N`*Kk5B$J ze{}qdg}TxBWxn^(KOkbGYZ?h_s*YG=wFFc=3zU$c6s9F)Od%3%#;D-BreyPxTM?QD z9z!FUO_9xIol|}uej|j>6Ch{jux$5pqD;~k-A=y!k1x!=$7+wtBz2KR47Sqly&wN$2gymjWt&D)GPzc~L zAmG!PO3acmvt?3VJ(xek7m2e4a;8m_*N@k56OcCJydSwcE%(-LUHTXJ-cXJh2-bmfHU`sYDbPJpf{I$AtTF3d1C zH&IsaGnxn(&H4YF1v8Tqk{O%MaC?~t#L~l6(YG zroAqg9-GOc<1ITrCv$U*#4lBy$A<1jDGgg}EZeNG>nIwv2-NKXBF;O*?VUc}xNw${ z*m#*_PwU-;JgtCDCMW!QFwTLkdpNTDPM6%s!bPT2Hw$NqtmQsLwFSE9^d4klv>kuu zZd!fa1c|QgD-B(7M^6)jQ&;)P2R|#5j5hUhWb30~dpLW3j%=!huYUfIUD+N> zOg@-AL&i!H^y~OMFf=vnYA0y4aPszNc=n-}`150b%a-Pyg-mjzVN^c`m%|q5>GIPZ z)p_a6zw_{cV|2Afi)<>LquYK5zrCH-%oUz{_%43qwmV&I49%Y7;>=qpG@632BkJd8 z7tS&=JI>a~=7L-}5GEW5uWK#(MxIsFk7E1)e|s&!n>Mz1-0J+_UopfA-KH za&OO}CBYF)r*3lQ+IL8s3xE?@_8p8cZ(Za0(=T#kW(3nRvBe^5rI<=y=iJzj8B1J2 z)xTk_2vt0wIwK;&mJTnEe7cPvy!#3vUx24S_hs6eA~m`ZMiwsd)1j9bUbs-$5k#P~ z)x#6V+ZdaEotMsDX783=1ie1uxfx>V5#reyZ0s7Z)YeMCilGpJ-Ccf~Lpndd_+765 z+a;d7>m;AnImz;OWWy}P>n)oTRnX!^lEY3ZF{6#Dc zP3eWtdbxc=2v{URq3CS&v1OCaF9zOYVEn2}rp4FECpsQLQ$~gR152@@J>5iMHTEp9 zmbgOTwypq)+ybwkf6Hx_(&+2{0*~+cD~@)35x?GCF?F^=+yrLVZhq-;c$IqD0$m+m zc5U(T@;g7`=FF(8-fuK>pz}eFZ2dewBe?pGiugIGL}Lk9BRn3({hx|39KXWzKl+!7 zC&mJ5-bPt0t45OC0A2y;?_2xbL3dhw4R4!7U~7k$#~*0t+{M#;_4_fNIQ%GkqPqzC z{Fru@iNqkLopCayuA3jF3DBx@F$?M&px$p>POu^EIL3&;mUb_j@9_{%y~nH9KjiJH zFn*68OEP4v6sDamNuAY`{8WHU0^b1jB8W8VcDg$bSTz|%BSf72I~;Uwcw}XkOeQa- zN>|#7#+$$bFbQ%K=Z5G-Q2zs*1I$KV%`Xz*a{tmd#PwW{T{?%<;++x}lOt6OjpN+* zyh-s&?Bdn?QBX0Q%hnAW@#+Lr-J9yYq*QhOS|x@K=8e3ZH*^eS1|bPb`j36QKfG8Z zAP&3?+zy0mKT_2r@`lPZFbrxaZ{(t(qreQ11hK(Sf8VPgtFe^{`1WNu)oTGS0vV9M z1KO%TqAZ*rM@-}VIAYK-Qmz0)j`740Nr19ZN&5TVzSVZtAOOgdU;^L7B5vsF1ravm zc*acLs3D53I|MQUY8q4m3!7f(?^>Tb{p$($g#A)4e1B9s{@lL%?>o@kZ5V1WZ~Qcn zz|bu+Ir<-X<5ugvfemb60~^@D1~#yPwc`H(pHeSaefwW^{L9a%BKPWN%_+ eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/pathview-example/main.cpp b/examples/declarative/modelviews/pathview-example/main.cpp new file mode 100644 index 0000000..15585ab --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/pathview-example.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/pathview-example/pathviewexample.desktop b/examples/declarative/modelviews/pathview-example/pathviewexample.desktop new file mode 100644 index 0000000..30d29e3 --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/pathviewexample.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=pathview-example +Exec=/opt/usr/bin/pathview-example +Icon=pathview-example +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/pathview-example/pathviewexample.png b/examples/declarative/modelviews/pathview-example/pathviewexample.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/pathview-example/qml/pathview-example.qml b/examples/declarative/modelviews/pathview-example/qml/pathview-example.qml new file mode 100644 index 0000000..267c57c --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/qml/pathview-example.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + width: 400; height: 240 + color: "white" + + ListModel { + id: appModel + ListElement { name: "Music"; icon: "pics/AudioPlayer_48.png" } + ListElement { name: "Movies"; icon: "pics/VideoPlayer_48.png" } + ListElement { name: "Camera"; icon: "pics/Camera_48.png" } + ListElement { name: "Calendar"; icon: "pics/DateBook_48.png" } + ListElement { name: "Messaging"; icon: "pics/EMail_48.png" } + ListElement { name: "Todo List"; icon: "pics/TodoList_48.png" } + ListElement { name: "Contacts"; icon: "pics/AddressBook_48.png" } + } + + Component { + id: appDelegate + Item { + width: 100; height: 100 + scale: PathView.iconScale + + Image { + id: myIcon + y: 20; anchors.horizontalCenter: parent.horizontalCenter + source: icon + smooth: true + } + Text { + anchors { top: myIcon.bottom; horizontalCenter: parent.horizontalCenter } + text: name + smooth: true + } + + MouseArea { + anchors.fill: parent + onClicked: view.currentIndex = index + } + } + } + + Component { + id: appHighlight + Rectangle { width: 80; height: 80; color: "lightsteelblue" } + } + + PathView { + Keys.onRightPressed: if (!moving) { incrementCurrentIndex(); console.log(moving) } + Keys.onLeftPressed: if (!moving) decrementCurrentIndex() + id: view + anchors.fill: parent + highlight: appHighlight + preferredHighlightBegin: 0.5 + preferredHighlightEnd: 0.5 + focus: true + model: appModel + delegate: appDelegate + path: Path { + startX: 10 + startY: 50 + PathAttribute { name: "iconScale"; value: 0.5 } + PathQuad { x: 200; y: 150; controlX: 50; controlY: 200 } + PathAttribute { name: "iconScale"; value: 1.0 } + PathQuad { x: 390; y: 50; controlX: 350; controlY: 200 } + PathAttribute { name: "iconScale"; value: 0.5 } + } + } +} diff --git a/examples/declarative/modelviews/pathview-example/qml/pathview.qmlproject b/examples/declarative/modelviews/pathview-example/qml/pathview.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/qml/pathview.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/modelviews/pathview-example/qml/pics/AddressBook_48.png b/examples/declarative/modelviews/pathview-example/qml/pics/AddressBook_48.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab7c8eec1381756de32b5f863a6e794c5e8e90f GIT binary patch literal 3350 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/pathview-example/qml/pics/AudioPlayer_48.png b/examples/declarative/modelviews/pathview-example/qml/pics/AudioPlayer_48.png new file mode 100644 index 0000000000000000000000000000000000000000..f4b8689f87c0cf8a46de9782229c2282d5fe2cf5 GIT binary patch literal 3806 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/pathview-example/qml/pics/Camera_48.png b/examples/declarative/modelviews/pathview-example/qml/pics/Camera_48.png new file mode 100644 index 0000000000000000000000000000000000000000..c76b52494597802fdf1dc0840a31510f64169b70 GIT binary patch literal 3540 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 U;C)}W8UO$Q07*qoM6N<$f*gVFyZ`_I literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/pathview-example/qml/pics/EMail_48.png b/examples/declarative/modelviews/pathview-example/qml/pics/EMail_48.png new file mode 100644 index 0000000000000000000000000000000000000000..d6d84a61be6ea9470a792b3435d2a4f9ffc58050 GIT binary patch literal 3655 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 q30&9O+Bht^LrRuPDe;6v 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/pathview-example/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/pathview-example/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/pathview-example/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/pathview-example/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/README b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/README new file mode 100644 index 0000000..0d82252 --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/README @@ -0,0 +1,6 @@ +The Debian Package pathviewexample +---------------------------- + +Comments regarding the Package + + -- Daniel Molkentin Thu, 18 Nov 2010 17:48:31 +0100 diff --git a/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/changelog b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/changelog new file mode 100644 index 0000000..ab74121 --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/changelog @@ -0,0 +1,5 @@ +pathviewexample (0.0.1) unstable; urgency=low + + * Initial Release. + + -- Daniel Molkentin Thu, 18 Nov 2010 17:48:31 +0100 diff --git a/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/compat b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/compat @@ -0,0 +1 @@ +7 diff --git a/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/control b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/control new file mode 100644 index 0000000..c931a89 --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/control @@ -0,0 +1,13 @@ +Source: pathviewexample +Section: user/hidden +Priority: optional +Maintainer: Daniel Molkentin +Build-Depends: debhelper (>= 5), libqt4-dev +Standards-Version: 3.7.3 +Homepage: + +Package: pathviewexample +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: + diff --git a/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/copyright b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/copyright new file mode 100644 index 0000000..f848d27 --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/copyright @@ -0,0 +1,40 @@ +This package was debianized by Daniel Molkentin on +Thu, 18 Nov 2010 17:48:31 +0100. + +It was downloaded from + +Upstream Author(s): + + + + +Copyright: + + + + +License: + + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2010, Daniel Molkentin and +is licensed under the GPL, see above. + + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. diff --git a/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/rules b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/rules new file mode 100755 index 0000000..c604e5d --- /dev/null +++ b/examples/declarative/modelviews/pathview-example/qtc_packaging/debian_fremantle/rules @@ -0,0 +1,91 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/pathviewexample.sgml > pathviewexample.1 + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + $(MAKE) clean + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/pathviewexample. + $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/pathviewexample install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + # dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + # dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/examples/declarative/modelviews/visualitemmodel/main.cpp b/examples/declarative/modelviews/visualitemmodel/main.cpp new file mode 100644 index 0000000..6faeec8 --- /dev/null +++ b/examples/declarative/modelviews/visualitemmodel/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/visualitemmodel.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/visualitemmodel/qml/visualitemmodel.qml b/examples/declarative/modelviews/visualitemmodel/qml/visualitemmodel.qml new file mode 100644 index 0000000..15f2f11 --- /dev/null +++ b/examples/declarative/modelviews/visualitemmodel/qml/visualitemmodel.qml @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// This example demonstrates placing items in a view using +// a VisualItemModel + +import QtQuick 1.0 + +Rectangle { + color: "lightgray" + width: 240 + height: 320 + + VisualItemModel { + id: itemModel + + Rectangle { + width: view.width; height: view.height + color: "#FFFEF0" + Text { text: "Page 1"; font.bold: true; anchors.centerIn: parent } + } + Rectangle { + width: view.width; height: view.height + color: "#F0FFF7" + Text { text: "Page 2"; font.bold: true; anchors.centerIn: parent } + } + Rectangle { + width: view.width; height: view.height + color: "#F4F0FF" + Text { text: "Page 3"; font.bold: true; anchors.centerIn: parent } + } + } + + ListView { + id: view + anchors { fill: parent; bottomMargin: 30 } + model: itemModel + preferredHighlightBegin: 0; preferredHighlightEnd: 0 + highlightRangeMode: ListView.StrictlyEnforceRange + orientation: ListView.Horizontal + snapMode: ListView.SnapOneItem; flickDeceleration: 2000 + } + + Rectangle { + width: 240; height: 30 + anchors { top: view.bottom; bottom: parent.bottom } + color: "gray" + + Row { + anchors.centerIn: parent + spacing: 20 + + Repeater { + model: itemModel.count + + Rectangle { + width: 5; height: 5 + radius: 3 + color: view.currentIndex == index ? "blue" : "white" + + MouseArea { + width: 20; height: 20 + anchors.centerIn: parent + onClicked: view.currentIndex = index + } + } + } + } + } +} diff --git a/examples/declarative/modelviews/visualitemmodel/qml/visualitemmodel.qmlproject b/examples/declarative/modelviews/visualitemmodel/qml/visualitemmodel.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/modelviews/visualitemmodel/qml/visualitemmodel.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/visualitemmodel/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/visualitemmodel/visualitemmodel.desktop b/examples/declarative/modelviews/visualitemmodel/visualitemmodel.desktop new file mode 100644 index 0000000..ae40ec0 --- /dev/null +++ b/examples/declarative/modelviews/visualitemmodel/visualitemmodel.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=visualitemmodel +Exec=/opt/usr/bin/visualitemmodel +Icon=visualitemmodel +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/visualitemmodel/visualitemmodel.png b/examples/declarative/modelviews/visualitemmodel/visualitemmodel.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/webview/alerts/alerts.desktop b/examples/declarative/modelviews/webview/alerts/alerts.desktop new file mode 100644 index 0000000..80af9d2 --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/alerts.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=alerts +Exec=/opt/usr/bin/alerts +Icon=alerts +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/webview/alerts/alerts.png b/examples/declarative/modelviews/webview/alerts/alerts.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/webview/alerts/main.cpp b/examples/declarative/modelviews/webview/alerts/main.cpp new file mode 100644 index 0000000..efcfb28 --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/alerts.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/webview/alerts/qml/alerts.html b/examples/declarative/modelviews/webview/alerts/qml/alerts.html new file mode 100644 index 0000000..82caddf --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qml/alerts.html @@ -0,0 +1,5 @@ + + +

            This is a web page. It fires an alert when clicked. + + diff --git a/examples/declarative/modelviews/webview/alerts/qml/alerts.qml b/examples/declarative/modelviews/webview/alerts/qml/alerts.qml new file mode 100644 index 0000000..4aa4a3b --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qml/alerts.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +WebView { + id: webView + width: 200 + height: 150 + url: "alerts.html" + + onAlert: popup.show(message) + + Rectangle { + id: popup + + color: "red" + border.color: "black"; border.width: 2 + radius: 4 + + y: parent.height // off "screen" + anchors.horizontalCenter: parent.horizontalCenter + width: label.width + 5 + height: label.height + 5 + + opacity: 0 + + function show(text) { + label.text = text + popup.state = "visible" + timer.start() + } + states: State { + name: "visible" + PropertyChanges { target: popup; opacity: 1 } + PropertyChanges { target: popup; y: (webView.height-popup.height)/2 } + } + + transitions: [ + Transition { from: ""; PropertyAnimation { properties: "opacity,y"; duration: 65 } }, + Transition { from: "visible"; PropertyAnimation { properties: "opacity,y"; duration: 500 } } + ] + + Timer { + id: timer + interval: 1000 + + onTriggered: popup.state = "" + } + + Text { + id: label + anchors.centerIn: parent + width: webView.width *0.75 + + color: "white" + font.pixelSize: 20 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter + smooth: true + } + } +} diff --git a/examples/declarative/modelviews/webview/alerts/qml/autosize.qml b/examples/declarative/modelviews/webview/alerts/qml/autosize.qml new file mode 100644 index 0000000..7e10403 --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qml/autosize.qml @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +// The WebView size is determined by the width, height, +// preferredWidth, and preferredHeight properties. +Rectangle { + id: rect + width: 200 + height: layout.height + + Column { + id: layout + spacing: 2 + + WebView { + html: "No width defined." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + width: rect.width + html: "The width is full." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + width: rect.width/2 + html: "The width is half." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + WebView { + width: rect.width/2 + html: "The_width_is_half." // not wrapped + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + preferredWidth: rect.width/2 + html: "The preferredWidth is half." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + WebView { + preferredWidth: rect.width/2 + html: "The_preferredWidth_is_half." // not wrapped + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + } +} diff --git a/examples/declarative/modelviews/webview/alerts/qml/content/Mapping/Map.qml b/examples/declarative/modelviews/webview/alerts/qml/content/Mapping/Map.qml new file mode 100644 index 0000000..9a86579 --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qml/content/Mapping/Map.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +Item { + id: page + + property real latitude: -34.397 + property real longitude: 150.644 + property string address: "" + property alias status: js.status + + WebView { + id: map + anchors.fill: parent + url: "map.html" + pressGrabTime: 0 + javaScriptWindowObjects: QtObject { + id: js + WebView.windowObjectName: "qml" + property real lat: page.latitude + property real lng: page.longitude + property string address: page.address + property string status: "Loading" + + onAddressChanged: { + if (map.url != "" && map.progress == 1) + map.evaluateJavaScript("goToAddress()") + } + } + + onLoadFinished: { evaluateJavaScript("goToAddress()"); } + } +} diff --git a/examples/declarative/modelviews/webview/alerts/qml/content/Mapping/map.html b/examples/declarative/modelviews/webview/alerts/qml/content/Mapping/map.html new file mode 100644 index 0000000..a98da54 --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qml/content/Mapping/map.html @@ -0,0 +1,60 @@ + + + + + + + +

            + + diff --git a/examples/declarative/modelviews/webview/alerts/qml/content/pics/cancel.png b/examples/declarative/modelviews/webview/alerts/qml/content/pics/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..ecc95331f2d8d411fa7381d2867e01fb3fb757c4 GIT binary patch literal 1038 zcmV+p1o8WcP)z>%1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO7QH~;{G)c^o` z2LJ%dv;Y7zL;wIBc7!%6y#N3Mgh@m}RCwC7l}$*jWfaGMGw(Q=7!4t*8KHM!q9|c% z5rdAHD|2Baxw#+;g%uKvuI@%$s0$Il$5~8p875rlN*7XyB8nnG-Ydogf|W2@UbPv? zk4EO-qPZ_K<5;VEHZQ#AoZoq#!}*`bB8eAaHUNvoa-TmB_z-vpcnz=u7eEkLj(_i% zq<_I_%np2>k&*FrRaMo4y1F`wii)t=Y=lA~wzjrdTU$H3xVU%>3;}WK#@p9=jZ3Ty}eB;GB!3Q z!!S+(=Y3!USnBBLFq5vYujTc6<#algpPzq|o11%9Qc`j|GBT0`pP88va0nEp19z2| zmn#y9NRp0@j#OJ)E8r>63FH7@*zI;LEG*n&IR}UXPj6MI?($XTpod_OuyWM7z%jFXASseN%@N<8Ezv&+s7!dFi@JUWi z&R?NWNRl)@J}w}T2=+}+PfL=*;jjt{3jPKj051bu-QC?Lba;4Jz;8fFyztYFjSWfC z;^Lx!?gTteMwRv5D>7K*a~-RYpZ$P z-rimn7Z>aF^i-1M^Z8`4Se~US40zPg&|v1d-EINniQt;t+}z0S?ye*$6bk9!;6Re( z_xokFTAu+Qq(Gg9VMLafmrXI1m6Zu-Nfk(-tE($%=;!C>1qk>u0r&>+$ZEBQr>3UN zSij$|c;B;A!R3ZwM3$D8%;3GfJ+-y9$>DHZ08fBzyWRe$%jMF_%8D6xczCG7!a@P< z_bs80yu3VZZ*M1^{OIUN>+9=UU0v1w{=Q-{QxiHlIg!)p6fpB&+YR6=hrP_whMYHn_p&1Q=Ly?`Zk zA6q2d_cXlz>%1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO7QH~;{G)c^o` z2LJ%dv;Y7zL;wIBc7!%6y#N3L1xZ9fRCwC7)jwzxVHn5pZ&I2e@g(VR+JKx}3jUom z1Op=P^W+d2XzURP956i5QQRH3Z>wXU;=E_f*( zk85jdOQ}>!;c$2rxHc^OC=!XNTCGZw%H^^qCnp6w9tNHtA0O{*Zf;7F_V)HPGczO8 zG+zUk2ZiqhgTWt;LRKJTKA z<0uda>;kuYTeu$_0<0eN9I&0qWL&gTsmQV{0T24kMlXB@D0w`dFTlM&XQzR8>2%sf zo6V+Tv6z6R{f4d^4gfFb=H|4rvZArEv0Y#ucr`set#-RDN$PYunw^~$unPDN1E=Hh zxa#$~Bx!AJO@?788jY&iY`TA&&1MB`17{D4iEj95GMQ9&ZES3)R;#(+#bQxjulFl( z^?&)(4PWy6{U36R002ovPDHLkV1i(O5&8fC literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/webview/alerts/qml/googlemaps.qml b/examples/declarative/modelviews/webview/alerts/qml/googlemaps.qml new file mode 100644 index 0000000..aed0ddd --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qml/googlemaps.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// This example demonstrates how Web services such as Google Maps can be +// abstracted as QML types. Here we have a "Mapping" module with a "Map" +// type. The Map type has an address property. Setting that property moves +// the map. The underlying implementation uses WebView and the Google Maps +// API, but users from QML don't need to understand the implementation in +// order to create a Map. + +import QtQuick 1.0 +import QtWebKit 1.0 +import "content/Mapping" + +Map { + id: map + width: 300 + height: 300 + address: "Paris" + + Rectangle { + x: 70 + width: input.width + 20 + height: input.height + 4 + anchors.bottom: parent.bottom; anchors.bottomMargin: 5 + radius: 5 + opacity: map.status == "Ready" ? 1 : 0 + + TextInput { + id: input + text: map.address + anchors.centerIn: parent + Keys.onReturnPressed: map.address = input.text + } + } + + Text { + id: loading + anchors.centerIn: parent + text: map.status == "Error" ? "Error" : "Loading" + opacity: map.status == "Ready" ? 0 : 1 + font.pixelSize: 30 + + Behavior on opacity { NumberAnimation{} } + } +} diff --git a/examples/declarative/modelviews/webview/alerts/qml/inlinehtml.qml b/examples/declarative/modelviews/webview/alerts/qml/inlinehtml.qml new file mode 100644 index 0000000..afc1fa9 --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qml/inlinehtml.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +// Inline HTML with loose formatting can be +// set on the html property. +WebView { + html:"\ + + +
            OneTwoThree +
            1X1X +
            20X0 +
            3X1X +
            " +} diff --git a/examples/declarative/modelviews/webview/alerts/qml/newwindows.html b/examples/declarative/modelviews/webview/alerts/qml/newwindows.html new file mode 100644 index 0000000..f169599 --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qml/newwindows.html @@ -0,0 +1,3 @@ +

            Multiple windows...

            + +
            Popup! diff --git a/examples/declarative/modelviews/webview/alerts/qml/newwindows.qml b/examples/declarative/modelviews/webview/alerts/qml/newwindows.qml new file mode 100644 index 0000000..52f7a0b --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qml/newwindows.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Demonstrates opening new WebViews from HTML +// +// Note that to open windows from JavaScript, you will need to +// allow it on WebView with settings.javascriptCanOpenWindows: true + +import QtQuick 1.0 +import QtWebKit 1.0 + +Grid { + columns: 3 + id: pages + height: 300; width: 600 + + Component { + id: webViewPage + Rectangle { + width: webView.width + height: webView.height + border.color: "gray" + + WebView { + id: webView + newWindowComponent: webViewPage + newWindowParent: pages + url: "newwindows.html" + } + } + } + + Loader { sourceComponent: webViewPage } +} diff --git a/examples/declarative/modelviews/webview/alerts/qml/webview.qmlproject b/examples/declarative/modelviews/webview/alerts/qml/webview.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qml/webview.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/webview/alerts/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/webview/autosize/autosize.desktop b/examples/declarative/modelviews/webview/autosize/autosize.desktop new file mode 100644 index 0000000..29a81c5 --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/autosize.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=autosize +Exec=/opt/usr/bin/autosize +Icon=autosize +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/webview/autosize/autosize.png b/examples/declarative/modelviews/webview/autosize/autosize.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/webview/autosize/main.cpp b/examples/declarative/modelviews/webview/autosize/main.cpp new file mode 100644 index 0000000..8c2e63a --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockPortrait); + viewer.setMainQmlFile(QLatin1String("qml/qml/autosize.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/webview/autosize/qml/alerts.html b/examples/declarative/modelviews/webview/autosize/qml/alerts.html new file mode 100644 index 0000000..82caddf --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qml/alerts.html @@ -0,0 +1,5 @@ + + +

            This is a web page. It fires an alert when clicked. + + diff --git a/examples/declarative/modelviews/webview/autosize/qml/alerts.qml b/examples/declarative/modelviews/webview/autosize/qml/alerts.qml new file mode 100644 index 0000000..4aa4a3b --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qml/alerts.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +WebView { + id: webView + width: 200 + height: 150 + url: "alerts.html" + + onAlert: popup.show(message) + + Rectangle { + id: popup + + color: "red" + border.color: "black"; border.width: 2 + radius: 4 + + y: parent.height // off "screen" + anchors.horizontalCenter: parent.horizontalCenter + width: label.width + 5 + height: label.height + 5 + + opacity: 0 + + function show(text) { + label.text = text + popup.state = "visible" + timer.start() + } + states: State { + name: "visible" + PropertyChanges { target: popup; opacity: 1 } + PropertyChanges { target: popup; y: (webView.height-popup.height)/2 } + } + + transitions: [ + Transition { from: ""; PropertyAnimation { properties: "opacity,y"; duration: 65 } }, + Transition { from: "visible"; PropertyAnimation { properties: "opacity,y"; duration: 500 } } + ] + + Timer { + id: timer + interval: 1000 + + onTriggered: popup.state = "" + } + + Text { + id: label + anchors.centerIn: parent + width: webView.width *0.75 + + color: "white" + font.pixelSize: 20 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter + smooth: true + } + } +} diff --git a/examples/declarative/modelviews/webview/autosize/qml/autosize.qml b/examples/declarative/modelviews/webview/autosize/qml/autosize.qml new file mode 100644 index 0000000..7e10403 --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qml/autosize.qml @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +// The WebView size is determined by the width, height, +// preferredWidth, and preferredHeight properties. +Rectangle { + id: rect + width: 200 + height: layout.height + + Column { + id: layout + spacing: 2 + + WebView { + html: "No width defined." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + width: rect.width + html: "The width is full." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + width: rect.width/2 + html: "The width is half." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + WebView { + width: rect.width/2 + html: "The_width_is_half." // not wrapped + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + preferredWidth: rect.width/2 + html: "The preferredWidth is half." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + WebView { + preferredWidth: rect.width/2 + html: "The_preferredWidth_is_half." // not wrapped + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + } +} diff --git a/examples/declarative/modelviews/webview/autosize/qml/content/Mapping/Map.qml b/examples/declarative/modelviews/webview/autosize/qml/content/Mapping/Map.qml new file mode 100644 index 0000000..9a86579 --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qml/content/Mapping/Map.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +Item { + id: page + + property real latitude: -34.397 + property real longitude: 150.644 + property string address: "" + property alias status: js.status + + WebView { + id: map + anchors.fill: parent + url: "map.html" + pressGrabTime: 0 + javaScriptWindowObjects: QtObject { + id: js + WebView.windowObjectName: "qml" + property real lat: page.latitude + property real lng: page.longitude + property string address: page.address + property string status: "Loading" + + onAddressChanged: { + if (map.url != "" && map.progress == 1) + map.evaluateJavaScript("goToAddress()") + } + } + + onLoadFinished: { evaluateJavaScript("goToAddress()"); } + } +} diff --git a/examples/declarative/modelviews/webview/autosize/qml/content/Mapping/map.html b/examples/declarative/modelviews/webview/autosize/qml/content/Mapping/map.html new file mode 100644 index 0000000..a98da54 --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qml/content/Mapping/map.html @@ -0,0 +1,60 @@ + + + + + + + +

            + + diff --git a/examples/declarative/modelviews/webview/autosize/qml/content/pics/cancel.png b/examples/declarative/modelviews/webview/autosize/qml/content/pics/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..ecc95331f2d8d411fa7381d2867e01fb3fb757c4 GIT binary patch literal 1038 zcmV+p1o8WcP)z>%1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO7QH~;{G)c^o` z2LJ%dv;Y7zL;wIBc7!%6y#N3Mgh@m}RCwC7l}$*jWfaGMGw(Q=7!4t*8KHM!q9|c% z5rdAHD|2Baxw#+;g%uKvuI@%$s0$Il$5~8p875rlN*7XyB8nnG-Ydogf|W2@UbPv? zk4EO-qPZ_K<5;VEHZQ#AoZoq#!}*`bB8eAaHUNvoa-TmB_z-vpcnz=u7eEkLj(_i% zq<_I_%np2>k&*FrRaMo4y1F`wii)t=Y=lA~wzjrdTU$H3xVU%>3;}WK#@p9=jZ3Ty}eB;GB!3Q z!!S+(=Y3!USnBBLFq5vYujTc6<#algpPzq|o11%9Qc`j|GBT0`pP88va0nEp19z2| zmn#y9NRp0@j#OJ)E8r>63FH7@*zI;LEG*n&IR}UXPj6MI?($XTpod_OuyWM7z%jFXASseN%@N<8Ezv&+s7!dFi@JUWi z&R?NWNRl)@J}w}T2=+}+PfL=*;jjt{3jPKj051bu-QC?Lba;4Jz;8fFyztYFjSWfC z;^Lx!?gTteMwRv5D>7K*a~-RYpZ$P z-rimn7Z>aF^i-1M^Z8`4Se~US40zPg&|v1d-EINniQt;t+}z0S?ye*$6bk9!;6Re( z_xokFTAu+Qq(Gg9VMLafmrXI1m6Zu-Nfk(-tE($%=;!C>1qk>u0r&>+$ZEBQr>3UN zSij$|c;B;A!R3ZwM3$D8%;3GfJ+-y9$>DHZ08fBzyWRe$%jMF_%8D6xczCG7!a@P< z_bs80yu3VZZ*M1^{OIUN>+9=UU0v1w{=Q-{QxiHlIg!)p6fpB&+YR6=hrP_whMYHn_p&1Q=Ly?`Zk zA6q2d_cXlz>%1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO7QH~;{G)c^o` z2LJ%dv;Y7zL;wIBc7!%6y#N3L1xZ9fRCwC7)jwzxVHn5pZ&I2e@g(VR+JKx}3jUom z1Op=P^W+d2XzURP956i5QQRH3Z>wXU;=E_f*( zk85jdOQ}>!;c$2rxHc^OC=!XNTCGZw%H^^qCnp6w9tNHtA0O{*Zf;7F_V)HPGczO8 zG+zUk2ZiqhgTWt;LRKJTKA z<0uda>;kuYTeu$_0<0eN9I&0qWL&gTsmQV{0T24kMlXB@D0w`dFTlM&XQzR8>2%sf zo6V+Tv6z6R{f4d^4gfFb=H|4rvZArEv0Y#ucr`set#-RDN$PYunw^~$unPDN1E=Hh zxa#$~Bx!AJO@?788jY&iY`TA&&1MB`17{D4iEj95GMQ9&ZES3)R;#(+#bQxjulFl( z^?&)(4PWy6{U36R002ovPDHLkV1i(O5&8fC literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/webview/autosize/qml/googlemaps.qml b/examples/declarative/modelviews/webview/autosize/qml/googlemaps.qml new file mode 100644 index 0000000..aed0ddd --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qml/googlemaps.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// This example demonstrates how Web services such as Google Maps can be +// abstracted as QML types. Here we have a "Mapping" module with a "Map" +// type. The Map type has an address property. Setting that property moves +// the map. The underlying implementation uses WebView and the Google Maps +// API, but users from QML don't need to understand the implementation in +// order to create a Map. + +import QtQuick 1.0 +import QtWebKit 1.0 +import "content/Mapping" + +Map { + id: map + width: 300 + height: 300 + address: "Paris" + + Rectangle { + x: 70 + width: input.width + 20 + height: input.height + 4 + anchors.bottom: parent.bottom; anchors.bottomMargin: 5 + radius: 5 + opacity: map.status == "Ready" ? 1 : 0 + + TextInput { + id: input + text: map.address + anchors.centerIn: parent + Keys.onReturnPressed: map.address = input.text + } + } + + Text { + id: loading + anchors.centerIn: parent + text: map.status == "Error" ? "Error" : "Loading" + opacity: map.status == "Ready" ? 0 : 1 + font.pixelSize: 30 + + Behavior on opacity { NumberAnimation{} } + } +} diff --git a/examples/declarative/modelviews/webview/autosize/qml/inlinehtml.qml b/examples/declarative/modelviews/webview/autosize/qml/inlinehtml.qml new file mode 100644 index 0000000..afc1fa9 --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qml/inlinehtml.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +// Inline HTML with loose formatting can be +// set on the html property. +WebView { + html:"\ + + +
            OneTwoThree +
            1X1X +
            20X0 +
            3X1X +
            " +} diff --git a/examples/declarative/modelviews/webview/autosize/qml/newwindows.html b/examples/declarative/modelviews/webview/autosize/qml/newwindows.html new file mode 100644 index 0000000..f169599 --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qml/newwindows.html @@ -0,0 +1,3 @@ +

            Multiple windows...

            + +Popup! diff --git a/examples/declarative/modelviews/webview/autosize/qml/newwindows.qml b/examples/declarative/modelviews/webview/autosize/qml/newwindows.qml new file mode 100644 index 0000000..52f7a0b --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qml/newwindows.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Demonstrates opening new WebViews from HTML +// +// Note that to open windows from JavaScript, you will need to +// allow it on WebView with settings.javascriptCanOpenWindows: true + +import QtQuick 1.0 +import QtWebKit 1.0 + +Grid { + columns: 3 + id: pages + height: 300; width: 600 + + Component { + id: webViewPage + Rectangle { + width: webView.width + height: webView.height + border.color: "gray" + + WebView { + id: webView + newWindowComponent: webViewPage + newWindowParent: pages + url: "newwindows.html" + } + } + } + + Loader { sourceComponent: webViewPage } +} diff --git a/examples/declarative/modelviews/webview/autosize/qml/webview.qmlproject b/examples/declarative/modelviews/webview/autosize/qml/webview.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qml/webview.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/README b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/README new file mode 100644 index 0000000..ba73287 --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/README @@ -0,0 +1,6 @@ +The Debian Package autosize +---------------------------- + +Comments regarding the Package + + -- Daniel Molkentin Thu, 18 Nov 2010 17:21:56 +0100 diff --git a/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/changelog b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/changelog new file mode 100644 index 0000000..2939e3b --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/changelog @@ -0,0 +1,5 @@ +autosize (0.0.1) unstable; urgency=low + + * Initial Release. + + -- Daniel Molkentin Thu, 18 Nov 2010 17:21:56 +0100 diff --git a/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/compat b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/compat @@ -0,0 +1 @@ +7 diff --git a/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/control b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/control new file mode 100644 index 0000000..22a510c --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/control @@ -0,0 +1,13 @@ +Source: autosize +Section: user/hidden +Priority: optional +Maintainer: Daniel Molkentin +Build-Depends: debhelper (>= 5), libqt4-dev +Standards-Version: 3.7.3 +Homepage: + +Package: autosize +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: + diff --git a/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/copyright b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/copyright new file mode 100644 index 0000000..afff162 --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/copyright @@ -0,0 +1,40 @@ +This package was debianized by Daniel Molkentin on +Thu, 18 Nov 2010 17:21:56 +0100. + +It was downloaded from + +Upstream Author(s): + + + + +Copyright: + + + + +License: + + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2010, Daniel Molkentin and +is licensed under the GPL, see above. + + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. diff --git a/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/rules b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/rules new file mode 100755 index 0000000..5fa637c --- /dev/null +++ b/examples/declarative/modelviews/webview/autosize/qtc_packaging/debian_fremantle/rules @@ -0,0 +1,91 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/autosize.sgml > autosize.1 + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + $(MAKE) clean + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/autosize. + $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/autosize install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + # dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + # dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/examples/declarative/modelviews/webview/googlemaps/googlemaps.desktop b/examples/declarative/modelviews/webview/googlemaps/googlemaps.desktop new file mode 100644 index 0000000..99d9a79 --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/googlemaps.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=googlemaps +Exec=/opt/usr/bin/googlemaps +Icon=googlemaps +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/webview/googlemaps/googlemaps.png b/examples/declarative/modelviews/webview/googlemaps/googlemaps.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/webview/googlemaps/main.cpp b/examples/declarative/modelviews/webview/googlemaps/main.cpp new file mode 100644 index 0000000..0cd9c4f --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/googlemaps.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/webview/googlemaps/qml/alerts.html b/examples/declarative/modelviews/webview/googlemaps/qml/alerts.html new file mode 100644 index 0000000..82caddf --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qml/alerts.html @@ -0,0 +1,5 @@ + + +

            This is a web page. It fires an alert when clicked. + + diff --git a/examples/declarative/modelviews/webview/googlemaps/qml/alerts.qml b/examples/declarative/modelviews/webview/googlemaps/qml/alerts.qml new file mode 100644 index 0000000..4aa4a3b --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qml/alerts.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +WebView { + id: webView + width: 200 + height: 150 + url: "alerts.html" + + onAlert: popup.show(message) + + Rectangle { + id: popup + + color: "red" + border.color: "black"; border.width: 2 + radius: 4 + + y: parent.height // off "screen" + anchors.horizontalCenter: parent.horizontalCenter + width: label.width + 5 + height: label.height + 5 + + opacity: 0 + + function show(text) { + label.text = text + popup.state = "visible" + timer.start() + } + states: State { + name: "visible" + PropertyChanges { target: popup; opacity: 1 } + PropertyChanges { target: popup; y: (webView.height-popup.height)/2 } + } + + transitions: [ + Transition { from: ""; PropertyAnimation { properties: "opacity,y"; duration: 65 } }, + Transition { from: "visible"; PropertyAnimation { properties: "opacity,y"; duration: 500 } } + ] + + Timer { + id: timer + interval: 1000 + + onTriggered: popup.state = "" + } + + Text { + id: label + anchors.centerIn: parent + width: webView.width *0.75 + + color: "white" + font.pixelSize: 20 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter + smooth: true + } + } +} diff --git a/examples/declarative/modelviews/webview/googlemaps/qml/autosize.qml b/examples/declarative/modelviews/webview/googlemaps/qml/autosize.qml new file mode 100644 index 0000000..7e10403 --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qml/autosize.qml @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +// The WebView size is determined by the width, height, +// preferredWidth, and preferredHeight properties. +Rectangle { + id: rect + width: 200 + height: layout.height + + Column { + id: layout + spacing: 2 + + WebView { + html: "No width defined." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + width: rect.width + html: "The width is full." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + width: rect.width/2 + html: "The width is half." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + WebView { + width: rect.width/2 + html: "The_width_is_half." // not wrapped + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + preferredWidth: rect.width/2 + html: "The preferredWidth is half." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + WebView { + preferredWidth: rect.width/2 + html: "The_preferredWidth_is_half." // not wrapped + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + } +} diff --git a/examples/declarative/modelviews/webview/googlemaps/qml/content/Mapping/Map.qml b/examples/declarative/modelviews/webview/googlemaps/qml/content/Mapping/Map.qml new file mode 100644 index 0000000..9a86579 --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qml/content/Mapping/Map.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +Item { + id: page + + property real latitude: -34.397 + property real longitude: 150.644 + property string address: "" + property alias status: js.status + + WebView { + id: map + anchors.fill: parent + url: "map.html" + pressGrabTime: 0 + javaScriptWindowObjects: QtObject { + id: js + WebView.windowObjectName: "qml" + property real lat: page.latitude + property real lng: page.longitude + property string address: page.address + property string status: "Loading" + + onAddressChanged: { + if (map.url != "" && map.progress == 1) + map.evaluateJavaScript("goToAddress()") + } + } + + onLoadFinished: { evaluateJavaScript("goToAddress()"); } + } +} diff --git a/examples/declarative/modelviews/webview/googlemaps/qml/content/Mapping/map.html b/examples/declarative/modelviews/webview/googlemaps/qml/content/Mapping/map.html new file mode 100644 index 0000000..a98da54 --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qml/content/Mapping/map.html @@ -0,0 +1,60 @@ + + + + + + + +

            + + diff --git a/examples/declarative/modelviews/webview/googlemaps/qml/content/pics/cancel.png b/examples/declarative/modelviews/webview/googlemaps/qml/content/pics/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..ecc95331f2d8d411fa7381d2867e01fb3fb757c4 GIT binary patch literal 1038 zcmV+p1o8WcP)z>%1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO7QH~;{G)c^o` z2LJ%dv;Y7zL;wIBc7!%6y#N3Mgh@m}RCwC7l}$*jWfaGMGw(Q=7!4t*8KHM!q9|c% z5rdAHD|2Baxw#+;g%uKvuI@%$s0$Il$5~8p875rlN*7XyB8nnG-Ydogf|W2@UbPv? zk4EO-qPZ_K<5;VEHZQ#AoZoq#!}*`bB8eAaHUNvoa-TmB_z-vpcnz=u7eEkLj(_i% zq<_I_%np2>k&*FrRaMo4y1F`wii)t=Y=lA~wzjrdTU$H3xVU%>3;}WK#@p9=jZ3Ty}eB;GB!3Q z!!S+(=Y3!USnBBLFq5vYujTc6<#algpPzq|o11%9Qc`j|GBT0`pP88va0nEp19z2| zmn#y9NRp0@j#OJ)E8r>63FH7@*zI;LEG*n&IR}UXPj6MI?($XTpod_OuyWM7z%jFXASseN%@N<8Ezv&+s7!dFi@JUWi z&R?NWNRl)@J}w}T2=+}+PfL=*;jjt{3jPKj051bu-QC?Lba;4Jz;8fFyztYFjSWfC z;^Lx!?gTteMwRv5D>7K*a~-RYpZ$P z-rimn7Z>aF^i-1M^Z8`4Se~US40zPg&|v1d-EINniQt;t+}z0S?ye*$6bk9!;6Re( z_xokFTAu+Qq(Gg9VMLafmrXI1m6Zu-Nfk(-tE($%=;!C>1qk>u0r&>+$ZEBQr>3UN zSij$|c;B;A!R3ZwM3$D8%;3GfJ+-y9$>DHZ08fBzyWRe$%jMF_%8D6xczCG7!a@P< z_bs80yu3VZZ*M1^{OIUN>+9=UU0v1w{=Q-{QxiHlIg!)p6fpB&+YR6=hrP_whMYHn_p&1Q=Ly?`Zk zA6q2d_cXlz>%1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO7QH~;{G)c^o` z2LJ%dv;Y7zL;wIBc7!%6y#N3L1xZ9fRCwC7)jwzxVHn5pZ&I2e@g(VR+JKx}3jUom z1Op=P^W+d2XzURP956i5QQRH3Z>wXU;=E_f*( zk85jdOQ}>!;c$2rxHc^OC=!XNTCGZw%H^^qCnp6w9tNHtA0O{*Zf;7F_V)HPGczO8 zG+zUk2ZiqhgTWt;LRKJTKA z<0uda>;kuYTeu$_0<0eN9I&0qWL&gTsmQV{0T24kMlXB@D0w`dFTlM&XQzR8>2%sf zo6V+Tv6z6R{f4d^4gfFb=H|4rvZArEv0Y#ucr`set#-RDN$PYunw^~$unPDN1E=Hh zxa#$~Bx!AJO@?788jY&iY`TA&&1MB`17{D4iEj95GMQ9&ZES3)R;#(+#bQxjulFl( z^?&)(4PWy6{U36R002ovPDHLkV1i(O5&8fC literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/webview/googlemaps/qml/googlemaps.qml b/examples/declarative/modelviews/webview/googlemaps/qml/googlemaps.qml new file mode 100644 index 0000000..aed0ddd --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qml/googlemaps.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// This example demonstrates how Web services such as Google Maps can be +// abstracted as QML types. Here we have a "Mapping" module with a "Map" +// type. The Map type has an address property. Setting that property moves +// the map. The underlying implementation uses WebView and the Google Maps +// API, but users from QML don't need to understand the implementation in +// order to create a Map. + +import QtQuick 1.0 +import QtWebKit 1.0 +import "content/Mapping" + +Map { + id: map + width: 300 + height: 300 + address: "Paris" + + Rectangle { + x: 70 + width: input.width + 20 + height: input.height + 4 + anchors.bottom: parent.bottom; anchors.bottomMargin: 5 + radius: 5 + opacity: map.status == "Ready" ? 1 : 0 + + TextInput { + id: input + text: map.address + anchors.centerIn: parent + Keys.onReturnPressed: map.address = input.text + } + } + + Text { + id: loading + anchors.centerIn: parent + text: map.status == "Error" ? "Error" : "Loading" + opacity: map.status == "Ready" ? 0 : 1 + font.pixelSize: 30 + + Behavior on opacity { NumberAnimation{} } + } +} diff --git a/examples/declarative/modelviews/webview/googlemaps/qml/inlinehtml.qml b/examples/declarative/modelviews/webview/googlemaps/qml/inlinehtml.qml new file mode 100644 index 0000000..afc1fa9 --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qml/inlinehtml.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +// Inline HTML with loose formatting can be +// set on the html property. +WebView { + html:"\ + + +
            OneTwoThree +
            1X1X +
            20X0 +
            3X1X +
            " +} diff --git a/examples/declarative/modelviews/webview/googlemaps/qml/newwindows.html b/examples/declarative/modelviews/webview/googlemaps/qml/newwindows.html new file mode 100644 index 0000000..f169599 --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qml/newwindows.html @@ -0,0 +1,3 @@ +

            Multiple windows...

            + +Popup! diff --git a/examples/declarative/modelviews/webview/googlemaps/qml/newwindows.qml b/examples/declarative/modelviews/webview/googlemaps/qml/newwindows.qml new file mode 100644 index 0000000..52f7a0b --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qml/newwindows.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Demonstrates opening new WebViews from HTML +// +// Note that to open windows from JavaScript, you will need to +// allow it on WebView with settings.javascriptCanOpenWindows: true + +import QtQuick 1.0 +import QtWebKit 1.0 + +Grid { + columns: 3 + id: pages + height: 300; width: 600 + + Component { + id: webViewPage + Rectangle { + width: webView.width + height: webView.height + border.color: "gray" + + WebView { + id: webView + newWindowComponent: webViewPage + newWindowParent: pages + url: "newwindows.html" + } + } + } + + Loader { sourceComponent: webViewPage } +} diff --git a/examples/declarative/modelviews/webview/googlemaps/qml/webview.qmlproject b/examples/declarative/modelviews/webview/googlemaps/qml/webview.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qml/webview.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/README b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/README new file mode 100644 index 0000000..8bc7f9e --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/README @@ -0,0 +1,6 @@ +The Debian Package googlemaps +---------------------------- + +Comments regarding the Package + + -- Daniel Molkentin Thu, 18 Nov 2010 17:19:23 +0100 diff --git a/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/changelog b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/changelog new file mode 100644 index 0000000..e3e11d9 --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/changelog @@ -0,0 +1,5 @@ +googlemaps (0.0.1) unstable; urgency=low + + * Initial Release. + + -- Daniel Molkentin Thu, 18 Nov 2010 17:19:23 +0100 diff --git a/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/compat b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/compat @@ -0,0 +1 @@ +7 diff --git a/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/control b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/control new file mode 100644 index 0000000..e046e7c --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/control @@ -0,0 +1,13 @@ +Source: googlemaps +Section: user/hidden +Priority: optional +Maintainer: Daniel Molkentin +Build-Depends: debhelper (>= 5), libqt4-dev +Standards-Version: 3.7.3 +Homepage: + +Package: googlemaps +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: + diff --git a/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/copyright b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/copyright new file mode 100644 index 0000000..d800cef --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/copyright @@ -0,0 +1,40 @@ +This package was debianized by Daniel Molkentin on +Thu, 18 Nov 2010 17:19:23 +0100. + +It was downloaded from + +Upstream Author(s): + + + + +Copyright: + + + + +License: + + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2010, Daniel Molkentin and +is licensed under the GPL, see above. + + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. diff --git a/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/rules b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/rules new file mode 100755 index 0000000..de6c89a --- /dev/null +++ b/examples/declarative/modelviews/webview/googlemaps/qtc_packaging/debian_fremantle/rules @@ -0,0 +1,91 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/googlemaps.sgml > googlemaps.1 + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + $(MAKE) clean + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/googlemaps. + $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/googlemaps install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + # dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + # dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/examples/declarative/modelviews/webview/inlinehtml/inlinehtml.desktop b/examples/declarative/modelviews/webview/inlinehtml/inlinehtml.desktop new file mode 100644 index 0000000..98e5949 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/inlinehtml.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=inlinehtml +Exec=/opt/usr/bin/inlinehtml +Icon=inlinehtml +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/webview/inlinehtml/inlinehtml.png b/examples/declarative/modelviews/webview/inlinehtml/inlinehtml.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/webview/inlinehtml/main.cpp b/examples/declarative/modelviews/webview/inlinehtml/main.cpp new file mode 100644 index 0000000..28050c1 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/inlinehtml.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/webview/inlinehtml/qml/alerts.html b/examples/declarative/modelviews/webview/inlinehtml/qml/alerts.html new file mode 100644 index 0000000..82caddf --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qml/alerts.html @@ -0,0 +1,5 @@ + + +

            This is a web page. It fires an alert when clicked. + + diff --git a/examples/declarative/modelviews/webview/inlinehtml/qml/alerts.qml b/examples/declarative/modelviews/webview/inlinehtml/qml/alerts.qml new file mode 100644 index 0000000..4aa4a3b --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qml/alerts.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +WebView { + id: webView + width: 200 + height: 150 + url: "alerts.html" + + onAlert: popup.show(message) + + Rectangle { + id: popup + + color: "red" + border.color: "black"; border.width: 2 + radius: 4 + + y: parent.height // off "screen" + anchors.horizontalCenter: parent.horizontalCenter + width: label.width + 5 + height: label.height + 5 + + opacity: 0 + + function show(text) { + label.text = text + popup.state = "visible" + timer.start() + } + states: State { + name: "visible" + PropertyChanges { target: popup; opacity: 1 } + PropertyChanges { target: popup; y: (webView.height-popup.height)/2 } + } + + transitions: [ + Transition { from: ""; PropertyAnimation { properties: "opacity,y"; duration: 65 } }, + Transition { from: "visible"; PropertyAnimation { properties: "opacity,y"; duration: 500 } } + ] + + Timer { + id: timer + interval: 1000 + + onTriggered: popup.state = "" + } + + Text { + id: label + anchors.centerIn: parent + width: webView.width *0.75 + + color: "white" + font.pixelSize: 20 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter + smooth: true + } + } +} diff --git a/examples/declarative/modelviews/webview/inlinehtml/qml/autosize.qml b/examples/declarative/modelviews/webview/inlinehtml/qml/autosize.qml new file mode 100644 index 0000000..7e10403 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qml/autosize.qml @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +// The WebView size is determined by the width, height, +// preferredWidth, and preferredHeight properties. +Rectangle { + id: rect + width: 200 + height: layout.height + + Column { + id: layout + spacing: 2 + + WebView { + html: "No width defined." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + width: rect.width + html: "The width is full." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + width: rect.width/2 + html: "The width is half." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + WebView { + width: rect.width/2 + html: "The_width_is_half." // not wrapped + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + preferredWidth: rect.width/2 + html: "The preferredWidth is half." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + WebView { + preferredWidth: rect.width/2 + html: "The_preferredWidth_is_half." // not wrapped + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + } +} diff --git a/examples/declarative/modelviews/webview/inlinehtml/qml/content/Mapping/Map.qml b/examples/declarative/modelviews/webview/inlinehtml/qml/content/Mapping/Map.qml new file mode 100644 index 0000000..9a86579 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qml/content/Mapping/Map.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +Item { + id: page + + property real latitude: -34.397 + property real longitude: 150.644 + property string address: "" + property alias status: js.status + + WebView { + id: map + anchors.fill: parent + url: "map.html" + pressGrabTime: 0 + javaScriptWindowObjects: QtObject { + id: js + WebView.windowObjectName: "qml" + property real lat: page.latitude + property real lng: page.longitude + property string address: page.address + property string status: "Loading" + + onAddressChanged: { + if (map.url != "" && map.progress == 1) + map.evaluateJavaScript("goToAddress()") + } + } + + onLoadFinished: { evaluateJavaScript("goToAddress()"); } + } +} diff --git a/examples/declarative/modelviews/webview/inlinehtml/qml/content/Mapping/map.html b/examples/declarative/modelviews/webview/inlinehtml/qml/content/Mapping/map.html new file mode 100644 index 0000000..a98da54 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qml/content/Mapping/map.html @@ -0,0 +1,60 @@ + + + + + + + +

            + + diff --git a/examples/declarative/modelviews/webview/inlinehtml/qml/content/pics/cancel.png b/examples/declarative/modelviews/webview/inlinehtml/qml/content/pics/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..ecc95331f2d8d411fa7381d2867e01fb3fb757c4 GIT binary patch literal 1038 zcmV+p1o8WcP)z>%1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO7QH~;{G)c^o` z2LJ%dv;Y7zL;wIBc7!%6y#N3Mgh@m}RCwC7l}$*jWfaGMGw(Q=7!4t*8KHM!q9|c% z5rdAHD|2Baxw#+;g%uKvuI@%$s0$Il$5~8p875rlN*7XyB8nnG-Ydogf|W2@UbPv? zk4EO-qPZ_K<5;VEHZQ#AoZoq#!}*`bB8eAaHUNvoa-TmB_z-vpcnz=u7eEkLj(_i% zq<_I_%np2>k&*FrRaMo4y1F`wii)t=Y=lA~wzjrdTU$H3xVU%>3;}WK#@p9=jZ3Ty}eB;GB!3Q z!!S+(=Y3!USnBBLFq5vYujTc6<#algpPzq|o11%9Qc`j|GBT0`pP88va0nEp19z2| zmn#y9NRp0@j#OJ)E8r>63FH7@*zI;LEG*n&IR}UXPj6MI?($XTpod_OuyWM7z%jFXASseN%@N<8Ezv&+s7!dFi@JUWi z&R?NWNRl)@J}w}T2=+}+PfL=*;jjt{3jPKj051bu-QC?Lba;4Jz;8fFyztYFjSWfC z;^Lx!?gTteMwRv5D>7K*a~-RYpZ$P z-rimn7Z>aF^i-1M^Z8`4Se~US40zPg&|v1d-EINniQt;t+}z0S?ye*$6bk9!;6Re( z_xokFTAu+Qq(Gg9VMLafmrXI1m6Zu-Nfk(-tE($%=;!C>1qk>u0r&>+$ZEBQr>3UN zSij$|c;B;A!R3ZwM3$D8%;3GfJ+-y9$>DHZ08fBzyWRe$%jMF_%8D6xczCG7!a@P< z_bs80yu3VZZ*M1^{OIUN>+9=UU0v1w{=Q-{QxiHlIg!)p6fpB&+YR6=hrP_whMYHn_p&1Q=Ly?`Zk zA6q2d_cXlz>%1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO7QH~;{G)c^o` z2LJ%dv;Y7zL;wIBc7!%6y#N3L1xZ9fRCwC7)jwzxVHn5pZ&I2e@g(VR+JKx}3jUom z1Op=P^W+d2XzURP956i5QQRH3Z>wXU;=E_f*( zk85jdOQ}>!;c$2rxHc^OC=!XNTCGZw%H^^qCnp6w9tNHtA0O{*Zf;7F_V)HPGczO8 zG+zUk2ZiqhgTWt;LRKJTKA z<0uda>;kuYTeu$_0<0eN9I&0qWL&gTsmQV{0T24kMlXB@D0w`dFTlM&XQzR8>2%sf zo6V+Tv6z6R{f4d^4gfFb=H|4rvZArEv0Y#ucr`set#-RDN$PYunw^~$unPDN1E=Hh zxa#$~Bx!AJO@?788jY&iY`TA&&1MB`17{D4iEj95GMQ9&ZES3)R;#(+#bQxjulFl( z^?&)(4PWy6{U36R002ovPDHLkV1i(O5&8fC literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/webview/inlinehtml/qml/googlemaps.qml b/examples/declarative/modelviews/webview/inlinehtml/qml/googlemaps.qml new file mode 100644 index 0000000..aed0ddd --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qml/googlemaps.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// This example demonstrates how Web services such as Google Maps can be +// abstracted as QML types. Here we have a "Mapping" module with a "Map" +// type. The Map type has an address property. Setting that property moves +// the map. The underlying implementation uses WebView and the Google Maps +// API, but users from QML don't need to understand the implementation in +// order to create a Map. + +import QtQuick 1.0 +import QtWebKit 1.0 +import "content/Mapping" + +Map { + id: map + width: 300 + height: 300 + address: "Paris" + + Rectangle { + x: 70 + width: input.width + 20 + height: input.height + 4 + anchors.bottom: parent.bottom; anchors.bottomMargin: 5 + radius: 5 + opacity: map.status == "Ready" ? 1 : 0 + + TextInput { + id: input + text: map.address + anchors.centerIn: parent + Keys.onReturnPressed: map.address = input.text + } + } + + Text { + id: loading + anchors.centerIn: parent + text: map.status == "Error" ? "Error" : "Loading" + opacity: map.status == "Ready" ? 0 : 1 + font.pixelSize: 30 + + Behavior on opacity { NumberAnimation{} } + } +} diff --git a/examples/declarative/modelviews/webview/inlinehtml/qml/inlinehtml.qml b/examples/declarative/modelviews/webview/inlinehtml/qml/inlinehtml.qml new file mode 100644 index 0000000..afc1fa9 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qml/inlinehtml.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +// Inline HTML with loose formatting can be +// set on the html property. +WebView { + html:"\ + + +
            OneTwoThree +
            1X1X +
            20X0 +
            3X1X +
            " +} diff --git a/examples/declarative/modelviews/webview/inlinehtml/qml/newwindows.html b/examples/declarative/modelviews/webview/inlinehtml/qml/newwindows.html new file mode 100644 index 0000000..f169599 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qml/newwindows.html @@ -0,0 +1,3 @@ +

            Multiple windows...

            + +Popup! diff --git a/examples/declarative/modelviews/webview/inlinehtml/qml/newwindows.qml b/examples/declarative/modelviews/webview/inlinehtml/qml/newwindows.qml new file mode 100644 index 0000000..52f7a0b --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qml/newwindows.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Demonstrates opening new WebViews from HTML +// +// Note that to open windows from JavaScript, you will need to +// allow it on WebView with settings.javascriptCanOpenWindows: true + +import QtQuick 1.0 +import QtWebKit 1.0 + +Grid { + columns: 3 + id: pages + height: 300; width: 600 + + Component { + id: webViewPage + Rectangle { + width: webView.width + height: webView.height + border.color: "gray" + + WebView { + id: webView + newWindowComponent: webViewPage + newWindowParent: pages + url: "newwindows.html" + } + } + } + + Loader { sourceComponent: webViewPage } +} diff --git a/examples/declarative/modelviews/webview/inlinehtml/qml/webview.qmlproject b/examples/declarative/modelviews/webview/inlinehtml/qml/webview.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qml/webview.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/README b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/README new file mode 100644 index 0000000..c0dfce0 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/README @@ -0,0 +1,6 @@ +The Debian Package inlinehtml +---------------------------- + +Comments regarding the Package + + -- Daniel Molkentin Thu, 18 Nov 2010 17:20:40 +0100 diff --git a/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/changelog b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/changelog new file mode 100644 index 0000000..68a9930 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/changelog @@ -0,0 +1,5 @@ +inlinehtml (0.0.1) unstable; urgency=low + + * Initial Release. + + -- Daniel Molkentin Thu, 18 Nov 2010 17:20:40 +0100 diff --git a/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/compat b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/compat @@ -0,0 +1 @@ +7 diff --git a/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/control b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/control new file mode 100644 index 0000000..dbb1638 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/control @@ -0,0 +1,13 @@ +Source: inlinehtml +Section: user/hidden +Priority: optional +Maintainer: Daniel Molkentin +Build-Depends: debhelper (>= 5), libqt4-dev +Standards-Version: 3.7.3 +Homepage: + +Package: inlinehtml +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: + diff --git a/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/copyright b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/copyright new file mode 100644 index 0000000..67b61f7 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/copyright @@ -0,0 +1,40 @@ +This package was debianized by Daniel Molkentin on +Thu, 18 Nov 2010 17:20:40 +0100. + +It was downloaded from + +Upstream Author(s): + + + + +Copyright: + + + + +License: + + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2010, Daniel Molkentin and +is licensed under the GPL, see above. + + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. diff --git a/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/rules b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/rules new file mode 100755 index 0000000..39509f9 --- /dev/null +++ b/examples/declarative/modelviews/webview/inlinehtml/qtc_packaging/debian_fremantle/rules @@ -0,0 +1,91 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/inlinehtml.sgml > inlinehtml.1 + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + $(MAKE) clean + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/inlinehtml. + $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/inlinehtml install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + # dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + # dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/examples/declarative/modelviews/webview/newwindows/main.cpp b/examples/declarative/modelviews/webview/newwindows/main.cpp new file mode 100644 index 0000000..358b747 --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/newwindows.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/modelviews/webview/newwindows/newwindows.desktop b/examples/declarative/modelviews/webview/newwindows/newwindows.desktop new file mode 100644 index 0000000..ab2655c --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/newwindows.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=newwindows +Exec=/opt/usr/bin/newwindows +Icon=newwindows +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/modelviews/webview/newwindows/newwindows.png b/examples/declarative/modelviews/webview/newwindows/newwindows.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/modelviews/webview/newwindows/qml/alerts.html b/examples/declarative/modelviews/webview/newwindows/qml/alerts.html new file mode 100644 index 0000000..82caddf --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qml/alerts.html @@ -0,0 +1,5 @@ + + +

            This is a web page. It fires an alert when clicked. + + diff --git a/examples/declarative/modelviews/webview/newwindows/qml/alerts.qml b/examples/declarative/modelviews/webview/newwindows/qml/alerts.qml new file mode 100644 index 0000000..4aa4a3b --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qml/alerts.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +WebView { + id: webView + width: 200 + height: 150 + url: "alerts.html" + + onAlert: popup.show(message) + + Rectangle { + id: popup + + color: "red" + border.color: "black"; border.width: 2 + radius: 4 + + y: parent.height // off "screen" + anchors.horizontalCenter: parent.horizontalCenter + width: label.width + 5 + height: label.height + 5 + + opacity: 0 + + function show(text) { + label.text = text + popup.state = "visible" + timer.start() + } + states: State { + name: "visible" + PropertyChanges { target: popup; opacity: 1 } + PropertyChanges { target: popup; y: (webView.height-popup.height)/2 } + } + + transitions: [ + Transition { from: ""; PropertyAnimation { properties: "opacity,y"; duration: 65 } }, + Transition { from: "visible"; PropertyAnimation { properties: "opacity,y"; duration: 500 } } + ] + + Timer { + id: timer + interval: 1000 + + onTriggered: popup.state = "" + } + + Text { + id: label + anchors.centerIn: parent + width: webView.width *0.75 + + color: "white" + font.pixelSize: 20 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter + smooth: true + } + } +} diff --git a/examples/declarative/modelviews/webview/newwindows/qml/autosize.qml b/examples/declarative/modelviews/webview/newwindows/qml/autosize.qml new file mode 100644 index 0000000..7e10403 --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qml/autosize.qml @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +// The WebView size is determined by the width, height, +// preferredWidth, and preferredHeight properties. +Rectangle { + id: rect + width: 200 + height: layout.height + + Column { + id: layout + spacing: 2 + + WebView { + html: "No width defined." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + width: rect.width + html: "The width is full." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + width: rect.width/2 + html: "The width is half." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + WebView { + width: rect.width/2 + html: "The_width_is_half." // not wrapped + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + + WebView { + preferredWidth: rect.width/2 + html: "The preferredWidth is half." + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + WebView { + preferredWidth: rect.width/2 + html: "The_preferredWidth_is_half." // not wrapped + Rectangle { + color: "#10000000" + anchors.fill: parent + } + } + } +} diff --git a/examples/declarative/modelviews/webview/newwindows/qml/content/Mapping/Map.qml b/examples/declarative/modelviews/webview/newwindows/qml/content/Mapping/Map.qml new file mode 100644 index 0000000..9a86579 --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qml/content/Mapping/Map.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +Item { + id: page + + property real latitude: -34.397 + property real longitude: 150.644 + property string address: "" + property alias status: js.status + + WebView { + id: map + anchors.fill: parent + url: "map.html" + pressGrabTime: 0 + javaScriptWindowObjects: QtObject { + id: js + WebView.windowObjectName: "qml" + property real lat: page.latitude + property real lng: page.longitude + property string address: page.address + property string status: "Loading" + + onAddressChanged: { + if (map.url != "" && map.progress == 1) + map.evaluateJavaScript("goToAddress()") + } + } + + onLoadFinished: { evaluateJavaScript("goToAddress()"); } + } +} diff --git a/examples/declarative/modelviews/webview/newwindows/qml/content/Mapping/map.html b/examples/declarative/modelviews/webview/newwindows/qml/content/Mapping/map.html new file mode 100644 index 0000000..a98da54 --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qml/content/Mapping/map.html @@ -0,0 +1,60 @@ + + + + + + + +

            + + diff --git a/examples/declarative/modelviews/webview/newwindows/qml/content/pics/cancel.png b/examples/declarative/modelviews/webview/newwindows/qml/content/pics/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..ecc95331f2d8d411fa7381d2867e01fb3fb757c4 GIT binary patch literal 1038 zcmV+p1o8WcP)z>%1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO7QH~;{G)c^o` z2LJ%dv;Y7zL;wIBc7!%6y#N3Mgh@m}RCwC7l}$*jWfaGMGw(Q=7!4t*8KHM!q9|c% z5rdAHD|2Baxw#+;g%uKvuI@%$s0$Il$5~8p875rlN*7XyB8nnG-Ydogf|W2@UbPv? zk4EO-qPZ_K<5;VEHZQ#AoZoq#!}*`bB8eAaHUNvoa-TmB_z-vpcnz=u7eEkLj(_i% zq<_I_%np2>k&*FrRaMo4y1F`wii)t=Y=lA~wzjrdTU$H3xVU%>3;}WK#@p9=jZ3Ty}eB;GB!3Q z!!S+(=Y3!USnBBLFq5vYujTc6<#algpPzq|o11%9Qc`j|GBT0`pP88va0nEp19z2| zmn#y9NRp0@j#OJ)E8r>63FH7@*zI;LEG*n&IR}UXPj6MI?($XTpod_OuyWM7z%jFXASseN%@N<8Ezv&+s7!dFi@JUWi z&R?NWNRl)@J}w}T2=+}+PfL=*;jjt{3jPKj051bu-QC?Lba;4Jz;8fFyztYFjSWfC z;^Lx!?gTteMwRv5D>7K*a~-RYpZ$P z-rimn7Z>aF^i-1M^Z8`4Se~US40zPg&|v1d-EINniQt;t+}z0S?ye*$6bk9!;6Re( z_xokFTAu+Qq(Gg9VMLafmrXI1m6Zu-Nfk(-tE($%=;!C>1qk>u0r&>+$ZEBQr>3UN zSij$|c;B;A!R3ZwM3$D8%;3GfJ+-y9$>DHZ08fBzyWRe$%jMF_%8D6xczCG7!a@P< z_bs80yu3VZZ*M1^{OIUN>+9=UU0v1w{=Q-{QxiHlIg!)p6fpB&+YR6=hrP_whMYHn_p&1Q=Ly?`Zk zA6q2d_cXlz>%1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO7QH~;{G)c^o` z2LJ%dv;Y7zL;wIBc7!%6y#N3L1xZ9fRCwC7)jwzxVHn5pZ&I2e@g(VR+JKx}3jUom z1Op=P^W+d2XzURP956i5QQRH3Z>wXU;=E_f*( zk85jdOQ}>!;c$2rxHc^OC=!XNTCGZw%H^^qCnp6w9tNHtA0O{*Zf;7F_V)HPGczO8 zG+zUk2ZiqhgTWt;LRKJTKA z<0uda>;kuYTeu$_0<0eN9I&0qWL&gTsmQV{0T24kMlXB@D0w`dFTlM&XQzR8>2%sf zo6V+Tv6z6R{f4d^4gfFb=H|4rvZArEv0Y#ucr`set#-RDN$PYunw^~$unPDN1E=Hh zxa#$~Bx!AJO@?788jY&iY`TA&&1MB`17{D4iEj95GMQ9&ZES3)R;#(+#bQxjulFl( z^?&)(4PWy6{U36R002ovPDHLkV1i(O5&8fC literal 0 HcmV?d00001 diff --git a/examples/declarative/modelviews/webview/newwindows/qml/googlemaps.qml b/examples/declarative/modelviews/webview/newwindows/qml/googlemaps.qml new file mode 100644 index 0000000..aed0ddd --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qml/googlemaps.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// This example demonstrates how Web services such as Google Maps can be +// abstracted as QML types. Here we have a "Mapping" module with a "Map" +// type. The Map type has an address property. Setting that property moves +// the map. The underlying implementation uses WebView and the Google Maps +// API, but users from QML don't need to understand the implementation in +// order to create a Map. + +import QtQuick 1.0 +import QtWebKit 1.0 +import "content/Mapping" + +Map { + id: map + width: 300 + height: 300 + address: "Paris" + + Rectangle { + x: 70 + width: input.width + 20 + height: input.height + 4 + anchors.bottom: parent.bottom; anchors.bottomMargin: 5 + radius: 5 + opacity: map.status == "Ready" ? 1 : 0 + + TextInput { + id: input + text: map.address + anchors.centerIn: parent + Keys.onReturnPressed: map.address = input.text + } + } + + Text { + id: loading + anchors.centerIn: parent + text: map.status == "Error" ? "Error" : "Loading" + opacity: map.status == "Ready" ? 0 : 1 + font.pixelSize: 30 + + Behavior on opacity { NumberAnimation{} } + } +} diff --git a/examples/declarative/modelviews/webview/newwindows/qml/inlinehtml.qml b/examples/declarative/modelviews/webview/newwindows/qml/inlinehtml.qml new file mode 100644 index 0000000..afc1fa9 --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qml/inlinehtml.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import QtWebKit 1.0 + +// Inline HTML with loose formatting can be +// set on the html property. +WebView { + html:"\ + + +
            OneTwoThree +
            1X1X +
            20X0 +
            3X1X +
            " +} diff --git a/examples/declarative/modelviews/webview/newwindows/qml/newwindows.html b/examples/declarative/modelviews/webview/newwindows/qml/newwindows.html new file mode 100644 index 0000000..f169599 --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qml/newwindows.html @@ -0,0 +1,3 @@ +

            Multiple windows...

            + +Popup! diff --git a/examples/declarative/modelviews/webview/newwindows/qml/newwindows.qml b/examples/declarative/modelviews/webview/newwindows/qml/newwindows.qml new file mode 100644 index 0000000..52f7a0b --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qml/newwindows.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Demonstrates opening new WebViews from HTML +// +// Note that to open windows from JavaScript, you will need to +// allow it on WebView with settings.javascriptCanOpenWindows: true + +import QtQuick 1.0 +import QtWebKit 1.0 + +Grid { + columns: 3 + id: pages + height: 300; width: 600 + + Component { + id: webViewPage + Rectangle { + width: webView.width + height: webView.height + border.color: "gray" + + WebView { + id: webView + newWindowComponent: webViewPage + newWindowParent: pages + url: "newwindows.html" + } + } + } + + Loader { sourceComponent: webViewPage } +} diff --git a/examples/declarative/modelviews/webview/newwindows/qml/webview.qmlproject b/examples/declarative/modelviews/webview/newwindows/qml/webview.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qml/webview.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/modelviews/webview/newwindows/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/positioners/main.cpp b/examples/declarative/positioners/main.cpp new file mode 100644 index 0000000..1338c66 --- /dev/null +++ b/examples/declarative/positioners/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/positioners.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/positioners/positioners.desktop b/examples/declarative/positioners/positioners.desktop new file mode 100644 index 0000000..16b8efc --- /dev/null +++ b/examples/declarative/positioners/positioners.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=positioners +Exec=/opt/usr/bin/positioners +Icon=positioners +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/positioners/positioners.png b/examples/declarative/positioners/positioners.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/positioners/qml/Button.qml b/examples/declarative/positioners/qml/Button.qml new file mode 100644 index 0000000..32e5993 --- /dev/null +++ b/examples/declarative/positioners/qml/Button.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: page + + property string text + property string icon + signal clicked + + border.color: "black"; color: "steelblue"; radius: 5 + width: pix.width + textelement.width + 13 + height: pix.height + 10 + + Image { id: pix; x: 5; y:5; source: parent.icon } + + Text { + id: textelement + text: page.text; color: "white" + x: pix.width + pix.x + 3 + anchors.verticalCenter: pix.verticalCenter + } + + MouseArea { + id: mr + anchors.fill: parent + onClicked: { parent.focus = true; page.clicked() } + } + + states: State { + name: "pressed"; when: mr.pressed + PropertyChanges { target: textelement; x: 5 } + PropertyChanges { target: pix; x: textelement.x + textelement.width + 3 } + } + + transitions: Transition { + NumberAnimation { properties: "x,left"; easing.type: Easing.InOutQuad; duration: 200 } + } +} diff --git a/examples/declarative/positioners/qml/add.png b/examples/declarative/positioners/qml/add.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee45423e3958221bd545ee6f122d989302cab3f GIT binary patch literal 810 zcmV+_1J(SAP)B<|3F)+>u<}zfuZe7)NT=Ybf%p@9RIu@KocNNrs{{OFYs@fvL zX^u9hJWdQiy;9GCE&}Y4r^W#*azk#i!X z0tQeD-}3nENIJp}&;hlob6(uM5O*#)UjX|Y5+K#c2tsS zZMN$5yBRrqOa_ap_a;nIVsn9|z+v%N9CfB%If8gRp1^qXR>?32 z*3w6Ivpw-?m;j)qg+kXMEtJw|G)lG5(gLLcMIhjghO{k_bu#)CdcjL^)(HV4rIl#l9 z`bJLq*V>D~Rp82RirDxVP5}7Rn~Yjj!U$|-YlH0pxKM8{H$~096rTrE8Kjh7nlCq5 ziUE@h66K&=O}1m34oT2-J2r6&15LJLTiV(KGC9`_1Eo1-3Ch!yU=dz^csbc-8xNq17Gynhq07*qoM6N<$f^&^p>Hq)$ literal 0 HcmV?d00001 diff --git a/examples/declarative/positioners/qml/del.png b/examples/declarative/positioners/qml/del.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2eaed523fec15dd31cf7285ea50f2f17435fe3 GIT binary patch literal 488 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq zn9D$zvG!`y8K9tKiEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$QVa}?sh%#5 zArXh)PP6u7HWX;H&o5(55f&_B&{&xvC_2UaxS@df;>8XoPuMz?Y|Rw{0vjgv+B!ch zy;dm_ut20@$;9K+a_T>ye{*<+*6l4ly3tG?44ev#Dh)O)`svI2yTab}@8^|GHkfho zNeOTfAYE#xV zTYdQ2V(!{EY<(cpv1OlC|Mk$nFJwxr5_&M{ssYb!Y!6iMT-Lnu z^%LX6O%qa2gs^lmow~IC?DKoCclAn#7p^FN%^<|Ei6_mNUm#sTTOc~pY5nu>t=(d~ zq~A~M3_fyFjkTusWO04OyzP?5OwSte2Tr^2{`Z+?r;S>P_p|Ifa>5t{+wz6q>78?A zjm)yTU*U1P=G*Jdx;OcCUKB)#cx$;a{ezuM^;+MJ)Bq-|n aKk(|Y38wz&&UFFC3WKMspUXO@geCxP=D{TZ literal 0 HcmV?d00001 diff --git a/examples/declarative/positioners/qml/positioners.qml b/examples/declarative/positioners/qml/positioners.qml new file mode 100644 index 0000000..6ae265e --- /dev/null +++ b/examples/declarative/positioners/qml/positioners.qml @@ -0,0 +1,253 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: page + width: 420; height: 420 + + Column { + id: layout1 + y: 0 + move: Transition { + NumberAnimation { properties: "y"; easing.type: Easing.OutBounce } + } + add: Transition { + NumberAnimation { properties: "y"; easing.type: Easing.OutQuad } + } + + Rectangle { color: "red"; width: 100; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueV1 + width: 100; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "green"; width: 100; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueV2 + width: 100; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "orange"; width: 100; height: 50; border.color: "black"; radius: 15 } + } + + Row { + id: layout2 + y: 300 + move: Transition { + NumberAnimation { properties: "x"; easing.type: Easing.OutBounce } + } + add: Transition { + NumberAnimation { properties: "x"; easing.type: Easing.OutQuad } + } + + Rectangle { color: "red"; width: 50; height: 100; border.color: "black"; radius: 15 } + + Rectangle { + id: blueH1 + width: 50; height: 100 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "green"; width: 50; height: 100; border.color: "black"; radius: 15 } + + Rectangle { + id: blueH2 + width: 50; height: 100 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "orange"; width: 50; height: 100; border.color: "black"; radius: 15 } + } + + Button { + x: 135; y: 90 + text: "Remove" + icon: "del.png" + + onClicked: { + blueH2.opacity = 0 + blueH1.opacity = 0 + blueV1.opacity = 0 + blueV2.opacity = 0 + blueG1.opacity = 0 + blueG2.opacity = 0 + blueG3.opacity = 0 + blueF1.opacity = 0 + blueF2.opacity = 0 + blueF3.opacity = 0 + } + } + + Button { + x: 145; y: 140 + text: "Add" + icon: "add.png" + + onClicked: { + blueH2.opacity = 1 + blueH1.opacity = 1 + blueV1.opacity = 1 + blueV2.opacity = 1 + blueG1.opacity = 1 + blueG2.opacity = 1 + blueG3.opacity = 1 + blueF1.opacity = 1 + blueF2.opacity = 1 + blueF3.opacity = 1 + } + } + + Grid { + x: 260; y: 0 + columns: 3 + + move: Transition { + NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } + } + + add: Transition { + NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } + } + + Rectangle { color: "red"; width: 50; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueG1 + width: 50; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "green"; width: 50; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueG2 + width: 50; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "orange"; width: 50; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueG3 + width: 50; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "red"; width: 50; height: 50; border.color: "black"; radius: 15 } + Rectangle { color: "green"; width: 50; height: 50; border.color: "black"; radius: 15 } + Rectangle { color: "orange"; width: 50; height: 50; border.color: "black"; radius: 15 } + } + + Flow { + id: layout4 + x: 260; y: 250; width: 150 + + move: Transition { + NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } + } + + add: Transition { + NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } + } + + Rectangle { color: "red"; width: 50; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueF1 + width: 60; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "green"; width: 30; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueF2 + width: 60; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "orange"; width: 50; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueF3 + width: 40; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "red"; width: 80; height: 50; border.color: "black"; radius: 15 } + } + +} diff --git a/examples/declarative/positioners/qml/positioners.qmlproject b/examples/declarative/positioners/qml/positioners.qmlproject new file mode 100644 index 0000000..e526217 --- /dev/null +++ b/examples/declarative/positioners/qml/positioners.qmlproject @@ -0,0 +1,18 @@ +/* File generated by QtCreator */ + +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/positioners/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/sqllocalstorage/sqllocalstorage.qmlproject b/examples/declarative/sqllocalstorage/sqllocalstorage.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/sqllocalstorage/sqllocalstorage.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/text/fonts/availableFonts/availableFonts.desktop b/examples/declarative/text/fonts/availableFonts/availableFonts.desktop new file mode 100644 index 0000000..708a8cf --- /dev/null +++ b/examples/declarative/text/fonts/availableFonts/availableFonts.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=availableFonts +Exec=/opt/usr/bin/availableFonts +Icon=availableFonts +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/text/fonts/availableFonts/availableFonts.png b/examples/declarative/text/fonts/availableFonts/availableFonts.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 zcmV-O4Y%@%P)ht(u000b3 zNkl+r+m%F_C;*wliAId+l;Bw~NnREVgX6DSfv+(~Ms$%J>UH~1TiKG?i==6q;ABhC^ z?Fa;PP1zvRpk{yshy{xNzW=_}wlshM$8bMz0ywE)|E?{*$bARG!R}74&+E~=fBGSCH_q~3rZLE`kFZF`Zg5p_(F9S`V+!f^EBN1AfbVO>l zV*?2wmM7*K$N;DTgsUiqL8d@0kV=|_n&`jpzizedO9)tWdFTh8K`^#$^77P!9khgW zY!Rx>mStcADTf#t1$7O$0t|o*0XKn3gatG^hba2{-neB1+ztE?*sLjd^k^HO+7rUI z#U<*@0G0o{w7eb^h!lqynFTclTrU#CporX1FqyNMH+0Ern&N9m&#V&xj_U(F2mB2J zt<46%_t{NEnvD|IFZF~~d&Uw1T_g&S##v*=ONjw)029C*A{l`GV{0SE$m`(;jw}{N znskEx<>q}Q<12YZEl*LE3Ih306gaq~kqj^oOalLlQhy0dt;u@8$p7^Lt&4>oL!oPx z#8s8=%aut5!dB!t3TKe~K&L~H1lMXjK+#OKRHI5GD|IzkUH?i3OO@}-LaMj9G8lz# z%l5CTmMR6d2)5Xi&TXYMH@9`QFE#2K3&XXz*HoZoHYmE}} z2gzCqV(C$)Qa4CsW6qOGtI%%!WV`fQi$l5ySZr*mjmtm*mMy$LnBc~UpU3Zbir>EL z5q7k1!|(B;ltK`4R+^dg2p6W_d^>jD_u(zaPCr^^8@hrk3G%j4n9z3e5I$h zHt*%PdcQ(f^FBoE0!itt&AS&D@SD9H-ToBEcllZB+s zk=+N-HEn5kb?LNr0_tj96^ef~kie^2ICbnKhHki|lDRofU;aApOn#Gh#$V=lzx5aV z$Jx^^nO%`X>~HULygE0g(X z`b{py-oel{4)1Lt5=ryItKVXDcD&f3()r}32l444EK3-kNE2=Dpl9>WCG-onSlD9c zr%N?M8yN>I$G3v%iKcWshT`^}P5k(+E4)4M9*-UV z&4O$+)XU|82r~)zlcQfDWVF&5ZZFgaJuU2x93q*UBV#3rrAM(ON9|alVFXl)&YX@% zrn2~rAcuB*qU@=(8D~0mGavLg@|)W{pqZSz_G=dbK~FOQb~8TtAx|87jOIX-tF6w^ zE}q=qk0lm!nQ>k||12}9;gZF6-KIckC(i%2z(g#|rlvN!+qYIAV1cALUyv7|DWDVZ zX$(wW$FeP#{K4*hcr=|#P$&$|hffa@Fv3e>f?B$+m4Id1%9%neo+H}QK_nQiKtO_= zl`f2u2zU)e(5EpuKSS2cx#Vx(wu^As=Cu#baASJJRhKn0OvcBFC8vpJ=CQ?My|Bz# zz=^_Co`6)^qH{|deviLQGGit4^Rx(EQ~10ZbLj+GD@TChb9=j@^z6)V>N`*Kk5B$J ze{}qdg}TxBWxn^(KOkbGYZ?h_s*YG=wFFc=3zU$c6s9F)Od%3%#;D-BreyPxTM?QD z9z!FUO_9xIol|}uej|j>6Ch{jux$5pqD;~k-A=y!k1x!=$7+wtBz2KR47Sqly&wN$2gymjWt&D)GPzc~L zAmG!PO3acmvt?3VJ(xek7m2e4a;8m_*N@k56OcCJydSwcE%(-LUHTXJ-cXJh2-bmfHU`sYDbPJpf{I$AtTF3d1C zH&IsaGnxn(&H4YF1v8Tqk{O%MaC?~t#L~l6(YG zroAqg9-GOc<1ITrCv$U*#4lBy$A<1jDGgg}EZeNG>nIwv2-NKXBF;O*?VUc}xNw${ z*m#*_PwU-;JgtCDCMW!QFwTLkdpNTDPM6%s!bPT2Hw$NqtmQsLwFSE9^d4klv>kuu zZd!fa1c|QgD-B(7M^6)jQ&;)P2R|#5j5hUhWb30~dpLW3j%=!huYUfIUD+N> zOg@-AL&i!H^y~OMFf=vnYA0y4aPszNc=n-}`150b%a-Pyg-mjzVN^c`m%|q5>GIPZ z)p_a6zw_{cV|2Afi)<>LquYK5zrCH-%oUz{_%43qwmV&I49%Y7;>=qpG@632BkJd8 z7tS&=JI>a~=7L-}5GEW5uWK#(MxIsFk7E1)e|s&!n>Mz1-0J+_UopfA-KH za&OO}CBYF)r*3lQ+IL8s3xE?@_8p8cZ(Za0(=T#kW(3nRvBe^5rI<=y=iJzj8B1J2 z)xTk_2vt0wIwK;&mJTnEe7cPvy!#3vUx24S_hs6eA~m`ZMiwsd)1j9bUbs-$5k#P~ z)x#6V+ZdaEotMsDX783=1ie1uxfx>V5#reyZ0s7Z)YeMCilGpJ-Ccf~Lpndd_+765 z+a;d7>m;AnImz;OWWy}P>n)oTRnX!^lEY3ZF{6#Dc zP3eWtdbxc=2v{URq3CS&v1OCaF9zOYVEn2}rp4FECpsQLQ$~gR152@@J>5iMHTEp9 zmbgOTwypq)+ybwkf6Hx_(&+2{0*~+cD~@)35x?GCF?F^=+yrLVZhq-;c$IqD0$m+m zc5U(T@;g7`=FF(8-fuK>pz}eFZ2dewBe?pGiugIGL}Lk9BRn3({hx|39KXWzKl+!7 zC&mJ5-bPt0t45OC0A2y;?_2xbL3dhw4R4!7U~7k$#~*0t+{M#;_4_fNIQ%GkqPqzC z{Fru@iNqkLopCayuA3jF3DBx@F$?M&px$p>POu^EIL3&;mUb_j@9_{%y~nH9KjiJH zFn*68OEP4v6sDamNuAY`{8WHU0^b1jB8W8VcDg$bSTz|%BSf72I~;Uwcw}XkOeQa- zN>|#7#+$$bFbQ%K=Z5G-Q2zs*1I$KV%`Xz*a{tmd#PwW{T{?%<;++x}lOt6OjpN+* zyh-s&?Bdn?QBX0Q%hnAW@#+Lr-J9yYq*QhOS|x@K=8e3ZH*^eS1|bPb`j36QKfG8Z zAP&3?+zy0mKT_2r@`lPZFbrxaZ{(t(qreQ11hK(Sf8VPgtFe^{`1WNu)oTGS0vV9M z1KO%TqAZ*rM@-}VIAYK-Qmz0)j`740Nr19ZN&5TVzSVZtAOOgdU;^L7B5vsF1ravm zc*acLs3D53I|MQUY8q4m3!7f(?^>Tb{p$($g#A)4e1B9s{@lL%?>o@kZ5V1WZ~Qcn zz|bu+Ir<-X<5ugvfemb60~^@D1~#yPwc`H(pHeSaefwW^{L9a%BKPWN%_+ eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/text/fonts/availableFonts/main.cpp b/examples/declarative/text/fonts/availableFonts/main.cpp new file mode 100644 index 0000000..06e56bb --- /dev/null +++ b/examples/declarative/text/fonts/availableFonts/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/availableFonts.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/text/fonts/availableFonts/qml/availableFonts.qml b/examples/declarative/text/fonts/availableFonts/qml/availableFonts.qml new file mode 100644 index 0000000..4966a41 --- /dev/null +++ b/examples/declarative/text/fonts/availableFonts/qml/availableFonts.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + width: 480; height: 640; color: "steelblue" + + ListView { + anchors.fill: parent; model: Qt.fontFamilies() + + delegate: Item { + height: 40; width: ListView.view.width + Text { + anchors.centerIn: parent + text: modelData; font.family: modelData; font.pixelSize: 24; color: "white" + } + } + } +} diff --git a/examples/declarative/text/fonts/availableFonts/qml/banner.qml b/examples/declarative/text/fonts/availableFonts/qml/banner.qml new file mode 100644 index 0000000..d722468 --- /dev/null +++ b/examples/declarative/text/fonts/availableFonts/qml/banner.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: screen + + property int pixelSize: screen.height * 1.25 + property color textColor: "lightsteelblue" + property string text: "Hello world! " + + width: 640; height: 320 + color: "steelblue" + + Row { + y: -screen.height / 4.5 + + NumberAnimation on x { from: 0; to: -text.width; duration: 6000; loops: Animation.Infinite } + Text { id: text; font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + Text { font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + Text { font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + } +} diff --git a/examples/declarative/text/fonts/availableFonts/qml/fonts.qml b/examples/declarative/text/fonts/availableFonts/qml/fonts.qml new file mode 100644 index 0000000..ae48f24 --- /dev/null +++ b/examples/declarative/text/fonts/availableFonts/qml/fonts.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + property string myText: "The quick brown fox jumps over the lazy dog." + + width: 800; height: 480 + color: "steelblue" + + FontLoader { id: fixedFont; name: "Courier" } + FontLoader { id: localFont; source: "fonts/tarzeau_ocr_a.ttf" } + FontLoader { id: webFont; source: "http://www.princexml.com/fonts/steffmann/Starburst.ttf" } + + Column { + anchors { fill: parent; leftMargin: 10; rightMargin: 10 } + spacing: 15 + + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideRight + font.family: "Times"; font.pointSize: 42 + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideLeft + font { family: "Times"; pointSize: 42; capitalization: Font.AllUppercase } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideMiddle + font { family: fixedFont.name; pointSize: 42; weight: Font.Bold; capitalization: Font.AllLowercase } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideRight + font { family: fixedFont.name; pointSize: 42; italic: true; capitalization: Font.SmallCaps } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideLeft + font { family: localFont.name; pointSize: 42; capitalization: Font.Capitalize } + } + Text { + text: { + if (webFont.status == FontLoader.Ready) myText + else if (webFont.status == FontLoader.Loading) "Loading..." + else if (webFont.status == FontLoader.Error) "Error loading font" + } + color: "lightsteelblue" + width: parent.width + elide: Text.ElideMiddle + font.family: webFont.name; font.pointSize: 42 + } + } +} diff --git a/examples/declarative/text/fonts/availableFonts/qml/fonts.qmlproject b/examples/declarative/text/fonts/availableFonts/qml/fonts.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/text/fonts/availableFonts/qml/fonts.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/text/fonts/availableFonts/qml/fonts/tarzeau_ocr_a.ttf b/examples/declarative/text/fonts/availableFonts/qml/fonts/tarzeau_ocr_a.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cf93f9651fc0988d55a8df32f131a8125ff3fe99 GIT binary patch literal 24544 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/text/fonts/availableFonts/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/text/fonts/availableFonts/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/text/fonts/availableFonts/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/text/fonts/availableFonts/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/text/fonts/availableFonts/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/text/fonts/availableFonts/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/text/fonts/banner/banner.desktop b/examples/declarative/text/fonts/banner/banner.desktop new file mode 100644 index 0000000..3cc66c5 --- /dev/null +++ b/examples/declarative/text/fonts/banner/banner.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=banner +Exec=/opt/usr/bin/banner +Icon=banner +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/text/fonts/banner/banner.png b/examples/declarative/text/fonts/banner/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/text/fonts/banner/main.cpp b/examples/declarative/text/fonts/banner/main.cpp new file mode 100644 index 0000000..06e26b5 --- /dev/null +++ b/examples/declarative/text/fonts/banner/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/banner.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/text/fonts/banner/qml/availableFonts.qml b/examples/declarative/text/fonts/banner/qml/availableFonts.qml new file mode 100644 index 0000000..4966a41 --- /dev/null +++ b/examples/declarative/text/fonts/banner/qml/availableFonts.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + width: 480; height: 640; color: "steelblue" + + ListView { + anchors.fill: parent; model: Qt.fontFamilies() + + delegate: Item { + height: 40; width: ListView.view.width + Text { + anchors.centerIn: parent + text: modelData; font.family: modelData; font.pixelSize: 24; color: "white" + } + } + } +} diff --git a/examples/declarative/text/fonts/banner/qml/banner.qml b/examples/declarative/text/fonts/banner/qml/banner.qml new file mode 100644 index 0000000..d722468 --- /dev/null +++ b/examples/declarative/text/fonts/banner/qml/banner.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: screen + + property int pixelSize: screen.height * 1.25 + property color textColor: "lightsteelblue" + property string text: "Hello world! " + + width: 640; height: 320 + color: "steelblue" + + Row { + y: -screen.height / 4.5 + + NumberAnimation on x { from: 0; to: -text.width; duration: 6000; loops: Animation.Infinite } + Text { id: text; font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + Text { font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + Text { font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + } +} diff --git a/examples/declarative/text/fonts/banner/qml/fonts.qml b/examples/declarative/text/fonts/banner/qml/fonts.qml new file mode 100644 index 0000000..ae48f24 --- /dev/null +++ b/examples/declarative/text/fonts/banner/qml/fonts.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + property string myText: "The quick brown fox jumps over the lazy dog." + + width: 800; height: 480 + color: "steelblue" + + FontLoader { id: fixedFont; name: "Courier" } + FontLoader { id: localFont; source: "fonts/tarzeau_ocr_a.ttf" } + FontLoader { id: webFont; source: "http://www.princexml.com/fonts/steffmann/Starburst.ttf" } + + Column { + anchors { fill: parent; leftMargin: 10; rightMargin: 10 } + spacing: 15 + + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideRight + font.family: "Times"; font.pointSize: 42 + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideLeft + font { family: "Times"; pointSize: 42; capitalization: Font.AllUppercase } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideMiddle + font { family: fixedFont.name; pointSize: 42; weight: Font.Bold; capitalization: Font.AllLowercase } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideRight + font { family: fixedFont.name; pointSize: 42; italic: true; capitalization: Font.SmallCaps } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideLeft + font { family: localFont.name; pointSize: 42; capitalization: Font.Capitalize } + } + Text { + text: { + if (webFont.status == FontLoader.Ready) myText + else if (webFont.status == FontLoader.Loading) "Loading..." + else if (webFont.status == FontLoader.Error) "Error loading font" + } + color: "lightsteelblue" + width: parent.width + elide: Text.ElideMiddle + font.family: webFont.name; font.pointSize: 42 + } + } +} diff --git a/examples/declarative/text/fonts/banner/qml/fonts.qmlproject b/examples/declarative/text/fonts/banner/qml/fonts.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/text/fonts/banner/qml/fonts.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/text/fonts/banner/qml/fonts/tarzeau_ocr_a.ttf b/examples/declarative/text/fonts/banner/qml/fonts/tarzeau_ocr_a.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cf93f9651fc0988d55a8df32f131a8125ff3fe99 GIT binary patch literal 24544 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/text/fonts/banner/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/text/fonts/banner/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/text/fonts/banner/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/text/fonts/banner/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/text/fonts/banner/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/text/fonts/banner/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/text/fonts/fonts/fonts.desktop b/examples/declarative/text/fonts/fonts/fonts.desktop new file mode 100644 index 0000000..ffb31e9 --- /dev/null +++ b/examples/declarative/text/fonts/fonts/fonts.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=fonts +Exec=/opt/usr/bin/fonts +Icon=fonts +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/text/fonts/fonts/fonts.png b/examples/declarative/text/fonts/fonts/fonts.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/text/fonts/fonts/main.cpp b/examples/declarative/text/fonts/fonts/main.cpp new file mode 100644 index 0000000..95d1299 --- /dev/null +++ b/examples/declarative/text/fonts/fonts/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/fonts.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/text/fonts/fonts/qml/availableFonts.qml b/examples/declarative/text/fonts/fonts/qml/availableFonts.qml new file mode 100644 index 0000000..4966a41 --- /dev/null +++ b/examples/declarative/text/fonts/fonts/qml/availableFonts.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + width: 480; height: 640; color: "steelblue" + + ListView { + anchors.fill: parent; model: Qt.fontFamilies() + + delegate: Item { + height: 40; width: ListView.view.width + Text { + anchors.centerIn: parent + text: modelData; font.family: modelData; font.pixelSize: 24; color: "white" + } + } + } +} diff --git a/examples/declarative/text/fonts/fonts/qml/banner.qml b/examples/declarative/text/fonts/fonts/qml/banner.qml new file mode 100644 index 0000000..d722468 --- /dev/null +++ b/examples/declarative/text/fonts/fonts/qml/banner.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: screen + + property int pixelSize: screen.height * 1.25 + property color textColor: "lightsteelblue" + property string text: "Hello world! " + + width: 640; height: 320 + color: "steelblue" + + Row { + y: -screen.height / 4.5 + + NumberAnimation on x { from: 0; to: -text.width; duration: 6000; loops: Animation.Infinite } + Text { id: text; font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + Text { font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + Text { font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + } +} diff --git a/examples/declarative/text/fonts/fonts/qml/fonts.qml b/examples/declarative/text/fonts/fonts/qml/fonts.qml new file mode 100644 index 0000000..ae48f24 --- /dev/null +++ b/examples/declarative/text/fonts/fonts/qml/fonts.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + property string myText: "The quick brown fox jumps over the lazy dog." + + width: 800; height: 480 + color: "steelblue" + + FontLoader { id: fixedFont; name: "Courier" } + FontLoader { id: localFont; source: "fonts/tarzeau_ocr_a.ttf" } + FontLoader { id: webFont; source: "http://www.princexml.com/fonts/steffmann/Starburst.ttf" } + + Column { + anchors { fill: parent; leftMargin: 10; rightMargin: 10 } + spacing: 15 + + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideRight + font.family: "Times"; font.pointSize: 42 + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideLeft + font { family: "Times"; pointSize: 42; capitalization: Font.AllUppercase } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideMiddle + font { family: fixedFont.name; pointSize: 42; weight: Font.Bold; capitalization: Font.AllLowercase } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideRight + font { family: fixedFont.name; pointSize: 42; italic: true; capitalization: Font.SmallCaps } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideLeft + font { family: localFont.name; pointSize: 42; capitalization: Font.Capitalize } + } + Text { + text: { + if (webFont.status == FontLoader.Ready) myText + else if (webFont.status == FontLoader.Loading) "Loading..." + else if (webFont.status == FontLoader.Error) "Error loading font" + } + color: "lightsteelblue" + width: parent.width + elide: Text.ElideMiddle + font.family: webFont.name; font.pointSize: 42 + } + } +} diff --git a/examples/declarative/text/fonts/fonts/qml/fonts.qmlproject b/examples/declarative/text/fonts/fonts/qml/fonts.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/text/fonts/fonts/qml/fonts.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/text/fonts/fonts/qml/fonts/tarzeau_ocr_a.ttf b/examples/declarative/text/fonts/fonts/qml/fonts/tarzeau_ocr_a.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cf93f9651fc0988d55a8df32f131a8125ff3fe99 GIT binary patch literal 24544 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 +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/text/fonts/fonts/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/text/fonts/fonts/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/text/fonts/fonts/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/text/fonts/fonts/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/text/fonts/fonts/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/text/fonts/fonts/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/text/fonts/hello/hello.desktop b/examples/declarative/text/fonts/hello/hello.desktop new file mode 100644 index 0000000..ad55aad --- /dev/null +++ b/examples/declarative/text/fonts/hello/hello.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=hello +Exec=/opt/usr/bin/hello +Icon=hello +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/text/fonts/hello/hello.png b/examples/declarative/text/fonts/hello/hello.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/text/fonts/hello/main.cpp b/examples/declarative/text/fonts/hello/main.cpp new file mode 100644 index 0000000..293d7da --- /dev/null +++ b/examples/declarative/text/fonts/hello/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/hello.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/text/fonts/hello/qml/availableFonts.qml b/examples/declarative/text/fonts/hello/qml/availableFonts.qml new file mode 100644 index 0000000..4966a41 --- /dev/null +++ b/examples/declarative/text/fonts/hello/qml/availableFonts.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + width: 480; height: 640; color: "steelblue" + + ListView { + anchors.fill: parent; model: Qt.fontFamilies() + + delegate: Item { + height: 40; width: ListView.view.width + Text { + anchors.centerIn: parent + text: modelData; font.family: modelData; font.pixelSize: 24; color: "white" + } + } + } +} diff --git a/examples/declarative/text/fonts/hello/qml/banner.qml b/examples/declarative/text/fonts/hello/qml/banner.qml new file mode 100644 index 0000000..d722468 --- /dev/null +++ b/examples/declarative/text/fonts/hello/qml/banner.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: screen + + property int pixelSize: screen.height * 1.25 + property color textColor: "lightsteelblue" + property string text: "Hello world! " + + width: 640; height: 320 + color: "steelblue" + + Row { + y: -screen.height / 4.5 + + NumberAnimation on x { from: 0; to: -text.width; duration: 6000; loops: Animation.Infinite } + Text { id: text; font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + Text { font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + Text { font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text } + } +} diff --git a/examples/declarative/text/fonts/hello/qml/fonts.qml b/examples/declarative/text/fonts/hello/qml/fonts.qml new file mode 100644 index 0000000..ae48f24 --- /dev/null +++ b/examples/declarative/text/fonts/hello/qml/fonts.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + property string myText: "The quick brown fox jumps over the lazy dog." + + width: 800; height: 480 + color: "steelblue" + + FontLoader { id: fixedFont; name: "Courier" } + FontLoader { id: localFont; source: "fonts/tarzeau_ocr_a.ttf" } + FontLoader { id: webFont; source: "http://www.princexml.com/fonts/steffmann/Starburst.ttf" } + + Column { + anchors { fill: parent; leftMargin: 10; rightMargin: 10 } + spacing: 15 + + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideRight + font.family: "Times"; font.pointSize: 42 + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideLeft + font { family: "Times"; pointSize: 42; capitalization: Font.AllUppercase } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideMiddle + font { family: fixedFont.name; pointSize: 42; weight: Font.Bold; capitalization: Font.AllLowercase } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideRight + font { family: fixedFont.name; pointSize: 42; italic: true; capitalization: Font.SmallCaps } + } + Text { + text: myText + color: "lightsteelblue" + width: parent.width + elide: Text.ElideLeft + font { family: localFont.name; pointSize: 42; capitalization: Font.Capitalize } + } + Text { + text: { + if (webFont.status == FontLoader.Ready) myText + else if (webFont.status == FontLoader.Loading) "Loading..." + else if (webFont.status == FontLoader.Error) "Error loading font" + } + color: "lightsteelblue" + width: parent.width + elide: Text.ElideMiddle + font.family: webFont.name; font.pointSize: 42 + } + } +} diff --git a/examples/declarative/text/fonts/hello/qml/fonts.qmlproject b/examples/declarative/text/fonts/hello/qml/fonts.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/text/fonts/hello/qml/fonts.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/text/fonts/hello/qml/fonts/tarzeau_ocr_a.ttf b/examples/declarative/text/fonts/hello/qml/fonts/tarzeau_ocr_a.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cf93f9651fc0988d55a8df32f131a8125ff3fe99 GIT binary patch literal 24544 zcmd^nd6*nmb#L9exAyL?uHKiKo}TVmw9L}8^++RWv|83;ti`sBWlOTG#g;AEk}N>- zioqCv#uDI#hcT-IUIM{+fe;pBz>owC$@^I1#DuIic|1Pg5eMRY@8Q<_oqMaMTZ_p{ z{>{uMbyamu_r2$y<#&GP+|rn)X$kGE8rQB~yY|vI%wF_`uWH(^Z{TXzg=;QYt2MQI zasF|fS2kTTI{wBd@5yNzyAJ2u_8i)MxQjQwplSR&xb_Eo-h8a8_39@y&3G%`7uW8- z`S9t}_+)L@2XSs+d+@~mA71?G3Qe=_*R-uayKdj^y+8T1wjA&M4F8(f;ez=;bQ7P| zhx5Mc4jnt*cVh{k$G)m*dhFm$dv^cx_kJ{q&%Ybz=Aqrk53_aJJ$Qc|?yugs`_R6R zf6@Purfolt_n$v})6K_z@vhxdnzmyN&bMhaSNwZz=g6sD{?cD-9{&lhXkS14xA@NR zb?fP-ex)ej)Yf#miXZ%qD4cF;+x2hLseYyWBsz?K1YKde_I6FkOZ1ma-nAmUh3VgB zztRl+^?mv?xOTsKWq+@Y;qUNOrW4)?angD8vw8modvRRtTg9uV7irruw&!t9bHR@q zk$R1e)jMbX|99Fqwd=K4@lXD;f#|5?Rbzg~*{isl{^t5K{}ShKJL4{OPx!eV@2D$} zoO9*%?z~>>y!S5ocaO+xk7(DN=Tmk^*TT7MJ!{7Q6;Gi#q&-?!s2`ug8EHxv^zuFO zHHj-R?N04?w8ypI(>|+xUi*snC)#(lzta9y`%T{}*ei4m?|wqQ`$u^98*}fjz`OeC z+coXo;t? z=nWTd+Pr1!C6`{d?eaHXvHi-ccI@1B_3mr-?A^Ej+UpKnf5X8;H{Nvk$kCgRz3I(w zIey}nTW`DljyvCaSE)#%Ip0r(F81JGl@9Qe*0gdr9rV(F;ZJ*t(Ur4alV_cGoCfMx z`pb^X=RX|R_G`~*zhoJfP&o(fesE726v7XzZu)?eR~=|4(8=;)98Q^Vj+x^;^kx$$OG71Z#s| zq-Ii2rrq?h^k>t*%3PQEM%K*k%zifea&9(vNA6eo75N_&78RZ>{Gzy~c&d~v?JqrB zdZj#B-dTRU{FAOk*P^axyRYhgwz9eMot|dTKUFtWf4_IA_uk&`)V9~YSZ~(9*SELt zx&BrCe=txOxNhJ_gN?ycgFl?NX5Jn1em4J_`EUNO{)>fY+TY>7Khu6rO4;9>sIYu4 zUtt;3GOYxw*9HgZcXE1`F-yE*WnlZ3U`$xPom{!uacqw>#dUw>{r@ z&`7}O=sUiN|9;H2l4hry6XUt|cbNE!5q%lHX+)oFPB(uk_Fk5866#A5Znfq(Npoy6 zl{8J;W1H!#6Hf8PBF15G9t4+MY$bz5Dch6Zb3IIYwf-^?gvOefMn2cWx*4Wo`nsHw zspiv!NjI0XWo%TZHwOo%Ca0Ty(@pk!X`k;f9HHyn5)r|B7Yzun8n?!1%d ziX~rXS<}^D;;z2QaN6R~)AHlhFA zupyII*#qoz7%MCsW0f+=Wz`^QMED(H7!?N9t4|Fl?1W`B7`J1A>$$eWS%Vp#r@y2m z?|SyHg=5Ec#)WOW;@3&xyS9=ETcxjNzoWr%M6%Ce&h=3?!ls)K@~?hqft9k|eBSul zb0U{=T=p@>bSsrzfQ4q(U?z``!FaDfeOk(P2q(c3)*dP?-$E87v(`d3wUj|srkhw` z{C2Y?j18VT#dL1PQm*F&=Ew*;b&~TWCK1Fe&PPYsV{FxfZ|Q}|8B-}?Jn zOX~OS zUIz-N;|A9kuN|}vsb^{ookN=c{x8W9lTk1>aQdU{oj`DwTDKy`zy?PfjZyX^ed%l8 zc=rc5U%gm(mIk*GT%2E8ix`>nMW@=Jdl+@Jx)Izx&=4377 zvx)H~Z15N2+H1{XP_h}bOF`DSm2ob*f*y~hQ`a9zr*tEp88JC$w;I`GneHlQ{&DAy z9Xq$?dwU1**}YQ5%|y0tUSZa=34^iLRfZQ!W|`hCmM>qig2Oh_1=h+E{yXlPS`e>1KLhs*zwm%a2b?Hj zibgp|Ir;ubA+tI92>H%ZMvjJUvh1X1=s%)p>T^C| znTG6!HOIq9L90G--V=%+r1$k<ZiD84{{KJ~#y(VYiF-i6EB?#29|gIx-%@kZcpG z+K5EOe!(o)>S3(X-A$Uo%e69RM~*OFs)q;i3gfO5%r4R277D>L^?SKzidJ>&mMwto zm`mtOrnIY|@#DD(D149fBp99YU!mTk*QC1; z4PRm0;2-|Tdv7V*X=o9*oTO;&4BdilJo+fTBjdGgdX_8Lhq-6Rf6eMbIy1|6yLtkO z8GVQ=c-0-#6~b8*z;U#F!b)u$$qF$F0>W(Q7e@%G1Qn#NL*JEikW-gyyqt|P91wI+ zt{E~Nz+Ge-8T?&^ji;J;J3qq4YI+7Al+RH}#)l8Eb@f_*Mle4m;^{=mbX~otS}KWR z#+Yde%kA3SC*MvRupY>&T1^*C?!iWc%MbCwLa&ze!~q=^$8^DR>=UfU&Fc-5J&sq~ zkMT;gz-^(wWCW=}ioOIT#O&vRE#=P!CO1@n+U`BqDH>dl@<5s!H zsXCRC{h~1#7du6a|G@MTX331Ze1w(w8g4%C#9J@xtA)vgCzc)@wF?dMKXdVuywBT| z{b1HTtU;5PqVt)2QC1U4Pf9#LSg+ObrmttA{T0@Os0Ynku1`(EC6BQGlwVqA^;wOI z$WHgi0plP&eP~fkR2p`#jmw7!2Ql3dTkBT$Hj(gk)6j!O18iVX$`Ha&3Sm?i74+P6 z)%@Up*kPFiM)$>2nY^{i0_K|C92f&8W4QVOCy~a*OwxGsxZQoFt_xn=G+it;Hx~^g zA-XZVxmGNSo{L8y-`DY0ukXd6*Wo&hX&beD6zfR(`5dAEDWw#)G;Vn=y*z0xP%6To zPRieQ^k;{FLG@V`c1{R*(6W6O7Kj;Utn5=+7%Z?=s#>%V=Hc3tOZwbzS>x*v-I$TF zSrs=+n1TQRKksJo20ZQ@@wrp$Yu|IVSx#|LZgn8k( z!%i9nS3LF~mK+pz&S$QVyuU<&q?a)5OgjQ(W%wt7${Q9E_>mB;(VUdPa}uTw1(wog zKehXeAeRn!Cg=FJzUZwg3|zdaxA*9dycJL81Hz`sbUGi{QZg1WcK9$nWHFH{Lye7MmG1Zl5-=U=H{E15i!Q~r_Pka{`q0Cs8~B|K zU7Rli9Filr_*w^slgL-jji$3q0wiGSz;{f(ex1HPSFT^DX0>j8gz3zU z8`MlTY`pR+<`A~yj_HWoZ_{tRBV+oO4TtpT2cZe2dP(fREE8f*0Ax&|7qfBQ4?Zd~ z5}@ng(KPm9?1O{ajDjkimL1i%C0WwGkSK;)ePu_Qh-yMqEd1#WL5@ZL$%id zUN;>#sjI7k6@bKDBW-jGmS@7S-FHfnyR&YXjUf?p^<5A#l0nBYTkqol`ADYRipdTL zOwo*Tk_TiiF$j52ErD=-g(}I?$nCX3rUF=_`VBw(8He$wGmNL>F|TZ~OlG>7$uO&o zh+tS*Ec1Q)_wVBXpWMzEJ8lKJLUI4N{Odu5j>whoDl0W9ceRfY{(on5WMp(MOG!*Dn^_)Ej)Ig0Cm}GJn#4i9#MzP= zm{=|_W|p*%bWxHvF*&8IL&qoBUhB`NrY1XV;tH~L=_Ai47E-b~y5MyzV`7>lf@Q_8 zM8vaU%GP8TM*@k=9Y)DwZNtAO#RApAyaCxB_T2)%eg1ksX-LLEZ9PGsX=| zZ`~U+ym%^Za+3k~9gi7S>)m2%Bo016iYTG}j)al>eG-)&-x`x2O7zHXEGU>4gU3wI zOL)B1jr5nXxM_N^I6}og#&xk(*{dDjLW3bbhdYo6(gCnH5e|G1(Q=2fm~p8LSa`{- zB=p=kIS@(6 zOvFdakMaY&+hJ_pJbiMC8P4c9>+dHpZp>d$EHYhxfTC-5C||Va&lj%6uhkD`i(r66 zsTLR6jIK}WeqYQrEK#j20qB;I)ZS#oU9o--Qa5AXSkSBnS2Cm9D0eLcbzJIp)2;V6 zt39P|2eCezV^o`Ym91)XK1ww(Rm%)ns8OUJp)2kYit_;n!PqX{3^JLF1zkn*BNJjc zSVOpuXnj#6ZP!5}`1s=>ppfBEJbM-Y{TQ)eL1ep`g!~GLyt#}Ca8TrDmr)QVx5qx^ zdPQ3o=3y>5J&zwYh3-|eN&T<^cMC^r9M+|wSp_o{bKWD88S^_PaN2w9Sjy}Hg65~} z{)Th#2Di~~y_*vyhp~JU{}IoH8XCfns~x zU^w*+LtKsA7egCrE?u(`JZY@gYnu@p9@H))xv7LOn-8^{9KW8S@hka3cvd#b^s#b- z(XnI`XW1k)UFrEWECzsL3PRp!*q$8v^dj9)rSeGMPo46(VR*%quP>S=Q0RD;QHHiI zTEx8sOv-h9aq5)t9oL6ld3@0##vD>vn$Y_7qYZ|vy_^C861#<+fV;@Kd4U9fw6T7@ z$T|iyyKq~hp4Of2TH1^FN=@4_QA&*;3x2 zfE@8}=W*ue#X97zcj!oArFY*Dg0&6Hlgc|M;m{+9w(g?90YW>IKR(kJgISa8v2-i6 zQm^Qp1Tryt=Em8;PFdhb%oy83E;1yLLDB{UrXa@{lJ7_dSP^{bW5kE2n^ooObE3$+`0!n};u;paG{XBLR3{>9qZ<)MLeiqk^Q?(aLB< zLLz_BK)rZDGG;nX>psKpN)~Jcgg2S6Yz_iBlh$9m%P#3G)8p&<9S%OBgDa_M101#1y$`s~? z_PbBVx&{%+jY7I)J@_Dd;&BBBUwDC8xkAmp|NbYRiiXDRg%$JXRxMA?k2o($bv^Nf z*^|i=38sb=uKybN+>K|B3G@PqDyoUdm6Il{Pk=_iB95>+g@q_ss|@XYgDnY$xI_84 zT-;B7QbE+Go|H3qz$_wP50a{0p)ZO0}B z*x=2btP#M4k!qC04#aa3IpzoUL|=&cP1F3;`V)Xx0#<$-2p&@^`i^cY^`^d^&pS;Iu;0Wod(Uc3;P9dNzV4T71;v0b5^16(E2sWN}$18|O( zBi(P?En1GD-v_Yy+PBuP2eClw3%*h2Xe2wBOSpm^O9>@iD#;is;zb3C&nCOTNu~}=m7m1=4M(pIi+3ohRG#m~N+NP@+opp* zH62~np(H!n#>FpdqtL?T(#~=u$GIe_y})z+k$~1jScr;hCDCiU@QE5+!`pw?xYou+-U6o#43Y4ECc=7kt0XGi+^YM@&y#-(@mkwM^fGG zg0HHMb|h`H%$Qqx8TZ0UmE{&uq6P3a9j|1};f4rtoYVAxDnK3 z#%=2bO~N}=)Voqur+efl3`xTR4CILvBKIjD~P5)HMEDr#?2~XZ{(sUq-!}u*Uer zjO5@X?{* z|Aw?@m~&_yA^sDc`90*&kaC$CkO|a#x#>ANJL(_@L(Yczdrs?=?#5K|t{W&_ZfQM@ z7oC|Lc{~Io*o%lgupTrIKnCWE4A4X-=eCh__@DlXaDe&a5Eu!kU9(DS>ofp4l7bwX zWEBVzg&9^9;mKoCT4I?H)9W=oyyCdBJX;pNK&yjrUpS));+-&AFPW~wmiT!(Aa=pc zf}j#qyEPLrWGe+!+Rki>xVfk9*f!>nPaCkC*J+99nBSGeG%&Tygjb?j&^$*Z>Xb7k zoI<(l5~v7n3TxJ&BbHMljgSgFQwxhuYU!|6GW@5f>%>hEuS-Itzd$DRF?-RV@1(#Q zSbfzIyJ!t|nYz(EXcz6_-af>Ab5+BdSz;70SDhQC>wsdnbY4z7sbw3C^neGlH{rS^ z=z(b`{M5orLGPJH4w<`^DP~ZjmdU#_==de)W@A?oyHnV z2N*U^y&I-v3*;AR<8OXsW@;u~j4x0Po&1)Pe@7NFUK} z#%sq-v(RN?LY1$%h(xWqh7EA7sA$piE!T7Nrr$&m*j%VOE*0Hu(NU~;SteqH5@15jE6H3%s0 zEb!v$bR>(L=$swJFLQ?z$$^H`bS@Zm5UT1!?kaa`eh{xXTz?zjlWz8x=UWBK_Y&`F3QGK`G7=DHVlOqmZFf~s)vR{e-!_(X=*0m}X+BqgX!jV3fW@F0K2?p>7PlM4gGG>u^4q===f^WCej?jW}* z1N$4E&E*OXNVv^;jxb{L{ARclOh@!}8P{IkmqJHis(;(HV4g~_r!Z-l%gC-`lrq7t{bMkHiz`LEHg|S6p+WF^vKe?|^@#|LP>L6MuLdVzNazcQggIf?M zZjmrrbt|!Z*;V1UuV2q>P;=5f{o&_0vFJo`*cMEzt(O;_t(T;ow44+y1eQWbzs}6<|^(&y}~*t0VZnSSw5{5ZSet0il@hx=*Njrew#PW)iU7O`7}mhV@JkI{j-M zmUPDkt*6a?@_FstVF_t2306Y#GkU}-?De{`NLP{Qz@?nqDCWb{pRYMf)*;#zh|Yd7 z;uv19QHwexDev(@o;1pNNI$_lMG8p9M6-}?P})CRjt>F2uj>o0QV`uNUaH9{33 z+u-Q!TS&Bws)){64rKQTd{+i}HS(^I|H~zz8no`R08VU*`juXb96}GqC$Guy!TuU; zY&PN?u|6y2+Xw843vnWeYj7{!Yov&3$rqlS1GR7YQmdfL9@q!NSUq&*jo+aDrK zL>x>iVWn2B31rQjO56GrPq^5+&|YiBEvvN-30oyHEu)cTC7{NjYb8ZwN{4jTBD04c z5}88Uwg63ApJf+u-;dQ2)Up%ik7q4%?&>3V-l_Yxl}c1lRe71Ue$4&(iJ0#4JMTEM ztD^-pT;jI-Xn8L zqdzm>$TxZzm8An(LN)7wBBHzUFv=}Yjp|&zt=!F$rPlN$pP5;@lv!zXA)>UwMn*wo zCIZh+0Dg=NV{y`L*W+y7z%RL^^;qj;Xg7eju^gYXE>>Q(3P2y|UPrkl;iQ6&=CveQ0N*)_ZWa)SL@Z*tDPfg@;WNm=;T`F{NUgK06W<+hBsHVlFK0%D?;+)&E-1X z(^jIMIi6^6fPHmA->?M-G~c?ArA2SA@|~+z1_9e(m1nz0;~aR=8M|k~%8k1Y|7scK zA*>nNC#{h&9W9&CJ=kZEK*nmtj7-+ZfCc4fCCgWu)~Sbs#S84EY}5;FbZBU~krIA> zGS+we0cUESxA5kLMq&qA(LRwEnUZzt6bBX+^XBWrBO)C{l(R_pctOg@bjuss>qouq zBif42^+Own4BvIqM49J}>at5gibbJ_a5^EpHlyc$!Ds4-)PN zvc#xq+##$0j8|DnJ_pCG3ds@Tpe0qYkfIK8(}RzElwrithy zZoLh?YdYJ_6WkaX^m?wlUEai#=+?K=i3Ea=nGm<$f~>anAs(Ph2q4p}R);G=921Ra zEXvh&5Pz*1kuAD<03xQqw%g@pG{VH&eQR^>Hw1Ivvext? zHk=WsUi&siMcyuo*P$X(g@R6AI+5W&s`mg8|4&0ph`LFHEucQ{(4t#Oh+?WuPNcV_fAm^wQk_HNlyqpEN7!DOThG7KI z2@;j*U&vaF${X?57`YU00(G}|g31bp6?0`hFOExzIA{i%4MJV1tebE>#&t#-ovy-5 zivy@PBI1@xl98MPQLX>g`Uw^^|B-vT2{ECS%kIACBe{G&&$9n8qxLaSQ2bHruZM<( zEQaZ3%Cd;|U?@cM;UQN2`BEFr1ZU{;9L74UH%^zE1K@22Mj=7^mF_n+2|s*xFC5y7 zE%x-&*h(baU?{c$EpqF*lgJDh!qlIBTDQ+>f^!qT&s#rWt-s)YGVUg=4BF#vzs-ON zXR>$;7R82mTK2%T@!-tddPyCs@UgSC$mby#l!l0nKv+;(&kkM6m69ejYEGRBJJ&{N z5W7Tn?G#`@=5)%d^k324n>E=LSJVa~wTcf-^_;lkL+|LGi-7ezK5*hhW7?I%ZTrG1 zjhFi1EG^q;V}HasZK^R>DtzHD9bnV>DrUX#g2Ohx@4rQ*!Ag(++P46$Wks;3lGK|l ztd_~xAI8|KHjlok{S6%mv`Vo;7J1TP1s4_Wx5}fw>ZHhb?8Iwb4|UEVKn)9Ga3!+NQzYOuCUAj+w1@F{KVJnz&xO zOAnXd(eFSPpxl$x#&30PA$@98%TQ`4<%a%*j!G~KXZ9eEY8c>v!J|ZV;A`-s_CQ@9 z%`Ylnz}Uc=oKpbqC{xQhQg7jE4R|)npWtt$V?|(-EjZ*0h=o+?QnWMV^Bk#tKEO7J znT@H98zJio!ip)r0MKto`#bd3hp|BX6i*JUGpS|OYD%}W$?HylfH|t3GA|GTA$b1l|vbK%Tq03a1;u*;A z>E?5MVjA48__Co}@xYDwG0}Qiq!Yy0P{HkAERm{%htPi|@?GdBi`J|R6obw}RWAV! z&A`)#zGG6l%Bc1v$uL+iGMWl&LUg0LY9*BBnnqhZCKsVU0tF3Bb8z4l{hBTL7yv5@ z5ZFMLnFPC9n`enFt8?+eu3qADd#ermzya`*pu$S#?kyQvvIeK{cjh(MNYWN`idb{O z#00v?JWGe4^;Qp?w|r(s1TpLg5Jn~sm&x7kTEkiEjMi$B7G`S<;(y7R%hsYq>#uNT z=Z#t&1P<%2G>n8}V1Y;$p?9lzK8Hiq>W|)>mENY_p5GpdLr;pwg*I zeOXCdigruBO}4-3Ccj+Aez=80hFeGj4$)SW0gm3Zu&*2mGByOpuulMNXSUpzC|-Hc z9qo-(z}Z2Lb_F}QoVk6HDoJj=NP1}M>jf$zD_6qe_y*)cxIdfp9P@f~5TgN4JkB%ph-DRdW4+Nem|S-OG(~JQVN&h&U##tFdyMw3qp8UT z7CBsVT5Ab8=3oa+xKUNJeE;gttIODE>(+fog|c0T57KwT#lNB`-yxJ!)G}{sZW7l!XjD?872DP?-bs ztTh{xy`?^{8=Nhg+R@7OtT;+ z0N2g5yPzP{Cx-;XDqP;Ga!_GVg3xs*`iP^}~PCkY?Sl*+qd zdlDuhofv4T23bVgCPuK5>I2YD{QqGESnn%B_2vc^DGAmD<0e zwp79Ds)uG$!p3W(7WDSqd#+vd$84iIly2Ka2_AveJ(d6k2JCE*$D&e#S_Jc2n+;<=0A+aBA0-lJ7)@X?_|2rCDG8G6-~a&nsH{t!u{r*1W^}aSUtB)D2Cp^apGK^)Cf?Z1?Qs^Ti@4u@{VdG9V zT*nhwG(E#(nyNpAJrx)}I4M~uMDU{>BawDQ9ctvuJBm3(DyTO7=QusOz_DPE6BE=E z3+*%>en>U{P2fkQGX~GyASy*Stnq}89-zDtW-T|>KM#Oyrkw)yibZ=Te(%$|(VI@B ze??;O&)f;4V*De}d74Y)zu=1Fjq70R=$f)tw`(Jmiz%8#m?~c}bZPd8^ z+Dtl$_5zT}k*|6cbQ}f90O5KCsm30_mNwHc;lg_7iQHSX)Qwo+gf2(>?x+Ey|CJz4` zO_FsO(j|C*8pk!TferAL+avj9NC}AgQm-_wl-k4+ zO3xYHorFuhFXj7iL*>54Jjc>eA+FEsD_0B#0t~zX8VzML3up-Jvo$Ie#47afrPK5n z1Q@oYMZp%zs|XtoZPUQv&gbI7**Uq)dEJ{{vicwX%z52gIQlm3E2G0{6P8+aILVQ#b{>jv zk!O%On_TgMK>!$^(USLE7trC8<7 z($&hB`05KR+svZPh`@UxYuL%fi-0}zDS5?YgGikyggNnUuRdXa-x;fWU3gXixJUwZ z62N2%d4wiB(g7KtV_bg);kXnY*?~(L+E4||j{LR8qkfdr(}@40+LHFp+cQ^AuAkah zBY-CwrlZ zrW@Vv7MtSL1$Nz@*K1&3A^JpJ6z*w5uKj;SuRyNzMkF<)(T0AxX*)(8zOOz6&`Sc- zw?RC^@Ge~<2r_Abj%dK$q?KA`R!6Mu+wI{Vu?8)XxL6eF^bJ>L5$I@RrD3y6*(FBT zcHEC-=ZylZuzIzDWCw>pBD&Ypk8M82rI+G?F8W4pNDNGJBMeM=!g+C%iYQ7#ua`Ic z=MfU7fr6l$!$wcR&X+cv4-lP`D4YinL9DMG0aZ+rv2(kQoF{FV13$klPiXrD>cVU) zW6EY!XlPbxL~15kLsCCFvFA6-j@=E68me?2utPeDQ2@;S!h;FQt;yS0wws ztayFFrcIL}GUfGGZ6{NVUhMWNt+nSR`Hiz(QAw^uh`ktfo{0Hkrd#W#mNQh!a zS0a;elg9No@HmtW#iz@^9e;%%HT_97y>w&*X6*bX1)51Kme1N5y4ut5qBr8JWKXeuTSTD&b}`czA%0MmRLq zWs)_3Lj96nZYR6vkIfsPSf_d)o>BW1udWiP+la6h- z6VsBO|KE6?iQGjGR!@OGam_X0@LZVO^k@Q5NZ83@2D`(Cx@!K48GEz`d2oA|Euyvl zB@h}MEkFLmQkX!>DY(E|k3MQ7Z1N4l%>^#@8duR!n1^FCMtwS#(?{>TNK>P&Vf@vsN*cWAV>BLHq2>(*iaBJFIEnGCH1b+@Mj zANtmq349;WeXI)Tj=7X{ZkLVLBVl+Necy>1*j5j$E9E9I#nueMZJfgy`ABYi`VH#W zaC-a3O!h`MPOKo-N^(|Z)jh84jG8F1gL7(9);=maC8K)h$SKuOrJB&T)~;2Bnq(4t z%!ThMsHC=t#s8&e3=q%k@z1GzXm+Bb8K+uo|9p5eDE944isQ z@9jcG4x%-Dzo*Krq?h%Q7VoJ7J;Cn-EAblAFRU7UOa84EwrB z^v9_ByL~&~aRnail`G}M*V!{79(V1W)EAZW&qlgWX6u3IwT>&}6Kl)L)QrpkS-b~a|&>N1O+8@DH zGfWO58+@61XFH$5BuSu#B_jp3fY0$m5F{o1)DkT*v1;248@Fg@n-qe6Qn)sv3JI@~))ThaLB_at=WwS)oBsh9RB8!rZgm=rLwt z3W}X;cY{!$yxV;$Cg3Ew^HWRs;wP|y-^NkBV;A zBC88GA#$s~;O*OE(B3ytk=?S5mr}CKrF*fw+r^9Ywg3{^F;DeSO&g>xYt& zi>>D}pCj@^p+h`RAu-$5u|!c6}!LBl#_&T{0W51 zu*24GuCTM|?s<4h)9jc(zu(BXLND5h$q7GvKnZSN<}~V5YSXr!{-64l`funNcj;h0 zGKBf;5{3k_^_$jfXwJQ__2w1`M|$e?r*XIXxn6rAJZ73;8^dEf6q)S|kGa;%o(hiz z?)i)G*wB*fH{r3V2|bUeBtV(*u|L2+b<8xItqhNKEygy7$6Q;*_Jzj+_k24%Hnb}H zVR&q6wjS43Ye$hK?beRr|Gioje836(e+jOW2xf45%iEzE%`dUb4)v|&7j+56g4b$FTJXJN3@%9bp)TV5BH%#X7$m1yN~VL zTfOE)^^)ChI=1iV&}GAyZo2&9UF%j}bkSAerAvm#hNp(d$A-tJ#+!>4jp2DD!($VZ zi>q%raO}G3+M8}Xw)Uo@*Y2y1jWnwBt~++@@XYAweq7y8S4VE%KXT)~WB9I35aCvc zMBB7_EB=3jl;Z(N?+{M*?LF`&yq<4*BefKfhjf` zxN_Df5QiXtPQM)kAqzO`M?T${MR%R`raJw)_P5$&8g{snp)f=HiM9ti_8zR)d$rq8 zeRzlVKIo&s^TSQpm906Nt9f{ia~xLW!%GL)p_N9JIg2MN=kcWFBA&He#?HNNbQtzv z7QI?ctHYP~gXI{6uFMCcwh%fy4DpU)o?{p}>Dv_aa2k5J7$RN*MrWBei<;gFEZizA z;2P}$EYgM0?e%yv +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/text/fonts/hello/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/text/fonts/hello/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/text/fonts/hello/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/text/fonts/hello/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/text/fonts/hello/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/text/fonts/hello/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/text/textselection/main.cpp b/examples/declarative/text/textselection/main.cpp new file mode 100644 index 0000000..4b670b6 --- /dev/null +++ b/examples/declarative/text/textselection/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/textselection.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/text/textselection/qml/pics/endHandle.png b/examples/declarative/text/textselection/qml/pics/endHandle.png new file mode 100644 index 0000000000000000000000000000000000000000..1a4bc5d7a014bdc407f2eeb4305ddc02c3db59bb GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^96&6ll@1`FkUPby3G=4 R)C$zi;OXk;vd$@?2>_6oGzI_w literal 0 HcmV?d00001 diff --git a/examples/declarative/text/textselection/qml/pics/startHandle.sci b/examples/declarative/text/textselection/qml/pics/startHandle.sci new file mode 100644 index 0000000..f9eae20 --- /dev/null +++ b/examples/declarative/text/textselection/qml/pics/startHandle.sci @@ -0,0 +1,5 @@ +border.left: 6 +border.top: 6 +border.bottom: 6 +border.right: 0 +source: startHandle.png diff --git a/examples/declarative/text/textselection/qml/textselection.qml b/examples/declarative/text/textselection/qml/textselection.qml new file mode 100644 index 0000000..f343be5 --- /dev/null +++ b/examples/declarative/text/textselection/qml/textselection.qml @@ -0,0 +1,290 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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$ +** +****************************************************************************/ +import QtQuick 1.0 + +Rectangle { + id: editor + color: "lightGrey" + width: 640; height: 480 + + Rectangle { + color: "white" + anchors.fill: parent + anchors.margins: 20 + + BorderImage { + id: startHandle + source: "pics/startHandle.sci" + opacity: 0.0 + width: 10 + x: edit.positionToRectangle(edit.selectionStart).x - flick.contentX-width + y: edit.positionToRectangle(edit.selectionStart).y - flick.contentY + height: edit.positionToRectangle(edit.selectionStart).height + } + + BorderImage { + id: endHandle + source: "pics/endHandle.sci" + opacity: 0.0 + width: 10 + x: edit.positionToRectangle(edit.selectionEnd).x - flick.contentX + y: edit.positionToRectangle(edit.selectionEnd).y - flick.contentY + height: edit.positionToRectangle(edit.selectionEnd).height + } + + Flickable { + id: flick + + anchors.fill: parent + contentWidth: edit.paintedWidth + contentHeight: edit.paintedHeight + interactive: true + clip: true + + function ensureVisible(r) { + if (contentX >= r.x) + contentX = r.x; + else if (contentX+width <= r.x+r.width) + contentX = r.x+r.width-width; + if (contentY >= r.y) + contentY = r.y; + else if (contentY+height <= r.y+r.height) + contentY = r.y+r.height-height; + } + + TextEdit { + id: edit + width: flick.width + height: flick.height + focus: true + wrapMode: TextEdit.Wrap + + onCursorRectangleChanged: flick.ensureVisible(cursorRectangle) + + text: "

            Text Selection

            " + +"

            This example is a whacky text selection mechanisms, showing how these can be implemented in the TextEdit element, to cater for whatever style is appropriate for the target platform." + +"

            Press-and-hold to select a word, then drag the selection handles." + +"

            Drag outside the selection to scroll the text." + +"

            Click inside the selection to cut/copy/paste/cancel selection." + +"

            It's too whacky to let you paste if there is no current selection." + + MouseArea { + property string drag: "" + property int pressPos + + x: -startHandle.width + y: 0 + width: parent.width+startHandle.width+endHandle.width + height: parent.height + + onPressAndHold: { + if (editor.state == "") { + edit.cursorPosition = edit.positionAt(mouse.x+x,mouse.y+y); + edit.selectWord(); + editor.state = "selection" + } + } + + onClicked: { + if (editor.state == "") { + edit.cursorPosition = edit.positionAt(mouse.x+x,mouse.y+y); + if (!edit.focus) + edit.focus = true; + edit.openSoftwareInputPanel(); + } + } + + function hitHandle(h,x,y) { + return x>=h.x+flick.contentX && x=h.y+flick.contentY && y= edit.selectionStart && pos <= edit.selectionEnd) { + drag = "selection" + flick.interactive = false + } else { + drag = "" + flick.interactive = true + } + } + } + } + + onReleased: { + if (editor.state == "selection") { + if (drag == "selection") { + editor.state = "menu" + } + drag = "" + } + flick.interactive = true + } + + onPositionChanged: { + if (editor.state == "selection" && drag != "") { + if (drag == "start") { + var pos = edit.positionAt(mouse.x+x+startHandle.width/2,mouse.y+y); + var e = edit.selectionEnd; + if (e < pos) + e = pos; + edit.select(pos,e); + } else if (drag == "end") { + var pos = edit.positionAt(mouse.x+x-endHandle.width/2,mouse.y+y); + var s = edit.selectionStart; + if (s > pos) + s = pos; + edit.select(s,pos); + } + } + } + } + } + } + + Item { + id: menu + opacity: 0.0 + width: 100 + height: 120 + anchors.centerIn: parent + + Rectangle { + border.width: 1 + border.color: "darkBlue" + radius: 15 + color: "#806080FF" + anchors.fill: parent + } + + Column { + anchors.centerIn: parent + spacing: 8 + + Rectangle { + border.width: 1 + border.color: "darkBlue" + color: "#ff7090FF" + width: 60 + height: 16 + + Text { anchors.centerIn: parent; text: "Cut" } + + MouseArea { + anchors.fill: parent + onClicked: { edit.cut(); editor.state = "" } + } + } + + Rectangle { + border.width: 1 + border.color: "darkBlue" + color: "#ff7090FF" + width: 60 + height: 16 + + Text { anchors.centerIn: parent; text: "Copy" } + + MouseArea { + anchors.fill: parent + onClicked: { edit.copy(); editor.state = "selection" } + } + } + + Rectangle { + border.width: 1 + border.color: "darkBlue" + color: "#ff7090FF" + width: 60 + height: 16 + + Text { anchors.centerIn: parent; text: "Paste" } + + MouseArea { + anchors.fill: parent + onClicked: { edit.paste(); edit.cursorPosition = edit.selectionEnd; editor.state = "" } + } + } + + Rectangle { + border.width: 1 + border.color: "darkBlue" + color: "#ff7090FF" + width: 60 + height: 16 + + Text { anchors.centerIn: parent; text: "Deselect" } + + MouseArea { + anchors.fill: parent + onClicked: { + edit.cursorPosition = edit.selectionEnd; + edit.select(edit.cursorPosition, edit.cursorPosition); + editor.state = "" + } + } + } + } + } + } + + states: [ + State { + name: "selection" + PropertyChanges { target: startHandle; opacity: 1.0 } + PropertyChanges { target: endHandle; opacity: 1.0 } + }, + State { + name: "menu" + PropertyChanges { target: startHandle; opacity: 0.5 } + PropertyChanges { target: endHandle; opacity: 0.5 } + PropertyChanges { target: menu; opacity: 1.0 } + } + ] +} diff --git a/examples/declarative/text/textselection/qml/textselection.qmlproject b/examples/declarative/text/textselection/qml/textselection.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/text/textselection/qml/textselection.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/text/textselection/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/text/textselection/textselection.desktop b/examples/declarative/text/textselection/textselection.desktop new file mode 100644 index 0000000..87e2ac0 --- /dev/null +++ b/examples/declarative/text/textselection/textselection.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=textselection +Exec=/opt/usr/bin/textselection +Icon=textselection +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/text/textselection/textselection.png b/examples/declarative/text/textselection/textselection.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/touchinteraction/gestures/experimental-gestures/experimentalgestures.desktop b/examples/declarative/touchinteraction/gestures/experimental-gestures/experimentalgestures.desktop new file mode 100644 index 0000000..aa5062e --- /dev/null +++ b/examples/declarative/touchinteraction/gestures/experimental-gestures/experimentalgestures.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=experimental-gestures +Exec=/opt/usr/bin/experimental-gestures +Icon=experimental-gestures +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/touchinteraction/gestures/experimental-gestures/experimentalgestures.png b/examples/declarative/touchinteraction/gestures/experimental-gestures/experimentalgestures.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/touchinteraction/gestures/experimental-gestures/main.cpp b/examples/declarative/touchinteraction/gestures/experimental-gestures/main.cpp new file mode 100644 index 0000000..bdbf6a7 --- /dev/null +++ b/examples/declarative/touchinteraction/gestures/experimental-gestures/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/experimental-gestures.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/touchinteraction/gestures/experimental-gestures/qml/experimental-gestures.qml b/examples/declarative/touchinteraction/gestures/experimental-gestures/qml/experimental-gestures.qml new file mode 100644 index 0000000..6a4cb3d --- /dev/null +++ b/examples/declarative/touchinteraction/gestures/experimental-gestures/qml/experimental-gestures.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import Qt.labs.gestures 1.0 + +// Only works on platforms with Touch support. + +Rectangle { + id: rect + width: 320 + height: 180 + + Text { + anchors.centerIn: parent + text: "Tap / TapAndHold / Pan / Pinch / Swipe\nOnly works on platforms with Touch support." + horizontalAlignment: Text.Center + } + + GestureArea { + anchors.fill: parent + focus: true + + // Only some of the many gesture properties are shown. See Gesture documentation. + + onTap: + console.log("tap pos = (",gesture.position.x,",",gesture.position.y,")") + onTapAndHold: + console.log("tap and hold pos = (",gesture.position.x,",",gesture.position.y,")") + onPan: + console.log("pan delta = (",gesture.delta.x,",",gesture.delta.y,") acceleration = ",gesture.acceleration) + onPinch: + console.log("pinch center = (",gesture.centerPoint.x,",",gesture.centerPoint.y,") rotation =",gesture.rotationAngle," scale =",gesture.scaleFactor) + onSwipe: + console.log("swipe angle=",gesture.swipeAngle) + onGesture: + console.log("gesture hot spot = (",gesture.hotSpot.x,",",gesture.hotSpot.y,")") + } +} diff --git a/examples/declarative/touchinteraction/gestures/experimental-gestures/qml/gestures.qmlproject b/examples/declarative/touchinteraction/gestures/experimental-gestures/qml/gestures.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/touchinteraction/gestures/experimental-gestures/qml/gestures.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/touchinteraction/gestures/experimental-gestures/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/touchinteraction/mousearea/mousearea-example/main.cpp b/examples/declarative/touchinteraction/mousearea/mousearea-example/main.cpp new file mode 100644 index 0000000..6c3c47e --- /dev/null +++ b/examples/declarative/touchinteraction/mousearea/mousearea-example/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/mousearea-example.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/touchinteraction/mousearea/mousearea-example/mouseareaexample.desktop b/examples/declarative/touchinteraction/mousearea/mousearea-example/mouseareaexample.desktop new file mode 100644 index 0000000..2306ece --- /dev/null +++ b/examples/declarative/touchinteraction/mousearea/mousearea-example/mouseareaexample.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=mousearea-example +Exec=/opt/usr/bin/mousearea-example +Icon=mousearea-example +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/touchinteraction/mousearea/mousearea-example/mouseareaexample.png b/examples/declarative/touchinteraction/mousearea/mousearea-example/mouseareaexample.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/touchinteraction/mousearea/mousearea-example/qml/mousearea-example.qml b/examples/declarative/touchinteraction/mousearea/mousearea-example/qml/mousearea-example.qml new file mode 100644 index 0000000..8dacc05 --- /dev/null +++ b/examples/declarative/touchinteraction/mousearea/mousearea-example/qml/mousearea-example.qml @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: box + width: 350; height: 250 + + Rectangle { + id: redSquare + width: 80; height: 80 + anchors.top: parent.top; anchors.left: parent.left; anchors.margins: 10 + color: "red" + + Text { text: "Click"; font.pixelSize: 16; anchors.centerIn: parent } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.LeftButton | Qt.RightButton + + onEntered: info.text = 'Entered' + onExited: info.text = 'Exited (pressed=' + pressed + ')' + + onPressed: { + info.text = 'Pressed (button=' + (mouse.button == Qt.RightButton ? 'right' : 'left') + + ' shift=' + (mouse.modifiers & Qt.ShiftModifier ? 'true' : 'false') + ')' + var posInBox = redSquare.mapToItem(box, mouse.x, mouse.y) + posInfo.text = + mouse.x + ',' + mouse.y + ' in square' + + ' (' + posInBox.x + ',' + posInBox.y + ' in window)' + } + + onReleased: { + info.text = 'Released (isClick=' + mouse.isClick + ' wasHeld=' + mouse.wasHeld + ')' + posInfo.text = '' + } + + onPressAndHold: info.text = 'Press and hold' + onClicked: info.text = 'Clicked (wasHeld=' + mouse.wasHeld + ')' + onDoubleClicked: info.text = 'Double clicked' + } + } + + Rectangle { + id: blueSquare + width: 80; height: 80 + x: box.width - width - 10; y: 10 // making this item draggable, so don't use anchors + color: "blue" + + Text { text: "Drag"; font.pixelSize: 16; color: "white"; anchors.centerIn: parent } + + MouseArea { + anchors.fill: parent + drag.target: blueSquare + drag.axis: Drag.XandYAxis + drag.minimumX: 0 + drag.maximumX: box.width - parent.width + drag.minimumY: 0 + drag.maximumY: box.height - parent.width + } + } + + Text { + id: info + anchors.bottom: posInfo.top; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 30 + + onTextChanged: console.log(text) + } + + Text { + id: posInfo + anchors.bottom: parent.bottom; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 30 + } +} diff --git a/examples/declarative/touchinteraction/mousearea/mousearea-example/qml/mousearea.qmlproject b/examples/declarative/touchinteraction/mousearea/mousearea-example/qml/mousearea.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/touchinteraction/mousearea/mousearea-example/qml/mousearea.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/touchinteraction/mousearea/mousearea-example/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/touchinteraction/touchinteraction.pro b/examples/declarative/touchinteraction/touchinteraction.pro new file mode 100644 index 0000000..1beaeab --- /dev/null +++ b/examples/declarative/touchinteraction/touchinteraction.pro @@ -0,0 +1,4 @@ +TEMPLATE = subdirs +SUBDIRS = gestures \ + mousearea \ + pincharea diff --git a/examples/declarative/toys/clocks/clocks.desktop b/examples/declarative/toys/clocks/clocks.desktop new file mode 100644 index 0000000..96afae6 --- /dev/null +++ b/examples/declarative/toys/clocks/clocks.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=clocks +Exec=/opt/usr/bin/clocks +Icon=clocks +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/toys/clocks/clocks.png b/examples/declarative/toys/clocks/clocks.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/toys/clocks/main.cpp b/examples/declarative/toys/clocks/main.cpp new file mode 100644 index 0000000..2952238 --- /dev/null +++ b/examples/declarative/toys/clocks/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/clocks.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/toys/clocks/qml/clocks.qml b/examples/declarative/toys/clocks/qml/clocks.qml new file mode 100644 index 0000000..3354f11 --- /dev/null +++ b/examples/declarative/toys/clocks/qml/clocks.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "content" + +Rectangle { + width: 640; height: 240 + color: "#646464" + + Row { + anchors.centerIn: parent + Clock { city: "New York"; shift: -4 } + Clock { city: "Mumbai"; shift: 5.5 } + Clock { city: "Tokyo"; shift: 9 } + } + QuitButton { + anchors.right: parent.right + anchors.top: parent.top + anchors.margins: 10 + } +} diff --git a/examples/declarative/toys/clocks/qml/clocks.qmlproject b/examples/declarative/toys/clocks/qml/clocks.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/toys/clocks/qml/clocks.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/toys/clocks/qml/content/Clock.qml b/examples/declarative/toys/clocks/qml/content/Clock.qml new file mode 100644 index 0000000..09e8393 --- /dev/null +++ b/examples/declarative/toys/clocks/qml/content/Clock.qml @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: clock + width: 200; height: 230 + + property alias city: cityLabel.text + property int hours + property int minutes + property int seconds + property real shift + property bool night: false + + function timeChanged() { + var date = new Date; + hours = shift ? date.getUTCHours() + Math.floor(clock.shift) : date.getHours() + night = ( hours < 7 || hours > 19 ) + minutes = shift ? date.getUTCMinutes() + ((clock.shift % 1) * 60) : date.getMinutes() + seconds = date.getUTCSeconds(); + } + + Timer { + interval: 100; running: true; repeat: true; + onTriggered: clock.timeChanged() + } + + Image { id: background; source: "clock.png"; visible: clock.night == false } + Image { source: "clock-night.png"; visible: clock.night == true } + + + Image { + x: 92.5; y: 27 + source: "hour.png" + smooth: true + transform: Rotation { + id: hourRotation + origin.x: 7.5; origin.y: 73; + angle: (clock.hours * 30) + (clock.minutes * 0.5) + Behavior on angle { + SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } + } + } + } + + Image { + x: 93.5; y: 17 + source: "minute.png" + smooth: true + transform: Rotation { + id: minuteRotation + origin.x: 6.5; origin.y: 83; + angle: clock.minutes * 6 + Behavior on angle { + SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } + } + } + } + + Image { + x: 97.5; y: 20 + source: "second.png" + smooth: true + transform: Rotation { + id: secondRotation + origin.x: 2.5; origin.y: 80; + angle: clock.seconds * 6 + Behavior on angle { + SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } + } + } + } + + Image { + anchors.centerIn: background; source: "center.png" + } + + Text { + id: cityLabel + y: 200; anchors.horizontalCenter: parent.horizontalCenter + color: "white" + font.bold: true; font.pixelSize: 14 + style: Text.Raised; styleColor: "black" + } +} diff --git a/examples/declarative/toys/clocks/qml/content/QuitButton.qml b/examples/declarative/toys/clocks/qml/content/QuitButton.qml new file mode 100644 index 0000000..cbbf916 --- /dev/null +++ b/examples/declarative/toys/clocks/qml/content/QuitButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +Image { + source: "quit.png" + scale: quitMouse.pressed ? 0.8 : 1.0 + smooth: quitMouse.pressed + MouseArea { + id: quitMouse + anchors.fill: parent + anchors.margins: -10 + onClicked: Qt.quit() + } +} diff --git a/examples/declarative/toys/clocks/qml/content/background.png b/examples/declarative/toys/clocks/qml/content/background.png new file mode 100644 index 0000000000000000000000000000000000000000..a885950862ff9d709c70209d44d8af063939ae95 GIT binary patch literal 46895 zcmV)$K#sqOP)#BL-m*1|UEp5ey==qL(5q1_evBRx4Rlpj_+Ps@;;-(#m#` zl4?s;ly)VrY^`OLwOY!QY>74@nUn|$Adv}Rki!fx7)%a-4&D9U-FwbG=ic*P_df^( zL6Afb9$u%v`}KS0yC;3;9OImWw{CCU-n#X_*|$!?Ter7vtKVub_XcCkTW9ID-NyYk z<+n9{o8-r1ejD}Mu-}IKHsH6G-x_=^WWg%@*7aN4Z_9pL^4o&n=KVJ7w;8`p`|Z5n z&iU;uKYr`>I^W)s{%`(WDhTTx` zclm9n->zdYyqRwZlKcI3#BYZgNN?TVD1dyoJNe$kL{sPzzwPzgd)ZXF=&jLc3~k!9 zX?)F^HB*;da>$2h{IM;3hhLv>uMhIQ z80GRO9esz({PrQgZC&ksS(eo=zx?uz0|Nu=Jt&5~P!AkEdUOyk8VdNCGiONHYqc8W zc@ED!^9=0~5HA}&sk{e4H9tR}4Gs?C!>0e7k*A-2dab{|1E1KoZ5!;{w{NA{Y_9mf zUGT?t_P+b>JND8`FD>-(jXt7&>x+K(pZxZ?zt(5J*8uRQchcW10QA2T1?Nh?ecW&B zR?`f7_Uzd*GBUDZ_wL=J-EOyu&p+|R6L9k6Njg_vFiU^4yu1vfqoeV+R$pHQczvJu z-xpt-nVIQ%-?Ps?i^tRS-#2>crI&8J`R1Ds3=Iu+{jn{0(42ko#TSn~{P4qPDj$mr zz%TMSIPG`;pWhzw$NHvl`oGok@pAHA`%eFXufqwt%I|&x7vX-dZ{ECl+ZKOYTwGi` zH#b-Jd%$gYco@wdI>8<=^qib*ebT)N1e24Kbl;mV3N zJSb|Bj20~+{KlGswEqN_> z`ks64dD?5j8TC=PVEl?dR=mLf#%~XPFPdQAQ$C14nfv_ir^Rm9H?JhNc_(;}H=`!e zp2ri9E5CPudoBdtM-vDA3=}>TM%?;cEYvI_tg@=V+(o^Z877~FpId#OTq}GYH#Et_ z6w}vH?vIa;BhWAxv)yaM?cRJ`@ZfssuDkAf;?${A9Tmv=X+G}f{q7I^-#`795At2) zgZSTYkT3F-e%?E@LkA8VxWb!3n>w9NHa$H}0`HXv2_l+NTJWnNIe-2$rd_=M zu&V!|H3(`CIi~7$Kp^6A;D!MP`8#}{KVI|LV~?TZ^o}3=!5>`qi@@>EfBy52co22@ z&vBvoU;W>rN%nvHzq$7x`q7W>@aE_7FMs*VPk8W%uYwED|LlMF1q2F&gyfql z%JpjHwMTy6>^{h={6SZ+DYZ!h!#ksw`@1{+N|=deK+W;=(@*z+L$)0|cEHrs6oKWX zmtN{?VzKW6>(;G7@iFynp=oaqwoS^S;U%f9?+5fB*d# zDu;#?mp|~^qig@p&_UXUzdzAPC;nnT z-=$smLK}*<3-?dA>DkViHn?^H`Ah;IYCQkD>G-Q!Ltn$ad-oEs4jno~$KOxOpjNs1 z>Z|E7Y9p^X2>h&p2q^x!NBnuL=1eg0_$TQXeCIB}-*SMw0VdY_Ib0iW{^IZPHueDl zh8FyZi3#u*mhL0H10C7bgdepCMzT;lNOl~}8;oqBb`W8yc@We+0BYlP$cDYSHR;VQ z{Ac-lY40~@=#0x(y^>QSr#tTPpTF-4S>?mNbG`%lLe~SS104^b?wKI;s98|UU`QG@ zj{G(heDt-B9zEI@NO*tEnl;1(!25>}A10qmG>dE=kj`tFW8U<7$bZ&K0Bf62zkC3O){jGDO`X3Z0KwAV`p>bv2i^-X=zlJK-^(iyzQ~49 z5&*$l1dD^_#taI4y+A)E2ygpb2im7rVEXhNoPFXfxQ-)p2^R>7T#0F>%`038@IIa& z$>q$>&h|L`;?UoD=bc;qx!L-`4}S32U;gD^-mQKDE?obB&8|njBcohzb`|*f`+5)Y zBiF+}^t&IC$E{Xt$glSAdh*F9v9^ND3$&dju~&7j(ZoVi3k3m93=In0&|kpS5?5Es zV+>``*wljNR=;g%0m=yif9N{OF^PMl

            #s*b<^6y4SATV^a@qdh|9CI_`K!JDKlHZmaUY}~09LzsU|h-3 zsrB-lzlc|Q(_yzaeKHhwx$WG!lbq1iv;#WpXm%Vqa)ee#1PeOWs3|DVfS}mif`Ofb z(3om?5ClME0t~tj0TldPS&JBuz>u*)%)O08W)>x<85p*tUKkRr0fL5btT_w>4}{c^ ze{AWkqD{2+kPRQ_MbI$#IG5LQzw)1L!_tvOXulM|f|_#Iu3fZ8O@VtfF);*;TUEQr zhFTWSncUEH8yg#Q{`{Z$>Q}#duYYY>UBXis?eai*Hai)d1jSz=5jz6Y|(! z!0`hI4!py!Y(paS=ubTN+;bpWnRzj`t#aGxa*5J)lxhI&5S7wy3yFhy_}NVrkBI4D5CvHou||K3^xh<_c0u<*y? z^6-8U#*nAM-+^D^55NWI#uX-fIsznDT0`#Vkifyu=lmM(S57R$(qRP43e^3vpjNr& znrkSEhmk&sz*RK}`d|+{@IcfaXu6@_BCmUsx8r@m$N%I{{^Xg;<@_VRec?O72QhE- z7rutuHug34%M({!b=8$#@b^_U1FCyu)}qgVH`EXqt;k=-GNoRrY`h9`xKZB#@|IR!1 zwMINPM*!(U?uD}O?{`H`e*@x&cyI(j`MGB}oj0W*q<82HMO89w`Y2^F9@B41`Cwic2 zGKq#jbLo*sl0W$Nx4)e(u)Gg#X*3D2c&Rp3hoLJ+poQAPg8@NNLr@SHQ0Q#{My&#n zOteVSB)F(&R+&$@@`D%dyzPas)X%9>dPr#PRJuuK1Cg7Z%I|`>~Pr$v;Jm~lH{#d;~lzH>dN;$hFVUMO( z4h#eVO#(>XmHR~i5CTNN;`hs5t1LV+2i>zB)C8m*FoZ0^kI}rl?z*dLT9tAr0utOG zJb19{ug$}M{KtQML|tOcqabDFzBg%J?agaqd2sxI-~D6^SzUSM_M2|H>01B&7FT|B zqN@=q0l`yGJrzlYs727(M2&&@3R)=-{{lOwZdmo) zEVa+VUp(+zaL1DmLcM{1i+P;@k{AL;P&i1yK+q^{;gu7Eq@aD*?+eBU{Nw-n zX7oX7@Fu)@aQv7~`n~OKZ+nNo0GlPuh&D1tmqdkY^9kQ`$t9PNZ-F*40tH_~VAwSo zjJiDE<8o0){op&khob0?_rZ{gZe8GuSot_KRGh zj{h7CNjp0B!m+07Ov5v$z6wXqKJ0~h87|p)JzTc&2SYNjF$F*Rj^BXCPkabwmRHD3 zv*gBDcHjd*k|q)VBbZ^)#PWdY=7zx%01@}OC5=+sKIG5W04#cE{_LT1aQeL_eg&2-SVZ=W~@8G5B2fd)*4Tn#C z1AgMBKdAg-FP+wrfZHs*|8tN0TR1uW5}9V*PTOzG@RtvK0e<0q7vS3M|2Y2TZToM6 z|NO|`_`fR%&=HWx)fa^24on+P(Gw6z&@Sh72yOT!4DB!BI3^g>vZn&%5Kv zzbFA@>m*XlZuj3)u+J0{k7`TuL!BRM1`1s73Gj(sOz3r2q{N&*8{oe0A zDVX=?br<_3PrezfnO9v8@~uFu2glW%-=M_Bwr$&X_}g`|3h86O6=?VF-K0s-ztBWN z3^#fQo}yEYJuO&w^#*7R)d&bR))4hZFsEw#T-^gEtBZ3E(Mh))nKB%uvK*F0p+`sD z;4|cqOCE!he-y^`f|%nfjuEDYm(h-2sXfTsrf;^K;!_rwGM_<#A6*0$g)*NN9nxUE z*T&JY(ebfQ#PMS<{Xp6%KT;0Lbp4)tyf*=n;%=P~dk zcsgybD%Ap+S78ny)k^^mtfKS}?&zXKg)J6E~$Nm_a zts!XCykA6imgP{d*Bai*Z+DhpxxE0(%d>FR)&sC}?X4_;1>E)AzlFPAxX%O1fqy5g zxE1L5zoDE7CloQ3W;w~|7>$LbW+3HFToD|10t#yr)GnP4Ymjy@zuN7BUhDE}olXvm z$ChCBz8M%S1}M~v`4e>HG4Y7k(Sv|;DOC-leaN@J{q5(yCi(l*r%y{I;|yz(d%kCV z5D$(US#x0TDfrPJ{n4Af>9heIY|P$@Q(lc!;pd7bK^yl=U-}ZM@7AS*u>Rl%0z#dD z5Hv&p2ZN=aG>ACoHu@Td{S0yZ!+ogmsDv`os<&XMKFWabriTZ`V10zZQS-uXP2Fn% z10kq|0@wAHRJ}wisoRDZU`u%p%8^h`F;GqX5qiKi{V`^+d-HbKxBmNp8CdkMQw+it z8*e1kI&WsJU0z@4_g9}XVL173S;-}Si3{gaI=D``b_uhL681H`fyW@4LYL0T^(@_*`VPRqN z=YHze@_bsIH?Y{9%@C!9edenvS94$-#|V4yJ8vj#M> z7Bp*3zaN0n<^+s1#$mvNVSqq^02w9|slwnleLM$Areb9wC?< z#J`h-;pVX^xNOsVqteHJ&z}C8KaMdNKwrfJh=7NdmCFebOCB5ultsUvZ_mQa%2{Zm zM(Qrp>$(4IXCt$Pd=*Oo!E@mvP|%5|^Mz)X2MH}I7~N{~mKg#J`E73-hlPzx@XTG$ zz|wzN!UQ3iTypL3yi^m3SlNgg2OoQo4E@ND{K&h$@P#k@{eAb{H^&R-Kkodie}YFP-rqTA!b7nFmUS0P*|WZ?!Ja!qV-8phm4$gsq*2L~B-n^?pfXO#@E;{V6#2m2(6VDN?Iy z4)jlu?Va^Sprmw0}==F-`KV@I(e}4H;=va-{9zlQ(iC|!tM%z0nDGU?@?keGw%ycKLpN( zq3!-yx?Zcyz`3Q9eme!{7f->g2afaL$efLN6a-2^0RYq-!AHq*Tx5!{wF4+pYeZ_SACN2Dj$TSRj4_Jn$2eY)?06Vw?82xI?0Fi(YOlZ$-~egQbVMu3C%7f z7M?zT1}5IO28K4YO2B9|l;&Xnqt+13k&=CeGvUBaH`g(F#EyDEto7Rl0tN~dI^B&d zR0RsVwkS9m2&yJSsI}q@^S)qUAPBl>)>N|~sByetQ6$S));1jvjPjM$7((FF)(z9adadf zB5=^>xX_)3b^mZZv_|UCXo}{@po!pUYO~6c?ObPb3L{czF9#DUxmiGGnxDOtI-#)#B(bzV?IAnCA!CKIt@UBw6Ka6++&K1<6B z%B34_D!uoi7yc5SKO4Ydm`{R#MT}o71z08)Xo=<^a-&OOXbC=G2)O2dBL)HR_u_)E zp*;<=?elPQ?kLPIpY!);{c#7s3BQsSmptTKD5*(6QGg+{)oT&bEJ2%C@4VOj^*a5< zQ*ig)cN1p|11q@UIl_>keH!4r^M*1K>EqRU~ z`>`Lp*{={Iy5U-tPlbskELcJt6;~Ei)ytD@*mUbAXtXi{25wCTMFI;)s_IH>)Fk1? z6m$Ri=ybPgE!Z%!1J(|1g2~nfuQ7(B8Pp}==h_U>98#YFE`cSQSBef!uLTBf&H$mT zID(-9kPb3@F-YLD2&gMIUE#IfV0`bPW4FW8$B+8w>ST(c#Nx4JPSI1WO#pDJ1_s~B zYLXTr-aA&GA*170f0Mz4*D4dOb>0ly24}rSIlJ%@yfk+NR=i`64!+~iyCd^7`6gKg zOxqFdQE-woj{%TPAKnCKzj}`7@gMlW2V%*ybbP61;RPgKv(!KQ;Sb;9&9uMc=+;`6 zrGNHa)0Qn;HlTV%)!MI^Ngks~^_8!Dg`D-y#xAUT$CL+x2S?Kc zld2g2LVib6JL9~X5nbIeHH24L6YTMg!&|+1u>;n7VaO=*1i^_0#U)}e6tN~lOs9(9 zp-ij*l;D^XKoA@Z5ZqVSm#%*vpF+9_{Vkf869<456-+Na50Aa@bSNhDwoZnElLylZ zj|)S@#vgyi2})oyN;C!q9&+WwiN>aomtiIVpLa^ZTZ+t`%04}ZQ)Ym1eR#hGvue_p*ExF1QV+WK4aN7J z^TN4qd?ffwm@|Po)sY~@z3V}Eerbll;cUi5T1M5un@D~XtwMf@HEERw@mc(PjU`XZ z(t9)d&b7l^V0-}0&&_ar{xF}QqW@t}Dva^gWU^h>|=OSk;;FaPr2Dq70)Yauwku5|Zr#tHI2-~)a~ zhH-0G)?xJ0;h-s6Nn3V`tf9n4kEl|)TqQU#-O)Z^Zg zo=MFnjE(j5c;8Y|C)zD9o)~pkuJa{j#hnfK6M7 zW>%=c45k?!!)3!TV;11iM;@hP6M5iPLL?WGNJUc|3*qo~VYaNyns2b~>qp^{J$Q>^TBbOGw#e8QyOjH`DDk+`SqX~?m-`}R zzJuBKcHnQdSNyh&?NGf2p?yyKnaAg$`$&fpil|9242*k}4+I4+mIxB<_xblY@1K7C zbD#U%aXv#>nfNdLcJ%f3LB3Tr>Hh+_hWvvc{NVcrp9A+b#jCR7Z!k>+6MCCRcft12{od!;tekBZOdnu^9{U@GtK9Dk zh+uY64y59XXa^nSGYV0kTb-f$D^H8cnQ?*$w; z-+c3R0*)#`WJCW0Lw!PJN3&{l{~!UQg_>i)Mh!w{6@sL0BcIAh@{d0rL$zDHIkkQ4 z5{gz8QSfsX++;=-uIz&pVm1{OpF>P6(GIZ{PuXFQ7t@s!iG^Wtr*Nw+VZ*sz7?gWu z8Kp_Mdx>zw@N38f%BgWfFpsnklCtR(t;!9VQ_%!7hN=5Oli@2A6(iG1fD$P3^cceP zsKE*d^)Tbjwa}dO*Q++*eUoP>L+>~bQ%K|gL5C00IX@sNDw@X?;{;#*ZAeIX?Pb! zs2rOsg>wohX-_5=y@#V%yuv%Fp&&;c5^w-YS_PDOX8O@hG`$;=<_Qwyl9Zc1MIr(Y zdEh`f;1EqI$!}0XP{O35YqWVK^(=A?N{)G!UN=dT1g&ACMhSk4Reir~)LNZl1y0Nz zfy2{}!Su>Gu3nVVULXg)-C@UlIha?dMNoqTjnajgdl#T_vQEiF4CJiV5>>M8=%)+~ z4ITZ}U;R}*e&JvE*I#iL$2Zgm@n814ez)HH79&6PQ$O`yZ%1ZG6~Tm`ZW67*g4%=l zI>U1?e)Fhz&}syT01nh3?0c}!L1A1W8d?r(`jfS$wGMWAaI72LN>qx1%^{(Bh`&)b zr_^(W_#Og)-sqMFg-#wq%%-c5FC?F&tRdX1IiLN_G5xxMQU=|q=D!xoQ7hcaG$voN|a3fEnCU8&uWK3C|Upr3-JzW!L;;lqa?{KG%|L+O@+b=be~X3T^95OBxC z4}bW>Hz7FiHH=7LHXJDhxFSXfZfKGBAOo#+h*m;o?O?XMETA z0dmIig*@8+youl!MHv+A9~7MRE`g^f_ff<~(aGnKWFn}nyXIvoSaEV_k>z$3;zoAdyNz+|aB# zcJdgEeP9FzM$xSD+hCS7h$I4=LLK2I36{-y|8LxDj@=VicyR3EzETpMN}8k4CY3nb zs(42tOTxJ-J=Rex;bFzRhte1b4n8JV6eabp6YI6MDZbeX;zP z{*K>mSigS#_-(h{_Fmmx1fx{A5ogE?4u)~X?7}XH1GhC{Xk!xw25Zr*YO!M;{0=N| zO5m_ESjkJrU~LpGS#vE>BCy+F!KJDq{6T9dGb>U?LVu`~H7`o}kD`=KPvP96VqV1{ zZ&8#Ig$X!Na^6?VWvqU2%*$wPam15Wi3S&Qvl6gOYN)NvEU21N+UyFz$gBd0N#<1q zkbr}tT;VYrPx|M7@tgHQUJn!N`+-Lg+<4=S*Xv2HD5My!!+18b zH<5pZ3|*wGW3-}vbsYvbG&~?uu47;zWXz?m15GP5smQ9rqjf>;BW+~2H>);}?B>3- zInlqJ(i%DK^XRBYa74i`LRhlolN3G9c)^Lmpcoi1rr>B5M8`aZagE|^8I>$dz>#Wp zP%Wvo}b8b$PKeMpltg0-2QFzK}_gW_EUKO zh8u3U%=;Uo)lmb2c%%tn#TbGFlRurc9T>Z0khA0|Y9)CNDS`?PIY(@aDhJ#-T_lxq7dpG1+>P|Os5(w|Edi~TugxM5r<&N6u_l9DhkMZh4KM7flN6)uK} z>Gfy@0MnuiVB%uPwr53Xe-ucS5GnOoZ?e>#_m2Bxu#zu_)`(b~fMMX`+v0=xFQ*QO-rpGd zzz05n9R+Hug>&V3^gB+?o`#`!H(+3_7ECLzH3nkDDu4v}RRWHTokjUvtcu$+el-j? zLN6xK6cUXRKwvp5HB0E1Id^%|8ld~gvi2~ploTvnN>tG*nk)X5D!GlC!}OY2rSs|f zTmjeTv3gHwrifGB93|8X<#Qj+EyckC_A_GgFutZDStWi}$a@$S)v`8)d^1iST6W+q zzdwuqiGjuL96Wd7VK_GTEI02q+}$y>KgEtI#MQ!W$(vYYW}(^T{gIh2EdE^^HjHhE z{)i6uR%!Cy%yNDqzUR;W?9XIA$$!#>#y5koPo7YjB zADhf7P;6ck0vY10lR>DXTKJcFpzHu^CrU{_M9>&ITcjMp?c zqEH*MrbpKyUNyKXmBO5QgQhzy5l1s`_aWY#xTKdE71s1MBLEW7SOl zN1dw!i9QlqL`8d;R)=f=HhI%(vb8ZZW-fH3N`XZ=H>htLTV3<&vveIje?x#rrOqT4@xU;XYhOfD(Ngo=u{9W65m9 z;9syg6`U82Pyw4vmi>%CWp|Q%L@}2I1_5Jv)wbbvIwkm7RKQ*^I70o3v*D=6o9n#4 zxEGf4d06Vqb2!?62DWD^EhG>da2L{Bcyj}0cP^9PiU~w%KdXgYnv>si4-tK9AN$zH z-u}7IeeP~0tH1Py`5?^HrB)SQb6h6RV^1V3Zt~7Lg?Ob>3=fKC{MkhqzOorI z8md$_bRB`%Z6wuMIGAXzhqVKnqrELrD~U*@q@YBylH=~Q24SZ>=jEz^avezG{czY< z9`pOk#Zs=s!hlYLr8T$l+%d!}dSVR5Ac7yN#Cxf9oQoisEGMpait$GxIC z6(_ctk_9GB8JsaH$DYiv0#rsF!irrmXmC*p+9NpYWOhl|m$U=+7q+3^-KB(~Gg6r4 zLKny)e1A~(E`X5!#>VcAmd)h4Hw)GeZi5R;C%w5fAK5erMzk96ht^|fddq%c7KZ|L z4%Fb>1Lr9BA-&VS_O-9kqO5P2L`0|lo$q|-)t~vyXYNrl`}zZnk9I1YsXrXjBBkh4n zL5L--c`15T)*h@OiabW8`f;)F@9Xs%OpFb}+Q|_QhDKsdsW5MsOL3(ZJuKMejQGfK zix%q9(N>i7rS=L;&n&{3bF*;f!fc5iFM{lP-1ss$O0PRT?9-4JWF*`xf8kPy7F=+= z3zza9AYonskQ0_~__pAWgoqZIa79@C3$~j~vY!Y5870<@@;N}J&4t$rQ8tFI<5*(~ z*0eUk^1`zrGKS!^0bsRS(ju-1k*sE}W}JAN1@j{^Tou{h2oenpbmVby#)a80)?2Q- z?z*S$zyE$r#7y|#b;GM|8}wSH+u-c$v72tX>9W0h_g<#`42(_Rci(-~i&fu-#)e?W zk8g&d@j6AVFxP?mSmV(QRe`#@Aw`OckX6WB4K7`CJ;l{gQ{ivNBfQ6{ zOnJ~82|Q~ihGA-A1ja^MD&(ue!>-EOt&k2AFC8N1L$Ot@bQa+=yu8we6Q`%)=!vt? z?dFN#xXMM*n#3xKNxzG$6N;(3Ny?&ElZCk5bnp_d8MBl)gcKf*kJWx|ei@!Ra)OAB zR&%p(99>Kt+7Q8tNkbl2hc)x+^>a%v!K3HyhEBd1376uKlcvCG#FfC;!bsNgQb-;y z`u)Om2VVH&mtcW4w%pM7z2Sx%;;03&e%7s9cly(x{IOaOgylP2jlBQM7qglvw0`?y;IO|gYN}1^CkZ@r^Gl(dVI(#d(L;451FRBC7GN4z(k^A-Rx|WvEj2#k zk7M0LufL?MpAa@3Xm zFmc%&(|I~3hxx++AlUrj`@jGDV>9z=X+^i&9rRYt$z#Wkp=pEa9Y^w>_?Gw}{)-8H z2M-?H>kp>BTFwKLfmry0`)5x*3+t|)AahDbt!jn z6;4>1Fe`;UCu&;6y@O>k7IL}PdU;xTrUQF7>?J~DHPoxa^?so?UKS7BefQm8RS~TR zz7;;mC8!KgdwA1oZ*}ZhHRpkjJKBdE-Z{m7hcsEpNLU-O6)4v+ODFYGiL0Yd>6rV# ziv){w2;#TGn8&=Q3*&xDT!P_9YWW>v3)o^m2O ztjjFIxN6EIDgsLpT64CVHMna37I@+K06ca0c;6rvD3Cx203z0vya=SEVFH&jo0#Q0 zIZ*|Ogo;hL%>DpoNhVa$^HGDMla9JhaW~0 zYYJuAzwfD6;)B>%VO~+>%KIMM*RNk+m%%m~9C|}iVtZ%>nj6_EXKScI8}js81IyBAjTIW02pB zW@w?#y*}@`HZ6-h^5C4@=e!fXXQ(zp*EP`%99@4|Oe{B}lP;OEz>)=m^0d*y@?fB$ zR6GCc$7ptqj*gm-ee7eGYFVzDV&7~Y1iRU7=Q7&;I06mn?3fjondJHlu~{*0*_FU1 zRk`zFUB(Znj)$`F(hA^$7@*BL+MHy@Y+ms_auum6$~7P?Gzg4I?~J2{LBXX-uDO_2 zta(6D-j#MRYK<*GdPs$1E8F}jkyxrEjBzFYc?EZMq)zNMXp&lRV26hqaP5KZaQ~qr zVbDw|gI?ib71~!%nnJ>*j!hux&l^j8Su?Mh7>u#;(3ZqO9Mum-3&T=yD)obmShc^e`t;t-f&s~_5enZc;|hSzhCoyahGKoW%|s^ z3BG-WJ_tJJaNBLSZ66vMYT-d(7!A9UAO%^^fWX&?(mt?6C=X%WEOtVyQO{gy3(EP9 zER~81;SImGW*RW)SD8@fp|j?BDuU9rs?I%Jjc{>H zIRX<}@3=^(z%gbzG87%@qTn!Z&MG`*%(rZuWN>uJ8Sk?8$n%^pbh&scXa*_$78^EE zMv`ykdNLP*vm}%grlBataH=e1XBjU%GG%d9%&@PnWm_9HNfWN~Ai3|*VK1b@yLF|! zh>@lZvf^qwyg2gC#P5_W2`=8=E{5^3Ap$6#4OROx&ue+@6wgzS}sd2wXH zt&@|JLkABYyh^?d!GNm_9stIkandOQ2TN$rxw9~ExuN><7}DjOhh)qNB$+AcFx?;; zfr6dKw~X%NXhvSLbBWfD-kVD%6}~n;I^Z4hNdf_ZBWEp|(HG2C`=8gg#?|g5sJ5tenW9-mSwm*IYw#h}RbriMUWp z#UUoJy*p6znq}sRC!Uz&BY7GNtG*cxf*(SCF#VVB(GCz^TtuyOM8pH5dIK+j%}bLy z6qQKx$o&c?+44ZCcFa6=G2TtQ9!?3M`VGwoXx1< ze`vZ%HFv;e6>;Jefxz#NpEw1l&zysqxp`RdC!S7RErZdKAy~I|4Q$@Hj=KVeRWo@f zs)SeSKzJ1m6Q$)iLL1b=)Cd5Z){n#Kvoj$CY${=1w@S{!nM(TCFeTPRcJbKAU@)D! zD%azru}Tg+1TNU|MIa-Frt^-*!Rf|&VS(WcJqoN1ofQic8f&|#xf~U51%jhty1R{q zYt3wsMlR5|WKs|p{3*$}QptmVoaHD--j_kSLYjOt^xn!Z_1|adNc6aoPR%x~_vMEo^o`l+3r`m$50X7;OF$C}8 zoV+0LMwPj8h83eWxlYVUNH-+}@nY}UzMgnM!Gy?J5Q2#n!n#2)oT}MKT)=1q1vA56 z(6fHUeEjLd{d z9um<*ycArvZ!?^`ca~QBeoY$y%DIwK{sZ*N%XKOKw@-`@QK+`d{#Kq#7e|PdP84a+ z!YJy%W(e1+Ba2I6shBFDJp@^h@MtknVU(F?8Q4V%-%|@y1XY%Eu)#4{!g(-kL0D&E z!*OYsN*Q^aMUwNJdznGmvCy9Cz^TVh()^e`d-lZg?rOS%=O9jC6xM5&4$C&m_=VT% zq+i9T+a!s>)k130Ul(?DgXXB)xXGkh8JwAMw!FtAa89L9!=(@NFF2eDxr$)rG3+a* z)$njLm{diuFQ@SNuZcC`=UQn(U7*RY9VIOKfz`J?c_!;itz@)BPxh-2EsbdbtE zbhICP>S;Li_><8TlSQ3t6Ju9L(SDSwaGY*I-n!GU1W2Pavc zcj~!Pc$UxG*yterE-^Pl;Gn}m=_VF|D>&rcjeFYSH7JyWuENXeyVEt2@N%941t39| zJdq=Nu75JmP)<-@Xqv8seZ4$s`65QdmSFnhZy+#bS>F@{CJsOP(T`qQmGRdC5IpXW z;hnvE_wLYBp!$6=+IsDx4K?ou$<(JhCj}AhGLb0Q^d=^7oe&h*^bn$&WYY`hV#oEA z_13;hxCmRlV;*LU7n}@~grK_kMTPCFYQ;t1QNta5@i;tl`1!Dcf&zyS#cZnE1{J10 zdh9qn^4OE1nlAb*@;yld1|AuMl|Z8NG3^jV^1{1mJu(pLsZ3bTgDZD=bPf~)02JA> zh=k5buRZ7-bkjNMDo|2DgEz_L6hgr%di#nMs;s#vao!j#MT+_*Do*u!vIS67uD|F< zm$Z?wY3M3xk9rnmi~>O0yr0xvChEIRJM@#)si~>WO3puaF;3#e0D>9EwPRyr4b~ui zs{{owXkv9HmZ33ZQ$kSs=Vq)uIC5ph`Hi#*S88ma9ZYPJTqtc3R>wSE2waOM#)s)d z1xH-@9kNogIVKlLv=KSuraTjUdS)7)c;;Dldf6PrlbrG5;C+t(_6&@_kIyHt79bW=qcsiCO4xuP*qCIGIbxDiJBY98x`lWzNURtEI^&t6sIfo)Q zWL{-KuIhD8Afmi^x$91@kpEG&bR?-QP1F7H4PAZp)nh8hH}zToas~eH9q)L@Hf%19 zly*$I=r0p=B8!(sX>BP;<;8GrUCpi&VX?Xz$S7I~s8ZGNTsvP;j-j&U<+&o5TARI7 zOHr#xI7};GG^ZFm*w8H2@bd~U9pUl#4n6TyhU51RD^IEtdevg@An%hyDM{W{tC$_;6f|+5nDx8=w zZIxG}A|<>eiHGLW*vNoiL27hTWEQz>U9o?29lmriTIFKM(UCcH;^b-XbF3tA7@IVN z>N_PswN$$h+G|p5KMx<*_TT;d(POY{$5x8KfLGfPlmO1Z7&a*}VTwX!^1A=7 zJaUteM}~YYYjjLJv7BMd)Wm*N-@nZC;Fzh#Jk}yW4{K>(NCwRRxDp$5j9#V4( z%BgS!k0M%yrP`5hjpfa|+nt90uC*Old1hG#?QpcQMtKp;s>ev8|M43(Y*?q{9cBG1 z{i0c`0R(4&ZNWPp5bIDwNH;qK3MOQ5!!R!b1ba1 z>UB({IqjIUUZD#UObr|`8CM^kwIR6-$(GAXr#HvXOO{>NZb&ZBSTPj=UhqCdOnh0( z1j8)O@DSceYHsaf)f~krZE8_^;Vu9u!vNNaZ z`6aJpR5hg3j?m}eEOrl&0ztxZhgxK1qD}IMxj9T43XxHl=;C79?RHxpBn=OyHp@E7 z{QN5g$faCTy9qPrGN&AK9r(ov7Tho~h^c(6q2WRtqA4{VJTK6y5FoCS3J_3j znWG@I*qMgm`UKMx%CQmkqSu;7#8F&-3%V6}BT-KPZJ-azy7>o>>Fr5j_ zBdlLJdww1wZ(POpaWTR=ml8p}a2)C`IB=1tg+#SgEx13HFnw`h$O}kQ7uZKbGjedC z5y0Vrfg76JSaem-YNaN1shKuEHYq1WeXsaTu5{bU)OLOHInKqtUcfzp0|h0Fe8XeH z&~L3)aM(A4&Xz7TUu=>Yh0Pt%a5`f?l z?!`NsH*a36{SEmdNe)UYpXrqgkc|hrgsv^mYAWE9dI!WLl8gC|a*qP%(uq8`cm@VX z$I4NxTp}|AF>IJLM_19`^Vqc7sVW>>q4J~rUznar5fdI36DRU08b@jX7yJ`S0%k$e z*gUL^1R8(*r%s=RsWlU^9>nCT?8!i>(@DXDKWH2pm8y0_4FvOXrY1(=%(*$PDTmT( zEB;IbjSCIkx}sHcDGK8#UamXZhZQ|0(~8i}r--==pcG=L*(k`Q>Y6+@r6bxq%SY-o zZ=;69A5Nwm6BKn01?L>P*la?%=`k+?rQVCis5Fb^8SOQRYK8DG%Hhm&)9}zk55*Qi zT6^fEp_gxLbS(funZLhkX07I=znlAAZPH=ge#KE3dtMrz=K~C?j%H>PQ`NF##R)?0 zgJe|V%qZyxez~BnWq)`)lnLZz1Q$C$@+R1jk1Vop|ur2v8kqMng5@MH*QMFZy5jSb| z+Ku@pr=o7yyrFd6U9u*0RjH9psPHyKL^B(FT*{9~^3ZP!gMpjXFT|^#^Onb0Rpwtw z6blJmV_roKdB1A5PcQMP8Om8a_bvC>_HWxqj; zqOc7gGsCHQLmrcW3NUf@xtI(t@rJm>4Q<-l`Gs(tnT=(?QJAA3x+p}tnYCfF$Fh$m zHQGx{LE{SXE?N+Zy9A1vE5T9%PF|=jr(?l@1Ze)4EChKGN4^y-xY5^$9blvU#Vx{+>(v);xYDq7m5WZ-SAtF~z%rvD7|Ym8O=E(WQK zd-bnKbp99$m8~dJedWQ&Wp4;Qs8l_c^-fUMheUJc*u}0ydQ_U2rs#$g0{Up^8)d9PvMJPA z9XNC5%taH1_}sPEUc03#`xgTUe*I2TBbzo&_0t^M%p%8Uc!dXQa)n?F>#~!pCa%V6 zm{NN|Q~rA6D$FD2eVjAU?k@9*3(h*W*^yjG5(*aq1eyb7ir5rEfB}*2;=CibqGtAm zXiF%gPPN=Rd1Z~$#oBRV>i*)-`706Zfy222ud6_(RtS@2*$~>hwBQdl(9zsplD$R5(dRWb|^3(r2 zw{$ADDC!YGqf3`{6FoKe-7-7FhVK6vj{+z2zG0y~9GvruX%NbWqc@*!JF8iByGrL0 zoD;VO6NDH)?w36m6RQ|&v){oP&W!u&W)%lrx2ULAUH7T$*21*hS)dLW;POb-7#L{A z8uX&46 zPPBOwlZ}v)kL>%%If>^X?sbW9YM2rFXLTYt@V(f2bYW#WnVsd9lNF!Tm0GWw5-ljm zSuJis4pAQ6c&B7yRsCm_Ym{%l4PC5=sv5-_MddL#I9Ol1cI}AdJcL4w8-`Tn%jf{s zbiMWnH1;r(nW-4sF^{1yLf_Xm_^7(ygja4{uEG@DhpNp zU8x`{gd-Eh6u%F7PpOdxYYQtXz9{8v%9kr~wIFuCNu5FPL)z+mML=088VYSaQ!6{u)s*zrrK&2d zL>nKcGDh4mn@-#-OzDs2RQ!bTaB|LhmWQmwQZVC`$}CrYE5de9p-sA|m{p%yKFf8- zA&Lq;7}8n5C-$@D9=h?NlyOpr8Co~!6gUb1dO6(xtl zWe=%JQdVv&{+8wYmKPG6=Bq&RM#AHQOne33ugIeI}9zbZ$n* ze;cYgWM@4KNop7g0VI@DoN$JNn{X;FF8CtbVhO$f{qNsW#lUJBWGiRSCo#W)$w1*= zVKPtbiNrv3K6RauQ{w=N)blouJeCkNx7{~Ixec2sR}a!>aKqs;Nwu->g7o=K z12-Xsu`|^cNQj)qaw1Qna6Dr~rgSk^MxtQGWpIYHM<>XLi+vh&uYA?VOQ(Ar^bVyn ziOfi{hZ>{^6epC+wIE$hVoO~79OMm(8Hj$0x0cWkc}ij6v3>wC66W$I)_`On`#Cm< zJe(3WH+Y^xYr*$OEqpTGj1iS6;{l8^H3EGAcyClPs5Ck}VyuAWe9^1tlW@u8p2!vr zz{u4kT30H4l~}x-bQjGlh!=Mr>sXk71(m`)S1~2xP_&rbGST6WVM#HmBv&*y55q&P zxDo@G>=w|Q0t%0dBwR||5sCxNM(k!NeXlOe&cWY&cM{K-fqF_qz-2GYPBG_!HyZM}w>_l7rZT68#b?P-`> zIUiQ;%82UnKb93ItZyg{2$Ht0MZv?BY)GhvaIa-8Vqq@30LPCX*AsDjHoT3Dj0{!M z97Y)#rP~H>mon5ZG*%7u+R-9b3)V8pf23x}(kv}DQFF;8(7da1^{BkZ_3eT=y?6?` zu$tI2P#WtvqC^z%XRJ{6LzU%!5>p6$^u)Jr9e138&gwM-gMo09*LIuG`^b7d8w z-r+zx18V&$7tukdXhXL)N9=8IV7RkbH_qclj|fa zy(@9Ztf?e!+3$$QUFxYT8pOpMj)~zT;i>WLbQQ7;V-gar1Mj0_-tH``{#P#f7s4nu z1hp+%^DXPAlS`#9frMD>y{`V z9-~>KT_z-kPT!feiFc%IR9AI4i?k&J8A_GZ@nRT7y^Zwl611?=%Ok_C6j_qVh zWuZpKhFY0Sjzbnx6u{*(WLlM2(b}96jpx#IV3H51Q^{35N}(%2(_$Rtj|=kH+=r16 z>P6Z~Rf}klaKGtEKJDum3q3x_6g%jHFE@yj5`?W~j$V1hTEi!X)tzD5G;jr<3-!%K zY|`c;Au$^Hs^7ng@>afPN; z-cr$a^og9%Pb6GjD500pZ7$W3L~-R1v_21(H50HSj0Iw05zLhT5X?#$>={NO)Vyhy zk>5DCa*nC*s%4S_ZTzj$T+8I4dR;od&@devN(wTpY^~841*F=dw(3<`(^Q5n<60~5TU#9rw4 z+NPebXp3XjToHZ9EHFRmWM?H+s`Ez44iBNi$?;L*C@pp_K!bW}G)h@vr*aG6R5Fju zn=G^?$7GTu=3-Mg=s!ZhRg(XuK|0VoJb=wKS}_Y#DqxE3{`Jpupqjlw8pW)>(OHSIs~_&Ml5OxC}gT`J<#Gq z!@1Bp%9Ko3>2e~^Z``2R%5PTP@nBBW~4`MYI#*lFnin|64F=$7Zxz@wR=F^7x zF(F%xWv^}MbXL6Wxda`*inh7xF9>_at3boAG<8}Pg57LW*Dl z0!UmX6YGi?Dzw%lX_UyBDazVOLQ|UJ!1lLOhOZNU1cW)`N}eYzgggZ{D|H=FCX7nY zSyP@nRT_vR8GWaGl!~tt8VI45!D|uB5^AxNcf;{fvd)yxtKk+uMPd$6E`-eF;CCce z0Gn1^i;v(iJQN31fB>gcNhAwHxijsvMhE<;X)f^u!t;%jGKgXMwS3NyWHNoJgxsSDi;&@>(-rXGaR6wyH!fpkvS zhL^|Fm>xEeRXiyZa~5T93AmILN`nRpRclf}N}7UdZ3>k^IHibQM2|%BXvS8uL|wVL z9T6+3pwUs0m7}(%UXx&NFcmM4ZI;mY$PL%Fa1Sr8B#Z)VU1>U2wE5ZhAT!Hm(a&^{ zW~iedfn8dVjEMPt(l&AWuGQ5YrMjG$*DAWOdwdtHAKnb(tugRLAPjuYayp#X?ns5P~KqCI)r0EfH3%&XV!F z=%k;lJssQIWF?`-6%4`QZNK&$40xga_*MTqtRKCuB!oMr-UB!82Dt0l--X+s{sJ8& z7U5f7k-!)oz=}d6i3V5dE$Bgl=9ULZW*V`^I)qVm?wpfirbyXY#qy4rltvI7N<8u^&_*$Q9j*d7uFT)Fd10#8KtqD z$gKxRLw(g)RfFIIvcXQDKAj7Nd^Kksn>4shMTi#IpjP8aqG%QR8jH|gnuDLX?ss5( zkO~xGsdEPIJ^ZhsRUd^Lc72MTyJ^oaz>CvQ!{eu)WizW5?Nx1ZIBDr$8V8U<$(X5K z%n>9*UN)N1;11Mw)oel8ZW0a_(vjn#mx-0+RN%lw4Pc?tFu{e|5l~t7oNal_+2us~ zE00BRpvIU%qUIRI*etd1;S7I_;4{${y=^%`3UKuN*WlSRcX>Hn@>*mKT(RY2 zFi;Ode$|#wz|8VVc<%D# z-=)6*kG%A={zo;uYOHf6H#KI~$t9ymgHF?&p)Ymsg!y@@mcqCy2YowS< z@>mfotx*&Q9o51`S=xb$<7>4h;rB}q0^1wA2UUwgnQaECbLFWYrL4Yz_`9_)hQ}SF zXR&1`ACGjKkN#VVW;x}LIOV)2OTa0u4V*7><*bAxN&Taxe33eoI9@DVCCRHfj=Iu8%M_$B!1TmK@Sk9}+31rMCQGlcs6F=WOmf-K7; zuGh7^wAgDWT?mU9Va3MQ3LwLvF0I@Kbr$_%kt|YCL(7#$gD&=BLKCaoS%yp2-da+T z4zeMY#cKpeF(St2R6T6~^OI0dfg4Cr^_ck_a zh>qiArpY8(DFj7OrfJHWOBTD7&a`C`p>ySNp}{Sb0)hhOJ2SA@nJaP5jH%Qtn98+; zN(Up!v!FHNK|-4ez7GD7r@e(yqI`^9&wb8ZB!8xeTawFSaJjE6SCfUy%gb363sr!$ zv`u!gFfXdBOxlpf{DkVC`V7H zYtA8P$?6-4xYtG1H0blqo?rDyLzbD{C&M zp%$u2Fa^Dm34*zaT#}4c5~W^g%Z!@RgxomP2Q@R<^@XB6%Z?d{K?SO2tgGBWLeO zT`i@#hD%}dQiBI(q*vuod=Q;c=UcO%57Kxg;Lt-;^r|ZN9i#}ya_4LhNU+yy;dv>OQEoi3qVviMk$YSCJfEY(=`_=KcMacj}sSu`^o9vp^{^inA0~ zVRp#HKadC&Q^jLLAZa0oQ>vZrZi+U590#GI`3y^(TT&d)60csd7b3aPDQyoG3n4`grDwqI z@jc%6n1$g+%UdGb;f9@`if8Tk^w;2T5C17N21ZHSkXa`AGbzW7t%;zg-H$Aes%WbE zdZP-EkZs|vb246Sb#RCiWMYMvraV)}J@0IvoOu9tOuau9n@nti7tbH3i@0WJePt0* z4U3&7)TxZFC|pJ1GOpLWHL9&>tY$>t#G3-x6|HGoF~U`F!q9Na&w`20wv{%XiWw`^ zd{9vt;3!q8cawu?=A=0&DFbg@swyw7vK4ZtaXqu@<5-B8pi2l!PO>p^h;`He>RemJ zN=pKoh8e|17pmV%r@I);NvznjmPbzatqn*SqX_WCFc$x;lr)ShMMxHY?CRc7FGfM{ zfBs*?9nbt{u+0{ahi^2zPSm9i(iu(@`}&BP4>O zoWZf7L1Pj$PJTu9EQHeI*xy4Y%f{+P`CH3D1!*EzFy$w#N%N=cpu<;+`00!anS&`i@TH=*i;rf;Fz@VU=@E*AV@g&_`^eVLo>r$H`ytA42A1`t)}tA=I^70C?3qi64j8@8YK zfCxm%D>nZ)ZT)Ub?HScsB=vX&W}Ak3W)pKF&H?n{XQu>O1u~`6PMV|3P3KnF=>#qp z3JE@K&l_#CM_DjY$V9tjDtA+`;KziggK|D2F5!s~3BBuYg&k&6(odE48g&dfsj4(= zr_|@R{Ap0h5oIoA)A2lDTON}u^Gm*yJ)op5P08FXpL^8~F=o$AYL%3#XZXBgJJSaI z#@~Ge+U*4xuGe7u_!e(s{Ug{sagzth6uj@U-|!3YufZc{9|*J>%)1b|(Q+QAT#WVN zi!Z`!y=l*+xY!#}gY4bAmquJ+UAl=~KqNsUy>79AL&KYC-YKrv;Xi!i=i!BOU+z(r zhmQUG(sM6OKcQ&Tw$!fFXeV6LA5^pjpxjoca$R}}g{;!4*&K4lyxWOkVJrCzqjLi; zHj>kTvAPpVtY;4ya%m})nQF*XakBbEXN<}&N54qdy_D+1rFOqaxfPpAeXTWVQljL1 zG%a6~C^;ZOGebNua$Gog+_qC3GBF9QDYul3=iBx^-}iC#nu~^bBhaLySfa_-xmk8(DAr9RPyU_LmUUL~| z!A-R5HQ;nsz^HkFMJf7~&UC4;%T*{PD(VHLM53wC>3Qz5*AQLrCpzI^>0@%PG&tJD zPV^;8w94SAj+R31#Hf!8(yHk-PUl*jgr9AtEl;Ifx)1nQ4P%w^Eo?P#2YKuL*~OI^ z@0{NayVw4M_*dIUcft8$w$%Qk9MKG4_`^T^!?eIxGwGUkfgrKTqog65uw!i17LV?D4D}l_K@7!+zD00lz3T&9ouRW zvcxZ93&)yj(N^XC(G%AkB~$9;D9K0pBfgBle9CI6@tr|z>J8B=jrD$aS*t}-Af=OIUVpe>cO*XqDC22`{Yk~TG_CyJ$` zR&rnJ))f|d0D_$Mp;rQqes*%1PY`^F%rNtlv_hb_<3-p!u@SCUVY@q@`M;pv7=T*6 zNyYww#}kR{veT19~X9$V~UZ8yXj7?l`; zN!?9M<>FytR5xbUen8PL6;_F8X&*(vsf9FE<)!3lY~(2ugQe4?f!KC5HV{{#SW_C( z1JPd+E}V7cMhnhW0HL^Y6cR}9u$CGCN?7w3<_ z$jG`<--F&O4wVQXtXeo#!9ou}ma8AuFRRW)?#YQUx)Vit)j*-yHoOnaU;%TBCt-PT z0oDy|gq!#MPx0?BEIb1b9KX*4q(xmYWVBg~EFmLSah~w{t*o?Rcxb59I9hi=as8rR z#`ILbJ6CS0uNF)0wW}x?CIOP^f1zeVXzi5-%S2eTL0Kd7pitpfJzPvTP=JbKt}QO< z+KPo|)DcDeK2-qaq_Kj{xe^cJ2x#exE2f}mEmH{sSPc%zzB6%4C?OWg`6p@gXH6P< zQ?eM?pn8x7 zEy6Ju1fUkP@D-9tuY%$tAX)AQkj0lv6w2!qGLu!xsV)<;?mI5H@&BzI*ainziCj%D zJPUvR@W1dEG=pYikZM8pfEZEZ4^mSXy)Q9Gx!R{fhzT})gW=@P9R2S)wwiQim<3tqqQ+(EF?$$ zS;Xiqpxmce(M6=f9V#uBO6i!2^A54AAyaZvd>M2aBNhxw+a9em(#pwEtW;|wwKT14 z0IuEkV;A+HPt804Upw|!&}{p(4Bk<=9iDba4R*ed*R&Q!t>|u_nPDD(DmQkY7Rk$ ztAXK(JF)es>XXG$4kv74C3K~J$EAd>loM(PJJoSG<~0p8o3PyJDh`w>e;$g^Y`GbIx*X_b^p za=IQiW&Bl8!c=%<{dibHz0n_MDvMca7GbFt==u3);qX(BQwSG*5#Z1?=9n;mQ}=%A z;1JG_AM)D(r4+DZV~DW0irI?uMbr55e$Kf7#{;BO#X?ns(34YBQyKO!?MGaU^z_L| zcxmYo|0PS%kLW>4peRW2>zNmdI{tkfYBZi%u70312j*tRb<5!j1(4dy67gEEiO!UHRZ35vY|tXZaI)a=hok^xq8&VVFYyMeN>K&dXO~gjZmfyL55sW`D|{4UH9+9 z+y~Cr)Ztwn?iGqv1t6{p5b9_>Jw3hX0Wwi_)RA6-`3ISa-hvTWau-rlH$~R~p7B?s z)uu%qOOT>KUD#u|F{s2q$xhkkFjTS}d$*a3MOOGX?UgR*wmUIiAFJ%j9oJL$j4~0> zL>8~nRT6Pki?+0Jr4bdtT}Q06rcvEFoB$~%&a&tr7v=WU3Wz;MPO0Co*iiVmgCzmX z@e*oopT{Jsy3>3ttz}eMqv=r`QUF%OUco$MHV~Ce*@S|sNeX3vM^2VeGEyNe z5>XU$P+lw@ByO89asx=}ltMtWDX?@y9lQ$_#VTkJeo$+93})IhB)7N_qE&R zV3x>jrk{y*0snXY{P{)v14NWGX`nG{6(7WOZLGa0C%*y#EaMf$WkGcs9Oo=$js-AL zP-bIr|15ANO>I@OONJGo@T0n&n_HkRgT1*z7il04N^P+sOVw1y7~lyrXm*ObQfaDO zD2ptBAjCZjma2leMlqlesqJADwl0{8zCb0R*e{i9N)e?XNZ2MdL=jcnAqfcRNx?3) zJp$b{9Mn`V^|>XdycA{DY+|lkw<&)^t%i6(A~JrQw+`io7Mx$Ps$$c*Dp0J-#3#Qb ziWB@oC-4M;6f?F2>x5P2!uyN6owJ;@(P|9myDJW;83kRj{ zk3Aji`&wD1l>1m|uf$O{S)}AE&N6>bD6lfAA%yBUX^O~>j3Q=WiDHZ~E5O6>TzPp}$x7l|(U=R-Rf>;jb7Hzt$XX% z?R)?K?6aqDf8RoA^fn}f;_t_lR=jq8`qQ88uG@mfV&PxyAW-7){syP;g9b+h6;@7P zNrP)x9RpV5WK?oy)k(EbpB1PLLRpZBG3=&;hGs*Z+)a0TtHf(wiD2T-&8{X?)o)ep zUrC*Lg5vwk_Lkuqphs)d>pn}oe4A_LSLj0{K+YSfZS$A41g3K) z?-&f_L`q3OvM&*QvK1K_t2|01J_~<@PSv4i`{Z=)FF<`}LU+uw%tD1YLCrtlu8Qs! zm5_`#3g2WDK+jYiks9W5R_6>xH3N~FwUIg7l`e==jm_EdNx6{VBFJ;Pg6?w^s<;Yo zok^jess`pwL3Qy>?m>XBevoQ<;%iX?sH$OdsWIYoDOcb`-B?f>EI@se>IRue25amn zHs6cq08`CVWUSbV?u?M|*^D&Bk3A69X}yovsR#1VLk|rr;~4H_Ab1V7ZrQSBfqs+v zye{cW$NTQ-xyX{6F22h%%R(Th@JX?$Y*Yu$>*Ar$d`TKWs5)j;34}JC00it!g$08P zP~(g$&<7o$g9h$FtxFw}xe$wvjZefnuQx_D6+s$;pe7A9R7Erpjmc_GWE2>VI^Ks%Jt3K$Ig?E4Gzd6n}oJPJ_uI z8soGi>8+$R1pPxCU4^k}+UbL0ArN@yL* zyZZ5_O`Dh`VQWUx&4jyei_r5;o3_uUY^#X2psVa9hIW-4RfJixn*?hr>>Cm?DXX@% zDxy&hI=yT0~1Nh5XH91(3 z`T|o$W~#PpMv!KTOWf(lamTMHN%=~}h%b1)$Rq>jd_{^OYX5bmoT_wA5^?XmFoQZ( z4e~zc2;yb@OoD`Fv!PUYz3k>3a+Su*!tHcK8fTyG$EPNuhv4}@#}uoIfVzY{TI-3` zktYh-Fv{9F(gu@9bCvw5=p%w$&uRnR&*0kyg{}pg!z$4xVLmlTjagHH37Ogqi5|~2 z3b~ODMq8Ov-)Bx(pFBy}$w>I|cv?uHJc#d9=EZffDRxOlMhn2AfIx=8+n9r3y?iVr>g}>j z@9lNso0E5)pLp-96Y#3b7(>RMt`N4hD=sXv#PiOr_CP&Fr$Q7iF*l2bQ06#gSal56 zK0_=*Uyik=DfFW}j}&p)bMTzE_fVPclNk%2%exV?q(UObmX(?VS&irBxe!zBV~99w zb%O)_obHxuLjh2FAvw=ro`XtNOEJw`ormb&504|0I#T}6*NcbQ+XHTp#c*_-uV#-``PDKb2n#_{ z49m?ye039F`Ngt&o6cknxOMXG*Z+0~@SVXB5^I-pD#Ac;&Oc;2xWAk{JI!>vH^<6 zeb!&k3rDp>iT|#W;Ojj@$|as0kgpCnsIFoiagx;&eXYc+n*o(8S_z$)jbB%=B2l*j z$eTRcnWF_N&3kGe*gd_ltK21!hkLTS{OW>(Wi;pxcsb-!0K^|;kCpG0(K{w6P@=EP!O2?TfGT{K?q)avgxS$5d#YH#5R*6|PrI)p-^Xch85>dQ6qYXQ zC~8`2kRF82M_nZ?iqk}w^hWAAXVv{FgoTO%X!Fo*NoY8qv)4rQpYoq zLq^o7zDfnAlCf#dn=1Q@P1~K-lb4h~W#aD|ufYt>ksPXL4`lPa3)ITXKIL4!?V0Phy+itsU3j>A8209vuqfx_kAqQE!ef##&fpFsvWT!eZ{$m5>BG~Jn zAP5OVAWROm2*;DWg-sd`e3BhKCgyO@I0;L{?AEZv2f^t=j>*i*=3t8y2sa!$U^)BxeoOY#~}P=7MwlJdm?wNG1Mdk&{04Ky~*L!}yxZF4!CyXs4>oMruw%A?DJ}9j-z=jr!pB^~x%$YbqVX}a@w3_rrM|xRYGB+m z#DG;?ZPJC940!`WPwFg%y4vJ9c~*(MBXA^xBproYLxTgrgSMP-mmIPX-l(Jt!q1n~ zltff&Z+B1pySDRD#0KBHRQFt&;*xM#Kj=K--;YjBCfBYQ8}akDo&HR8PdjLt8HLhg z@?cK=?8(zO5Ar*%S~<`Ej*|*rtnz`HS~MWn15D;=$y}^P{hnTvU4tk98^uWswe^ti zweGx?UW+!rSjwh#h~)bVisc>W(d#+&!w)~aRsHG--2ebJo z74~)YLw|co2z4ky^7$fqnL;yF)TXTwQVZz=E0#*LUBqF8RDn9ID4xgz1O(9qjLw_2pSE-{?QQdVwQTbi@_!1C@H^iYT--ymkcx+lqv=|AVUMS;JvD-fh4ld>2hx- zs^-v=`&@X3WozSAKV5q~C9ziF?6M$0Mxjjgxx`-~{g^>k&WLDRqnm9*32&=UlO@uc4frXG&K`>+c|cXhJZMcxR_5h>q6AjT^ax zejlxUzb^yfMEz&@;E_ij**sgrkblNJOJx93jwke-X9LQdd7Y?1^wD{5j>JDMW;N1QQLjl>P zoGPQHd5`|yUKoh9tdM42@V!bGLnL0z$z$ZuD0z--5IXe23$S}~oDA5+v1G@*?&KLt zG8j)DC^40=a#9ZYrrTw1M$+GCZ{=0k<{i`kiq-tSe@^%(x}*kg}vKjoBDR`8o+RiL0zTKoWvsqgdQ#Es4iA8s_N_wuf%-LUZ) zb!jLOgD0m5P1-kSr z-S${5N(emG2pQ<>f&OsdG+(6T3|}%5ni0AfL#a}7m|WKN-0@cO30~u#Ood@s40&RD z3MLUh#5*W9z8sIcTJ_z?-%?>CDoRC(2j1#DOt-@MX_&m*>MEW>OLBA3Q^A_wyAVl> zbnfPb{HztuGxm#QT$we{W51y*4mNdlg>}+wNcVj2*o1Vzt*>eq8dD`G7ZirciFuZ1 zP^83=Q4YB7&^UU_`LJN_649|?@mZ{3Vd#sGIcdN5-g`Bl?qixTZZ-qq5G(dWzW@F2 z!=;yA8V!S~Q@Db~ImoVEyW%+GLiZ}zR{od9PhE8%{?3JCdb$OBMn+(uzrVt!4!Wbv{S662RHKdrKDq3hFj>i5^|X~VHn zxncx$JUcGKWNb zhPG<-qjj?I3aq3KOM%=Jwnocrq#_1*4y{~_9+rl6h)wLVu`v;zt?Lt_!G!$8-E`AU zPuKb%`wg+!NN`==LBPdr+BonY%VRrt?u_+hj`J46;lWA?80Rv+%|X_|t|VGE|7@(O zipeM{AFBm=6sngEFNRr#CHQojZyy~Qi@gy&AL3;?kURebJ#-+AG$#{}>15-M<0zN# z6yI{Lg`rftOq%2=oGR&WTr3fn^mj4;DSdp-InEPY-0htAlA~al)C%#}uCejtg&ig4 zd_M8LV+k|Ams13AT)inB0}s>tPE57Zb0w%k0sSrgEEqOP>a)ktRjx`x5A<(yKExi= zG4@P(W!fBgO<2u@0~v2+O?4K?C}3V*JG#h{L&JD(!}?ofj}&nnY!c!+)qOl5o~*Ej zHN4~wTJwH?9)$A{eDNdr;QssX-@J0=%0*EiGgu}XN4<20Zfl@>9#yk;$U@@oD`ReW z`mBP?WYr`ZDlnYf(RikeQ!+ubUqKO|$w;wPe1`nWb)O~TjA|Sj#ad}Wm3Z|m2q?Z}+Jrfe!wqMkTnhb-Au$LpB;iJm z2YM6kqW|beKhl)%kI#$MSexR zAmT-o@^LOo@mQsbF?sh8h0-eHp{eaS7S!L%V2u^QM~s2-z#h;T_D394U>+Iu;WA2B zX60G>iz-@WB3~;@s!WyXIbSCA)bzN_kF}>^ufY{2F70wpBtDls&G6oFXkm@g<+z%Y zar8j32;$g#kOvfRkdu9I`S+>V5aR!dsgx%%vc_|@E?4++iP&YS2BVSDWkx~A^Hb8j z6AckAYp3@p=^u0I-iyq%MARYzo0VxRYsFTpS29&01(vkdaNRA2qho%I`9^)6MmD&x zes}EH5k1RSzVej~YW{rNY@<1|g;Wcuwn8t;NMr;gdF_tBZ@s z@fP);ZedYQ1y3$t`OZ-k{g1)5h7d~4^)TgIPdY($ddfk?JBa_fYLMIS| z12zEZ>m);Q5`vaVXOdo1mSjles*}gF9j~t?-4UY&QTaK@kM(-;)HTQR5A7~k(sg|y~jv62W|F}PL+1SRXmX{`#PT$qjHYM|4tb_ zrz4|@8wneaFS8-32}caE49R6%-5s|aQuzwj%2L^1i2H;)%}PHgmd?Zf=DWk<`ok1p zw$3@S3jJC>u}F1hTi zNuLMrb7eyPER7+kRxLnz3_XAardAEH5u=qnNfCeM-Di5b9s4BXNcK?bGA~_xZVo7F z9LM2Cn?ej7=EN||i2=pM!A3%1kz)_wfV@z8J<^=+8Ji5@-?Vs??8QKug4$aEFU(RU z>ZLN2lD!j!jHQwJdQVV{(a~|CUBYvqlU*5ADAiP^uTLOS2v$1fHIkR$FPjSoPK19X zdLck7S2HDaQY7ew>43X38Pg|(3>*fRKCZV{HBXaqjD1bRhVM|`c;k(_dbMLVALypw>HIx@jq&mo(GGnHX3FAxqrDOq0_J`Wmeh8U&uQKM~-+D z!w8aBuzGpimp2n!XG3AVEt`L+Ak1fLY~$_er=Qm8!cF@MuK<*q=PX8IiQ(bA5V!3; z>#Va@=&mGJ1qKEN;?F!g(rEX>v;NVLFd@;Gkz^W#wW9V}7+UUYdJ_urtq5lFjD}IO z*SRdDh~9Fu($j0=eF?E&GCA3b3piHHysZc@r7D+^WEjM&C=vq|%J44jJ9MX!k$r4( zDjH?GB&I^vL1eBe{+XCUJmmaH^E^ojg^kJqST?80>ybLeo~}Hul4XxSPffR?VKrhH zs+w;MFlCZzH4z9<)kW0QNEL2PB}wj5nY7#3$|{csoA%B_xXhC75#{WnO*5 z*bI}Io1S^*nRjpAym`mbM<2Z)5;k;oRjd;$1Xy0f54W)QFz9bB4GHKr=)zsHk!OL7 znl`kWDqVE{41w)vH*tAai)Bb9PZrCNq?N&4W)r1T!*K>QHzluK4|!5kSVh9)RtPzVr`oaO-5nNFvspwuS%lLIpQ;yH zPni>RSy7hT?|7Zk7;93$LS1?k!Z9QX-e@!EwD)`sKV4?XnI#*qcmY6JL}*dXhq>V(`M2G?Q*b-f=ERH4tS+&+Bjx9|u?Noom(f6&6`Q`yCp=UK5 zY8mArQo?MdKahTIwZcN1o|2HY(N&~zVT6fr_(M}Dg(V~Li6SD${8<`7!r+PrNb0q= zPU--r5^i-QDdY{5*b`&eT7r0xl_BTl5-v}^qA?)4gJlnRL%;62>(;CFy>@@$)&4>( z4bDVMd&BD0tEVrx;DRH9l{WFjU_E)Z-pFA00@%@d8rsF);L44-&camntaT`5YDCyG zNGv_fkVwzmO=|eZ8PN_0uA(V)saL~A^{HvjW4Me6OsFk{gPI^hlWK#+{Bg34s!7Hx zF>_&Bl7R{#U#rL*uxD}Vbuy)8a!BNAiLX~=ZS))tm*r-jk)b6Edc;*pF*77nCO)rHNU1!9|g?k^|9OUOX)CwDU>ti4L*nNt*2127K0syO|A zO7IST#flY6uzARpt4_pn=tX*95Vrb9QZB-X%z_5;J1Ee4s4-9)1 zmy=17KqSK|ib#2<^^9qv@F?y)!f~b0z?xsz=bF6J+)@;B;RS7#PVy7u6_=6EF@2U% zFkm#BsaMInnjADvX#jc^K8g~w$t2v2S>xGnUmZx(I42;I=u|#0(!yXqT&qj2nJ2g4 z(8#7-(-dlPH;QNsHnQPR?m-iN1-~cfA4O(SEcCypdR_uZ490+PBDZu zRUHST7@UZ=+i$=9(R=Q>hta!VByxu7{c+1!*dKp#4znIbTKMa)zy7HZ%eD45sf8B2 zuq)&uAx3Pqy_!1A1OOGd$qb-c{eY}Xt~h+H$wU5DQO)o?fn3D+ZxjThrk)9K7=Uk@ z9y6a*g_T?{TyFF^#&t0RBPZ1+hDuURgH!;>&|Q*yaLOB$RCeW|vl5{nMv4TvA#E~J zSAJ)5vs&wb&|~A2cdi(QmGkV4&D09UD&8q8AuzCUNDnJ5;DUsYY?QkwqDojn5(OzC zZ%|UMJc23mHRoA#tJi|f5r*_+a(}56yhy(bxkuOGGjLY*wTK&6NCC<(eBlf0m9)X5 z2NGT#h=FMEBAVj$!^6X^yYIex{cL44zF{mFUJIM=O0gn0$%Li_vMVlV=io!C8O-L* zb0qOX7V=p7BTQ;-Y;`2qvY<~vF>ty#SV3t}B_;hEMdjacEhiIdxq_tF2RSSg*hYlh zR!X+`x7}E&DOq3!4X216AnxeAcpc?a{B!B)=foMD9;YPS$ZL&2)7XHyniXG5hG!fo zR(31lo)!J>)JQFK*`3vhr9@uPdBSs6BxNuzp*Nc8`6hV@Gz@$$91Yuyp;aS>SK%6TNXm<9 z9=YN{tg4wq4iTbDS7c*?{}HIsqG_XY~D=(-3y zjk?cd4n_<=dUeV@a2?@#T6^zf@SzWV2tM_xPr(#cyILKfqFim{6% zja)i{%$V4Lj^nUxCOM|In8~}oQ8aI!5W1eQ2Qn^9vmaeii;*V#oY(a5nPNwCWBD30 z;S35!=9H>RIZ3I(W!lfoEK==JaE@YSqwo^qq{NgKYLWFjWLM|zcfp>T1e0je(?~dF z()<{?gjSEjmMvT2aocUT!Q0>dcKGmz zKOA#kz3%V7|9XPF&w+zYD*B=XS$)+!>BHKmPdRr{$184X7N;RB%mOjwvNO~1 zKdbXJEvKw_!mI!Qt31dx&cY1wq1QG9HJy77n)f&kLRl)T7#?X>FrK2?&?~GOfu?ZG zHdIxL63BuKq$qSVkdu8fswJP4ndD)-+3~ssQ zmYA3ye)!=@o8GzdFaF{$emIHsdjOpO_zEP6=hl9R^=DM6W{cbs-2 z0(lS-8qItQAh66Jxmd}d$7LRH60!v~gv2x2rBBd|k}yUkRhD9cji5?`hotglN%I8> zf{x8I9=_pO@Yn(H3ZCJ7Rm4UzzuZg&Qv*dpl@1l5A8qGmgsY&W->k_cX=AF~Q??>V zl<{h|!f&hbZIHbH@8k?E=Uu*_(lAw*BGGh_@`rQ}RGEYvo+;15m8gQAli@bi2uw-5 zA>&KltYB>uoO36yF%@!-smT(0rkBF0bKVy#Q<&dkCH0zXu8AH*-*C;HfByMcja(ff z8U`k!aokN|*7Sko9|vS09YQi}H4ld4FT-)r5l0;Ho+qAoLUNfUOP0V#Kl)KP;e-<^ z@!-OR3&SVd0sk@mWth|346(U|uBM44U}JNcsB~&FjSR%g9!~cM5U2}4a86w zMaEU+5->*!Ip0Vgqd}oVgt~Avp~Z6`A(=5}ooe}*l#flc;MDF9LcduUb6ia|yLRnb zxbn&?5ymd(?Wm)U@*6g6xQ-rT)bl^7f;AQXrd@}?zmO!o6AXTm;yILrewcrG(M1=< zr0MwMkDpOdKx-drE`=i+XG9`_G@6+i#~GN$RV{Y^MWdj&mSWn%s#<&oy2<0h=Gkac zAWAzJKw()mSL@!XBoQ*@CI1axB%`Fn@(`B=MY38|bycJaLaw0X1CoTfk*ZRjcLB&C3H60J1Lz~4kM}~DXuWMP1RO*#e+>Apa4j=fy2V|j!b@`B5 zw>tMIXB*piF>(;?br8fj7?PykbI(2Zu*)yMyz5PGdef|eCHO@#E?nBT0=7>-2~#ji zi@B;nSHU7kK;p;c?P zdNki70}6K8PwaaaxK>lmjTk9Y%J4p@s)>{&DPFZzh6@dD!k{}OLfa2(qvN44T z9LLi|DnJYV6lr43YYthi0$B+QvVK_JLoBk>$MUUrKraJKkS)BSmS~fBtQLvZr zYF@^BQ)r$m zeLZb;zDJ0+UE;Tj>m#g_*9GIib%TA6P9$*p=R*%YwEW3We)2uF6u+quyXABB2KzOT zdPkdT$0a2?XwKhy>Zzy3{{7$oef?~1i=V?9If5JK_brBFy3Pu_LmBe|9#(QbFPVa9 z?h91{YzPpJ!mq*z{)ZR8!0U|__7e`n3Js(KuV&zLqS`2O#icO0%Zs5Fcn?M`NG4$} z$Y|5RkEfGbVaOJpc5AY#l9j3y84{@Zd|7yGB>8u?Lip^{0ymy|I<#v;9!4wldoYNT z-k;9_pEppItvn;1$g&HrKyn^K*GT@}>V&^u!cDnQ6{*Wfd9GRk4MCxS;QBbB=Qm+q z@8Y;_l0N**b*0B@@4ffl4NpG#BqMgeMQe0A$)?0xeZzlIa}eDZVK0K#y8E-A{p`ab zNgD3tJ@5-4x^gb*c;HTOX!mPju{k~_Usoo12A(I_|Nw$ukSI2)KaY6=a*W!=olVcj}FeunRWuB6hKDRijL?+>1cW zjIyg0Jw{FFY^g+^%BA_d6ru=AB~xI-wZv{|E0cUikPCT;P2-@9;ih43vRWb!2OTmM z`Sk@6XK+Gp1l6mrU%qZ)>V`p{Cawou7mLjau%zplNZo@soIApG#Hwd?V?nCiPk!=~ zYZV#8_muZ=oi_ZJ#6W6ZWQ?Z{ue$20`|BSX8#ibetm=cwI+p0rWu7$fZs;x-MDST` z0!4BIsAwD-s>@p)PDvl7`kZb!iQZV^(>PbUru-vBpT=C?LaG&byWH%Fgg6Txb!NO(LpDoWu#5gzMt< zbKeb&8pkFy=Nh=4aOR^vR{J-9^Eda_rUl2e_jo>Q{rTh|b&S>|weP>bcJ12XTW`Jf z;i&f)3}R?#NJJFzi|*O8N9IP5eg%!>^nnk8n{LJv(=NHpn-g?S-1TCYut>+UMpwTw zw~|#mvnkZya?EX2b*HdWc@eA@h6aUN7)63$FeKb79TTfcsk|#nl?FPnwWx%)P%!U8 zW0X`WRTdcMCJKHd8sob1M4j*g)S@j?*V_<&t&mb~t`4Sf)#v_&9&qBvMXq9rr?ffL z&1GE;8?rK4Y86tzL-NjX4d6x@@{ThGKNQytdk_4X5#;z@Xdr`wgEC@!*Ijo#wr0&5 z);j+_t;xv)#az8ueUNGwJ2ww|!!a)$e~y){8*aGa>}AWA&D9kw-AL49yNebriv5v$ z$G;H1bOV~rR3Ep6SKajlc1-eSkeY?uCyAxNlE@R%&)jI_;hH$~)K>kI(pM;c%G!)M zlTG``&XJmpuFP{1PSFH`Vtda;F{>B|l}?FQO2tx{OBgFx)ncn8{Kn>H;f&sh%_VAE zK|*J*!5c$iva%B|a?4n>A{%lv3?>OzUWI!iag!*rkrp;X;Ts&jM$!zB(mNYF;)PW-E&?fIE&m(C1F)8=yX)tu*v(<-JUVz-LUBsay}qb>zBnSVb-oA?)o0 z48`kyZ0~t+SXc*W0Jtt@lit8(hie93^N;`dk3YusMlZXa*5Jf*LF~RDH1Gc2A3uOe z6140^zKbB<&wcK5aPYwg51n$#DTmKS6~s3LJEGe>X5h^*+}aG=r`Lk-YQ#BpT%1~K zJL-8mOE3vkyS0gX3-S!URu*w6?QAAJV_@!LiAT|-2DQ84rBp`8ucuibP;opwe zwoD!FsCk#+COAjWl75^^xh&d5{7ydWn?rSs(!)%a5D~mopiXN{r6bM-jSM9RHE3p~ zY@87bxqNFC)s9tpo6K!Uha9RUV5(VjpGl(|tO6eO<(@6dG>@3cM)1RF=GoF8}6Yh*93f=uui# z2}?t9Od6O(fS3&utCy`1RxL6o!t3T<0Fy+xfae775vf}*5b@6;1lxQ5`RCuF<~*(? z66(Fr#Xw$;97Km&+#6X>L-FwOkAM7LW@W6q%s97BgmX+Rj3?=&!S}`;Wh(3}T>d43 z#&ps>?{awxtxy#eqjC!&jVn~e#hRR-FwToZv7#D!H4KGMRLN=B)bL7qh!uou1mP7) z$36WGxzxQ#rC!FdQXz129tm==NdNw_1X!cd-<`Cee5o^1aGD_r+XfLwx;!S$w6MQ2dVud z_@GHuE$j-O7ml}|c;bmefB*M?e-?iz7IWt>&q)`*-~59PiXj(zl5H+{lJ0^^t*QKI zfaj6QtX~nmLa8`wo$UUih2e>%&;zlyJK@dM=wGizF8C3&L^o``-7y!$17t55EC-2KE{(#>4D)S$7WLATp8%M$kysWFw)9kId&=3dO8@NgQSsmFF#maS8_~p;aL>AA(W!jtl;-${kR!y@!>H8)9@s&9xb{ zlL_}Yza52maJP?;6bEhGMWd9MiwVAsueVfe^pyDf=$%T+0St}w8bb3X5gw9@bHsjP zQ*L94a>!G8+8JM+{oq=Fs5C|X8u0BYC|hH2)X)jAa_Rdzp8KixPS`vCELF0qaCFvk z%rJGO)@0Rug-Wi$WG>`{*#ebU&_I-_H(qI&sZ-t|ucc5ElJ^l#GGb%IjfIV4N#nIK z=V0UDoJ*H=anr;cMCYeJ_`wf0DC2m9*48Mkwemn3g8PYpUYaC*mZZI);i>_I=ZE8R zbPWIWPyck<>tFx+gV8Y1dsv14uf&`5!51u85TON+@4X8infNv|Q5>=XR8I$)8wbeJ zV;o-j%A_HA8ef$PV98|hJ`^^UYGTk4n>bU?IHE*%gwFM(OzVlC#@9Kt03;kM9p+V2 zA-@`jsmT#IZ0_-J?7{EP6}`!4;K`le3k$9XdYbd0Kvs0-squv z$Vgrnj`w1f>+_%g{HZHfu3WB>n4M-wkTC;eQRZ6R6uijViR)5ztAI4!X1yR~Ig$6Y zOXms~jqp;}owdwogj1}!=lS=Lwf9Qyc4sXO0A)a;Kc2M^*@%qr%7&byjRKNmFfla( zgLW>QcGREA3EQys8?fq`8=?{Q-X>ya7h@%I{<+WL2z&qp7Cd*P|pz$SDXrr(~<}u>4Mkvy#tna zzb<+P+#Jz^IGPyMYpY(hdiv?7wQ*pT>KgTOn zKm5Z#yk+_Fe$L^o$ zmp%+PuD&!T?Ok1S(h-cL8H}W>*%Q2Gck&=e%w|pQg>b)s!Mc>JTe29#Gag*Jg^aBN zF$7RFKv2cF$!n~dW7nY=84r1~NDHpuI#|ke?QS@I=nr7PE{=FSCOHSvz0|a!btBon zef#LU-u13qnQko{H&X7w#!ssC(>OH>jG_po1VUi5H5X9$3O{SSq=u=lS&v2N7sXVWb+~*XV(z z2faxkEI-?RLomqcRHZ|ppe@6FJA9iq5qrB-o~6$u@7qX6{5(aGOTYBF()XmYu(2|> zoZdsB1-P``$Y_Cry7SCymCj!w)hpIzF?8PX{4+rYUKhMRJ$^B~eZikXzgYykcJ7Ru z9WH#lu6TX%I%`c2ecQ2P$LI$?_`y5rA@(+Ip*6IZjpMlj5ufWk$V-xg%+f?ePtr%_ zUt~o&FL;tU*IaYWTd?C^ZyYj?3wIl@JxjPy2Zg)@lePy&z7AVj4}=}I5KmGV1`Vci zX-PQ-SGm}$I4xgH?C#FxlCg*EVVK^Bt5;4$b~q7tit(L7Eil#cZg~Gz$UP>fg7+BT z1xvaQf!81YF*#4GpS&`D-h=vAKv!cB#;13{mXU{GcexF^yZXa{Y~_8CtuSJrAc6g4 z8c%kA?pN!wuT{b|*{fKRZW2j?I!aoRH54YJqXBXwP`dt}1V#^=0Y|NP`2wGYHb!tnS(@+9Zr zbJt#b?Wy6mT-UuZHm&Gs*NmhuxM%E_jF-FNfjwV?;quAIWyK9etN9Yriq3lG+Iz6U zcu@I>r`M~-AVEr!4o{;0%p#Sk`B;IJs2vjpKwHz}Fflm{d&joJDN8Sc#q-`$A#hl~ z^{X(|8ik{m{!TE2Y%KR|`0Ef;j6iSCykI0DBq@4?{UhgYR68p29J)YGaLce&o-D3X zW%zrpLTOluG!nrm{8whfcd7x1USp^@0!|wG9q23O#VXYV>2`=7JmqHmGlqBE7sJPE z)~wn3yTALpcdM}KR`MKs6bSKo4?z9AQOSfDE((FC%WDb7 z0w$9^qzbo*=NZp8p7$erejQGq{}CwKeG#tC#TISM^%aEIIjK{HFmv_lEy_41X>I&a zb;)0laXg&sL+uT&IX2RQr`fr4 z2aJx4z|nJl9p1X&3K)RHBbQRU&C<#crJIBsM0D}gA|mWigBP>Si@j0gIgC7~k%*h? zze`CjJ=aK!He#`&PKL>ev3egow(ngV8-aK{vuAaBe_Esq29AwbEe;*yXGCLAiMXYL z1OEH+8SwMb`>-J-BWJ8wGKK~jRl=t!;Zu_d;D99(Shq2p&j?cw=Xq{8-)~#^-{6@3 zUym^K-Me?ioFX>(Xri=JxWd;G4dmvVZ(e`lg%|!%fe&w{wZUQ4H1|4Y1HSGLHU4}y z{KgAi@%zg`_G2Xccoj8!e&bL6~;2Hzwf_zNA%-3&BFGoRr_id~428@$*E_AyubB z@(IxfQj%qyqQviO727>S;yL^>dUTePd|TltV@_ZWC-EF1SFS0W@aq2GfLHauIePu! z;oVfSHK~+dmT_ai5DGUk9=FyIcD%p(>Z|Yn;upX8q#|4RHYAC(N?3(CM}0j!*Bs=P zmqT5%Sc?TDk+gWDTG|Ty?t=_ zz-ch@csD%T^B*uZv@zr+bkPeC&Rb(F8CcTb^8~54tR2XjQR)P(`Ansd};Nbdqtp3yx&y_q~4qHqI-M`#S zl$m}7J2A9T*qWfGQL47Qh`Ewi63`QKjmGeDSUh=Xg=Vsuyy5IdhQxg+U7)+Xf)fPqQhwx4E-*o_YuRDMhc7cBw-qVEfmZ>|D1l0hS3GhEz=l8m=ewi3vInOkTkt!=c6z@alnc;GnJ} zqnCcu8D~Uo4#dgbe#h-FFfg~WHoQV=>M9k6UANtS`;(Vlda0&}!o>Ve3a_{c*gjAI z;!D{Fc_ng?**uBXuXTj;$KB=EKYID)_g`_v73fip3n#n54W)WjgsUb0=YRii5q3QF z)KlXwHoSW`49-0?L)_Dx zE$fS8p&;$hUEwu7;c;Ksk;h^Ewtt3WmV7XN&Xvn9g0a>Xm~wmJ_@y6|J_q(kc1%4Q z3}X&-2hY=tGG~;7B&1a)pJTSjcrpsr6YYwi!9*&Frw9`(5>#x5)p69>)Uw;dq_~a)mqp_C87TAkm^Ecd=S6+GLPp-M< znx_zJ`igie^>wYv1UM)J|gcAln{pnAiHh=#7 zx%KdmJ<0v6R>8#=Uo3BW$DMb=^5q8$`80Z=xr1|~xc$!Q4Z%=ugWc_)5nWB@y=9Go zB;*OAGQ|mK8j}TC1kwl-92PYhJpn1>;%kTG97XNXi|m5wsd0GYqRU|3oZ~v4kXCyS ztl9dRuyQs*Z_fhg>7E;bjHv%7yMOK$=H7=YsTz{_O^RM#2)x1MnR!mYqaqw}lg(=! z89c_>u%P?M#7r|XN(p${6rOozBmCOi-X@>*D_{8vyz%6dE1pA#GB_f8>7|$caLt-E zOt7$x%D9hFNX4_{5k6x7%c+S7`v2Yg;x71?yOaJRe;`w9DE1M^5eKjEYDCrezxu1c zI`%#9dC#%+{AhIVUU=^X7r@4i8{?ayh|2%^+rQ0|cN~Ba-m8CLAna^S7;Eo>NA}zb z&rUxS7V>0HfEhJQBpg68Y+MBc;2qOT#S2sy-K#Jwguk zm`~U>R>(>kB_T_I#a*v~V+YTLzQ(+;t)=RGa-LP=0WuBx>e6Tv48K$6(i|^ zJe_zVhFqAZoP6@hLm&V6$KP)%1&zZ~Vexv0jAmub`tx0Ud`ZfjPc`vCH7KU)4B4afPCFOy)pd4 zMKadf1)GDhY@J*OJEtDcBd3bWlaaL?Vi}ni_Z4d{skq6 zCe?z}?jvJR>d;bxHj*GSOAC651tEM|(6a&-_O5`Y=_XWhO1637Ykn_%jd62e;&JXf z`5I&$??3z5&%(FA{cX2!;lhXSzWeT?wcTC9sJ=R{^8*v7Cy1Budk`++wo_-=sa(N7o9m?l|WEsa0_z}HlozHYXqa| z5@|7fetR&MZ4>KZq_r6)-0pC{QL)IA;n2UY{K)~A$+O*<469cm6FxV$xg2`!JQ!>q z9E{;ru&`%^ zN%hemQGE@rP-(BR-#Lz7LFVQTHy3&P)@|tj*iH{d7SkS!uqaR)I?svUw1sV$X zNzfy3kAXF|>v;B^n%P7H?n z97Hiq>_1T+f`)P3_1CZe)RkAR-?3u{%kQC=KqBdf$S`z;YFZhFf2j=MmnsLDEd-;G zi@ixxRk~7sVnTl6;S78p4dsuoxMIa`zVn?c1_uY5aUhF!N?sgw4-#1tBl@w zbp@1HDQI`q&skAI%Bj@s7wDO1o{oS^93VR6kVE&|TjlGLB&*9TJq=zyHybvWa`pA( zae@5zRm0$foWm@jjUwb4t&o7P|NH;@f3;yuQaAiTm1l5;s>NPoU%AGwa*!90gX|+O z0R>ahVHX?9iDA89@1z?I@eym|9_V|eA<3$LFo`{4Iv52;^klz}|*$Rj(x`OR-W5%P?u)H$CB zFS;*$hIJH1jn)jK1y%UaD|UO?bC93c5KM(#y4s~fFEkbm-cP48F&uNuF>@~aumAN` zZ$Im-!~6UDn`|hor^v%Rbu_c^c9C$5-f=sTEwi!JMTGRvC%^HHuy*ZQIPt_2;YX`h zb@UYcdTo%i83=p7PQ430&`a{~V?L%5?^|xY^~tNRy6W*@AYR0slhgAO~0y=FqEKH5%EgEDhi6=&-lFmj5nC9A`^dNlmBRe6hXWf&YvmCq;7*w6KRWkWD{g>T`6z9jG4!B7~s!r|8( z3cpr_i+>VT!BF(4>-T=|_YQsA+upY9gcD9!j-EysK%S$4%(m<2 zQf%Eopyok?B)YDE~aN-Fk9u&OI0LS_|(XS@*)e`c77zpZw>@UQc%|Jj^ z-0=C08#j(VxbDH7_x$jl9k-L8qet4{QYW9Xz@YC>JpA0{5R|dhJVp1jE+~jjF z6&(FnImpXY2HuaM)DwDbEZV#DhAS{HoP|Te0$Lm%A4ac>w?&H5`?030qjNbRCF+Xu`aGan7%UWuFPqiC<9Jxh1Z!}O5B z1Viyl!s0q8JYGT}TIF`!amUSBv0_EvNw0tX&|!xi*0*fw(!Rxu7xzt0PL|=mHyG9& zz4IZVGwQ|j4W;OYhK4G}@$9qDj)lcO(bLmYg!}Q0n>LO=_0-ejKl$;GhaY?FvGHIW zW3znKv6x&N*cm?a7D$6i+B>i@Ow~Mvc#D1YF<$8Hmp%viMKHix(^2Ou+Picq!_fyO z_Y1;-1~UW+_A*E3F)!0?f{bC5yuwb%1PD{LV_F?8Wfbfw$`{KhUTF{T3-3XG-aJqT zW6|D48;v#|ea}D7r9&G`FBuiTuA%;&`nB+Cv9{Gho+4w=1~Ed1Uhvbk`&P{u>R#e` z8O1NU0sN;okeBKF@B%J69E}4w^y_WyFzToqh$gXcwZ&X2~NUw{Dst8WjP{;2hH00000 LNkvXXu0mjflDQJ; literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/clocks/qml/content/center.png b/examples/declarative/toys/clocks/qml/content/center.png new file mode 100644 index 0000000000000000000000000000000000000000..7fbd802a44e4242cb2ce11fd78efa0e2e9123591 GIT binary patch literal 765 zcmVwm?cmZyN`*KT0&&bzT5WB7@L(auxOrlE<9L|IL z&i8)L&uf>4S*T)OE8F->35(24d5sX5GeKScQ1}Zk0{U)AOeg56F@@r z9&i_k$@vIi#IHYN1sVpTz-?fBeSQ6DCX;#L`@V5q_xHlW!biXb&PAI*M>7u%0F42O z&CSilY&QEQkw`q(Y+9|>+rz`dd@7ZCCyf6B4GRvyQa(U#F>=uz;8CGacvY|0gJD{& zR*!%=;GskpvRQC?*oNeXsg;$Lg75nb(|9~ScW`jV&hDzY)D;F81#ZpE%q)7I$4wLnZ)|KVO0gq?V>GZMsffhm@h95(I@ZZ# z@|p5Cm%2j9NTbnchQr~}K4*QUR;xAXnTaa{0<=q|(&w9`!7|R}a-RSX+iE?)KF|i5 zdwY9dZUWrtbf{D+rE0Z$O1Fn?9|syZpgTcsu~% z2a54IaFR}^*UIJc*Fkx8UH5EjYin(1XXi+K>f-M$<%5e|vAb&Q;)&8-GE=~VTrQWI zpPx@oPftIdoSeL0E|vh*lr=Z!!jm-Q2}+N`W?w>U9_n|b&dh-G77}8A*@a$++Si(L{Cv$O@m%xtVMFJ vUl6^??F-^D;CUJdtS*47?_QuH>?{8O-DBHcK9x2C00000NkvXXu0mjfY~)gG literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/clocks/qml/content/clock-night.png b/examples/declarative/toys/clocks/qml/content/clock-night.png new file mode 100644 index 0000000000000000000000000000000000000000..cc7151a397e16b6d6e2bbe6b1a59d43d09d76a89 GIT binary patch literal 23359 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/clocks/qml/content/clock.png b/examples/declarative/toys/clocks/qml/content/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..462edacc0eaae9f2789ba6ae2c92ed533bba7207 GIT binary patch literal 20653 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�$@7S8U3ymd7s7tyOHWAvUm z!t8j;y?C2<2}e`&NBs zk|RSR9_R4Kg=Z_uc_R(0ACjxF<KbE$Lo&3+4H z^-oQ4`H5?8exV)c>u1Dr0kTvFTg+)a8?8bsZwpqqX4r2oz8QT40DQmj`P6*QrBm>V7YV%01x_JADEx%^ zYr);e3s%p$=CZLzuClr$rRa0A`ju}-P<7iI{`Q`4)24ZEZqVnxG9SyXV&z_!Wd`%z zcVvG&ybwli^(yJ@>A{_Ob>)%J!=DGKNXOy1Jtb*^m!xa}Mzho4i2eXqq#bjk9FMd^ z8V^ntW~3cz#40NrK_b|AKh5Pl@X5^Qj`XWG zg1NcPnfY(~#SJg#&X_g6_1DAEkoGm=6g)pmB&Gv`&Ugwe?Xb-v3K2s;3O&vdUn>)6 zNbhzTNrphVr~;_n>$V{lZjvIRlU&TIiaBFql|r3%7EpzD`Zl=;nN&^^4*{)Byzpbgy7Ztu1Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXc9 z05S=eKQo^I00HqyL_t(o!|j;6j?+LChQH(WKrRH9n~*5B+Xf+}qoCp?QbhDr+aW4C zdL)WeG|*73Qt}2#5GYa#8lHeyT5%Jx6^|Vs3TCpi3#*N^(5!rAP(?i zpbcDdi`#BafhF)0_yH_{<^G;j-Z65HSAi?QwQje2qu=lE8e?QQ9DbTiCZB$!PRzWG#b6g^IYfixlNKp zlO)mkd~WkR*XeZn9N2LsMIPI@O}e#MEZ(MRdQ(+f!4V-MX{XaUXti1ofGWn%B2ph!ja_4( zllQqksv7%D*vIGV-L8MJ_1E)%V^D@!@0!USLDI&%-Tf!(+)zhuk*v@?gELHWx3HVl3-#ZiS4OG{=?eVR(k3}SQ z4HfIgcM*xLwNJwSkc5pTA8#HNca1U6fcp;rT~QQIAHFmn!*#y^s*t+D3$g`_00000 LNkvXXu0mjfjzPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXc9 z05TtA>xRw%00HqyL_t(o!{wO0j?+L8fWO%|770J$s8EVS0#RN|$77_WqdO@D#YwzF zQsph6q@&?ABGEeN5LNhz?tJXf%o=NP@WtU|M~t+J=8lH8w8rzgYVaAXtQF)NbbYoOc(p3G*mm#fw4({j1|oMqYhd_F$|o&k?c z$4P0>0C<>X+1vGceG&pR8jU`V$Kw~kIq(Jeo)AfzrjMnt82bJGIM#9eDMGar2~Dbc z%cPR{zmaMssiJHlu@`A?^Q0;eRi?UYgu2B*)FwBg`kN!&oKJD|>hjcx)N9wLMxs9`<{e7>)D_3?Qbu$pY$hFJ3sqOT zr3pU0HwA!=s=hNTe7MaiqGvBO&o5r3X?iIl&sFt9p69OvA?W@B51fzRJAdej00000 LNkvXXu0mjfJuMrm literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/clocks/qml/content/quit.png b/examples/declarative/toys/clocks/qml/content/quit.png new file mode 100644 index 0000000000000000000000000000000000000000..b822057d4e6a6ac5ed2b7d20fb27d5368b0e831b GIT binary patch literal 583 zcmV-N0=WH&P)iLVjkLUbqUBm)|aiE*K3 zcJA~s1Q&7dB@h+jHEskYS%e6>@m-Yfs4;jc7hOGcW~w{mf!>^|^Q)qYI!%m`7$cH` zr2CS3Wp1xe(q&0^tGO!nNK%yaN7CX5*sP>qsb;Cn2X_y^1E5C{0eI-{H>e4BzXYrT z?UcIh?n?kIN%w$TnYzC~&&*Z^u#3PmU_4WECjcwJm&{-Qmfih&1)FKWz5#DrF-F{d z0@wf!*X(o=aNv0j_8piqvk$EpW4ZdVgdWNi!~~DkVAE!{1<(f*Iti@Tpt;zEL2*v~ zFtg9V8Q|*(*bksv#fElR+39g$6F69d?EoD!+Z-GS!*c;RLjLf}7zd8#28KX)?*gy( z00Z#Y-4_}`cb`t!z6Pv}G2n^2U&(^*J_Wo6_GgNBC@vv~K6Ur`U0}l2YOrmf3!Dbj zfX+ejmOH?k2JF04~q4ZzJB>?d%c!~o3f6VRb}hJ(=tW&^O0R?T7S zgH>ksu?Bq!Tq~R90ZH#tv)q<+c7z6dQj({d7n0ijj$J|5B%S+@U%)9z%Ow_L3 Vh5vkKWu5>4002ovPDHLkV1nYy`N{wQ literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/clocks/qml/content/second.png b/examples/declarative/toys/clocks/qml/content/second.png new file mode 100644 index 0000000000000000000000000000000000000000..4aa9fb5e8ee10bceed60233801f6cafbbc601362 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^tUw&f!3HE7ALAcI9 z%{-)-#I>01eJJ1I*m*ivo;z>;fApF7?nmi?*OJbCk6Ba6-}}@5-m_hw^uNY#bn7wL uw$wt4`T4tTa)qAq@q#bR-xN5-FuuQc`KERIYhIw!89ZJ6T-G@yGywn$272fK literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/toys/clocks/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/toys/corkboards/corkboards.desktop b/examples/declarative/toys/corkboards/corkboards.desktop new file mode 100644 index 0000000..fcd2002 --- /dev/null +++ b/examples/declarative/toys/corkboards/corkboards.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=corkboards +Exec=/opt/usr/bin/corkboards +Icon=corkboards +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/toys/corkboards/corkboards.png b/examples/declarative/toys/corkboards/corkboards.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/toys/corkboards/main.cpp b/examples/declarative/toys/corkboards/main.cpp new file mode 100644 index 0000000..38eb712 --- /dev/null +++ b/examples/declarative/toys/corkboards/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/corkboards.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/toys/corkboards/qml/Day.qml b/examples/declarative/toys/corkboards/qml/Day.qml new file mode 100644 index 0000000..6afa12e --- /dev/null +++ b/examples/declarative/toys/corkboards/qml/Day.qml @@ -0,0 +1,153 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Component { + Item { + property variant stickies + + id: page + width: ListView.view.width+40; height: ListView.view.height + + + Image { + source: "cork.jpg" + width: page.ListView.view.width + height: page.ListView.view.height + fillMode: Image.PreserveAspectCrop + clip: true + } + + MouseArea { + anchors.fill: parent + onClicked: page.focus = false; + } + + Text { + text: name; x: 15; y: 8; height: 40; width: 370 + font.pixelSize: 18; font.bold: true; color: "white" + style: Text.Outline; styleColor: "black" + } + + Repeater { + model: notes + Item { + id: stickyPage + + property int randomX: Math.random() * (page.ListView.view.width-0.5*stickyImage.width) +100 + property int randomY: Math.random() * (page.ListView.view.height-0.5*stickyImage.height) +50 + + x: randomX; y: randomY + + rotation: -flickable.horizontalVelocity / 100; + Behavior on rotation { + SpringAnimation { spring: 2.0; damping: 0.15 } + } + + Item { + id: sticky + scale: 0.7 + + Image { + id: stickyImage + x: 8 + -width * 0.6 / 2; y: -20 + source: "note-yellow.png" + scale: 0.6; transformOrigin: Item.TopLeft + smooth: true + } + + TextEdit { + id: myText + x: -104; y: 36; width: 215; height: 200 + smooth: true + font.pixelSize: 24 + readOnly: false + rotation: -8 + text: noteText + } + + Item { + x: stickyImage.x; y: -20 + width: stickyImage.width * stickyImage.scale + height: stickyImage.height * stickyImage.scale + + MouseArea { + id: mouse + anchors.fill: parent + drag.target: stickyPage + drag.axis: Drag.XandYAxis + drag.minimumY: 0 + drag.maximumY: page.height - 80 + drag.minimumX: 100 + drag.maximumX: page.width - 140 + onClicked: { myText.focus = true; myText.openSoftwareInputPanel(); } + } + } + } + + Image { + x: -width / 2; y: -height * 0.5 / 2 + source: "tack.png" + scale: 0.7; transformOrigin: Item.TopLeft + } + + states: State { + name: "pressed" + when: mouse.pressed + PropertyChanges { target: sticky; rotation: 8; scale: 1 } + PropertyChanges { target: page; z: 8 } + } + + transitions: Transition { + NumberAnimation { properties: "rotation,scale"; duration: 200 } + } + } + } + } +} + + + + + + + + diff --git a/examples/declarative/toys/corkboards/qml/cork.jpg b/examples/declarative/toys/corkboards/qml/cork.jpg new file mode 100644 index 0000000000000000000000000000000000000000..160bc002bf9d03a3d8b95c1ef3ade4a9d02c4fb2 GIT binary patch literal 149337 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 D%H)6b literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/corkboards/qml/tack.png b/examples/declarative/toys/corkboards/qml/tack.png new file mode 100644 index 0000000000000000000000000000000000000000..cef2d1cd23dcf6508486b654f2594f3b312cea95 GIT binary patch literal 7282 zcmV-&9F60NP)7VNJ^>_ZN z>JEtrzEc*L3q-2`{x*Pj063M@;{Y}QTuJKx1n}R_iEO^o=h1fn*;_6U9R=_{0DlL- z4-()E0E)G*NURLh0$c>}NdW)(oXGa=Jo`I6}P?m_B?5kXSAdJqF-k67YJ9M)=yM>@YpoN~bCyVYmH10{r81B2OOF zkJmgP7lmq;$OWPm0KY-N z!xn(UJRm7UUI`$92-)e=m|nh&x~kv-1mH;l{@x_xOW3)586JQKz9hhdeW1K10f}nr(*!)6VHb=pAPNTc(IhR3 zL~Mn3?S}_oPo2W*V~=6$%U{Ozr=CLH9RH*MKh{-WeKzW~Q2q@852rwA&5~*jKpB9% zrxvlM`*EAH#!uG!$dxOYe&Gvv-Mij}JKy&{#E;-nYCN#H@|t1DMWVqDaEgKV1NdjD z@Lkd>JLY!!j7eJd7>`(^e)0g=TC9HXgIId-LA?0!kK^hmKA}u`_c@UZdaG}1Kt4%y z+5zuIQy&D72^#sPOh^H-lX$Gdx9F<_UZ=Y zNut*ef!`P4KLWU8zjFoic6rV$7|h#@6qwX*^tr!%$5LQA{xlh&e)d^RzW7C;EHV0? z@6oeg%!TZp$KnvF~GUKkC#Dq`)jnV)gY_ zfzS>Zw8HO#0Siz7!o~)sfAmL?$wd3&2>6k23Lp!FPjSERHPii6&hp#9FA(sv-9Pl5 ztT$3)-lu8y=rOHb5cUJ5uOoVnMdN*Sz68TSxxNlLdNl3R4}QY{=@EWP{H`+C@B0H{ zV&cC6?a+(-p+>gx(f z7lfpCyVU&_7l}e&kAD$(pa6b36?nI%#|aIJ`tXG^O_A!3LiN>dq@LQ1^jP}09`Sve&O)&&K0%7DC90C?AbRg@_E8 zxd1RAqTE`WhY&IVc?e-qVxsN(hk%C*;JaJl6E#^15in8HVmE7{r2`jTI3 zx&1WZ#%%+V0yJ zMF4OIFuD(TM6e4)o4ZqBh??Z8$lPRuDH>2Tzc)aS&FS+5((OKPs{3Vk@3E*X@;>Iv zmD>VD!MOka`|XP_zG%y`v}lAp@ZJxda{~Y)W*&;jFoZAwFcgv87?U$|2EZ)}CUF2ElcGtjlMj4aS z4-ZHL!<;#D#>{3jCnDL)FTY$6(aIzkhx^5|8`?-ADb`0Nw(=Q(g zNTQtcC8o=hs9_#8Zz^knaAGy5i^e>7=?%wB9b$6CL)U_a&%eI#A?Qv zzbo<%0$dA*0-#l-9dZcCOLgsr0N6=hJe7+8puT}6?d>9Cjn1+CKuPJHJiJSq_@|5e z0+Onzt5>hu)z#Jf#*G`r($dn3;Jt(m&6-H{_l^2uZ}7z_qOG^%MSgfNb*7Yq$Y$v>mOdmB^#}G3vtt8kS@|vKIy@nK;!BE-9B&WK&hujYIYWBOO5ufXH5q z7-kz2ihC^Od9*38DnhFe`-&8@WqA{sOExUTClfUz-Vq;74DGt^Ev?De9$YN{JR z+lC&7{<_GUg$PWvFxHs+;uHI!$J%#^`?mlbNkB_eOs)%tM@NY!11BwTj=ZO

            q|>+b<$ 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 M07*qoM6N<$f|zx+ssI20 literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/toys/corkboards/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/toys/dynamicscene/dynamicscene.desktop b/examples/declarative/toys/dynamicscene/dynamicscene.desktop new file mode 100644 index 0000000..c5170c6 --- /dev/null +++ b/examples/declarative/toys/dynamicscene/dynamicscene.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=dynamicscene +Exec=/opt/usr/bin/dynamicscene +Icon=dynamicscene +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/toys/dynamicscene/dynamicscene.png b/examples/declarative/toys/dynamicscene/dynamicscene.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/toys/dynamicscene/main.cpp b/examples/declarative/toys/dynamicscene/main.cpp new file mode 100644 index 0000000..77e279f --- /dev/null +++ b/examples/declarative/toys/dynamicscene/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/dynamicscene.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/toys/dynamicscene/qml/dynamicscene.qml b/examples/declarative/toys/dynamicscene/qml/dynamicscene.qml new file mode 100644 index 0000000..5f14e1d --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qml/dynamicscene.qml @@ -0,0 +1,223 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import Qt.labs.particles 1.0 +import "qml" + +Item { + id: window + + property int activeSuns: 0 + + //This is a desktop-sized example + width: 800; height: 480 + + + MouseArea { + anchors.fill: parent + onClicked: window.focus = false; + } + + //This is the message box that pops up when there's an error + Rectangle { + id: dialog + + opacity: 0 + anchors.centerIn: parent + width: dialogText.width + 6; height: dialogText.height + 6 + border.color: 'black' + color: 'lightsteelblue' + z: 65535 //Arbitrary number chosen to be above all the items, including the scaled perspective ones. + + function show(str){ + dialogText.text = str; + dialogAnim.start(); + } + + Text { + id: dialogText + x: 3; y: 3 + font.pixelSize: 14 + } + + SequentialAnimation { + id: dialogAnim + NumberAnimation { target: dialog; property:"opacity"; to: 1; duration: 1000 } + PauseAnimation { duration: 5000 } + NumberAnimation { target: dialog; property:"opacity"; to: 0; duration: 1000 } + } + } + + // sky + Rectangle { + id: sky + anchors { left: parent.left; top: parent.top; right: toolbox.right; bottom: parent.verticalCenter } + gradient: Gradient { + GradientStop { id: gradientStopA; position: 0.0; color: "#0E1533" } + GradientStop { id: gradientStopB; position: 1.0; color: "#437284" } + } + } + + // stars (when there's no sun) + Particles { + id: stars + x: 0; y: 0; width: parent.width; height: parent.height / 2 + source: "images/star.png" + angleDeviation: 360 + velocity: 0; velocityDeviation: 0 + count: parent.width / 10 + fadeInDuration: 2800 + opacity: 1 + } + + // ground + Rectangle { + id: ground + z: 2 // just above the sun so that the sun can set behind it + anchors { left: parent.left; top: parent.verticalCenter; right: toolbox.left; bottom: parent.bottom } + gradient: Gradient { + GradientStop { position: 0.0; color: "ForestGreen" } + GradientStop { position: 1.0; color: "DarkGreen" } + } + } + + SystemPalette { id: activePalette } + + // right-hand panel + Rectangle { + id: toolbox + + width: 380 + color: activePalette.window + anchors { right: parent.right; top: parent.top; bottom: parent.bottom } + + Column { + anchors.centerIn: parent + spacing: 8 + + Text { text: "Drag an item into the scene." } + + Rectangle { + width: palette.width + 10; height: palette.height + 10 + border.color: "black" + + Row { + id: palette + anchors.centerIn: parent + spacing: 8 + + PaletteItem { + anchors.verticalCenter: parent.verticalCenter + componentFile: "Sun.qml" + image: "../images/sun.png" + } + PaletteItem { + anchors.verticalCenter: parent.verticalCenter + componentFile: "GenericSceneItem.qml" + image: "../images/moon.png" + } + PaletteItem { + anchors.verticalCenter: parent.verticalCenter + componentFile: "PerspectiveItem.qml" + image: "../images/tree_s.png" + } + PaletteItem { + anchors.verticalCenter: parent.verticalCenter + componentFile: "PerspectiveItem.qml" + image: "../images/rabbit_brown.png" + } + PaletteItem { + anchors.verticalCenter: parent.verticalCenter + componentFile: "PerspectiveItem.qml" + image: "../images/rabbit_bw.png" + } + } + } + + Text { text: "Active Suns: " + activeSuns } + + Rectangle { width: parent.width; height: 1; color: "black" } + + Text { text: "Arbitrary QML:" } + + Rectangle { + width: 360; height: 240 + + TextEdit { + id: qmlText + anchors.fill: parent; anchors.margins: 5 + readOnly: false + font.pixelSize: 14 + wrapMode: TextEdit.WordWrap + + text: "import QtQuick 1.0\nImage {\n id: smile\n x: 360 * Math.random()\n y: 180 * Math.random() \n source: 'images/face-smile.png'\n NumberAnimation on opacity { \n to: 0; duration: 1500\n }\n Component.onCompleted: smile.destroy(1500);\n}" + } + } + + Button { + text: "Create" + onClicked: { + try { + Qt.createQmlObject(qmlText.text, window, 'CustomObject'); + } catch(err) { + dialog.show('Error on line ' + err.qmlErrors[0].lineNumber + '\n' + err.qmlErrors[0].message); + } + } + } + } + } + + //Day state, for when a sun is added to the scene + states: State { + name: "Day" + when: window.activeSuns > 0 + + PropertyChanges { target: gradientStopA; color: "DeepSkyBlue" } + PropertyChanges { target: gradientStopB; color: "SkyBlue" } + PropertyChanges { target: stars; opacity: 0 } + } + + transitions: Transition { + PropertyAnimation { duration: 3000 } + ColorAnimation { duration: 3000 } + } + +} diff --git a/examples/declarative/toys/dynamicscene/qml/dynamicscene.qmlproject b/examples/declarative/toys/dynamicscene/qml/dynamicscene.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qml/dynamicscene.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/toys/dynamicscene/qml/images/NOTE b/examples/declarative/toys/dynamicscene/qml/images/NOTE new file mode 100644 index 0000000..fcd87f9 --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qml/images/NOTE @@ -0,0 +1 @@ +Images (except star.png) are from the KDE project. diff --git a/examples/declarative/toys/dynamicscene/qml/images/face-smile.png b/examples/declarative/toys/dynamicscene/qml/images/face-smile.png new file mode 100644 index 0000000000000000000000000000000000000000..3d66d725781730c7a9376a25113164f8882d9795 GIT binary patch literal 15408 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 SNxgs4ATkn);&q}%LH`e8$k9yz literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/dynamicscene/qml/images/moon.png b/examples/declarative/toys/dynamicscene/qml/images/moon.png new file mode 100644 index 0000000000000000000000000000000000000000..1c0d6066a84bfd6c1ebb1ddd67cf29ef2493783e GIT binary patch literal 1757 zcmV<31|s>1P)N3!|q}& zyY24G|KEiF(yk=mZVHc z?UGs~wMPE7NNP1kEs~B(YMwcBMt8z1b%2JFuCA`jkhDTlsib1b6i6URk_rD27-J+U zGG8&L!%c*w(~@>d+Aisf>C-Rm96?_ohICa`b(*A7V^k*T8cE~-k}$F$J#hXxNtKd5 zlJr?&;k1(@D!psho;*qGB;6q?eb7d_k{&qSE2-KTZM^v6f;y+tJ9k!2lXSPF+ayhh zvymeqtw=i*uKZ*9`BQ&%A#H%Az)e7kixqfeB@k+9X??o2^;ov;a8p`(?Ka>>;4PrX z_6mG39(VvaaO~KL`;Q+#G0s---#W6&%C9b!RH1N3Hk!Nlp!r4;-%GkPFE96qRp}_Z zch{5|qh}BX9s-W~Sl$Kcz_znz|Hv7tk!R^EuUyauJP7o9&2YpF;N7mSuDBhWpGs3w zQXB$a@RQ+)6@-6S#l)9%gy(_%7IJL!L|50jF|pq8ExmAIaWC+s-y8?b0@lQO!$zf9 zu%M^`_}oU8WghA7?!MsUh!yDw&l0>&tq{0(@Jwsc#l`cQf%k3YS)`(;rzd^j44ah( z*bJProavV-guhzPV^wDSNT40Cmo^5alRLv zOaJCL-wV#A+Z^Y6;eTlt{4X64@?1-|JI?pQ@2;g&9p`)DsB7sVuPKcZ&ZV;)=X>E- z*V5KU`&r;WS?Lzn(z%ZFz2Lmka~$V;!TD#p*l~WcbOT46NgqCZWHONND&HejlDrKw zOpy5wv%T^mxIHl#v|SrUKzfP8Y%eq!V}1fh(oId@P6n2_$o9cU(Fs?TE(c-`av4QF zj83?czS&W(SB?So(HGXG4;}hu8c@BZru)@c46ggeuONLsqSzM%+siSXU6LEtd3 zHa$J9Z`hU*l9CRE8VZ3ofQd5S$;->_vJrTJbX8ULEs`E) z^sg;<6FxNDIAuzn)j@dYrFZSxlP~EBNy{1i>V6Dtm^$^MW*6ZDD=lCj;frpwT&!#u zdVp$RQ$ay~t;-d~d!o%OV^l7wTvB1YM{ihoY0@gnv z7Elb4e`3Uhhng54D_BiPG=V3hiC{=f2r4`RMuLO~DFR{|O)!{>MuKgH7Menj_N2YL zy}jL?86TiXxxJI>?`bo?`F%1wJ2N|^l)}Ho=BLB8jn&$#oMS0~Iz}i>rqmA~9!;(B z>#r5VHZ_Nvo91eVmdw?v(zXO#fHOejY~=c|c%x7q6&mUGb+FQ0G2>>)sD2ecN*A?%jkB_BWih;gpO{K1vm9W=C z20=)G2#Cjc`llYZ{&1&tq8K(Fd2`y*XgpsUWz|XnW{6>`$c754t^*;>gJJO7; ztZ;x}ISS=dI2fbkx!-aJ9~PW2QX-=E4d&*CYJKaqVPQ{=Fe9B+USC4ApYL`?CXEsi z?bvMYSvucnqx+IVLQiLvH5m}N`}*70o3Aaa4YifdYQnVH%kL#Q1I?Vqn*S3zr<}jd zXS{%fT8Qw}stFwojn?ek68nOPe3zeJ&{GSI`P-cl8 z`}z59XV(++jE(UaTd8xziJ)a2b>Z@WcjU8<%=h=u)|KH^>y`yiO>fwWc;y`Qbnb8hDN-8w)P$oF@E-|4`PhakW4FWFe!&m zU(B6bGEc7y>QwXu^NW%&s|x7!oz`4y9D1_WcyThfeYRI`@k)Z!n64Oz(U=s)g*Sb{@9kW!H9qF`&-aRg718#`pKV=knlUXs z)CDOVm}QMnN)fZ9yPye1qyk2y5=L|uGQ+?7qP;i0{k=C_ zH}C7exyC%OqTXl?2YhxGaYW*E$c|isloRh0{kKG4+y2oSrIg4Usg&wiUqVD1k?zD{_=#%Bu3?l@te!vnReV?>7lre00000NkvXX Hu0mjfFpfap literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/dynamicscene/qml/images/rabbit_bw.png b/examples/declarative/toys/dynamicscene/qml/images/rabbit_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..7bff9b92cac597223a3e8633e2803def4a6aceee GIT binary patch literal 1759 zcmV<51|a!~P)Zb6hg@BjIp;=RsD0YF4(`(xL7Qn2#3NyFbw09Yx_PF7=WegI!x2- z;GF-`jF>Oh8Wc6HLC$%a6596v0v8!$=FJXI1})RFQVoqqeP0sNS?hmYsCC`YQuU2zEYrGb7{*~mQ7ix;gdp9Lp7`RI zzA(CP-_sO;J2f>`v5Q0^;0k{(9*ge@2173@iqh!!5y1Peii5#Wdn6n=tLu6XA*9ky z2*H-j=82Qv`F2KCRrX}hleqA!3uBX$lO0V>O;A-8AONK_WSZ76qimHz3Ah_74j6Tx z(NyjCilX#X4$*5`;)ErHu&=#y4YqA#d1?7SPATPUIE)ao zD!LQ^R8{L!6y*Y?v|%k201h90{{4779`ig8wr#_49PHY)t3I2}-n4BSBX5sj=GM$w zQ2>C)9)I*^zzC!s-1*?yYB;5ohAE}55kkybhFy<8_LrWXo({)xP%4#R+cs?5hU>cM z>go#n6BI(!1m~CY?)Scb`c5)Y|G7sVe&p3E#pD-YZEYoM?TW=B5{V>cZcRdp^7i#y!AqqQLZJ}f)ZDbx(2&|o0XbX? ztm&En;NQQM2~^i?HfvNLG=3x$svv5m;JRg7#+XAXg%ARnOlG+*P}fJLl&=GFU3T8h z-(|j|YNx(hAq0AQdICE?y0g~2K`E`+ws*A8FvcLIME~dex2IduZBz&`Erh(d)^Kia zE>OLm)sFnIbIx(_;6b5jT1_|rgu~(6Lqjjb{C`zd*{64XDnRdr@D(XntIpldCGz>a zLn#GgtWy2M!f_n9u8Z#OZn|&(K49Hy1Ic7^`bR(hp^{7{&+~p( z-RXIrF*Y{#Hy_M72j?7=QdDoTy1F{--MbgPy}hfTsiubMSI)d_`q1f-5&UCf0);}s zo}Zt8xpHnSeU zY6|&$9?@tNqobqG4GawYeEsUzc=~+v_@S?vbq4i>jFk#DEx0Qv7M$Wsr(e2r(|*^moGir zoQ#~(bv@)b9+gr!QaDR*T>f4Eg#&1J>;Bn(m#0}>+tzhKNaRv)bo>$a@~7Ni*txp8b$W75xsJQ)&K2Nfd>P4e_{{OW z(~I@y#8eivb^SXekx4GghgWPVlaP+9 zNOe3isi&#jPHSy0`-1#=FN)3@_pe!NQI(jQonrCMFf2u6*?}!tHM6v??l8Obck?;Z rp!JTQUY&A`>woHd{mlRRh4lbP0l+XkKyuFM8 literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/dynamicscene/qml/images/sun.png b/examples/declarative/toys/dynamicscene/qml/images/sun.png new file mode 100644 index 0000000000000000000000000000000000000000..7713ca5ce7d1223430594e4d79632a70257dce05 GIT binary patch literal 8153 zcmV;~A12_5P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOM@ z5+^2qR+x?e03TUNL_t(|+U%LxlO@M>-oKMeRo%LK-+Q~KyJtmX8w?hL08COc1&gAM zut6)R2+EG|1H%uF@S7g&(6i}3!45z9$uD+eiCWarIqh0fr!GQVN8^r~8YOT{Tfz`J2phPG;f%+o!~S@AoG9i1DAD6!&;--lRg z-5&@aKy*3?s#Wmc3LrS&(|r9DvcCY!eh~5ZI)s_=9{^sU+E{^FUIzGImwKZum}mF@ z^tVLeWe7k5pJE`)5X_&n$4-EBMXmfc;57xH2NdR3e?}77YQ;k%1Msyc3HG$cYoDFI z=SrcaR&`|XM4w_HSTEIw=0660E|{?jvE2z70E|?q1`+1g=qhG}2%ymfP?ZF(Y2+dJ zphcDkHBv>u0rGqQL%#7T1F{Ma35|0I@L!%2<<$R(@xLkcKLF2;nZ`AI^ARaT0Mv`x zodBB#AQu%mBp8HYGX%l_XW#M3TTg0V9aSyC$qW`Vk&e2Q}P;#H+D}^DSaq#}SZA5b#+YWCQ%9 zqpHvgRNJg*%?Z`PnA5Yz;FGwM2Z-I#eIxlc?Q>BT@Zg`KYX1eqb2|kLJ_mAPP1qgGg8z0Rk^x~V&3Gaf( zyIov3?FnYc-CMEObZT+?bW;l#z*p-fB*9LsvBx5*ahpYYoGD*|cdJBn9MT?#N_s%r zlestsVasc27nHQvs5Jz`MYXRpH?|rflsC`T1h|3pM;ZSo5Ch*0Q%fB2f@b1(ekwrL*WCsUn!6Yfc>_IIMiTP z%*gP)Re|cs3VuhW$oF=9(K;s%Pp-T8Y9{MD8vW`+KCcQXOw5{`(1%q(o(7G(B+z7- z1nj$|1c*Z~5E0ZWyx(OuB|PqvcXeprBg-2=-V~CREKby%bv+SZyNMbU-dOY)pQ@sf zX8zjpqF0ENb~|ZyQR$U>ti&*-Gw{DMApF|XgnpCF`RkO8Pow_a<)|oU%~D zK3zq8D*?oasqq;xSlQ&(&4O#&ZIQ%ZV4dv|%a~PCVH=+<@+>rCaUxH0@4Rali9gF; zgi;r*D>9JEMPX$ubu9K(AQB>1Ctqwac$Iu;*hUY@VCxN5gTUu8%ludsVP0U|jRc`5 zIKO~O8tZ1#5|r)Z)n^R9n-G!@2!Ay8^o?H($UK$avE8m1x9e*65{iY`dR+Xhq}3}8 z(b~?EerD@vw2`)2qOzUAbV8)@-vu=`sNN?oBI@La&V6!~y}ZFu97h1?kgEihWI_;p*cMl^Q@EfCGr{>Utllw$KfZI_y zLIR5_3L=1i{FMM+oB-Kf(7^N2%Ixet1X~m+0?pQTNGF;^(e^fccCepx_pXi~48#*l zjdNck)m{XsC}k!h;bu_yL!Aq7De|iH8t?&Ze+Pq$f9M^*cXMIQe5cmX>*SgNd%Z

            b<3iL|%8C*7t4{PmZnxpJ}Z9PFOkp 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/dynamicscene/qml/qml/Button.qml b/examples/declarative/toys/dynamicscene/qml/qml/Button.qml new file mode 100644 index 0000000..8da799e --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qml/qml/Button.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: container + + property variant text + signal clicked + + height: text.height + 10; width: text.width + 20 + border.width: 1 + radius: 4 + smooth: true + + gradient: Gradient { + GradientStop { + position: 0.0 + color: !mouseArea.pressed ? activePalette.light : activePalette.button + } + GradientStop { + position: 1.0 + color: !mouseArea.pressed ? activePalette.button : activePalette.dark + } + } + + SystemPalette { id: activePalette } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: container.clicked() + } + + Text { + id: text + anchors.centerIn:parent + font.pointSize: 10 + text: parent.text + color: activePalette.buttonText + } +} diff --git a/examples/declarative/toys/dynamicscene/qml/qml/GenericSceneItem.qml b/examples/declarative/toys/dynamicscene/qml/qml/GenericSceneItem.qml new file mode 100644 index 0000000..7391412 --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qml/qml/GenericSceneItem.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + property bool created: false + property string image + + source: image + +} diff --git a/examples/declarative/toys/dynamicscene/qml/qml/PaletteItem.qml b/examples/declarative/toys/dynamicscene/qml/qml/PaletteItem.qml new file mode 100644 index 0000000..cf5395f --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qml/qml/PaletteItem.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "itemCreation.js" as Code + +Image { + id: paletteItem + + property string componentFile + property string image + + source: image + + MouseArea { + anchors.fill: parent + + onPressed: Code.startDrag(mouse); + onPositionChanged: Code.continueDrag(mouse); + onReleased: Code.endDrag(mouse); + } +} diff --git a/examples/declarative/toys/dynamicscene/qml/qml/PerspectiveItem.qml b/examples/declarative/toys/dynamicscene/qml/qml/PerspectiveItem.qml new file mode 100644 index 0000000..6536df3 --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qml/qml/PerspectiveItem.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + id: rootItem + + property bool created: false + property string image + + property double scaledBottom: y + (height + height*scale) / 2 + property bool onLand: scaledBottom > window.height / 2 + + source: image + opacity: onLand ? 1 : 0.25 + scale: Math.max((y + height - 250) * 0.01, 0.3) + smooth: true + + onCreatedChanged: { + if (created && !onLand) + rootItem.destroy(); + else + z = scaledBottom; + } + + onYChanged: z = scaledBottom; +} diff --git a/examples/declarative/toys/dynamicscene/qml/qml/Sun.qml b/examples/declarative/toys/dynamicscene/qml/qml/Sun.qml new file mode 100644 index 0000000..5b28b39 --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qml/qml/Sun.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + id: sun + + property bool created: false + property string image: "../images/sun.png" + + source: image + + // once item is created, start moving offscreen + NumberAnimation on y { + to: window.height / 2 + running: created + onRunningChanged: { + if (running) + duration = (window.height - sun.y) * 10; + else + state = "OffScreen" + } + } + + states: State { + name: "OffScreen" + StateChangeScript { + script: { sun.created = false; sun.destroy() } + } + } + + onCreatedChanged: { + if (created) { + sun.z = 1; // above the sky but below the ground layer + window.activeSuns++; + } else { + window.activeSuns--; + } + } +} diff --git a/examples/declarative/toys/dynamicscene/qml/qml/itemCreation.js b/examples/declarative/toys/dynamicscene/qml/qml/itemCreation.js new file mode 100644 index 0000000..4ee74c2 --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qml/qml/itemCreation.js @@ -0,0 +1,62 @@ +var itemComponent = null; +var draggedItem = null; +var startingMouse; +var posnInWindow; + +function startDrag(mouse) +{ + posnInWindow = paletteItem.mapToItem(window, 0, 0); + startingMouse = { x: mouse.x, y: mouse.y } + loadComponent(); +} + +//Creation is split into two functions due to an asynchronous wait while +//possible external files are loaded. + +function loadComponent() { + if (itemComponent != null) { // component has been previously loaded + createItem(); + return; + } + + itemComponent = Qt.createComponent(paletteItem.componentFile); + if (itemComponent.status == Component.Loading) //Depending on the content, it can be ready or error immediately + component.statusChanged.connect(createItem); + else + createItem(); +} + +function createItem() { + if (itemComponent.status == Component.Ready && draggedItem == null) { + draggedItem = itemComponent.createObject(window, {"image": paletteItem.image, "x": posnInWindow.x, "y": posnInWindow.y, "z": 3}); + // make sure created item is above the ground layer + } else if (itemComponent.status == Component.Error) { + draggedItem = null; + console.log("error creating component"); + console.log(itemComponent.errorString()); + } +} + +function continueDrag(mouse) +{ + if (draggedItem == null) + return; + + draggedItem.x = mouse.x + posnInWindow.x - startingMouse.x; + draggedItem.y = mouse.y + posnInWindow.y - startingMouse.y; +} + +function endDrag(mouse) +{ + if (draggedItem == null) + return; + + if (draggedItem.x + draggedItem.width > toolbox.x) { //Don't drop it in the toolbox + draggedItem.destroy(); + draggedItem = null; + } else { + draggedItem.created = true; + draggedItem = null; + } +} + diff --git a/examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/toys/dynamicscene/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/toys/tic-tac-toe/main.cpp b/examples/declarative/toys/tic-tac-toe/main.cpp new file mode 100644 index 0000000..269c435 --- /dev/null +++ b/examples/declarative/toys/tic-tac-toe/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/tic-tac-toe.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/toys/tic-tac-toe/qml/content/Button.qml b/examples/declarative/toys/tic-tac-toe/qml/content/Button.qml new file mode 100644 index 0000000..403d587 --- /dev/null +++ b/examples/declarative/toys/tic-tac-toe/qml/content/Button.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: container + + property string text + property bool pressed: false + + signal clicked + + width: buttonLabel.width + 20; height: buttonLabel.height + 6 + border { width: 1; color: Qt.darker(container.color) } + radius: 8 + color: "lightgray" + smooth: true + + gradient: Gradient { + GradientStop { + position: 0.0 + color: container.pressed ? "darkgray" : "white" + } + GradientStop { + position: 1.0 + color: container.color + } + } + + MouseArea { + anchors.fill: parent + onClicked: container.clicked() + } + + Text { + id: buttonLabel + anchors.centerIn: container + text: container.text + font.pixelSize: 14 + } +} diff --git a/examples/declarative/toys/tic-tac-toe/qml/content/TicTac.qml b/examples/declarative/toys/tic-tac-toe/qml/content/TicTac.qml new file mode 100644 index 0000000..7e50736 --- /dev/null +++ b/examples/declarative/toys/tic-tac-toe/qml/content/TicTac.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + signal clicked + + states: [ + State { name: "X"; PropertyChanges { target: image; source: "pics/x.png" } }, + State { name: "O"; PropertyChanges { target: image; source: "pics/o.png" } } + ] + + Image { + id: image + anchors.centerIn: parent + } + + MouseArea { + anchors.fill: parent + onClicked: parent.clicked() + } +} diff --git a/examples/declarative/toys/tic-tac-toe/qml/content/pics/board.png b/examples/declarative/toys/tic-tac-toe/qml/content/pics/board.png new file mode 100644 index 0000000000000000000000000000000000000000..7e5b7ba27c23a2e61575ccfaeeb768f8df2a57cb GIT binary patch literal 12258 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 WTji6~{0wf}qm<-Tuajg=AO0`)&u+5- literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/tic-tac-toe/qml/content/pics/o.png b/examples/declarative/toys/tic-tac-toe/qml/content/pics/o.png new file mode 100644 index 0000000000000000000000000000000000000000..abc7ee020b7e4fddbb3d79f2b3e999a3b2b319fe GIT binary patch literal 1470 zcmV;v1ws0WP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RU3m5@37FDE$w*UYD8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b1uIEJK~#9!?VDX_990y@e^Yf!lT;@t zF~(}PkoHMqksvA!ine_yY5Pz=zz19K!B40!im0Fuf-izrup*+U5fyDKVznsxpkkGh zU}@1}<44+Puxes7X+D}Z*N6EB*QME+Gdr_8A$wq8Np|nO=YP*V_kTXdbI!4lWf2Qp zY5>##r~yy|U_r~-X;0vJo)6@K4xk-4AGiRR)aSo|rNGa?2=FOz1n76polJdwN%MdL zg|C&;R{$+ivfeP%OTb&sxliT=08;#NU<=R*ECcEi7XVoNdP?0s|T(F?gnlE zmH=MD>--wn4h#cV0T%r7pfvw^wWl`ZS z;N}DtHL1IN7#IM~1^xzB02c}9B&89!5BMI~8=D6J-7(GZw3IynybRm}tSUB3?bccm zo)alJ#V>)@SUy0WKhDJcz>B~&QSN1d&;dLR94_)VziJnM5UAF*jEhp|isucb!k*`C z26h_EZUT5;4yeyLcOqsmwF+p}pN|TJ9B?bJNyo<`$AHbwxt_>JKnvM#MElt&*H0M~ zyb*Xb1{awYf%79D0pNPzHzNy6P5B}a9tTbuK^O!&Edab~oS-{x<%@jN+af&{g7jLU z6@)pZUc=yj0$r5?Kx^!fvyE*9rHD`-xYFQc1{JPWQVs&o$ni#%CSc1fIVuIfO5GjmGtST!|#+89+D+JR#l?RhB7dSrPyX??3FE>#HK~ z{|flXU zpA9Ib7Mc<2lrOL(9F76EVJuUZQKEkcd%5nes3|dDDI`k?e72UqLm8V~iU4dRDA8M# zp8(ca>H?j_D^{GAnZ2UiLVd!@uNL>Wu4@-?p#=b6dHy&BiP=Qts4_;IPzfx7gy^mq zYdQryP`DXUCtNQjl4@Z17I>YY3e=_aTQ1_6Uk`j9bM8IBa#Llfz|%fV&>xU=Z{e`+ zu_7J=q&|mgiYOl^NaH#=M17Ly6 YzXcUc)Y}lW;Q#;t07*qoM6N<$g7v0;f&c&j literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/tic-tac-toe/qml/content/pics/x.png b/examples/declarative/toys/tic-tac-toe/qml/content/pics/x.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc65c83b8e35f408e050a2729987b2f768ec613 GIT binary patch literal 1331 zcmV-31Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RU3m5@3D-F!arT_o{8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b1fWSoK~#9!?VDd{)>RnCKSyMQR=g=p zS(yf1h>*Re7iztiixx-|if&hkfmcR`2!hTV2VQs)5Mu4-x@8$fe=>j2H zv=#UOSYZG#3=9Il0EdAgt@U^f1zrWb2{ZvY;JLEtw}Bqud!Xxo5VY16Nfv4Y`T<>m z9sx&yW}uYX(jNPdpiU zAl{|XSYH8)L{&lwJSHJUqQN0cWZS z{ESSFez^er>IuRquou_>^aVKaZs99Y?BNrfybOGoFb+p#0aogk@Zih-#UIMlQ*HQw&N#COZV1V$U`1*;6!ncP? zvVsC2AT&r-=3sz$p`41o`W_ts1BgcP^J9U89|5+77Cu@!thK%goB-|ySndY!1@Lu@ z;_K|t3rhaJUao6nARb?hR#}Zuw%Q_BHl+R!hj4kZy+A3AEk;aZ-z$~!XA}UD)7TO{ z0sfH0NzE7ljFV3*3hV^EUMUOmKs*0UrYkYVZ`;t(0o1+3T=UN&zjv z+m1_Il8W(w2mc*PsX|TMpp>u%JoNY-qZ;(5N9cUZ$2<7w{yr&fB`uMk1eP0X%@P3y z@T&{7xPXwh%j-0SpW+>0*aL(f7Z;hP%d48k%G%pJJxV9AC<*|^DY-mYT(JpbWsg>w z?*hOhF|4^502HJQ6KnDC}81%7q};SSIm6aYDyP6wl>fpfr82V1ie_{$Ll>pg9m zX?DE&BS}u90tkP{ymhu!-=hxig2fP398tX<$Lui|0)Vx^Wd{a=)$f3}fT4u@-zzJ`MhvmdXfS#j zQ)`vI5%T2AZb4DP?+a=73inD&>~v!c=#rMySYrq{B+qcujq5_*01N`>E#{p8_Q&iS z*8f?=W56kk>HSs*XZhN*2Kcdx#XX)@tE^Fls+K+Wm$$-HB4zW{m{O`if|7TEb@F>j zJ${mAiQcrDrOO()^U^SlJkFk$Zq+WE+o)_mn-dUT0OrY0q~GT*@SujB;!^=&-NLW3 p?*{99WB_CUWB_CUWB}CjcnXD=7dL0_XAS@W002ovPDHLkV1nXIO78#w literal 0 HcmV?d00001 diff --git a/examples/declarative/toys/tic-tac-toe/qml/content/tic-tac-toe.js b/examples/declarative/toys/tic-tac-toe/qml/content/tic-tac-toe.js new file mode 100644 index 0000000..5a166b7 --- /dev/null +++ b/examples/declarative/toys/tic-tac-toe/qml/content/tic-tac-toe.js @@ -0,0 +1,149 @@ +function winner(board) +{ + for (var i=0; i<3; ++i) { + if (board.children[i].state != "" + && board.children[i].state == board.children[i+3].state + && board.children[i].state == board.children[i+6].state) + return true + + if (board.children[i*3].state != "" + && board.children[i*3].state == board.children[i*3+1].state + && board.children[i*3].state == board.children[i*3+2].state) + return true + } + + if (board.children[0].state != "" + && board.children[0].state == board.children[4].state != "" + && board.children[0].state == board.children[8].state != "") + return true + + if (board.children[2].state != "" + && board.children[2].state == board.children[4].state != "" + && board.children[2].state == board.children[6].state != "") + return true + + return false +} + +function restartGame() +{ + game.running = true + + for (var i=0; i<9; ++i) + board.children[i].state = "" +} + +function makeMove(pos, player) +{ + board.children[pos].state = player + if (winner(board)) { + gameFinished(player + " wins") + return true + } else { + return false + } +} + +function canPlayAtPos(pos) +{ + return board.children[pos].state == "" +} + +function computerTurn() +{ + var r = Math.random(); + if (r < game.difficulty) + smartAI(); + else + randomAI(); +} + +function smartAI() +{ + function boardCopy(a) { + var ret = new Object; + ret.children = new Array(9); + for (var i = 0; i<9; i++) { + ret.children[i] = new Object; + ret.children[i].state = a.children[i].state; + } + return ret; + } + + for (var i=0; i<9; i++) { + var simpleBoard = boardCopy(board); + if (canPlayAtPos(i)) { + simpleBoard.children[i].state = "O"; + if (winner(simpleBoard)) { + makeMove(i, "O") + return + } + } + } + for (var i=0; i<9; i++) { + var simpleBoard = boardCopy(board); + if (canPlayAtPos(i)) { + simpleBoard.children[i].state = "X"; + if (winner(simpleBoard)) { + makeMove(i, "O") + return + } + } + } + + function thwart(a,b,c) { //If they are at a, try b or c + if (board.children[a].state == "X") { + if (canPlayAtPos(b)) { + makeMove(b, "O") + return true + } else if (canPlayAtPos(c)) { + makeMove(c, "O") + return true + } + } + return false; + } + + if (thwart(4,0,2)) return; + if (thwart(0,4,3)) return; + if (thwart(2,4,1)) return; + if (thwart(6,4,7)) return; + if (thwart(8,4,5)) return; + if (thwart(1,4,2)) return; + if (thwart(3,4,0)) return; + if (thwart(5,4,8)) return; + if (thwart(7,4,6)) return; + + for (var i =0; i<9; i++) { + if (canPlayAtPos(i)) { + makeMove(i, "O") + return + } + } + restartGame(); +} + +function randomAI() +{ + var unfilledPosns = new Array(); + + for (var i=0; i<9; ++i) { + if (canPlayAtPos(i)) + unfilledPosns.push(i); + } + + if (unfilledPosns.length == 0) { + restartGame(); + } else { + var choice = unfilledPosns[Math.floor(Math.random() * unfilledPosns.length)]; + makeMove(choice, "O"); + } +} + +function gameFinished(message) +{ + messageDisplay.text = message + messageDisplay.visible = true + game.running = false +} + diff --git a/examples/declarative/toys/tic-tac-toe/qml/tic-tac-toe.qml b/examples/declarative/toys/tic-tac-toe/qml/tic-tac-toe.qml new file mode 100644 index 0000000..c60f2df --- /dev/null +++ b/examples/declarative/toys/tic-tac-toe/qml/tic-tac-toe.qml @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "content" +import "content/tic-tac-toe.js" as Logic + +Rectangle { + id: game + + property bool running: true + property real difficulty: 1.0 //chance it will actually think + + width: display.width; height: display.height + 10 + + Image { + id: boardImage + source: "content/pics/board.png" + } + + + Column { + id: display + + Grid { + id: board + width: boardImage.width; height: boardImage.height + columns: 3 + + Repeater { + model: 9 + + TicTac { + width: board.width/3 + height: board.height/3 + + onClicked: { + if (game.running && Logic.canPlayAtPos(index)) { + if (!Logic.makeMove(index, "X")) + Logic.computerTurn(); + } + } + } + } + } + + Row { + spacing: 4 + anchors.horizontalCenter: parent.horizontalCenter + + Button { + text: "Hard" + pressed: game.difficulty == 1.0 + onClicked: { game.difficulty = 1.0 } + } + Button { + text: "Moderate" + pressed: game.difficulty == 0.8 + onClicked: { game.difficulty = 0.8 } + } + Button { + text: "Easy" + pressed: game.difficulty == 0.2 + onClicked: { game.difficulty = 0.2 } + } + } + } + + + Text { + id: messageDisplay + anchors.centerIn: parent + color: "blue" + style: Text.Outline; styleColor: "white" + font.pixelSize: 50; font.bold: true + visible: false + + Timer { + running: messageDisplay.visible + onTriggered: { + messageDisplay.visible = false; + Logic.restartGame(); + } + } + } +} diff --git a/examples/declarative/toys/tic-tac-toe/qml/tic-tac-toe.qmlproject b/examples/declarative/toys/tic-tac-toe/qml/tic-tac-toe.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/toys/tic-tac-toe/qml/tic-tac-toe.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/toys/tic-tac-toe/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/toys/tic-tac-toe/tic-tac-toe.pro b/examples/declarative/toys/tic-tac-toe/tic-tac-toe.pro new file mode 100644 index 0000000..2e1fbd3 --- /dev/null +++ b/examples/declarative/toys/tic-tac-toe/tic-tac-toe.pro @@ -0,0 +1,39 @@ +# Add more folders to ship with the application, here +folder_01.source = qml +folder_01.target = qml +DEPLOYMENTFOLDERS = folder_01 + +# Additional import path used to resolve QML modules in Creator's code model +QML_IMPORT_PATH = + +# Avoid auto screen rotation +DEFINES += ORIENTATIONLOCK + +# Needs to be defined for Symbian +#DEFINES += NETWORKACCESS + +symbian:TARGET.UID3 = 0xEFDDF868 + +# Smart Installer package's UID +# This UID is from the protected range +# and therefore the package will fail to install if self-signed +# By default qmake uses the unprotected range value if unprotected UID is defined for the application +# and 0x2002CCCF value if protected UID is given to the application +#symbian:DEPLOYMENT.installer_header = 0x2002CCCF + +# Define QMLJSDEBUGGER to allow debugging of QML in debug builds +# (This might significantly increase build time) +# DEFINES += QMLJSDEBUGGER + +# If your application uses the Qt Mobility libraries, uncomment +# the following lines and add the respective components to the +# MOBILITY variable. +# CONFIG += mobility +# MOBILITY += + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp + +# Please do not modify the following two lines. Required for deployment. +include(qmlapplicationviewer/qmlapplicationviewer.pri) +qtcAddDeployment() diff --git a/examples/declarative/toys/tic-tac-toe/tictactoe.desktop b/examples/declarative/toys/tic-tac-toe/tictactoe.desktop new file mode 100644 index 0000000..e66569c --- /dev/null +++ b/examples/declarative/toys/tic-tac-toe/tictactoe.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=tic-tac-toe +Exec=/opt/usr/bin/tic-tac-toe +Icon=tic-tac-toe +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/toys/tic-tac-toe/tictactoe.png b/examples/declarative/toys/tic-tac-toe/tictactoe.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 zcmV-O4Y%@%P)ht(u000b3 zNkl+r+m%F_C;*wliAId+l;Bw~NnREVgX6DSfv+(~Ms$%J>UH~1TiKG?i==6q;ABhC^ z?Fa;PP1zvRpk{yshy{xNzW=_}wlshM$8bMz0ywE)|E?{*$bARG!R}74&+E~=fBGSCH_q~3rZLE`kFZF`Zg5p_(F9S`V+!f^EBN1AfbVO>l zV*?2wmM7*K$N;DTgsUiqL8d@0kV=|_n&`jpzizedO9)tWdFTh8K`^#$^77P!9khgW zY!Rx>mStcADTf#t1$7O$0t|o*0XKn3gatG^hba2{-neB1+ztE?*sLjd^k^HO+7rUI z#U<*@0G0o{w7eb^h!lqynFTclTrU#CporX1FqyNMH+0Ern&N9m&#V&xj_U(F2mB2J zt<46%_t{NEnvD|IFZF~~d&Uw1T_g&S##v*=ONjw)029C*A{l`GV{0SE$m`(;jw}{N znskEx<>q}Q<12YZEl*LE3Ih306gaq~kqj^oOalLlQhy0dt;u@8$p7^Lt&4>oL!oPx z#8s8=%aut5!dB!t3TKe~K&L~H1lMXjK+#OKRHI5GD|IzkUH?i3OO@}-LaMj9G8lz# z%l5CTmMR6d2)5Xi&TXYMH@9`QFE#2K3&XXz*HoZoHYmE}} z2gzCqV(C$)Qa4CsW6qOGtI%%!WV`fQi$l5ySZr*mjmtm*mMy$LnBc~UpU3Zbir>EL z5q7k1!|(B;ltK`4R+^dg2p6W_d^>jD_u(zaPCr^^8@hrk3G%j4n9z3e5I$h zHt*%PdcQ(f^FBoE0!itt&AS&D@SD9H-ToBEcllZB+s zk=+N-HEn5kb?LNr0_tj96^ef~kie^2ICbnKhHki|lDRofU;aApOn#Gh#$V=lzx5aV z$Jx^^nO%`X>~HULygE0g(X z`b{py-oel{4)1Lt5=ryItKVXDcD&f3()r}32l444EK3-kNE2=Dpl9>WCG-onSlD9c zr%N?M8yN>I$G3v%iKcWshT`^}P5k(+E4)4M9*-UV z&4O$+)XU|82r~)zlcQfDWVF&5ZZFgaJuU2x93q*UBV#3rrAM(ON9|alVFXl)&YX@% zrn2~rAcuB*qU@=(8D~0mGavLg@|)W{pqZSz_G=dbK~FOQb~8TtAx|87jOIX-tF6w^ zE}q=qk0lm!nQ>k||12}9;gZF6-KIckC(i%2z(g#|rlvN!+qYIAV1cALUyv7|DWDVZ zX$(wW$FeP#{K4*hcr=|#P$&$|hffa@Fv3e>f?B$+m4Id1%9%neo+H}QK_nQiKtO_= zl`f2u2zU)e(5EpuKSS2cx#Vx(wu^As=Cu#baASJJRhKn0OvcBFC8vpJ=CQ?My|Bz# zz=^_Co`6)^qH{|deviLQGGit4^Rx(EQ~10ZbLj+GD@TChb9=j@^z6)V>N`*Kk5B$J ze{}qdg}TxBWxn^(KOkbGYZ?h_s*YG=wFFc=3zU$c6s9F)Od%3%#;D-BreyPxTM?QD z9z!FUO_9xIol|}uej|j>6Ch{jux$5pqD;~k-A=y!k1x!=$7+wtBz2KR47Sqly&wN$2gymjWt&D)GPzc~L zAmG!PO3acmvt?3VJ(xek7m2e4a;8m_*N@k56OcCJydSwcE%(-LUHTXJ-cXJh2-bmfHU`sYDbPJpf{I$AtTF3d1C zH&IsaGnxn(&H4YF1v8Tqk{O%MaC?~t#L~l6(YG zroAqg9-GOc<1ITrCv$U*#4lBy$A<1jDGgg}EZeNG>nIwv2-NKXBF;O*?VUc}xNw${ z*m#*_PwU-;JgtCDCMW!QFwTLkdpNTDPM6%s!bPT2Hw$NqtmQsLwFSE9^d4klv>kuu zZd!fa1c|QgD-B(7M^6)jQ&;)P2R|#5j5hUhWb30~dpLW3j%=!huYUfIUD+N> zOg@-AL&i!H^y~OMFf=vnYA0y4aPszNc=n-}`150b%a-Pyg-mjzVN^c`m%|q5>GIPZ z)p_a6zw_{cV|2Afi)<>LquYK5zrCH-%oUz{_%43qwmV&I49%Y7;>=qpG@632BkJd8 z7tS&=JI>a~=7L-}5GEW5uWK#(MxIsFk7E1)e|s&!n>Mz1-0J+_UopfA-KH za&OO}CBYF)r*3lQ+IL8s3xE?@_8p8cZ(Za0(=T#kW(3nRvBe^5rI<=y=iJzj8B1J2 z)xTk_2vt0wIwK;&mJTnEe7cPvy!#3vUx24S_hs6eA~m`ZMiwsd)1j9bUbs-$5k#P~ z)x#6V+ZdaEotMsDX783=1ie1uxfx>V5#reyZ0s7Z)YeMCilGpJ-Ccf~Lpndd_+765 z+a;d7>m;AnImz;OWWy}P>n)oTRnX!^lEY3ZF{6#Dc zP3eWtdbxc=2v{URq3CS&v1OCaF9zOYVEn2}rp4FECpsQLQ$~gR152@@J>5iMHTEp9 zmbgOTwypq)+ybwkf6Hx_(&+2{0*~+cD~@)35x?GCF?F^=+yrLVZhq-;c$IqD0$m+m zc5U(T@;g7`=FF(8-fuK>pz}eFZ2dewBe?pGiugIGL}Lk9BRn3({hx|39KXWzKl+!7 zC&mJ5-bPt0t45OC0A2y;?_2xbL3dhw4R4!7U~7k$#~*0t+{M#;_4_fNIQ%GkqPqzC z{Fru@iNqkLopCayuA3jF3DBx@F$?M&px$p>POu^EIL3&;mUb_j@9_{%y~nH9KjiJH zFn*68OEP4v6sDamNuAY`{8WHU0^b1jB8W8VcDg$bSTz|%BSf72I~;Uwcw}XkOeQa- zN>|#7#+$$bFbQ%K=Z5G-Q2zs*1I$KV%`Xz*a{tmd#PwW{T{?%<;++x}lOt6OjpN+* zyh-s&?Bdn?QBX0Q%hnAW@#+Lr-J9yYq*QhOS|x@K=8e3ZH*^eS1|bPb`j36QKfG8Z zAP&3?+zy0mKT_2r@`lPZFbrxaZ{(t(qreQ11hK(Sf8VPgtFe^{`1WNu)oTGS0vV9M z1KO%TqAZ*rM@-}VIAYK-Qmz0)j`740Nr19ZN&5TVzSVZtAOOgdU;^L7B5vsF1ravm zc*acLs3D53I|MQUY8q4m3!7f(?^>Tb{p$($g#A)4e1B9s{@lL%?>o@kZ5V1WZ~Qcn zz|bu+Ir<-X<5ugvfemb60~^@D1~#yPwc`H(pHeSaefwW^{L9a%BKPWN%_+ eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/toys/tvtennis/main.cpp b/examples/declarative/toys/tvtennis/main.cpp new file mode 100644 index 0000000..e4c28e0 --- /dev/null +++ b/examples/declarative/toys/tvtennis/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/tvtennis.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/toys/tvtennis/qml/tvtennis.qml b/examples/declarative/toys/tvtennis/qml/tvtennis.qml new file mode 100644 index 0000000..805666d --- /dev/null +++ b/examples/declarative/toys/tvtennis/qml/tvtennis.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: page + width: 640; height: 480 + color: "Black" + + // Make a ball to bounce + Rectangle { + id: ball + + // Add a property for the target y coordinate + property variant direction : "right" + + x: 20; width: 20; height: 20; z: 1 + color: "Lime" + + // Move the ball to the right and back to the left repeatedly + SequentialAnimation on x { + loops: Animation.Infinite + NumberAnimation { to: page.width - 40; duration: 2000 } + PropertyAction { target: ball; property: "direction"; value: "left" } + NumberAnimation { to: 20; duration: 2000 } + PropertyAction { target: ball; property: "direction"; value: "right" } + } + + // Make y move with a velocity of 200 + Behavior on y { SpringAnimation{ velocity: 200; } + } + + Component.onCompleted: y = page.height-10; // start the ball motion + + // Detect the ball hitting the top or bottom of the view and bounce it + onYChanged: { + if (y <= 0) { + y = page.height - 20; + } else if (y >= page.height - 20) { + y = 0; + } + } + } + + // Place bats to the left and right of the view, following the y + // coordinates of the ball. + Rectangle { + id: leftBat + color: "Lime" + x: 2; width: 20; height: 90 + y: ball.direction == 'left' ? ball.y - 45 : page.height/2 -45; + Behavior on y { SpringAnimation{ velocity: 300 } } + } + Rectangle { + id: rightBat + color: "Lime" + x: page.width - 22; width: 20; height: 90 + y: ball.direction == 'right' ? ball.y - 45 : page.height/2 -45; + Behavior on y { SpringAnimation{ velocity: 300 } } + } + + // The rest, to make it look realistic, if neither ever scores... + Rectangle { color: "Lime"; x: page.width/2-80; y: 0; width: 40; height: 60 } + Rectangle { color: "Black"; x: page.width/2-70; y: 10; width: 20; height: 40 } + Rectangle { color: "Lime"; x: page.width/2+40; y: 0; width: 40; height: 60 } + Rectangle { color: "Black"; x: page.width/2+50; y: 10; width: 20; height: 40 } + Repeater { + model: page.height / 20 + Rectangle { color: "Lime"; x: page.width/2-5; y: index * 20; width: 10; height: 10 } + } +} diff --git a/examples/declarative/toys/tvtennis/qml/tvtennis.qmlproject b/examples/declarative/toys/tvtennis/qml/tvtennis.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/toys/tvtennis/qml/tvtennis.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/toys/tvtennis/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/toys/tvtennis/tvtennis.desktop b/examples/declarative/toys/tvtennis/tvtennis.desktop new file mode 100644 index 0000000..e9ca1b9 --- /dev/null +++ b/examples/declarative/toys/tvtennis/tvtennis.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=tvtennis +Exec=/opt/usr/bin/tvtennis +Icon=tvtennis +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/toys/tvtennis/tvtennis.png b/examples/declarative/toys/tvtennis/tvtennis.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/ui-components/dialcontrol/dialcontrol.desktop b/examples/declarative/ui-components/dialcontrol/dialcontrol.desktop new file mode 100644 index 0000000..d12a374 --- /dev/null +++ b/examples/declarative/ui-components/dialcontrol/dialcontrol.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=dialcontrol +Exec=/opt/usr/bin/dialcontrol +Icon=dialcontrol +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/ui-components/dialcontrol/dialcontrol.png b/examples/declarative/ui-components/dialcontrol/dialcontrol.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/ui-components/dialcontrol/main.cpp b/examples/declarative/ui-components/dialcontrol/main.cpp new file mode 100644 index 0000000..f5f5508 --- /dev/null +++ b/examples/declarative/ui-components/dialcontrol/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/dialcontrol.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/ui-components/dialcontrol/qml/content/Dial.qml b/examples/declarative/ui-components/dialcontrol/qml/content/Dial.qml new file mode 100644 index 0000000..2f1d27a --- /dev/null +++ b/examples/declarative/ui-components/dialcontrol/qml/content/Dial.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: root + property real value : 0 + + width: 210; height: 210 + + Image { source: "background.png" } + +//! [needle_shadow] + Image { + x: 96 + y: 35 + source: "needle_shadow.png" + transform: Rotation { + origin.x: 9; origin.y: 67 + angle: needleRotation.angle + } + } +//! [needle_shadow] +//! [needle] + Image { + id: needle + x: 98; y: 33 + smooth: true + source: "needle.png" + transform: Rotation { + id: needleRotation + origin.x: 5; origin.y: 65 + //! [needle angle] + angle: Math.min(Math.max(-130, root.value*2.6 - 130), 133) + Behavior on angle { + SpringAnimation { + spring: 1.4 + damping: .15 + } + } + //! [needle angle] + } + } +//! [needle] +//! [overlay] + Image { x: 21; y: 18; source: "overlay.png" } +//! [overlay] +} diff --git a/examples/declarative/ui-components/dialcontrol/qml/content/QuitButton.qml b/examples/declarative/ui-components/dialcontrol/qml/content/QuitButton.qml new file mode 100644 index 0000000..cbbf916 --- /dev/null +++ b/examples/declarative/ui-components/dialcontrol/qml/content/QuitButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +Image { + source: "quit.png" + scale: quitMouse.pressed ? 0.8 : 1.0 + smooth: quitMouse.pressed + MouseArea { + id: quitMouse + anchors.fill: parent + anchors.margins: -10 + onClicked: Qt.quit() + } +} diff --git a/examples/declarative/ui-components/dialcontrol/qml/content/background.png b/examples/declarative/ui-components/dialcontrol/qml/content/background.png new file mode 100644 index 0000000000000000000000000000000000000000..75d555d7abf44af7da22caed978be498ef9480df GIT binary patch literal 35876 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 ST^L&c0000 literal 0 HcmV?d00001 diff --git a/examples/declarative/ui-components/dialcontrol/qml/content/overlay.png b/examples/declarative/ui-components/dialcontrol/qml/content/overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..3860a7b59092048eeb1e0ffe3b2ee87af95f5177 GIT binary patch literal 3564 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 Vh5vkKWu5>4002ovPDHLkV1nYy`N{wQ literal 0 HcmV?d00001 diff --git a/examples/declarative/ui-components/dialcontrol/qml/dialcontrol.qml b/examples/declarative/ui-components/dialcontrol/qml/dialcontrol.qml new file mode 100644 index 0000000..c66dcdd --- /dev/null +++ b/examples/declarative/ui-components/dialcontrol/qml/dialcontrol.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [imports] +import QtQuick 1.0 +import "content" +//! [imports] + +//! [0] +Rectangle { + color: "#545454" + width: 300; height: 300 + + // Dial with a slider to adjust it + Dial { + id: dial + anchors.centerIn: parent + value: slider.x * 100 / (container.width - 34) + } + + Rectangle { + id: container + anchors { bottom: parent.bottom; left: parent.left + right: parent.right; leftMargin: 20; rightMargin: 20 + bottomMargin: 10 + } + height: 16 + + radius: 8 + opacity: 0.7 + smooth: true + gradient: Gradient { + GradientStop { position: 0.0; color: "gray" } + GradientStop { position: 1.0; color: "white" } + } + + Rectangle { + id: slider + x: 1; y: 1; width: 30; height: 14 + radius: 6 + smooth: true + gradient: Gradient { + GradientStop { position: 0.0; color: "#424242" } + GradientStop { position: 1.0; color: "black" } + } + + MouseArea { + anchors.fill: parent + anchors.margins: -16 // Increase mouse area a lot outside the slider + drag.target: parent; drag.axis: Drag.XAxis + drag.minimumX: 2; drag.maximumX: container.width - 32 + } + } + } + QuitButton { + anchors.right: parent.right + anchors.top: parent.top + anchors.margins: 10 + } +} +//! [0] diff --git a/examples/declarative/ui-components/dialcontrol/qml/dialcontrol.qmlproject b/examples/declarative/ui-components/dialcontrol/qml/dialcontrol.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/ui-components/dialcontrol/qml/dialcontrol.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/ui-components/dialcontrol/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/ui-components/flipable/flipable.desktop b/examples/declarative/ui-components/flipable/flipable.desktop new file mode 100644 index 0000000..640d99d --- /dev/null +++ b/examples/declarative/ui-components/flipable/flipable.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=flipable +Exec=/opt/usr/bin/flipable +Icon=flipable +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/ui-components/flipable/flipable.png b/examples/declarative/ui-components/flipable/flipable.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/ui-components/flipable/main.cpp b/examples/declarative/ui-components/flipable/main.cpp new file mode 100644 index 0000000..c4ea8b8 --- /dev/null +++ b/examples/declarative/ui-components/flipable/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/flipable.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/ui-components/flipable/qml/content/5_heart.png b/examples/declarative/ui-components/flipable/qml/content/5_heart.png new file mode 100644 index 0000000000000000000000000000000000000000..fb59d81453affcf40f5925a63bda3a8d4b40d646 GIT binary patch literal 3872 zcmbVPcQoAF+Ws+mogm5(Li7@ykr^dIaD)*hT4D&Ihf#-UlMqCi5Q3v67@|cRgF_IV z$Y{|?^p@x)TH+h$-u0ck?w@zBwfDRBe)ryg?03J<`#dp5hB}ON5IO(=81;0uj7c_u z)LUq%NaIksH5=>q`VKo z=j{jt1O!}ndFnE4hI1C9r- zl4HVGx3)Mw+8W7h3Ue~N`29Qd5)Fj_rKyO`16&odNRJ2Re@9YUI^zMd^C8K`+IJ;r z6W|lPz&X`+j>gsSw{Q9LaX5_KJyyEN?XOR^=GI3_fNdAZyK8X^UD#^pv^0`??r3MB zHz$-i{G4nY!a!B&F{QNU+G&y9)1$YzyiDF=!o2zy&Nqqc_GN4r2(T#RFAUw1)a+`@ zg50KKXS$|+rf((~O#9I0qZHFMO8Th8r;%;CA6xD6ZRcc+S6LIfs^vV!f#g(>4wig) zSgcsUUV9#);{3tq#~zugs)m6MVG7WX7N=zSCu=T?2S&Jtu!dTp;F+iI`c7%n zl)q6a`{s?UM|Ndp%5ly1EQSzVQvbx9cs)_hWNoT=r=9;dt{AV-I5WYeidg*JedY=e zekb+KHCqiQ_{=@MXy0Q5Jr71g&CKRD%A3e<+;|sx>1inJhI1JH%vH23Eiu39PGLtL z*}>e=mt?S74uLj%0jv7!hH!}fEH#6f2fh&Nw)BWaVkcP3`w9h(2j4L!U9ce@ZImeh1ZlOUmz&EThVqVofcXX7jD6wE zA}cSi_}hE|kG}V|3|rmE5PZm0VNbn1>DKc8K??_RfQ3A=US+b@jbmw|@|pYV)S3}N zdDhkMv0*v7R5{pS?!crhb}U_`wAsPIU`FqdG5_+4Sjy|${U*rra>m9mWc2j(qT)(@ z{o=4>CVRgG+lO{`Lu5|S)hkz$zwGWGtd)%9>1eWD779&@ebJpd0hQu?s|_6)S^s$S zi?qSi{CoMtk5X_=&8|p2;dQVDWmE?%5*iq|PUh%fWc=w>s)%_5PKbYUazAI0pj1@@ zVR|9biKYZn6+dnk{*AgYNKK!y;O69DVpS>qi5wXw6mL6yaHhnkdW}_vb0R@ zx;_r))t0V|S~xzA!Hy-(JL-G29x@A)RKC7UfG?CAcV(ixyEHkcdwf;wY9Z; z{m|0-R88!W1MuvbhPHNYu1!xYhlU=l$F~NZa?472r8u1_`YH+W@U3QQCLZARYkZ(h zZGwA}6eQg6N4?LSM}z$W8gJlzxDP}zcOlKT4u*y!KY!LM6|fgdX4g6WakMQnFivyF z@V0uB2e;p*@!*im>zn6vEidS1JL6YdjbNQnmS5jd*{XRW+{s;`^mMuko{fpQ;&S&i z&vD{OQ?(e4a6-8at_B(>p?e3aadeqGidm%ECay#8K50qze224hw8D#1%mNz6Cdu6gA{qJtCR4+~bHx1lS-{`N1Iv3X2pCD>xau8@|gPKaT{2PLBe7soFkP+Mvw_5J) z1EHtaR8T5z4t-x`9G#e0L%4R$_s(ZRWn!-vbYNdxxo~?7x&OysCFTn&pNR#j;*H0` zzkW@5?i)u=OdJs~z=ziBs;ZSIR-6H<6ggIc`Sl$939h$|~=_W*y1 z=!sfh4&Ru z8K&E(D|s8eW!B#Q0h^r2f_SecFJAb|>V_v{M{*t!d#6w}zU|Yk&e!#U)zeFZRCR?| z)~%U7L$P7oOzF%fE<>kkUU4SR zo3|h9b|DZRi9dBSrFj6TcYC^HdNeGe+KG8!DCxx8%IcjY$LyI}LhBj4;)(M1ww>!4 z$K}C%XMFkT4Vs_(C^k8HOq1H5Pj!{l_>TSSoCQ!=F90HZzDxfyBLkjuk;Rm^wsoh4 zcmUDsRL`HU4kd|dYcH16K~YGhwvbjbXYJW;8Y63otvph)x_`@V44R+`prZz=s>1bC z!wE{i2p%2|87V1eK@$`|^7Z%T zQtuWQ$Caga*v@G!G@nztx~^s;1k=-7mOg1X;#3Z*z?%)&yvW`^X6Lp45)?y!z+<(m z$=QjnuCC#%BCTOL(3_`em$z}^5NR7gNC+RY#am(btp1=9+>7fy#&&gA*nzw@@1rv; zLAB7h>vcYTf)xK%sQ>rxd{O5AIbAz6k}{Bbc7%Z|d!H(WRC2yy9@w13O(Y|I=I>>z zf_i(yD`ig_-T-wd5PE^pVEIh2kUKq-Vtu_em(020eL})oc;o{6^Qa;m7w>3*B$XtO z^1v{t@w_RhL{3F7Fepf&9*^X6vJDUYxusmo+aoZtbN??29w;Cw9BOt}oJE0yfE=ZJezSRsR&V`G1ha$}ymUsqA3 zf=y|(>2>pqixW{*Ma|_GmZRJ}<|L(P2S*Fk2mXflNA0gt3pZico+VjjH#RChE|bWd zu;h1jTRPWwb?b>Tlaa_?clB!yRTrv(kBqoYTbV$yytH>slhLf!rdmyXoqgz&lP@9u zzNF$YJXYITb`arn-UP0%kI8WmT3Sv*D0i74`DV;riokn&$$#kQtrV4G*N3cHNtA*n zM>4qDnNUcPz-Iltgb%Rf;;L2}IMb|PWT8Ho%lR?Yqeu5P!;X`9 zvGpj>>IUxKoi=6N&u*yF(A=^`*q~ftVP5PbMS1yT#H~+lt(DKVv_8T8#3dnEYG+UC z+d3Gd=+LPt7j=ze!>pmj(ack5hB9|R|1G@?*}H=$Jl{~| zWx+ap$|HsQayT#(y}m{kdO~}2>@?f2j%n3gUsG1@3VYSo0!(1z2N}!8kcH;{Kc;jJ zU8t~RrR@Ft3fn~3&K8dj%Pr=^U~9^2h|>CEiwdu_W>O&6A|%XLg>xoMJMspSi!n550KF~Hul=|v%H2(rP`zaOTU+T|{>5MOK XLrm05vU7l>W&u5IL#_9kwom^L)s-GF;53)nE<+#?8dVjT9@xf$cM}CU z_&ZSilo4!5y%bdqD8TDE1tJ1`ru0xT@q$3E7oWc`Sg^&jgD+XVm7jR)yW4sDT6x++ ze0_Zd9NnC~Y^*$N1>8ODQ-8~{K_JZDs<1}}Xv{`hpbq2SNyqH>=AReY+3%9(aXztj z6=e*$%trhJ7~7$C0ZMaRd}@$vC_ z%KiPo3dx3ym=qdephyxfF0Q_Q9CLWh|^GYZ(Dhf5Y>_JaY|8job zdMP8B`UNM1Xl`zfbrJTb<|AnQc zTLJ>K)U99D&CJ;UZf)sWS_+zcm0k^npz8{JaGAT+j7&`5ypoHvSbAnB*76G)8aUOH z1Qs`18c#OdpOhkA_X>>YO4ex`E-o&v+b4Vr?dno1ud1@~@VL6Mv61)XOXxR*XKj6K zB@tbaBI_p-faVhv^sUwO^OLIWUig;4BdxNUcj1qmq0|*kh{wtR&yxr5g(txoZb?ZU zsPnG+I;6C(TzZ6O<>Y+q;IRC`)or#R=Id9XUH56|L_045EkZiG;Z1VA`2^aOb}K5D z_GTY6EiFy2{S(78w0KY8-gHM$5f+;u#*)_5j75rwh>Z2}@bHXPx?Y!-mY(x~-loxj zpP<(}99>)(WxI7;ip+3|U_G`A-26q9HVkRd5_Xt?q#$RYzP( zsHlE4AM$t~*=(DVnyT#h^m2JlhdV(`T>Mi(LFCEP2ZZCJ*|TeAzlQSl&(B~wNJv7) za>_-vv?xYLM?)ZYv@j81UzeoTZ!2d`BqSu{-@|ToLc#uiZ}4fz#Y?m|6%=kzU3<{< z?!NKZrlk8!bYdc-E{VFP=DX}@GY8GyF)4aC4~~Oh^Pj>wTY7_bMH?@A>gnjbsH~KD zWXl=2t=m7re7$hx0(wfZwbj)I1|u~zGJ4zk^Xg9J=ISt(k&dqUXm{8}VsK||R5|96 zMtNoj&*Pu?k|z(g$86&I!)UJO)z_Ps-dtNsJw14ENp#H2xodQ zGZ>zp-XMPcCPclnz5PdiVY<#QAxAso_m-9P?c1=vT}MYp@3j&B;Mjpj+2K@4Ec=#( z&$+o?m%nv(US)@Qd5IR6r0(ydog5rK*3?M*nA_OgN|Q!K8qcbt(a^v@&6i#hsC?vp z|M>Ph=<5;XF~#Cvz$ zB*S`eC;HV%x5-{L>w-6w9lcR8+Sk_y0rzB5X4i}mu{t^2S^v`5*Qb-1nE0`*jKRJK z^T@^J!8LxGUU(AXkl@YOHz`VjEw996v+*Fc6NHQ zPTiU&<2#?9n@$3urlI+{+@G~S+Iaek&=F^YMzgT8vUdLX(Z--H+bly{(wD+%Tu19k zOGDES$`KC@Y6+#x!rQQfefsm~kMJbu0lK}-wBaFkz3JT}8R_YqeZ^NO4CDkFO9BWk zV_zTjwWriBW+z$D^Up;_Mhfqoo$fU<7Y5-d4dg6h2rG&oHs8K~e@E@>(<(Pqz$hI( zy&~9S%BGQ`M1TWqM3RpsV!t8&%Jh|%iWF}ozI%5t9cxBf!?{cU3e_ve+=0X4pvZaB zV=h6#D;=>MTUc5S)KBqulLdxYC{;&W+f6Ys#>ZK7MBr!NHBC*; z<;_jFkBDXXf<_{2ogIW3E(^!V`H_K@%_Zt zFNAuAvBtV4Ca*zXjlM2PtE#GsUWkYPS+hK211_u<&dXA`OgDAmF7H3-ua7NA%&$D( zfFv^TBe;E)sr(Jx+2zXouOf_+Nd9+QXv+=sI?M)lPVTJ8fmh)BP49RXuILsb%iq5? zbM`lI#=Lw<(ri0~`Ohbr8%sd zv$wvwEfe$KYn}R3{olQ6kIG_uBj4r>KM|*)TjG)INY0>rtMOBrwC@Ai>QV%vZ+i5^ zwhFMCE*7|Ea%cMo-mE)vdh;$%OZ4B-`>o&6_#k9A-JL2)Jl^WvTD{N3eZ1eH;1e*R z7sZLw`2ltM1``;OWvy6_r)rPRdatoy-JPHt#VMt`zy{|}?qpzKAgfCI@FCAsPLDtz zB7*1AgWvfJN}^f8Q$r)#X-6f7FIwsI^E;lSX06YYe*DlFUX5q7XYa~hZcsNex+cFr zchMrbb2f0#ymG2P3r-x;*X9D?b6(6+41SLuU6`1dAZ=fFOphM$Ux4-BqP6_o1q<3) zH3aTD7g#Qw+U+Wg-_w2N#~4>J&BBs%{kaw8U$4SF4R)sa+~GDY9;Yj;9CRrht?v0vXhUrCe8$@YzoF71eQ2~jU) zm5z^(L(zXeGJZm4Zp*UbbWoR`85+Lp!0`b-H83=6H?eTtLP)qyz^+BL6G|Ni@7(jr zzFX~JScQy;*j*o2`t<3OP0(lHt`lYUaif2oQhD_a4BAZKy1MZ!wHhKMT~HWI#%GHwIOJ6K5A z-YE`FYdGk39{_aXHPIM+mKU8pJUr|oBjfuUF*;j=iaG_xt)r?+31~Hb*eQD{BRJjX z_mpaDYwJsE9BS>_bnw}Ui_Bn-rapo%PX|LR$h^_vRz(;#wnWJgR{$}||F9E<%n1e` zP&Mq;Z(e}x{+^Cn{GN0X;s!cq)ojq@Mq6$MkRFSq8~f&y2#Vz7|Va z*RlJ<*A(GbZunsBK}&KeNZ^q1nM<}$zW@P`&#FC=$%TViz{~^7D<~M}%dR&!ie+kV zo6JKwIq?N<_rqbZq2b~7qRr*yo7|bZyFO~_>VyXhHh60P&H6ob2Vqk-85G>W@xhi9 z!KB=Q4wx=C_u)c<_Sg=f1>Q`VgEuz<)`ffi0&dI#ePo6h5u^T~i#6QcCmg7$AV2@p zbgggM8ZD=+3JnbnXjAp%{Nv8}TW^QEm2GUY)?KA_e?Zj`G)bkJg)79zI=0yAz@th8YHw#p z)ku=rxX3KNUX%AxMxo*Z&_wx7rp*utMCVLS!pANns|r&dtPB9=(wgC+ocobeh6gfE z{N8{u5ml2sgW#o9Qc_a7BAl$TJ#L?&nsW{%Kxp)WwkRzK4|`x0QV zi`LNAzM`k6hi>E%;N~Vt5-?YEarx2~e}Hdlg6Qe%_fJlKcRtG3&z&d4Dd6{s1fEz8 zmV#i}oVq%*J}lWKa&jGAT`nuwX^HEk#7xeG7rpXF)W99y2yvh36e3R#dV?m8ayUyEM$Ul%Opi4_0jBmVgzEeInGmg?2H|-`fIm2 zQ_mR?*KH@dF;o9^MMw&X&!0%QF(xM`_gL=ZGB7sIDlDV{rTIbBp0>2Cj0jZM>LA9) zk$F@8bl;}#^l%Nm)h&rU_-h*)7B>ISCC-O{s?^lf-hf8x9f2X${Hr3a1Y6$NP&P0~ zTn)Qc-FFU11vjt*x|06~lPIU5kMKE~sZByZ@@#=Q$`5C+(mv!M-s9)DmH7)yi0qy6 zO%!Bxzh}J6zJF*a6eMMk3vK}>24n(|3i6_-M+*jrXJu!Tb$53QrFK90`s@Ozjj55` zlxQ>Q0bM;kkzcq9;3#jq?Xq~(-|K*$Jig&$TI0Qv=NkR^mg`h?ziXPnGZ2E%R`tK^gb$7SFX5c+8xb-irUat^%7RD|CqG>?^U)-eZ z-jvr}KEAj2xX<3GYa19auKUzlqCRNk2(LUPS!LsWBN|_;L@T$lvQoEn>cJ1Pip?tO zz~ThYb$Lo-!AzylzBP;{==u_%Z8m-PCRSb@(ReSeiu6yPxKcp=Wf29SV>M(mOx>!3 zM(=;v_+o^eL}O;L^A$>Mw-|8!4lpEAIQ8|hapU1|9;KO67p#a}&dSQl!O5w`xwt+o zER1~2MdC+_IMtm5N+7h3&Q1zQ(=(xu)zvIut^xJ>MGYig;?U3i#SAy#TqCC(2Q~c; zE3%UVVaRO_!4g*KKHGz(P4etwJx9>tqK-kbEdYLIC%sr?k!9oW3eKh7NKI@XfYypNfIXaLi9N}p@IPCJfcZcP+&Kzf-d-6DG3{L$ z%$?3@PX&P|P0B0Gm_uMOQ8*TpZ=M!4?n3J?_y5uFIYs|1|0^pb^v4LkS7fB4$iz?R+k9H?Xb z<zj(P$}CTp zoI%@YoS2xHlmkDK4myUSe0>wT?QFEMW_dHvggct_byUwwt@Ok-6;9v1z z^5nT>BqWwNFgUn^TT0IYa?NgKh@SG_XS)P>6&l)CyV{@h#DL>n7$Brr zwb+%FWN^@4s;Q~bv9ydst&RKyc@FYo6ZEKkkf2seie8As#=1wVX|@n$8jt^e-(M6A zri7@dsVTzY;T<*J1kwx7qrE`r(MXl(Uh}CzzNC;ppY?IR+iprl8cbfuyCn$J@v?F> zh5-Q`O#Nft`^pV-GYgAV@ADTp|94;m>q}siSv6T*_-11E558v84gqp06>SjZ2?R9|K^r87#64c}u!Mu+wY3=uKpP+S`3w`7e zS6A10<(w>4GueS_Bp;a|U0q#bdx8fL zSC+x=Urfr#0pLRV$mSfEl#%kkE%=`n8iDz8HW)L1EB=cb(lj<^9v&H)Ibw8@r<=y5 zW(sx>Qc7|t9%c$w6Jnm{TC#ZJXzW?=)X#WcXh6y?v?=j^SZPm7%{78B!Pyck|nMYCBgY=CFO}lsSM@i<$9TU*~Q6;1*v-ZMd`EO*+?-ku(Er) zIEGZrc{|H6TRL5$Vg6)aBN0&_&0}potvoZEA0C)Iz2bY!3;7c{PZnmX{crfgnZEaa zf`Np8tW#L>e60+_gR+mLUcOd19T=j$%6_@W_3xDr*j`^Ocoz5W_d82bO;tA$*Nsej zSj-xpAJ7t-DObQG!<--FCB9v4>5;P^a+sexeEP8Cu?73K{O74T8A20IZSn~XUAk-C z5<>p_1|E-+AUPt0@o&DQ)@A~dnhH*Vee^44Z zO-4@cQr1?1nJESm8+PtIdGVs)fz@J%dkyCL9bY(c<(4R2tGVZ1obP4&!5gvm^{lO1 zxBi?vQ^)3R-t@0uOB>=27TlG}o#eXDBT$4v=ls7%umAr^N%`pU@~ZgW*-|GD9h|5m zBXct8nOyp$$n5zhlYhTU-TT->?EAjQJs&b(|95=H^+?uzljnge;xQjiryt*PzP#+- zve&Qu^*z?F|DBosd~KcM-!-o-doS*(I6hG)ZC}xhJEwcD9l7}Y?KfoxJ^lZS?$#Z- z6(!w}_x;m1D(k*`eaeg*9vMCo6~TwZ}It0WimjqS*^0_3&5&?I#~_?&AMIqB@!sV{jtYph$8B%w4G69v? zod(L6$z+N_Oabc@VzBme02-cN3AX&~A&4np^O+#d`lSQ5d`Tq46o~l@5NFMQ3U;;$ zH^daM`J4?9XKmgCa`wcu#8J=TkGTg2tLKR8*D*Y}yZgSS?cW2hUYR>MuK%v?KdA$EEHY +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/ui-components/flipable/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/ui-components/flipable/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/ui-components/flipable/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/ui-components/flipable/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/ui-components/flipable/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/ui-components/flipable/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/ui-components/main/main.cpp b/examples/declarative/ui-components/main/main.cpp new file mode 100644 index 0000000..6679628 --- /dev/null +++ b/examples/declarative/ui-components/main/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/main.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/ui-components/main/main.desktop b/examples/declarative/ui-components/main/main.desktop new file mode 100644 index 0000000..157fa32 --- /dev/null +++ b/examples/declarative/ui-components/main/main.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=main +Exec=/opt/usr/bin/main +Icon=main +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/ui-components/main/main.png b/examples/declarative/ui-components/main/main.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/ui-components/main/qml/ScrollBar.qml b/examples/declarative/ui-components/main/qml/ScrollBar.qml new file mode 100644 index 0000000..faa501a --- /dev/null +++ b/examples/declarative/ui-components/main/qml/ScrollBar.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: scrollBar + + // The properties that define the scrollbar's state. + // position and pageSize are in the range 0.0 - 1.0. They are relative to the + // height of the page, i.e. a pageSize of 0.5 means that you can see 50% + // of the height of the view. + // orientation can be either Qt.Vertical or Qt.Horizontal + property real position + property real pageSize + property variant orientation : Qt.Vertical + + // A light, semi-transparent background + Rectangle { + id: background + anchors.fill: parent + radius: orientation == Qt.Vertical ? (width/2 - 1) : (height/2 - 1) + color: "white" + opacity: 0.3 + } + + // Size the bar to the required size, depending upon the orientation. + Rectangle { + x: orientation == Qt.Vertical ? 1 : (scrollBar.position * (scrollBar.width-2) + 1) + y: orientation == Qt.Vertical ? (scrollBar.position * (scrollBar.height-2) + 1) : 1 + width: orientation == Qt.Vertical ? (parent.width-2) : (scrollBar.pageSize * (scrollBar.width-2)) + height: orientation == Qt.Vertical ? (scrollBar.pageSize * (scrollBar.height-2)) : (parent.height-2) + radius: orientation == Qt.Vertical ? (width/2 - 1) : (height/2 - 1) + color: "black" + opacity: 0.7 + } +} diff --git a/examples/declarative/ui-components/main/qml/SearchBox.qml b/examples/declarative/ui-components/main/qml/SearchBox.qml new file mode 100644 index 0000000..f54954a --- /dev/null +++ b/examples/declarative/ui-components/main/qml/SearchBox.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +FocusScope { + id: focusScope + width: 250; height: 28 + + BorderImage { + source: "images/lineedit-bg.png" + width: parent.width; height: parent.height + border { left: 4; top: 4; right: 4; bottom: 4 } + } + + BorderImage { + source: "images/lineedit-bg-focus.png" + width: parent.width; height: parent.height + border { left: 4; top: 4; right: 4; bottom: 4 } + visible: parent.activeFocus ? true : false + } + + Text { + id: typeSomething + anchors.fill: parent; anchors.leftMargin: 8 + verticalAlignment: Text.AlignVCenter + text: "Type something..." + color: "gray" + font.italic: true + } + + MouseArea { + anchors.fill: parent + onClicked: { focusScope.focus = true; textInput.openSoftwareInputPanel(); } + } + + TextInput { + id: textInput + anchors { left: parent.left; leftMargin: 8; right: clear.left; rightMargin: 8; verticalCenter: parent.verticalCenter } + focus: true + selectByMouse: true + } + + Image { + id: clear + anchors { right: parent.right; rightMargin: 8; verticalCenter: parent.verticalCenter } + source: "images/clear.png" + opacity: 0 + + MouseArea { + anchors.fill: parent + onClicked: { textInput.text = ''; focusScope.focus = true; textInput.openSoftwareInputPanel(); } + } + } + + states: State { + name: "hasText"; when: textInput.text != '' + PropertyChanges { target: typeSomething; opacity: 0 } + PropertyChanges { target: clear; opacity: 1 } + } + + transitions: [ + Transition { + from: ""; to: "hasText" + NumberAnimation { exclude: typeSomething; properties: "opacity" } + }, + Transition { + from: "hasText"; to: "" + NumberAnimation { properties: "opacity" } + } + ] +} diff --git a/examples/declarative/ui-components/main/qml/TabWidget.qml b/examples/declarative/ui-components/main/qml/TabWidget.qml new file mode 100644 index 0000000..f066fd2 --- /dev/null +++ b/examples/declarative/ui-components/main/qml/TabWidget.qml @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: tabWidget + + // Setting the default property to stack.children means any child items + // of the TabWidget are actually added to the 'stack' item's children. + // See the "Extending Types from QML" documentation for details on default + // properties. + default property alias content: stack.children + + property int current: 0 + + onCurrentChanged: setOpacities() + Component.onCompleted: setOpacities() + + function setOpacities() { + for (var i = 0; i < stack.children.length; ++i) { + stack.children[i].opacity = (i == current ? 1 : 0) + } + } + + Row { + id: header + + Repeater { + model: stack.children.length + delegate: Rectangle { + width: tabWidget.width / stack.children.length; height: 36 + + Rectangle { + width: parent.width; height: 1 + anchors { bottom: parent.bottom; bottomMargin: 1 } + color: "#acb2c2" + } + BorderImage { + anchors { fill: parent; leftMargin: 2; topMargin: 5; rightMargin: 1 } + border { left: 7; right: 7 } + source: "tab.png" + visible: tabWidget.current == index + } + Text { + horizontalAlignment: Qt.AlignHCenter; verticalAlignment: Qt.AlignVCenter + anchors.fill: parent + text: stack.children[index].title + elide: Text.ElideRight + font.bold: tabWidget.current == index + } + MouseArea { + anchors.fill: parent + onClicked: tabWidget.current = index + } + } + } + } + + Item { + id: stack + width: tabWidget.width + anchors.top: header.bottom; anchors.bottom: tabWidget.bottom + } +} diff --git a/examples/declarative/ui-components/main/qml/content/ProgressBar.qml b/examples/declarative/ui-components/main/qml/content/ProgressBar.qml new file mode 100644 index 0000000..e92342a --- /dev/null +++ b/examples/declarative/ui-components/main/qml/content/ProgressBar.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: progressbar + + property int minimum: 0 + property int maximum: 100 + property int value: 0 + property alias color: gradient1.color + property alias secondColor: gradient2.color + + width: 250; height: 23 + clip: true + + BorderImage { + source: "background.png" + width: parent.width; height: parent.height + border { left: 4; top: 4; right: 4; bottom: 4 } + } + + Rectangle { + id: highlight + + property int widthDest: ((progressbar.width * (value - minimum)) / (maximum - minimum) - 6) + + width: highlight.widthDest + Behavior on width { SmoothedAnimation { velocity: 1200 } } + + anchors { left: parent.left; top: parent.top; bottom: parent.bottom; margins: 3 } + radius: 1 + gradient: Gradient { + GradientStop { id: gradient1; position: 0.0 } + GradientStop { id: gradient2; position: 1.0 } + } + + } + Text { + anchors { right: highlight.right; rightMargin: 6; verticalCenter: parent.verticalCenter } + color: "white" + font.bold: true + text: Math.floor((value - minimum) / (maximum - minimum) * 100) + '%' + } +} diff --git a/examples/declarative/ui-components/main/qml/content/Spinner.qml b/examples/declarative/ui-components/main/qml/content/Spinner.qml new file mode 100644 index 0000000..853c787 --- /dev/null +++ b/examples/declarative/ui-components/main/qml/content/Spinner.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Image { + property alias model: view.model + property alias delegate: view.delegate + property alias currentIndex: view.currentIndex + property real itemHeight: 30 + + source: "spinner-bg.png" + clip: true + + PathView { + id: view + anchors.fill: parent + + pathItemCount: height/itemHeight + preferredHighlightBegin: 0.5 + preferredHighlightEnd: 0.5 + highlight: Image { source: "spinner-select.png"; width: view.width; height: itemHeight+4 } + dragMargin: view.width/2 + + path: Path { + startX: view.width/2; startY: -itemHeight/2 + PathLine { x: view.width/2; y: view.pathItemCount*itemHeight + itemHeight } + } + } + + Keys.onDownPressed: view.incrementCurrentIndex() + Keys.onUpPressed: view.decrementCurrentIndex() +} diff --git a/examples/declarative/ui-components/main/qml/content/background.png b/examples/declarative/ui-components/main/qml/content/background.png new file mode 100644 index 0000000000000000000000000000000000000000..9044226f855dbeb3d38a07aaa78639a229ae9171 GIT binary patch literal 426 zcmV;b0agBqP)X0ssI2CyhWc00001b5ch_0Itp) z=>Px#32;bRa{vGjIsgCLsrfwU$*#8Th-#N^{p9}{Hz*I;%krEL>ODLtLX<3#{2p9k`8jpLv-+F3t&NYl@ zjAgUg?efm*+Il84XGkf+FnI91>VBpNMot25*#A7;b=Kfg{% zt(+y8nY&GSueHMGJGKIK=Tyx(Cv(b|I_7np*tU1IWZ=~_w__5I8d-LFZt@8+Jy&8Q z@Kxd?hj9{b@b8eBD~?5aNu`M{Idx?9#-15VOZNL@)ATg7*1uPS`Sb)w_JgC|E!c^E&de7gFg`?1aW_s$)QrzGWg zT#1Tb-G9UN&Uf1|`HkHY$r92+#eT`oJ-nZ!8F%JPIL!toB&Abw0%ESG=5&AsHagZR zFL<$6TKbVWlaZN5(Yg6o-QOrhWfy-H++DHGEPx#0%A)?L;(MXkIcUS000SaNLh0L00FxI00FxJI_%@(00007bV*G`2iXb}1Pda- zWH)3000A*cL_t(2&#jO@O9BBH#(#F6+8;~|x>O`B4QVNF5u^`rH)JV+ZV^OdV;`Wk z#`d7S80M^`-gzT zH!XA^j3384Kq%W!5enG@s3UQa?U>NU4uOPc^vrC`_GqMjK2WkN1ArSi~8mEE^r@t^bq XAv9i>#+k9J00000NkvXXu0mjfEn}^) literal 0 HcmV?d00001 diff --git a/examples/declarative/ui-components/main/qml/images/lineedit-bg-focus.png b/examples/declarative/ui-components/main/qml/images/lineedit-bg-focus.png new file mode 100644 index 0000000000000000000000000000000000000000..bbfac38d2d2b85169894bdf1b5e800cd042e6c31 GIT binary patch literal 526 zcmV+p0`dKcP)X1^@s6sPETi00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01r9<01r9=mpR+Q00007bV*G`2iXb_ z02wGngYHrQ000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004LNklZE0mJLLRJb3N#2FL46ncvI}0TgrK~K}ENs-E zkxZTnLmBRwxo0fILaZHif3M(Ew{tq*>pVZ@%TOlJnxfViW3Xi+g6H}8ehkL}1@KZR zaCCah*1;Lst4AxK$`zU$su&;aprwuHX2Ud2E86W9mHd&7=^5@vl7%p;m zEbpYLi`S59uR>|9S>MkvG1|}ca0fPRpev56TvoT!EY43N#u(18A4xXWV&jsHwPddz z5D^5R6dEf&{ZDg6D1{$~-cI3fw?l-Dun{)GM%V}&VI%Cn#wu3`Eo!gt#h_gIY%-xW zQA6(L-b!rl=AO2uIK~*1=le{JbhET^NLUJKv8=&1_tPxQ4WV^_^OVn*gW!!!?wPf{ zBQCDfia+ Q6951J07*qoM6N<$f^*c}CIA2c literal 0 HcmV?d00001 diff --git a/examples/declarative/ui-components/main/qml/images/lineedit-bg.png b/examples/declarative/ui-components/main/qml/images/lineedit-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..9044226f855dbeb3d38a07aaa78639a229ae9171 GIT binary patch literal 426 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/ui-components/main/qml/tabwidget.qmlproject b/examples/declarative/ui-components/main/qml/tabwidget.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/ui-components/main/qml/tabwidget.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/ui-components/main/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/ui-components/progressbar/main.cpp b/examples/declarative/ui-components/progressbar/main.cpp new file mode 100644 index 0000000..d10bcd1 --- /dev/null +++ b/examples/declarative/ui-components/progressbar/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer.setMainQmlFile(QLatin1String("qml/qml/main.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/ui-components/progressbar/progressbar.desktop b/examples/declarative/ui-components/progressbar/progressbar.desktop new file mode 100644 index 0000000..3fb6f21 --- /dev/null +++ b/examples/declarative/ui-components/progressbar/progressbar.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=progressbar +Exec=/opt/usr/bin/progressbar +Icon=progressbar +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/ui-components/progressbar/progressbar.png b/examples/declarative/ui-components/progressbar/progressbar.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/ui-components/progressbar/qml/content/ProgressBar.qml b/examples/declarative/ui-components/progressbar/qml/content/ProgressBar.qml new file mode 100644 index 0000000..e92342a --- /dev/null +++ b/examples/declarative/ui-components/progressbar/qml/content/ProgressBar.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Item { + id: progressbar + + property int minimum: 0 + property int maximum: 100 + property int value: 0 + property alias color: gradient1.color + property alias secondColor: gradient2.color + + width: 250; height: 23 + clip: true + + BorderImage { + source: "background.png" + width: parent.width; height: parent.height + border { left: 4; top: 4; right: 4; bottom: 4 } + } + + Rectangle { + id: highlight + + property int widthDest: ((progressbar.width * (value - minimum)) / (maximum - minimum) - 6) + + width: highlight.widthDest + Behavior on width { SmoothedAnimation { velocity: 1200 } } + + anchors { left: parent.left; top: parent.top; bottom: parent.bottom; margins: 3 } + radius: 1 + gradient: Gradient { + GradientStop { id: gradient1; position: 0.0 } + GradientStop { id: gradient2; position: 1.0 } + } + + } + Text { + anchors { right: highlight.right; rightMargin: 6; verticalCenter: parent.verticalCenter } + color: "white" + font.bold: true + text: Math.floor((value - minimum) / (maximum - minimum) * 100) + '%' + } +} diff --git a/examples/declarative/ui-components/progressbar/qml/content/background.png b/examples/declarative/ui-components/progressbar/qml/content/background.png new file mode 100644 index 0000000000000000000000000000000000000000..9044226f855dbeb3d38a07aaa78639a229ae9171 GIT binary patch literal 426 zcmV;b0agBqP)X0ssI2CyhWc00001b5ch_0Itp) z=>Px#32;bRa{vGjIsgCLsrfwU$*#8Th-#N^{p9}{Hz*I;%krEL>ODLtLX<3#{2p9k`8jpLv-+F3t&NYl@ zjAgUg?efm*+Il84XGkf+FnI91>VB +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/ui-components/progressbar/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/ui-components/progressbar/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/ui-components/progressbar/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/ui-components/progressbar/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/ui-components/progressbar/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/ui-components/progressbar/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/ui-components/slideswitch/main.cpp b/examples/declarative/ui-components/slideswitch/main.cpp new file mode 100644 index 0000000..a419c9d --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/slideswitch.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/ui-components/slideswitch/qml/content/Switch.qml b/examples/declarative/ui-components/slideswitch/qml/content/Switch.qml new file mode 100644 index 0000000..06d7a2b --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qml/content/Switch.qml @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import QtQuick 1.0 + +Item { + id: toggleswitch + width: background.width; height: background.height + +//![1] + property bool on: false +//![1] + +//![2] + function toggle() { + if (toggleswitch.state == "on") + toggleswitch.state = "off"; + else + toggleswitch.state = "on"; + } +//![2] + +//![3] + function releaseSwitch() { + if (knob.x == 1) { + if (toggleswitch.state == "off") return; + } + if (knob.x == 78) { + if (toggleswitch.state == "on") return; + } + toggle(); + } +//![3] + +//![4] + Image { + id: background + source: "background.svg" + MouseArea { anchors.fill: parent; onClicked: toggle() } + } +//![4] + +//![5] + Image { + id: knob + x: 1; y: 2 + source: "knob.svg" + + MouseArea { + anchors.fill: parent + drag.target: knob; drag.axis: Drag.XAxis; drag.minimumX: 1; drag.maximumX: 78 + onClicked: toggle() + onReleased: releaseSwitch() + } + } +//![5] + +//![6] + states: [ + State { + name: "on" + PropertyChanges { target: knob; x: 78 } + PropertyChanges { target: toggleswitch; on: true } + }, + State { + name: "off" + PropertyChanges { target: knob; x: 1 } + PropertyChanges { target: toggleswitch; on: false } + } + ] +//![6] + +//![7] + transitions: Transition { + NumberAnimation { properties: "x"; easing.type: Easing.InOutQuad; duration: 200 } + } +//![7] +} +//![0] diff --git a/examples/declarative/ui-components/slideswitch/qml/content/background.svg b/examples/declarative/ui-components/slideswitch/qml/content/background.svg new file mode 100644 index 0000000..f920d3e --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qml/content/background.svg @@ -0,0 +1,23 @@ + + + +]> + + + + + + + + + + + + + + diff --git a/examples/declarative/ui-components/slideswitch/qml/content/knob.svg b/examples/declarative/ui-components/slideswitch/qml/content/knob.svg new file mode 100644 index 0000000..fb69337 --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qml/content/knob.svg @@ -0,0 +1,867 @@ + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/declarative/ui-components/slideswitch/qml/slideswitch.qml b/examples/declarative/ui-components/slideswitch/qml/slideswitch.qml new file mode 100644 index 0000000..0472f9f --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qml/slideswitch.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 +import "content" + +Rectangle { + color: "white" + width: 400; height: 250 + +//![0] + Switch { anchors.centerIn: parent; on: false } +//![0] +} diff --git a/examples/declarative/ui-components/slideswitch/qml/slideswitch.qmlproject b/examples/declarative/ui-components/slideswitch/qml/slideswitch.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qml/slideswitch.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/README b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/README new file mode 100644 index 0000000..f2b87fb --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/README @@ -0,0 +1,6 @@ +The Debian Package slideswitch +---------------------------- + +Comments regarding the Package + + -- Daniel Molkentin Thu, 18 Nov 2010 17:31:28 +0100 diff --git a/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/changelog b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/changelog new file mode 100644 index 0000000..46d83ac --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/changelog @@ -0,0 +1,5 @@ +slideswitch (0.0.1) unstable; urgency=low + + * Initial Release. + + -- Daniel Molkentin Thu, 18 Nov 2010 17:31:28 +0100 diff --git a/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/compat b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/compat @@ -0,0 +1 @@ +7 diff --git a/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/control b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/control new file mode 100644 index 0000000..f6eb57d --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/control @@ -0,0 +1,13 @@ +Source: slideswitch +Section: user/hidden +Priority: optional +Maintainer: Daniel Molkentin +Build-Depends: debhelper (>= 5), libqt4-dev +Standards-Version: 3.7.3 +Homepage: + +Package: slideswitch +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: + diff --git a/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/copyright b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/copyright new file mode 100644 index 0000000..06785f0 --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/copyright @@ -0,0 +1,40 @@ +This package was debianized by Daniel Molkentin on +Thu, 18 Nov 2010 17:31:28 +0100. + +It was downloaded from + +Upstream Author(s): + + + + +Copyright: + + + + +License: + + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2010, Daniel Molkentin and +is licensed under the GPL, see above. + + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. diff --git a/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/rules b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/rules new file mode 100755 index 0000000..0205aef --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/qtc_packaging/debian_fremantle/rules @@ -0,0 +1,91 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/slideswitch.sgml > slideswitch.1 + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + $(MAKE) clean + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/slideswitch. + $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/slideswitch install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + # dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + # dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/examples/declarative/ui-components/slideswitch/slideswitch.desktop b/examples/declarative/ui-components/slideswitch/slideswitch.desktop new file mode 100644 index 0000000..9f46a0b --- /dev/null +++ b/examples/declarative/ui-components/slideswitch/slideswitch.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=slideswitch +Exec=/opt/usr/bin/slideswitch +Icon=slideswitch +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/ui-components/slideswitch/slideswitch.png b/examples/declarative/ui-components/slideswitch/slideswitch.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/xml/xmlhttprequest-example/main.cpp b/examples/declarative/xml/xmlhttprequest-example/main.cpp new file mode 100644 index 0000000..037f551 --- /dev/null +++ b/examples/declarative/xml/xmlhttprequest-example/main.cpp @@ -0,0 +1,14 @@ +#include +#include "qmlapplicationviewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); + viewer.setMainQmlFile(QLatin1String("qml/qml/xmlhttprequest-example.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/declarative/xml/xmlhttprequest-example/qml/data.xml b/examples/declarative/xml/xmlhttprequest-example/qml/data.xml new file mode 100644 index 0000000..8b7f1e1 --- /dev/null +++ b/examples/declarative/xml/xmlhttprequest-example/qml/data.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/declarative/xml/xmlhttprequest-example/qml/xmlhttprequest-example.qml b/examples/declarative/xml/xmlhttprequest-example/qml/xmlhttprequest-example.qml new file mode 100644 index 0000000..78f93b5 --- /dev/null +++ b/examples/declarative/xml/xmlhttprequest-example/qml/xmlhttprequest-example.qml @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + width: 350; height: 400 + + function showRequestInfo(text) { + log.text = log.text + "\n" + text + console.log(text) + } + + Text { id: log; anchors.fill: parent; anchors.margins: 10 } + + Rectangle { + id: button + anchors.horizontalCenter: parent.horizontalCenter; anchors.bottom: parent.bottom; anchors.margins: 10 + width: buttonText.width + 10; height: buttonText.height + 10 + border.width: mouseArea.pressed ? 2 : 1 + radius : 5; smooth: true + + Text { id: buttonText; anchors.centerIn: parent; text: "Request data.xml" } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: { + log.text = "" + console.log("\n") + + var doc = new XMLHttpRequest(); + doc.onreadystatechange = function() { + if (doc.readyState == XMLHttpRequest.HEADERS_RECEIVED) { + showRequestInfo("Headers -->"); + showRequestInfo(doc.getAllResponseHeaders ()); + showRequestInfo("Last modified -->"); + showRequestInfo(doc.getResponseHeader ("Last-Modified")); + + } else if (doc.readyState == XMLHttpRequest.DONE) { + var a = doc.responseXML.documentElement; + for (var ii = 0; ii < a.childNodes.length; ++ii) { + showRequestInfo(a.childNodes[ii].nodeName); + } + showRequestInfo("Headers -->"); + showRequestInfo(doc.getAllResponseHeaders ()); + showRequestInfo("Last modified -->"); + showRequestInfo(doc.getResponseHeader ("Last-Modified")); + } + } + + doc.open("GET", "data.xml"); + doc.send(); + } + } + } +} + diff --git a/examples/declarative/xml/xmlhttprequest-example/qml/xmlhttprequest.qmlproject b/examples/declarative/xml/xmlhttprequest-example/qml/xmlhttprequest.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/xml/xmlhttprequest-example/qml/xmlhttprequest.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.cpp b/examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..11bedd1 --- /dev/null +++ b/examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,157 @@ +// checksum 0x28c7 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include +#include +#include +#include +#include +#include + +#if defined(QMLJSDEBUGGER) +#include +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include +#endif + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != ScreenOrientationAuto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); + Q_UNUSED(error) +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case ScreenOrientationLockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case ScreenOrientationAuto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.h b/examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..143c17b --- /dev/null +++ b/examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x2000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.pri b/examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..1c0c7ed --- /dev/null +++ b/examples/declarative/xml/xmlhttprequest-example/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,154 @@ +# checksum 0x3dc8 version 0x2000a +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } + } + return(false) +} + +contains(DEFINES, QMLJSDEBUGGER) { + CONFIG(debug, debug|release) { + !minQtVersion(4, 7, 1) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("This library requires Qt 4.7.1 or newer.") + warning() + DEFINES -= QMLJSDEBUGGER + } else:isEmpty(QMLJSDEBUGGER_PATH) { + warning() + warning("Disabling QML debugging:") + warning() + warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") + warning("Please specify its location on the qmake command line, eg") + warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") + warning() + DEFINES -= QMLJSDEBUGGER + } else { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) + } + } else { + DEFINES -= QMLJSDEBUGGER + } +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + ICON = $${TARGET}.svg + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$eval($${deploymentfolder}.source) + pathSegments = $$split(source, /) + sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments) + copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\) + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + !isEqual(PWD,$$OUT_PWD) { + copyCommand = @echo Copying application data... + for(deploymentfolder, DEPLOYMENTFOLDERS) { + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + copyCommand += && $(MKDIR) $$target + copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target + } + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64/apps + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + export(target.path) + INSTALLS += desktopfile icon target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/declarative/xml/xmlhttprequest-example/xmlhttprequestexample.desktop b/examples/declarative/xml/xmlhttprequest-example/xmlhttprequestexample.desktop new file mode 100644 index 0000000..c5065cf --- /dev/null +++ b/examples/declarative/xml/xmlhttprequest-example/xmlhttprequestexample.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=xmlhttprequest-example +Exec=/opt/usr/bin/xmlhttprequest-example +Icon=xmlhttprequest-example +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/declarative/xml/xmlhttprequest-example/xmlhttprequestexample.png b/examples/declarative/xml/xmlhttprequest-example/xmlhttprequestexample.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 GIT binary patch literal 3400 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 eAW3auXJt}lVPtu6$z?nM0000 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + -- 1.7.2.5