[ui] add string <--> file representation convertors

* convenient methods to conform strings to Qt file reprensentation using the "file:/" protocol prefix
* use those methodes when manipulating files
This commit is contained in:
Yann Lanthony 2018-02-26 16:59:25 +01:00
parent 62726b4663
commit 2cdc83f06f
7 changed files with 38 additions and 6 deletions

View file

@ -2,6 +2,7 @@ import QtQuick 2.9
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.2
import MaterialIcons 2.2
import Utils 1.0
/**
A component to display and edit a Node's attributes.
@ -43,7 +44,7 @@ ColumnLayout {
id: settingsMenu
MenuItem {
text: "Open Cache Folder"
onClicked: Qt.openUrlExternally("file://" + node.internalFolder)
onClicked: Qt.openUrlExternally(Filepath.stringToFile(node.internalFolder))
ToolTip.text: node.internalFolder
ToolTip.visible: hovered
ToolTip.delay: 500

View file

@ -108,7 +108,7 @@ RowLayout {
_reconstruction.setAttribute(root.attribute, Number(value))
break;
case "File":
_reconstruction.setAttribute(root.attribute, value.replace("file://", "").trim())
_reconstruction.setAttribute(root.attribute, Filepath.fileToString(value.trim()))
break;
default:
_reconstruction.setAttribute(root.attribute, value.trim())

View file

@ -3,6 +3,8 @@ import QtQuick.Controls 2.3
import QtQuick.Controls 1.4 as Controls1 // SplitView
import QtQuick.Layouts 1.3
import MaterialIcons 2.2
import Utils 1.0
import "common.js" as Common
/**
@ -195,7 +197,7 @@ FocusScope {
function loadCurrentFile(keepCursorPosition)
{
var xhr = new XMLHttpRequest;
xhr.open("GET", fileSelector.currentFile);
xhr.open("GET", Filepath.stringToFile(fileSelector.currentFile));
xhr.onreadystatechange = function() {
if(xhr.readyState == XMLHttpRequest.HEADERS_RECEIVED)
{

View file

@ -68,7 +68,7 @@ Item {
Image {
anchors.fill: parent
anchors.margins: 4
source: imageDelegate.source
source: Filepath.stringToFile(imageDelegate.source)
sourceSize: Qt.size(100, 100)
asynchronous: true
autoTransform: true

View file

@ -22,3 +22,29 @@ function extension(path) {
function isFile(path) {
return extension(path) !== ""
}
/// Conform 'path' to the Qt file representation relying on "file:" protocol prefix
function stringToFile(path) {
// already containing the file protocol
if(path.startsWith("file:"))
return path
// network path
if(path.startsWith("//"))
return "file:" + path
// assumed local path
if(path.trim() == "")
return ""
return "file:/" + path
}
/// Remove any "file:" protocol prefix from 'path'
function fileToString(path)
{
// local path
if(path.startsWith("file:///"))
return path.replace("file:///", "")
// network path
else if(path.startsWith("file://"))
return path.replace("file://", "")
return path
}

View file

@ -2,12 +2,13 @@ import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import MaterialIcons 2.2
import Utils 1.0
FocusScope {
id: root
clip: true
property alias source: image.source
property string source
property var metadata
// slots
@ -48,6 +49,7 @@ FocusScope {
fillMode: Image.PreserveAspectFit
autoTransform: true
onWidthChanged: if(status==Image.Ready) fit()
source: Filepath.stringToFile(root.source)
onStatusChanged: {
// update cache source when image is loaded
if(status === Image.Ready)

View file

@ -31,6 +31,7 @@ Item {
// Load a 3D media file in the 3D viewer
function load3DMedia(filepath)
{
filepath = Filepath.stringToFile(filepath)
if(Filepath.extension(filepath) === ".abc")
{
viewer3D.abcSource = filepath
@ -154,7 +155,7 @@ Item {
anchors.bottomMargin: 10
anchors.horizontalCenter: parent.horizontalCenter
visible: meshFile != '' && (viewer3D.source != meshFile)
onClicked: viewer3D.source = meshFile
onClicked: load3DMedia(meshFile)
}
}
}