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/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();

View File

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

View File

@@ -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 = ""

View File

@@ -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

View File

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

View File

@@ -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
}
}

View File

@@ -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
}
}