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/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();
|
||||||
|
|||||||
@@ -42,6 +42,35 @@
|
|||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import Qt.labs.folderlistmodel 1.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 {
|
Rectangle {
|
||||||
id: root
|
id: root
|
||||||
color: "white"
|
color: "white"
|
||||||
@@ -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("")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -352,3 +379,5 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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 = ""
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -42,6 +42,35 @@
|
|||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import Qt.labs.folderlistmodel 1.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 {
|
Rectangle {
|
||||||
id: root
|
id: root
|
||||||
color: "white"
|
color: "white"
|
||||||
@@ -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("")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -352,3 +379,5 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user