summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGareth Stockwell <ext-gareth.stockwell@nokia.com>2012-02-06 16:10:15 +0000
committerQt by Nokia <qt-info@nokia.com>2012-02-08 22:30:34 +0100
commitb6f54c8833347ddb13b12cfd682cd12de72664d8 (patch)
tree03b4f97059c532c769039343f5687cea4e46faf3
parent87ec3461c135990f9e01d7cb71bc6016c3538db1 (diff)
Tidy up file browsing in video examples
* Use QStandardPaths to determine the initial folder displayed when the file browser is launched * Persist folder between file browser invocations Change-Id: I5b86dd3d304c3f33802f3189716e1d360774198d Reviewed-by: Jonas Rabbe <jonas.rabbe@nokia.com>
-rw-r--r--examples/video/qmlvideo/main.cpp8
-rw-r--r--examples/video/qmlvideo/qml/qmlvideo/FileBrowser.qml567
-rw-r--r--examples/video/qmlvideo/qml/qmlvideo/main.qml49
-rw-r--r--examples/video/qmlvideofx/main.cpp13
-rw-r--r--examples/video/qmlvideofx/qml/qmlvideofx/FileBrowser.qml567
-rw-r--r--examples/video/qmlvideofx/qml/qmlvideofx/main-largescreen.qml51
-rw-r--r--examples/video/qmlvideofx/qml/qmlvideofx/main-smallscreen.qml49
7 files changed, 672 insertions, 632 deletions
diff --git a/examples/video/qmlvideo/main.cpp b/examples/video/qmlvideo/main.cpp
index 85a7af04..495dc029 100644
--- a/examples/video/qmlvideo/main.cpp
+++ b/examples/video/qmlvideo/main.cpp
@@ -39,8 +39,10 @@
**
****************************************************************************/
+#include <QtCore/QStandardPaths>
#include <QtCore/QString>
#include <QtCore/QStringList>
+#include <QtDeclarative/QDeclarativeContext>
#include <QtGui/QGuiApplication>
#include <QtQuick/QQuickItem>
#include "qmlapplicationviewer.h"
@@ -124,6 +126,12 @@ int main(int argc, char *argv[])
rootObject, SLOT(qmlFramePainted()));
#endif
+ QString videoPath;
+ const QStringList moviesLocation = QStandardPaths::standardLocations(QStandardPaths::MoviesLocation);
+ if (!moviesLocation.isEmpty())
+ videoPath = moviesLocation.first();
+ viewer.rootContext()->setContextProperty("videoPath", videoPath);
+
QMetaObject::invokeMethod(rootObject, "init");
viewer.showExpanded();
diff --git a/examples/video/qmlvideo/qml/qmlvideo/FileBrowser.qml b/examples/video/qmlvideo/qml/qmlvideo/FileBrowser.qml
index 50985adf..6467ba08 100644
--- a/examples/video/qmlvideo/qml/qmlvideo/FileBrowser.qml
+++ b/examples/video/qmlvideo/qml/qmlvideo/FileBrowser.qml
@@ -43,312 +43,341 @@ import QtQuick 2.0
import Qt.labs.folderlistmodel 1.0
Rectangle {
- id: root
- color: "white"
- property bool showFocusHighlight: false
- property variant folders: folders1
- property variant view: view1
- property alias folder: folders1.folder
- property color textColor: "black"
-
- signal openFile(string path)
-
- FolderListModel {
- id: folders1
- folder: folder
+ id: fileBrowser
+ color: "transparent"
+
+ property string folder
+
+ signal fileSelected(string file)
+
+ function selectFile(file) {
+ if (file != "")
+ folder = loader.item.folders.folder
+ loader.sourceComponent = undefined
+ fileBrowser.fileSelected(file)
}
- FolderListModel {
- id: folders2
- folder: folder
+ Loader {
+ id: loader
}
- SystemPalette {
- id: palette
+ function show() {
+ loader.sourceComponent = fileBrowserComponent
+ loader.item.parent = fileBrowser
+ loader.item.anchors.fill = fileBrowser
+ loader.item.folder = fileBrowser.folder
}
Component {
- id: folderDelegate
+ id: fileBrowserComponent
Rectangle {
- id: wrapper
- function launch() {
- if (folders.isFolder(index))
- down(filePath);
- else
- root.openFile(filePath);
- }
- width: root.width
- height: 52
- color: "transparent"
+ id: root
+ color: "white"
+ property bool showFocusHighlight: false
+ property variant folders: folders1
+ property variant view: view1
+ property alias folder: folders1.folder
+ property color textColor: "black"
- Rectangle {
- id: highlight; visible: false
- anchors.fill: parent
- color: palette.highlight
- gradient: Gradient {
- GradientStop { id: t1; position: 0.0; color: palette.highlight }
- GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
- }
+ FolderListModel {
+ id: folders1
+ folder: folder
}
- Item {
- width: 48; height: 48
- Image {
- source: "qrc:/images/folder.png"
- anchors.centerIn: parent
- visible: folders.isFolder(index)
- }
+ FolderListModel {
+ id: folders2
+ folder: folder
}
- Text {
- id: nameText
- anchors.fill: parent; verticalAlignment: Text.AlignVCenter
- text: fileName
- anchors.leftMargin: 54
- font.pixelSize: 32
- color: (wrapper.ListView.isCurrentItem && root.showFocusHighlight) ? palette.highlightedText : textColor
- elide: Text.ElideRight
+ SystemPalette {
+ id: palette
}
- MouseArea {
- id: mouseRegion
- anchors.fill: parent
- onPressed: {
- root.showFocusHighlight = false;
- wrapper.ListView.view.currentIndex = index;
- }
- onClicked: { if (folders == wrapper.ListView.view.model) launch() }
- }
+ Component {
+ id: folderDelegate
- states: [
- State {
- name: "pressed"
- when: mouseRegion.pressed
- PropertyChanges { target: highlight; visible: true }
- PropertyChanges { target: nameText; color: palette.highlightedText }
- }
- ]
- }
- }
+ Rectangle {
+ id: wrapper
+ function launch() {
+ if (folders.isFolder(index))
+ down(filePath);
+ else
+ fileBrowser.selectFile(filePath)
+ }
+ width: root.width
+ height: 52
+ color: "transparent"
- Rectangle {
- id: cancelButton
- width: 100
- height: titleBar.height - 7
- color: "black"
- anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter }
+ Rectangle {
+ id: highlight; visible: false
+ anchors.fill: parent
+ color: palette.highlight
+ gradient: Gradient {
+ GradientStop { id: t1; position: 0.0; color: palette.highlight }
+ GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+ }
+ }
- Text {
- anchors { fill: parent; margins: 4 }
- text: "Cancel"
- color: "white"
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- font.pixelSize: 20
- }
+ Item {
+ width: 48; height: 48
+ Image {
+ source: "qrc:/images/folder.png"
+ anchors.centerIn: parent
+ visible: folders.isFolder(index)
+ }
+ }
- MouseArea {
- anchors.fill: parent
- onClicked: root.openFile("")
- }
- }
+ Text {
+ id: nameText
+ anchors.fill: parent; verticalAlignment: Text.AlignVCenter
+ text: fileName
+ anchors.leftMargin: 54
+ font.pixelSize: 32
+ color: (wrapper.ListView.isCurrentItem && root.showFocusHighlight) ? palette.highlightedText : textColor
+ elide: Text.ElideRight
+ }
- ListView {
- id: view1
- anchors.top: titleBar.bottom
- anchors.bottom: cancelButton.top
- x: 0
- width: parent.width
- model: folders1
- delegate: folderDelegate
- highlight: Rectangle {
- color: palette.highlight
- visible: root.showFocusHighlight && view1.count != 0
- gradient: Gradient {
- GradientStop { id: t1; position: 0.0; color: palette.highlight }
- GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
- }
- width: view1.currentItem == null ? 0 : view1.currentItem.width
- }
- highlightMoveSpeed: 1000
- pressDelay: 100
- focus: true
- state: "current"
- states: [
- State {
- name: "current"
- PropertyChanges { target: view1; x: 0 }
- },
- State {
- name: "exitLeft"
- PropertyChanges { target: view1; x: -root.width }
- },
- State {
- name: "exitRight"
- PropertyChanges { target: view1; x: root.width }
- }
- ]
- transitions: [
- Transition {
- to: "current"
- SequentialAnimation {
- NumberAnimation { properties: "x"; duration: 250 }
+ MouseArea {
+ id: mouseRegion
+ anchors.fill: parent
+ onPressed: {
+ root.showFocusHighlight = false;
+ wrapper.ListView.view.currentIndex = index;
+ }
+ onClicked: { if (folders == wrapper.ListView.view.model) launch() }
+ }
+
+ states: [
+ State {
+ name: "pressed"
+ when: mouseRegion.pressed
+ PropertyChanges { target: highlight; visible: true }
+ PropertyChanges { target: nameText; color: palette.highlightedText }
+ }
+ ]
}
- },
- Transition {
- NumberAnimation { properties: "x"; duration: 250 }
- NumberAnimation { properties: "x"; duration: 250 }
}
- ]
- Keys.onPressed: root.keyPressed(event.key)
- }
- ListView {
- id: view2
- anchors.top: titleBar.bottom
- anchors.bottom: parent.bottom
- x: parent.width
- width: parent.width
- model: folders2
- delegate: folderDelegate
- highlight: Rectangle {
- color: palette.highlight
- visible: root.showFocusHighlight && view2.count != 0
- gradient: Gradient {
- GradientStop { id: t1; position: 0.0; color: palette.highlight }
- GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+ Rectangle {
+ id: cancelButton
+ width: 100
+ height: titleBar.height - 7
+ color: "black"
+ anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter }
+
+ Text {
+ anchors { fill: parent; margins: 4 }
+ text: "Cancel"
+ color: "white"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font.pixelSize: 20
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: fileBrowser.selectFile("")
+ }
}
- width: view1.currentItem == null ? 0 : view1.currentItem.width
- }
- highlightMoveSpeed: 1000
- pressDelay: 100
- states: [
- State {
- name: "current"
- PropertyChanges { target: view2; x: 0 }
- },
- State {
- name: "exitLeft"
- PropertyChanges { target: view2; x: -root.width }
- },
- State {
- name: "exitRight"
- PropertyChanges { target: view2; x: root.width }
+
+ ListView {
+ id: view1
+ anchors.top: titleBar.bottom
+ anchors.bottom: cancelButton.top
+ x: 0
+ width: parent.width
+ model: folders1
+ delegate: folderDelegate
+ highlight: Rectangle {
+ color: palette.highlight
+ visible: root.showFocusHighlight && view1.count != 0
+ gradient: Gradient {
+ GradientStop { id: t1; position: 0.0; color: palette.highlight }
+ GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+ }
+ width: view1.currentItem == null ? 0 : view1.currentItem.width
+ }
+ highlightMoveSpeed: 1000
+ pressDelay: 100
+ focus: true
+ state: "current"
+ states: [
+ State {
+ name: "current"
+ PropertyChanges { target: view1; x: 0 }
+ },
+ State {
+ name: "exitLeft"
+ PropertyChanges { target: view1; x: -root.width }
+ },
+ State {
+ name: "exitRight"
+ PropertyChanges { target: view1; x: root.width }
+ }
+ ]
+ transitions: [
+ Transition {
+ to: "current"
+ SequentialAnimation {
+ NumberAnimation { properties: "x"; duration: 250 }
+ }
+ },
+ Transition {
+ NumberAnimation { properties: "x"; duration: 250 }
+ NumberAnimation { properties: "x"; duration: 250 }
+ }
+ ]
+ Keys.onPressed: root.keyPressed(event.key)
}
- ]
- transitions: [
- Transition {
- to: "current"
- SequentialAnimation {
- NumberAnimation { properties: "x"; duration: 250 }
+
+ ListView {
+ id: view2
+ anchors.top: titleBar.bottom
+ anchors.bottom: parent.bottom
+ x: parent.width
+ width: parent.width
+ model: folders2
+ delegate: folderDelegate
+ highlight: Rectangle {
+ color: palette.highlight
+ visible: root.showFocusHighlight && view2.count != 0
+ gradient: Gradient {
+ GradientStop { id: t1; position: 0.0; color: palette.highlight }
+ GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+ }
+ width: view1.currentItem == null ? 0 : view1.currentItem.width
}
- },
- Transition {
- NumberAnimation { properties: "x"; duration: 250 }
+ highlightMoveSpeed: 1000
+ pressDelay: 100
+ states: [
+ State {
+ name: "current"
+ PropertyChanges { target: view2; x: 0 }
+ },
+ State {
+ name: "exitLeft"
+ PropertyChanges { target: view2; x: -root.width }
+ },
+ State {
+ name: "exitRight"
+ PropertyChanges { target: view2; x: root.width }
+ }
+ ]
+ transitions: [
+ Transition {
+ to: "current"
+ SequentialAnimation {
+ NumberAnimation { properties: "x"; duration: 250 }
+ }
+ },
+ Transition {
+ NumberAnimation { properties: "x"; duration: 250 }
+ }
+ ]
+ Keys.onPressed: root.keyPressed(event.key)
}
- ]
- Keys.onPressed: root.keyPressed(event.key)
- }
- Keys.onPressed: {
- root.keyPressed(event.key);
- if (event.key == Qt.Key_Return || event.key == Qt.Key_Select || event.key == Qt.Key_Right) {
- view.currentItem.launch();
- event.accepted = true;
- } else if (event.key == Qt.Key_Left) {
- up();
- }
- }
+ Keys.onPressed: {
+ root.keyPressed(event.key);
+ if (event.key == Qt.Key_Return || event.key == Qt.Key_Select || event.key == Qt.Key_Right) {
+ view.currentItem.launch();
+ event.accepted = true;
+ } else if (event.key == Qt.Key_Left) {
+ up();
+ }
+ }
- BorderImage {
- source: "qrc:/images/titlebar.sci";
- width: parent.width;
- height: 52
- y: -7
- id: titleBar
+ BorderImage {
+ source: "qrc:/images/titlebar.sci";
+ width: parent.width;
+ height: 52
+ y: -7
+ id: titleBar
- Rectangle {
- id: upButton
- width: 48
- height: titleBar.height - 7
- color: "transparent"
- Image { anchors.centerIn: parent; source: "qrc:/images/up.png" }
- MouseArea { id: upRegion; anchors.centerIn: parent
- width: 56
- height: 56
- onClicked: if (folders.parentFolder != "") up()
- }
- states: [
- State {
- name: "pressed"
- when: upRegion.pressed
- PropertyChanges { target: upButton; color: palette.highlight }
+ Rectangle {
+ id: upButton
+ width: 48
+ height: titleBar.height - 7
+ color: "transparent"
+ Image { anchors.centerIn: parent; source: "qrc:/images/up.png" }
+ MouseArea { id: upRegion; anchors.centerIn: parent
+ width: 56
+ height: 56
+ onClicked: if (folders.parentFolder != "") up()
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: upRegion.pressed
+ PropertyChanges { target: upButton; color: palette.highlight }
+ }
+ ]
}
- ]
- }
- Rectangle {
- color: "gray"
- x: 48
- width: 1
- height: 44
- }
+ Rectangle {
+ color: "gray"
+ x: 48
+ width: 1
+ height: 44
+ }
- Text {
- anchors.left: upButton.right; anchors.right: parent.right; height: parent.height
- anchors.leftMargin: 4; anchors.rightMargin: 4
- text: folders.folder
- color: "white"
- elide: Text.ElideLeft; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignVCenter
- font.pixelSize: 32
- }
- }
+ Text {
+ anchors.left: upButton.right; anchors.right: parent.right; height: parent.height
+ anchors.leftMargin: 4; anchors.rightMargin: 4
+ text: folders.folder
+ color: "white"
+ elide: Text.ElideLeft; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignVCenter
+ font.pixelSize: 32
+ }
+ }
- function down(path) {
- if (folders == folders1) {
- view = view2
- folders = folders2;
- view1.state = "exitLeft";
- } else {
- view = view1
- folders = folders1;
- view2.state = "exitLeft";
- }
- view.x = root.width;
- view.state = "current";
- view.focus = true;
- folders.folder = path;
- }
+ function down(path) {
+ if (folders == folders1) {
+ view = view2
+ folders = folders2;
+ view1.state = "exitLeft";
+ } else {
+ view = view1
+ folders = folders1;
+ view2.state = "exitLeft";
+ }
+ view.x = root.width;
+ view.state = "current";
+ view.focus = true;
+ folders.folder = path;
+ }
- function up() {
- var path = folders.parentFolder;
- if (folders == folders1) {
- view = view2
- folders = folders2;
- view1.state = "exitRight";
- } else {
- view = view1
- folders = folders1;
- view2.state = "exitRight";
- }
- view.x = -root.width;
- view.state = "current";
- view.focus = true;
- folders.folder = path;
- }
+ function up() {
+ var path = folders.parentFolder;
+ if (folders == folders1) {
+ view = view2
+ folders = folders2;
+ view1.state = "exitRight";
+ } else {
+ view = view1
+ folders = folders1;
+ view2.state = "exitRight";
+ }
+ view.x = -root.width;
+ view.state = "current";
+ view.focus = true;
+ folders.folder = path;
+ }
- function keyPressed(key) {
- switch (key) {
- case Qt.Key_Up:
- case Qt.Key_Down:
- case Qt.Key_Left:
- case Qt.Key_Right:
- root.showFocusHighlight = true;
- break;
- default:
- // do nothing
- break;
+ function keyPressed(key) {
+ switch (key) {
+ case Qt.Key_Up:
+ case Qt.Key_Down:
+ case Qt.Key_Left:
+ case Qt.Key_Right:
+ root.showFocusHighlight = true;
+ break;
+ default:
+ // do nothing
+ break;
+ }
+ }
}
}
}
diff --git a/examples/video/qmlvideo/qml/qmlvideo/main.qml b/examples/video/qmlvideo/qml/qmlvideo/main.qml
index 86dddd8b..261a3357 100644
--- a/examples/video/qmlvideo/qml/qmlvideo/main.qml
+++ b/examples/video/qmlvideo/qml/qmlvideo/main.qml
@@ -56,7 +56,6 @@ Rectangle {
QtObject {
id: d
- property int fileIndex
property int itemHeight: 40
property int buttonHeight: 0.8 * itemHeight
property int margins: 10
@@ -99,7 +98,7 @@ Rectangle {
}
height: d.buttonHeight
text: (root.source1 == "") ? "Select file 1" : root.source1
- onClicked: showFileBrowser(1)
+ onClicked: fileBrowser1.show()
}
Button {
@@ -112,7 +111,7 @@ Rectangle {
}
height: d.buttonHeight
text: (root.source2 == "") ? "Select file 2" : root.source2
- onClicked: showFileBrowser(2)
+ onClicked: fileBrowser2.show()
}
Button {
@@ -187,8 +186,26 @@ Rectangle {
ignoreUnknownSignals: true
}
- Loader {
- id: fileBrowserLoader
+ FileBrowser {
+ id: fileBrowser1
+ anchors.fill: root
+ onFolderChanged: fileBrowser2.folder = folder
+ Component.onCompleted: fileSelected.connect(root.openFile1)
+ }
+
+ FileBrowser {
+ id: fileBrowser2
+ anchors.fill: root
+ onFolderChanged: fileBrowser1.folder = folder
+ Component.onCompleted: fileSelected.connect(root.openFile2)
+ }
+
+ function openFile1(path) {
+ root.source1 = path
+ }
+
+ function openFile2(path) {
+ root.source2 = path
}
ErrorDialog {
@@ -200,6 +217,8 @@ Rectangle {
// Called from main() once root properties have been set
function init() {
performanceLoader.init()
+ fileBrowser1.folder = videoPath
+ fileBrowser2.folder = videoPath
}
function qmlFramePainted() {
@@ -207,26 +226,6 @@ Rectangle {
performanceLoader.item.qmlFramePainted()
}
- function showFileBrowser(index) {
- console.log("[qmlvideo] main.showFileBrowser")
- d.fileIndex = index
- fileBrowserLoader.source = "FileBrowser.qml"
- fileBrowserLoader.item.parent = root
- fileBrowserLoader.item.anchors.fill = root
- fileBrowserLoader.item.openFile.connect(root.openFile)
- inner.visible = false
- }
-
- function openFile(path) {
- console.log("[qmlvideo] main.openFile " + d.fileIndex + " \"" + path + "\"")
- fileBrowserLoader.source = ""
- if (1 == d.fileIndex)
- root.source1 = path
- else if (2 == d.fileIndex)
- root.source2 = path
- inner.visible = true
- }
-
function closeScene() {
console.log("[qmlvideo] main.closeScene")
sceneSelectionPanel.sceneSource = ""
diff --git a/examples/video/qmlvideofx/main.cpp b/examples/video/qmlvideofx/main.cpp
index a7157c82..1b4f17ea 100644
--- a/examples/video/qmlvideofx/main.cpp
+++ b/examples/video/qmlvideofx/main.cpp
@@ -39,6 +39,7 @@
**
****************************************************************************/
+#include <QtCore/QStandardPaths>
#include <QtCore/QStringList>
#include <QtDeclarative/QDeclarativeContext>
#include <QtGui/QGuiApplication>
@@ -116,6 +117,18 @@ int main(int argc, char *argv[])
FileReader fileReader;
viewer.rootContext()->setContextProperty("fileReader", &fileReader);
+ QString imagePath = "../../images";
+ const QStringList picturesLocation = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
+ if (!picturesLocation.isEmpty())
+ imagePath = picturesLocation.first();
+ viewer.rootContext()->setContextProperty("imagePath", imagePath);
+
+ QString videoPath;
+ const QStringList moviesLocation = QStandardPaths::standardLocations(QStandardPaths::MoviesLocation);
+ if (!moviesLocation.isEmpty())
+ videoPath = moviesLocation.first();
+ viewer.rootContext()->setContextProperty("videoPath", videoPath);
+
#ifdef SMALL_SCREEN_PHYSICAL
viewer.showFullScreen();
#else
diff --git a/examples/video/qmlvideofx/qml/qmlvideofx/FileBrowser.qml b/examples/video/qmlvideofx/qml/qmlvideofx/FileBrowser.qml
index 50985adf..6467ba08 100644
--- a/examples/video/qmlvideofx/qml/qmlvideofx/FileBrowser.qml
+++ b/examples/video/qmlvideofx/qml/qmlvideofx/FileBrowser.qml
@@ -43,312 +43,341 @@ import QtQuick 2.0
import Qt.labs.folderlistmodel 1.0
Rectangle {
- id: root
- color: "white"
- property bool showFocusHighlight: false
- property variant folders: folders1
- property variant view: view1
- property alias folder: folders1.folder
- property color textColor: "black"
-
- signal openFile(string path)
-
- FolderListModel {
- id: folders1
- folder: folder
+ id: fileBrowser
+ color: "transparent"
+
+ property string folder
+
+ signal fileSelected(string file)
+
+ function selectFile(file) {
+ if (file != "")
+ folder = loader.item.folders.folder
+ loader.sourceComponent = undefined
+ fileBrowser.fileSelected(file)
}
- FolderListModel {
- id: folders2
- folder: folder
+ Loader {
+ id: loader
}
- SystemPalette {
- id: palette
+ function show() {
+ loader.sourceComponent = fileBrowserComponent
+ loader.item.parent = fileBrowser
+ loader.item.anchors.fill = fileBrowser
+ loader.item.folder = fileBrowser.folder
}
Component {
- id: folderDelegate
+ id: fileBrowserComponent
Rectangle {
- id: wrapper
- function launch() {
- if (folders.isFolder(index))
- down(filePath);
- else
- root.openFile(filePath);
- }
- width: root.width
- height: 52
- color: "transparent"
+ id: root
+ color: "white"
+ property bool showFocusHighlight: false
+ property variant folders: folders1
+ property variant view: view1
+ property alias folder: folders1.folder
+ property color textColor: "black"
- Rectangle {
- id: highlight; visible: false
- anchors.fill: parent
- color: palette.highlight
- gradient: Gradient {
- GradientStop { id: t1; position: 0.0; color: palette.highlight }
- GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
- }
+ FolderListModel {
+ id: folders1
+ folder: folder
}
- Item {
- width: 48; height: 48
- Image {
- source: "qrc:/images/folder.png"
- anchors.centerIn: parent
- visible: folders.isFolder(index)
- }
+ FolderListModel {
+ id: folders2
+ folder: folder
}
- Text {
- id: nameText
- anchors.fill: parent; verticalAlignment: Text.AlignVCenter
- text: fileName
- anchors.leftMargin: 54
- font.pixelSize: 32
- color: (wrapper.ListView.isCurrentItem && root.showFocusHighlight) ? palette.highlightedText : textColor
- elide: Text.ElideRight
+ SystemPalette {
+ id: palette
}
- MouseArea {
- id: mouseRegion
- anchors.fill: parent
- onPressed: {
- root.showFocusHighlight = false;
- wrapper.ListView.view.currentIndex = index;
- }
- onClicked: { if (folders == wrapper.ListView.view.model) launch() }
- }
+ Component {
+ id: folderDelegate
- states: [
- State {
- name: "pressed"
- when: mouseRegion.pressed
- PropertyChanges { target: highlight; visible: true }
- PropertyChanges { target: nameText; color: palette.highlightedText }
- }
- ]
- }
- }
+ Rectangle {
+ id: wrapper
+ function launch() {
+ if (folders.isFolder(index))
+ down(filePath);
+ else
+ fileBrowser.selectFile(filePath)
+ }
+ width: root.width
+ height: 52
+ color: "transparent"
- Rectangle {
- id: cancelButton
- width: 100
- height: titleBar.height - 7
- color: "black"
- anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter }
+ Rectangle {
+ id: highlight; visible: false
+ anchors.fill: parent
+ color: palette.highlight
+ gradient: Gradient {
+ GradientStop { id: t1; position: 0.0; color: palette.highlight }
+ GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+ }
+ }
- Text {
- anchors { fill: parent; margins: 4 }
- text: "Cancel"
- color: "white"
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- font.pixelSize: 20
- }
+ Item {
+ width: 48; height: 48
+ Image {
+ source: "qrc:/images/folder.png"
+ anchors.centerIn: parent
+ visible: folders.isFolder(index)
+ }
+ }
- MouseArea {
- anchors.fill: parent
- onClicked: root.openFile("")
- }
- }
+ Text {
+ id: nameText
+ anchors.fill: parent; verticalAlignment: Text.AlignVCenter
+ text: fileName
+ anchors.leftMargin: 54
+ font.pixelSize: 32
+ color: (wrapper.ListView.isCurrentItem && root.showFocusHighlight) ? palette.highlightedText : textColor
+ elide: Text.ElideRight
+ }
- ListView {
- id: view1
- anchors.top: titleBar.bottom
- anchors.bottom: cancelButton.top
- x: 0
- width: parent.width
- model: folders1
- delegate: folderDelegate
- highlight: Rectangle {
- color: palette.highlight
- visible: root.showFocusHighlight && view1.count != 0
- gradient: Gradient {
- GradientStop { id: t1; position: 0.0; color: palette.highlight }
- GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
- }
- width: view1.currentItem == null ? 0 : view1.currentItem.width
- }
- highlightMoveSpeed: 1000
- pressDelay: 100
- focus: true
- state: "current"
- states: [
- State {
- name: "current"
- PropertyChanges { target: view1; x: 0 }
- },
- State {
- name: "exitLeft"
- PropertyChanges { target: view1; x: -root.width }
- },
- State {
- name: "exitRight"
- PropertyChanges { target: view1; x: root.width }
- }
- ]
- transitions: [
- Transition {
- to: "current"
- SequentialAnimation {
- NumberAnimation { properties: "x"; duration: 250 }
+ MouseArea {
+ id: mouseRegion
+ anchors.fill: parent
+ onPressed: {
+ root.showFocusHighlight = false;
+ wrapper.ListView.view.currentIndex = index;
+ }
+ onClicked: { if (folders == wrapper.ListView.view.model) launch() }
+ }
+
+ states: [
+ State {
+ name: "pressed"
+ when: mouseRegion.pressed
+ PropertyChanges { target: highlight; visible: true }
+ PropertyChanges { target: nameText; color: palette.highlightedText }
+ }
+ ]
}
- },
- Transition {
- NumberAnimation { properties: "x"; duration: 250 }
- NumberAnimation { properties: "x"; duration: 250 }
}
- ]
- Keys.onPressed: root.keyPressed(event.key)
- }
- ListView {
- id: view2
- anchors.top: titleBar.bottom
- anchors.bottom: parent.bottom
- x: parent.width
- width: parent.width
- model: folders2
- delegate: folderDelegate
- highlight: Rectangle {
- color: palette.highlight
- visible: root.showFocusHighlight && view2.count != 0
- gradient: Gradient {
- GradientStop { id: t1; position: 0.0; color: palette.highlight }
- GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+ Rectangle {
+ id: cancelButton
+ width: 100
+ height: titleBar.height - 7
+ color: "black"
+ anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter }
+
+ Text {
+ anchors { fill: parent; margins: 4 }
+ text: "Cancel"
+ color: "white"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font.pixelSize: 20
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: fileBrowser.selectFile("")
+ }
}
- width: view1.currentItem == null ? 0 : view1.currentItem.width
- }
- highlightMoveSpeed: 1000
- pressDelay: 100
- states: [
- State {
- name: "current"
- PropertyChanges { target: view2; x: 0 }
- },
- State {
- name: "exitLeft"
- PropertyChanges { target: view2; x: -root.width }
- },
- State {
- name: "exitRight"
- PropertyChanges { target: view2; x: root.width }
+
+ ListView {
+ id: view1
+ anchors.top: titleBar.bottom
+ anchors.bottom: cancelButton.top
+ x: 0
+ width: parent.width
+ model: folders1
+ delegate: folderDelegate
+ highlight: Rectangle {
+ color: palette.highlight
+ visible: root.showFocusHighlight && view1.count != 0
+ gradient: Gradient {
+ GradientStop { id: t1; position: 0.0; color: palette.highlight }
+ GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+ }
+ width: view1.currentItem == null ? 0 : view1.currentItem.width
+ }
+ highlightMoveSpeed: 1000
+ pressDelay: 100
+ focus: true
+ state: "current"
+ states: [
+ State {
+ name: "current"
+ PropertyChanges { target: view1; x: 0 }
+ },
+ State {
+ name: "exitLeft"
+ PropertyChanges { target: view1; x: -root.width }
+ },
+ State {
+ name: "exitRight"
+ PropertyChanges { target: view1; x: root.width }
+ }
+ ]
+ transitions: [
+ Transition {
+ to: "current"
+ SequentialAnimation {
+ NumberAnimation { properties: "x"; duration: 250 }
+ }
+ },
+ Transition {
+ NumberAnimation { properties: "x"; duration: 250 }
+ NumberAnimation { properties: "x"; duration: 250 }
+ }
+ ]
+ Keys.onPressed: root.keyPressed(event.key)
}
- ]
- transitions: [
- Transition {
- to: "current"
- SequentialAnimation {
- NumberAnimation { properties: "x"; duration: 250 }
+
+ ListView {
+ id: view2
+ anchors.top: titleBar.bottom
+ anchors.bottom: parent.bottom
+ x: parent.width
+ width: parent.width
+ model: folders2
+ delegate: folderDelegate
+ highlight: Rectangle {
+ color: palette.highlight
+ visible: root.showFocusHighlight && view2.count != 0
+ gradient: Gradient {
+ GradientStop { id: t1; position: 0.0; color: palette.highlight }
+ GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+ }
+ width: view1.currentItem == null ? 0 : view1.currentItem.width
}
- },
- Transition {
- NumberAnimation { properties: "x"; duration: 250 }
+ highlightMoveSpeed: 1000
+ pressDelay: 100
+ states: [
+ State {
+ name: "current"
+ PropertyChanges { target: view2; x: 0 }
+ },
+ State {
+ name: "exitLeft"
+ PropertyChanges { target: view2; x: -root.width }
+ },
+ State {
+ name: "exitRight"
+ PropertyChanges { target: view2; x: root.width }
+ }
+ ]
+ transitions: [
+ Transition {
+ to: "current"
+ SequentialAnimation {
+ NumberAnimation { properties: "x"; duration: 250 }
+ }
+ },
+ Transition {
+ NumberAnimation { properties: "x"; duration: 250 }
+ }
+ ]
+ Keys.onPressed: root.keyPressed(event.key)
}
- ]
- Keys.onPressed: root.keyPressed(event.key)
- }
- Keys.onPressed: {
- root.keyPressed(event.key);
- if (event.key == Qt.Key_Return || event.key == Qt.Key_Select || event.key == Qt.Key_Right) {
- view.currentItem.launch();
- event.accepted = true;
- } else if (event.key == Qt.Key_Left) {
- up();
- }
- }
+ Keys.onPressed: {
+ root.keyPressed(event.key);
+ if (event.key == Qt.Key_Return || event.key == Qt.Key_Select || event.key == Qt.Key_Right) {
+ view.currentItem.launch();
+ event.accepted = true;
+ } else if (event.key == Qt.Key_Left) {
+ up();
+ }
+ }
- BorderImage {
- source: "qrc:/images/titlebar.sci";
- width: parent.width;
- height: 52
- y: -7
- id: titleBar
+ BorderImage {
+ source: "qrc:/images/titlebar.sci";
+ width: parent.width;
+ height: 52
+ y: -7
+ id: titleBar
- Rectangle {
- id: upButton
- width: 48
- height: titleBar.height - 7
- color: "transparent"
- Image { anchors.centerIn: parent; source: "qrc:/images/up.png" }
- MouseArea { id: upRegion; anchors.centerIn: parent
- width: 56
- height: 56
- onClicked: if (folders.parentFolder != "") up()
- }
- states: [
- State {
- name: "pressed"
- when: upRegion.pressed
- PropertyChanges { target: upButton; color: palette.highlight }
+ Rectangle {
+ id: upButton
+ width: 48
+ height: titleBar.height - 7
+ color: "transparent"
+ Image { anchors.centerIn: parent; source: "qrc:/images/up.png" }
+ MouseArea { id: upRegion; anchors.centerIn: parent
+ width: 56
+ height: 56
+ onClicked: if (folders.parentFolder != "") up()
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: upRegion.pressed
+ PropertyChanges { target: upButton; color: palette.highlight }
+ }
+ ]
}
- ]
- }
- Rectangle {
- color: "gray"
- x: 48
- width: 1
- height: 44
- }
+ Rectangle {
+ color: "gray"
+ x: 48
+ width: 1
+ height: 44
+ }
- Text {
- anchors.left: upButton.right; anchors.right: parent.right; height: parent.height
- anchors.leftMargin: 4; anchors.rightMargin: 4
- text: folders.folder
- color: "white"
- elide: Text.ElideLeft; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignVCenter
- font.pixelSize: 32
- }
- }
+ Text {
+ anchors.left: upButton.right; anchors.right: parent.right; height: parent.height
+ anchors.leftMargin: 4; anchors.rightMargin: 4
+ text: folders.folder
+ color: "white"
+ elide: Text.ElideLeft; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignVCenter
+ font.pixelSize: 32
+ }
+ }
- function down(path) {
- if (folders == folders1) {
- view = view2
- folders = folders2;
- view1.state = "exitLeft";
- } else {
- view = view1
- folders = folders1;
- view2.state = "exitLeft";
- }
- view.x = root.width;
- view.state = "current";
- view.focus = true;
- folders.folder = path;
- }
+ function down(path) {
+ if (folders == folders1) {
+ view = view2
+ folders = folders2;
+ view1.state = "exitLeft";
+ } else {
+ view = view1
+ folders = folders1;
+ view2.state = "exitLeft";
+ }
+ view.x = root.width;
+ view.state = "current";
+ view.focus = true;
+ folders.folder = path;
+ }
- function up() {
- var path = folders.parentFolder;
- if (folders == folders1) {
- view = view2
- folders = folders2;
- view1.state = "exitRight";
- } else {
- view = view1
- folders = folders1;
- view2.state = "exitRight";
- }
- view.x = -root.width;
- view.state = "current";
- view.focus = true;
- folders.folder = path;
- }
+ function up() {
+ var path = folders.parentFolder;
+ if (folders == folders1) {
+ view = view2
+ folders = folders2;
+ view1.state = "exitRight";
+ } else {
+ view = view1
+ folders = folders1;
+ view2.state = "exitRight";
+ }
+ view.x = -root.width;
+ view.state = "current";
+ view.focus = true;
+ folders.folder = path;
+ }
- function keyPressed(key) {
- switch (key) {
- case Qt.Key_Up:
- case Qt.Key_Down:
- case Qt.Key_Left:
- case Qt.Key_Right:
- root.showFocusHighlight = true;
- break;
- default:
- // do nothing
- break;
+ function keyPressed(key) {
+ switch (key) {
+ case Qt.Key_Up:
+ case Qt.Key_Down:
+ case Qt.Key_Left:
+ case Qt.Key_Right:
+ root.showFocusHighlight = true;
+ break;
+ default:
+ // do nothing
+ break;
+ }
+ }
}
}
}
diff --git a/examples/video/qmlvideofx/qml/qmlvideofx/main-largescreen.qml b/examples/video/qmlvideofx/qml/qmlvideofx/main-largescreen.qml
index 6d643a1e..d7e1b12f 100644
--- a/examples/video/qmlvideofx/qml/qmlvideofx/main-largescreen.qml
+++ b/examples/video/qmlvideofx/qml/qmlvideofx/main-largescreen.qml
@@ -51,11 +51,6 @@ Rectangle {
property bool perfMonitorsLogging: false
property bool perfMonitorsVisible: false
- QtObject {
- id: d
- property string openFileType
- }
-
Rectangle {
id: inner
anchors.fill: parent
@@ -131,8 +126,16 @@ Rectangle {
}
}
- Loader {
- id: fileBrowserLoader
+ FileBrowser {
+ id: imageFileBrowser
+ anchors.fill: root
+ Component.onCompleted: fileSelected.connect(content.openImage)
+ }
+
+ FileBrowser {
+ id: videoFileBrowser
+ anchors.fill: root
+ Component.onCompleted: fileSelected.connect(content.openVideo)
}
Component.onCompleted: {
@@ -144,12 +147,12 @@ Rectangle {
function init() {
console.log("[qmlvideofx] main.init")
+ imageFileBrowser.folder = imagePath
+ videoFileBrowser.folder = videoPath
content.init()
performanceLoader.init()
- if (fileName != "") {
- d.openFileType = "video"
- openFile(fileName)
- }
+ if (fileName != "")
+ content.openVideo(fileName)
}
function qmlFramePainted() {
@@ -158,13 +161,11 @@ Rectangle {
}
function openImage() {
- d.openFileType = "image"
- showFileBrowser("../../images")
+ imageFileBrowser.show()
}
function openVideo() {
- d.openFileType = "video"
- showFileBrowser("../../videos")
+ videoFileBrowser.show()
}
function openCamera() {
@@ -174,24 +175,4 @@ Rectangle {
function close() {
content.openImage("qrc:/images/qt-logo.png")
}
-
- function showFileBrowser(path) {
- fileBrowserLoader.source = "FileBrowser.qml"
- fileBrowserLoader.item.parent = root
- fileBrowserLoader.item.anchors.fill = root
- fileBrowserLoader.item.openFile.connect(root.openFile)
- fileBrowserLoader.item.folder = path
- inner.visible = false
- }
-
- function openFile(path) {
- fileBrowserLoader.source = ""
- if (path != "") {
- if (d.openFileType == "image")
- content.openImage(path)
- else if (d.openFileType == "video")
- content.openVideo(path)
- }
- inner.visible = true
- }
}
diff --git a/examples/video/qmlvideofx/qml/qmlvideofx/main-smallscreen.qml b/examples/video/qmlvideofx/qml/qmlvideofx/main-smallscreen.qml
index 51237242..e9cf4467 100644
--- a/examples/video/qmlvideofx/qml/qmlvideofx/main-smallscreen.qml
+++ b/examples/video/qmlvideofx/qml/qmlvideofx/main-smallscreen.qml
@@ -51,11 +51,6 @@ Rectangle {
property bool perfMonitorsLogging: false
property bool perfMonitorsVisible: false
- QtObject {
- id: d
- property string openFileType
- }
-
// Create ScreenSaver element via Loader, so this app will still run if the
// SystemInfo module is not available
Loader {
@@ -344,21 +339,30 @@ Rectangle {
fileOpen.close.connect(close)
}
- Loader {
- id: fileBrowserLoader
+ FileBrowser {
+ id: imageFileBrowser
+ anchors.fill: root
+ Component.onCompleted: fileSelected.connect(content.openImage)
+ }
+
+ FileBrowser {
+ id: videoFileBrowser
+ anchors.fill: root
+ Component.onCompleted: fileSelected.connect(content.openVideo)
}
// Called from main() once root properties have been set
function init() {
console.log("[qmlvideofx] main.init")
+ imageFileBrowser.folder = imagePath
+ videoFileBrowser.folder = videoPath
content.init()
performanceLoader.init()
if (fileName != "") {
fileOpenMouseArea.hintEnabled = false
effectSelectionPanelMouseArea.hintEnabled = false
splashScreen.state = "hidden"
- d.openFileType = "video"
- openFile(fileName)
+ content.openVideo(fileName)
}
}
@@ -369,14 +373,12 @@ Rectangle {
function openImage() {
fileOpenContainer.state = "baseState"
- d.openFileType = "image"
- showFileBrowser("../../images")
+ imageFileBrowser.show()
}
function openVideo() {
fileOpenContainer.state = "baseState"
- d.openFileType = "video"
- showFileBrowser("../../videos")
+ videoFileBrowser.show()
}
function openCamera() {
@@ -388,25 +390,4 @@ Rectangle {
fileOpenContainer.state = "baseState"
content.openImage("qrc:/images/qt-logo.png")
}
-
- function showFileBrowser(path) {
- content.stop()
- fileBrowserLoader.source = "FileBrowser.qml"
- fileBrowserLoader.item.parent = root
- fileBrowserLoader.item.anchors.fill = root
- fileBrowserLoader.item.openFile.connect(root.openFile)
- fileBrowserLoader.item.folder = path
- inner.visible = false
- }
-
- function openFile(path) {
- fileBrowserLoader.source = ""
- if (path != "") {
- if (d.openFileType == "image")
- content.openImage(path)
- else if (d.openFileType == "video")
- content.openVideo(path)
- }
- inner.visible = true
- }
}