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:
committed by
Qt by Nokia
parent
87ec3461c1
commit
b6f54c8833
@@ -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();
|
||||
|
||||
@@ -42,6 +42,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"
|
||||
@@ -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("")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -352,3 +379,5 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 = ""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -42,6 +42,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"
|
||||
@@ -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("")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -352,3 +379,5 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user