/**************************************************************************** ** ** 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 demonstration applications 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 Qt 4.7 import Effects 1.0 Item { id: main property alias source: loader.source property bool show: false x: 0 y: -500 //height and width set by program opacity: 0 property QtObject blurEffect: realBlur == null ? dummyBlur : realBlur //Is there a better way to lose those error messages? Loader{//Automatic FocusScope focus: true clip: true id: loader //source set by program anchors.centerIn: parent onStatusChanged: if(status == Loader.Ready) { if(loader.item.width > 640) loader.item.width = 640; if(loader.item.height > 480) loader.item.height = 480; } } Rectangle{ z: -1 anchors.fill: loader.status == Loader.Ready ? loader : errorTxt anchors.margins: -10 radius: 12 smooth: true gradient: Gradient{ GradientStop{ position: 0.0; color: "#14FFFFFF" } GradientStop{ position: 1.0; color: "#5AFFFFFF" } } MouseArea{ anchors.fill: parent onClicked: loader.focus=true;/* and don't propogate to the 'exit' area*/ } } MouseArea{ z: -2 hoverEnabled: true //To steal from the buttons anchors.fill: parent onClicked: main.show=false; } Text{ id: errorTxt anchors.centerIn: parent color: 'white' smooth: true visible: loader.status == Loader.Error textFormat: Text.RichText //includes link for bugreport //Note that if loader is Error, it is because the file was found but there was an error creating the component //This means either we have a bug in our demos, or the required modules (which ship with Qt) did not deploy correctly text: 'The example has failed to load. This is a bug!
' +'Report it at http://bugreports.qt.nokia.com'; onLinkActivated: Qt.openUrlExternally(link); } states: [ State { name: "show" when: show == true PropertyChanges { target: main opacity: 1 y: 0 } PropertyChanges { target: blurEffect enabled: true blurRadius: 8 blurHints: Blur.AnimationHint | Blur.PerformanceHint } } ] MagicAnim{ id: magicAnim; target: main; from: -500; to: 0 } transitions: [ Transition { from: ""; to: "show" SequentialAnimation{ ScriptAction{ script: magicAnim.start() } NumberAnimation{ properties: "opacity,blurRadius"; easing.type: Easing.OutCubic; duration: 1000} PropertyAnimation{ target: main; property: "y"} } }, Transition { from: "show"; to: "" //Addtionally, unload the item SequentialAnimation{ NumberAnimation{ properties: "y,opacity,blurRadius";duration: 500 } ScriptAction{ script: loader.source = ''; } } /*Attempt to copy the exeunt animation. Looks bad SequentialAnimation{ ParallelAnimation{ NumberAnimation{ properties: "opacity,blurRadius"; easing.type: Easing.InCubic; duration: 1000 } SequentialAnimation{ NumberAnimation{ target: main; property: 'y'; to: 3.2*height/5; duration: 500} ParallelAnimation{ NumberAnimation{ target: main; property: 'y'; to: 3.0*height/5; duration: 100} NumberAnimation{ target: main; property: 'x'; to: 3.0*width/5; duration: 100} } NumberAnimation{ target: main; property: 'x'; to: 700; duration: 400} } } ScriptAction{ script: loader.source = ''; } PropertyAction{ properties: "x,y";} } */ } ] Item{ Blur{id: dummyBlur } } }