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>
This commit is contained in:
Gareth Stockwell
2012-02-06 16:10:15 +00:00
committed by Qt by Nokia
parent 87ec3461c1
commit b6f54c8833
7 changed files with 680 additions and 640 deletions

View File

@@ -39,8 +39,10 @@
** **
****************************************************************************/ ****************************************************************************/
#include <QtCore/QStandardPaths>
#include <QtCore/QString> #include <QtCore/QString>
#include <QtCore/QStringList> #include <QtCore/QStringList>
#include <QtDeclarative/QDeclarativeContext>
#include <QtGui/QGuiApplication> #include <QtGui/QGuiApplication>
#include <QtQuick/QQuickItem> #include <QtQuick/QQuickItem>
#include "qmlapplicationviewer.h" #include "qmlapplicationviewer.h"
@@ -124,6 +126,12 @@ int main(int argc, char *argv[])
rootObject, SLOT(qmlFramePainted())); rootObject, SLOT(qmlFramePainted()));
#endif #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"); QMetaObject::invokeMethod(rootObject, "init");
viewer.showExpanded(); viewer.showExpanded();

View File

@@ -43,6 +43,35 @@ import QtQuick 2.0
import Qt.labs.folderlistmodel 1.0 import Qt.labs.folderlistmodel 1.0
Rectangle { Rectangle {
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)
}
Loader {
id: loader
}
function show() {
loader.sourceComponent = fileBrowserComponent
loader.item.parent = fileBrowser
loader.item.anchors.fill = fileBrowser
loader.item.folder = fileBrowser.folder
}
Component {
id: fileBrowserComponent
Rectangle {
id: root id: root
color: "white" color: "white"
property bool showFocusHighlight: false property bool showFocusHighlight: false
@@ -51,8 +80,6 @@ Rectangle {
property alias folder: folders1.folder property alias folder: folders1.folder
property color textColor: "black" property color textColor: "black"
signal openFile(string path)
FolderListModel { FolderListModel {
id: folders1 id: folders1
folder: folder folder: folder
@@ -76,7 +103,7 @@ Rectangle {
if (folders.isFolder(index)) if (folders.isFolder(index))
down(filePath); down(filePath);
else else
root.openFile(filePath); fileBrowser.selectFile(filePath)
} }
width: root.width width: root.width
height: 52 height: 52
@@ -150,7 +177,7 @@ Rectangle {
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: root.openFile("") onClicked: fileBrowser.selectFile("")
} }
} }
@@ -351,4 +378,6 @@ Rectangle {
break; break;
} }
} }
}
}
} }

View File

