Skip to content
Detail.qml 3.99 KiB
Newer Older
/*
    This file is part of Gabriel's Qt/QML CardBoard Sample (or short GQQCS)

    GQQCS 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 3 of the License, or
    (at your option) any later version.

    GQQCS 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 Foobar.  If not, see <http://www.gnu.org/licenses/>.

    Updated: 07/08/2015 by: Gabriel F.
*/

import QtMultimedia 5.0
import QtQuick 2.4

Item {
    id: root
    anchors.fill: parent

    visible: false
    opacity: 0.0

    property var fadeInEndCallback:  function() { console.log("Detail fadeInEndCallback()") }
    property var fadeOutEndCallback: function() { console.log("Detail fadeOutCallback()") }
    property string videoFile: "videoteste.mp4"
    property int timerCount: 60
    property bool hiding: false
    property double posVideo: video.position/video.duration

    function playVideo() {
        video.play();
        videoTimer.interval = timerCount*1000;
        videoTimer.start();
    }

    Rectangle {
        anchors.fill: parent
        color: "black"
    }

    Timer {
        id: videoTimer
        interval: 60*1000
        running: false
        repeat: false
        onTriggered: {
            if (!hiding) {
                hiding = true
                detail.hide()
                videoTimer.stop()
                video.stop()
            }
        }
    }

    NumberAnimation {
        id: fadeIn
        target: root
        property: "opacity"
        duration: 1000
        easing.type: Easing.InOutQuad
        to: 1.0
        onStarted: { root.visible = true; hiding = false }
        onStopped: { fadeInEndCallback() }
    }

    NumberAnimation {
        id: fadeOut
        target: root
        property: "opacity"
        duration: 1000
        easing.type: Easing.InOutQuad
        to: 0.0
        onStopped: {
            root.visible = false
            fadeOutEndCallback()
        }
    }

    function show() { fadeIn.start() }
    function hide() { fadeOut.start() }

    Video {
        id: video
        visible: position > 1000 ? true : false
        muted: true
        width: stereo ? parent.width : 2*parent.width
        height: parent.height
        source: "qrc:/videos/"+videoFile+".mp4"
        anchors.verticalCenter: parent.verticalCenter
        fillMode: stereo ? VideoOutput.PreserveAspectFit : VideoOutput.Stretch
        onPositionChanged: {
            posVideo = video.position/video.duration
        }
        onSourceChanged: {
            video.seek(0)
        }

        onStopped: {
            if (!hiding) {
                console.log("Video Stopped")
                hiding = true
                detail.hide()
                videoTimer.stop()
            }
        }
    }

    Item {
        width: stereo ? parent.width*0.5 : parent.width
        height: parent.height*0.02
        anchors.bottom: parent.bottom
        anchors.left: parent.left
        opacity: 0.7
        Rectangle {
            width: posVideo*parent.width
            height: parent.height
            anchors.bottom: parent.bottom
            anchors.left: parent.left
            color: "steelblue"
        }
    }

    Item {
        visible: stereo
        width: parent.width*0.5
        height: parent.height*0.02
        anchors.bottom: parent.bottom
        anchors.right: parent.right
        opacity: 0.7
        Rectangle {
            width: posVideo*parent.width
            height: parent.height
            anchors.bottom: parent.bottom
            anchors.left: parent.left
            color: "steelblue"
        }
    }

    MouseArea {
        anchors.fill: parent
        onClicked: {
            video.stop()            
        }
    }

}