@@ -56,7 +56,6 @@ Rectangle {
QtObject { QtObject {
id: d id: d
property int fileIndex
property int itemHeight: 40 property int itemHeight: 40
property int buttonHeight: 0.8 * itemHeight property int buttonHeight: 0.8 * itemHeight
property int margins: 10 property int margins: 10
@@ -99,7 +98,7 @@ Rectangle {
} }
height: d.buttonHeight height: d.buttonHeight
text: (root.source1 == "") ? "Select file 1" : root.source1 text: (root.source1 == "") ? "Select file 1" : root.source1
onClicked: showFileBrowser(1) onClicked: fileBrowser1.show()
} }
Button { Button {
@@ -112,7 +111,7 @@ Rectangle {
} }
height: d.buttonHeight height: d.buttonHeight
text: (root.source2 == "") ? "Select file 2" : root.source2 text: (root.source2 == "") ? "Select file 2" : root.source2
onClicked: showFileBrowser(2) onClicked: fileBrowser2.show()
} }
Button { Button {
@@ -187,8 +186,26 @@ Rectangle {
ignoreUnknownSignals: true ignoreUnknownSignals: true
} }
Loader { FileBrowser {
id: fileBrowserLoader 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 { ErrorDialog {
@@ -200,6 +217,8 @@ Rectangle {
// Called from main() once root properties have been set // Called from main() once root properties have been set
function init() { function init() {
performanceLoader.init() performanceLoader.init()
fileBrowser1.folder = videoPath
fileBrowser2.folder = videoPath
} }
function qmlFramePainted() { function qmlFramePainted() {
@@ -207,26 +226,6 @@ Rectangle {
performanceLoader.item.qmlFramePainted() 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() { function closeScene() {
console.log("[qmlvideo] main.closeScene") console.log("[qmlvideo] main.closeScene")
sceneSelectionPanel.sceneSource = "" sceneSelectionPanel.sceneSource = ""

View File

@@ -39,6 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
#include <QtCore/QStandardPaths>
#include <QtCore/QStringList> #include <QtCore/QStringList>
#include <QtDeclarative/QDeclarativeContext> #include <QtDeclarative/QDeclarativeContext>
#include <QtGui/QGuiApplication> #include <QtGui/QGuiApplication>
@@ -116,6 +117,18 @@ int main(int argc, char *argv[])
FileReader fileReader; FileReader fileReader;
viewer.rootContext()->setContextProperty("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 #ifdef SMALL_SCREEN_PHYSICAL
viewer.showFullScreen(); viewer.showFullScreen();
#else #else

View File

@@ -43,6 +43,35 @@ import QtQuick 2.0
import Qt.labs.folderlistmodel 1.0 import Qt.labs.folderlistmodel 1.0
Rectangle { Rectangle {
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)
}
Loader {
id: loader
}
function show() {
loader.sourceComponent = fileBrowserComponent
loader.item.parent = fileBrowser
loader.item.anchors.fill = fileBrowser
loader.item.folder = fileBrowser.folder
}
Component {
id: fileBrowserComponent
Rectangle {
id: root id: root
color: "white" color: "white"
property bool showFocusHighlight: false property bool showFocusHighlight: false
@@ -51,8 +80,6 @@ Rectangle {
property alias folder: folders1.folder property alias folder: folders1.folder
property color textColor: "black" property color textColor: "black"
signal openFile(string path)
FolderListModel { FolderListModel {
id: folders1 id: folders1
folder: folder folder: folder
@@ -76,7 +103,7 @@ Rectangle {
if (folders.isFolder(index)) if (folders.isFolder(index))
down(filePath); down(filePath);
else else
root.openFile(filePath); fileBrowser.selectFile(filePath)
} }
width: root.width width: root.width
height: 52 height: 52
@@ -150,7 +177,7 @@ Rectangle {
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: root.openFile("") onClicked: fileBrowser.selectFile("")
} }
} }
@@ -351,4 +378,6 @@ Rectangle {
break; break;
} }
} }
}
}
} }

View File

@@ -51,11 +51,6 @@ Rectangle {
property bool perfMonitorsLogging: false property bool perfMonitorsLogging: false
property bool perfMonitorsVisible: false property bool perfMonitorsVisible: false
QtObject {
id: d
property string openFileType
}
Rectangle { Rectangle {
id: inner id: inner
anchors.fill: parent anchors.fill: parent
@@ -131,8 +126,16 @@ Rectangle {
} }
} }
Loader { FileBrowser {
id: fileBrowserLoader 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: { Component.onCompleted: {
@@ -144,12 +147,12 @@ Rectangle {
function init() { function init() {
console.log("[qmlvideofx] main.init") console.log("[qmlvideofx] main.init")
imageFileBrowser.folder = imagePath
videoFileBrowser.folder = videoPath
content.init() content.init()
performanceLoader.init() performanceLoader.init()
if (fileName != "") { if (fileName != "")
d.openFileType = "video" content.openVideo(fileName)
openFile(fileName)
}
} }
function qmlFramePainted() { function qmlFramePainted() {
@@ -158,13 +161,11 @@ Rectangle {
} }
function openImage() { function openImage() {
d.openFileType = "image" imageFileBrowser.show()
showFileBrowser("../../images")
} }
function openVideo() { function openVideo() {
d.openFileType = "video" videoFileBrowser.show()
showFileBrowser("../../videos")
} }
function openCamera() { function openCamera() {
@@ -174,24 +175,4 @@ Rectangle {
function close() { function close() {
content.openImage("qrc:/images/qt-logo.png") 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
}
} }

View File

@@ -51,11 +51,6 @@ Rectangle {
property bool perfMonitorsLogging: false property bool perfMonitorsLogging: false
property bool perfMonitorsVisible: false property bool perfMonitorsVisible: false
QtObject {
id: d
property string openFileType
}
// Create ScreenSaver element via Loader, so this app will still run if the // Create ScreenSaver element via Loader, so this app will still run if the
// SystemInfo module is not available // SystemInfo module is not available
Loader { Loader {
@@ -344,21 +339,30 @@ Rectangle {
fileOpen.close.connect(close) fileOpen.close.connect(close)
} }
Loader { FileBrowser {
id: fileBrowserLoader 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 // Called from main() once root properties have been set
function init() { function init() {
console.log("[qmlvideofx] main.init") console.log("[qmlvideofx] main.init")
imageFileBrowser.folder = imagePath
videoFileBrowser.folder = videoPath
content.init() content.init()
performanceLoader.init() performanceLoader.init()
if (fileName != "") { if (fileName != "") {
fileOpenMouseArea.hintEnabled = false fileOpenMouseArea.hintEnabled = false
effectSelectionPanelMouseArea.hintEnabled = false effectSelectionPanelMouseArea.hintEnabled = false
splashScreen.state = "hidden" splashScreen.state = "hidden"
d.openFileType = "video" content.openVideo(fileName)
openFile(fileName)
} }
} }
@@ -369,14 +373,12 @@ Rectangle {
function openImage() { function openImage() {
fileOpenContainer.state = "baseState" fileOpenContainer.state = "baseState"
d.openFileType = "image" imageFileBrowser.show()
showFileBrowser("../../images")
} }
function openVideo() { function openVideo() {
fileOpenContainer.state = "baseState" fileOpenContainer.state = "baseState"
d.openFileType = "video" videoFileBrowser.show()
showFileBrowser("../../videos")
} }
function openCamera() { function openCamera() {
@@ -388,25 +390,4 @@ Rectangle {
fileOpenContainer.state = "baseState" fileOpenContainer.state = "baseState"
content.openImage("qrc:/images/qt-logo.png") 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
}
} }