mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 11:17:32 +02:00
File dialog polish
This commit is contained in:
parent
9da0181b72
commit
4393a754e2
2 changed files with 50 additions and 31 deletions
|
@ -55,35 +55,39 @@ ModalWindow {
|
||||||
anchors { left: parent.left; top: parent.top; margins: 8 }
|
anchors { left: parent.left; top: parent.top; margins: 8 }
|
||||||
spacing: 8
|
spacing: 8
|
||||||
// FIXME implement back button
|
// FIXME implement back button
|
||||||
// VrControls.FontAwesome {
|
//VrControls.ButtonAwesome {
|
||||||
// id: backButton
|
// id: backButton
|
||||||
// text: "\uf0a8"
|
// text: "\uf0a8"
|
||||||
// size: currentDirectory.height
|
// size: currentDirectory.height
|
||||||
// enabled: d.backStack.length != 0
|
// enabled: d.backStack.length != 0
|
||||||
// MouseArea { anchors.fill: parent; onClicked: d.navigateBack() }
|
// MouseArea { anchors.fill: parent; onClicked: d.navigateBack() }
|
||||||
// }
|
//}
|
||||||
VrControls.FontAwesome {
|
VrControls.ButtonAwesome {
|
||||||
id: upButton
|
id: upButton
|
||||||
|
enabled: model.parentFolder && model.parentFolder !== ""
|
||||||
text: "\uf0aa"
|
text: "\uf0aa"
|
||||||
size: currentDirectory.height
|
size: 32
|
||||||
color: enabled ? "black" : "gray"
|
onClicked: d.navigateUp();
|
||||||
MouseArea { anchors.fill: parent; onClicked: d.navigateUp() }
|
|
||||||
}
|
}
|
||||||
VrControls.FontAwesome {
|
VrControls.ButtonAwesome {
|
||||||
id: homeButton
|
id: homeButton
|
||||||
property var destination: helper.home();
|
property var destination: helper.home();
|
||||||
visible: destination ? true : false
|
enabled: d.homeDestination ? true : false
|
||||||
text: "\uf015"
|
text: "\uf015"
|
||||||
size: currentDirectory.height
|
size: 32
|
||||||
MouseArea { anchors.fill: parent; onClicked: model.folder = parent.destination }
|
onClicked: d.navigateHome();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TextField {
|
TextField {
|
||||||
id: currentDirectory
|
id: currentDirectory
|
||||||
|
height: homeButton.height
|
||||||
anchors { left: navControls.right; right: parent.right; top: parent.top; margins: 8 }
|
anchors { left: navControls.right; right: parent.right; top: parent.top; margins: 8 }
|
||||||
property var lastValidFolder: helper.urlToPath(model.folder)
|
property var lastValidFolder: helper.urlToPath(model.folder)
|
||||||
onLastValidFolderChanged: text = lastValidFolder;
|
onLastValidFolderChanged: text = lastValidFolder;
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
font.pointSize: 14
|
||||||
|
font.bold: true
|
||||||
|
|
||||||
// FIXME add support auto-completion
|
// FIXME add support auto-completion
|
||||||
onAccepted: {
|
onAccepted: {
|
||||||
|
@ -93,7 +97,6 @@ ModalWindow {
|
||||||
}
|
}
|
||||||
model.folder = helper.pathToUrl(text);
|
model.folder = helper.pathToUrl(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
@ -104,6 +107,7 @@ ModalWindow {
|
||||||
property var backStack: []
|
property var backStack: []
|
||||||
property var tableViewConnection: Connections { target: fileTableView; onCurrentRowChanged: d.update(); }
|
property var tableViewConnection: Connections { target: fileTableView; onCurrentRowChanged: d.update(); }
|
||||||
property var modelConnection: Connections { target: model; onFolderChanged: d.update(); }
|
property var modelConnection: Connections { target: model; onFolderChanged: d.update(); }
|
||||||
|
property var homeDestination: helper.home();
|
||||||
Component.onCompleted: update();
|
Component.onCompleted: update();
|
||||||
|
|
||||||
function update() {
|
function update() {
|
||||||
|
@ -127,12 +131,20 @@ ModalWindow {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function navigateHome() {
|
||||||
|
model.folder = homeDestination;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FileTableView {
|
FileTableView {
|
||||||
id: fileTableView
|
id: fileTableView
|
||||||
anchors { left: parent.left; right: parent.right; top: currentDirectory.bottom; bottom: currentSelection.top; margins: 8 }
|
anchors { left: parent.left; right: parent.right; top: currentDirectory.bottom; bottom: currentSelection.top; margins: 8 }
|
||||||
onDoubleClicked: navigateToRow(row);
|
onDoubleClicked: navigateToRow(row);
|
||||||
|
focus: true
|
||||||
|
Keys.onReturnPressed: navigateToCurrentRow();
|
||||||
|
Keys.onEnterPressed: navigateToCurrentRow();
|
||||||
model: FolderListModel {
|
model: FolderListModel {
|
||||||
id: model
|
id: model
|
||||||
nameFilters: selectionType.currentFilter
|
nameFilters: selectionType.currentFilter
|
||||||
|
@ -146,6 +158,7 @@ ModalWindow {
|
||||||
upButton.enabled = Qt.binding(function() { return (model.parentFolder && model.parentFolder != "") ? true : false; });
|
upButton.enabled = Qt.binding(function() { return (model.parentFolder && model.parentFolder != "") ? true : false; });
|
||||||
showFiles = !root.selectDirectory
|
showFiles = !root.selectDirectory
|
||||||
}
|
}
|
||||||
|
onFolderChanged: fileTableView.currentRow = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
function navigateToRow(row) {
|
function navigateToRow(row) {
|
||||||
|
@ -159,10 +172,9 @@ ModalWindow {
|
||||||
var file = model.get(row, "fileURL");
|
var file = model.get(row, "fileURL");
|
||||||
if (isFolder) {
|
if (isFolder) {
|
||||||
fileTableView.model.folder = file
|
fileTableView.model.folder = file
|
||||||
currentRow = -1;
|
|
||||||
} else {
|
} else {
|
||||||
root.selectedFile(file);
|
root.selectedFile(file);
|
||||||
root.visible = false;
|
root.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -171,6 +183,7 @@ ModalWindow {
|
||||||
id: currentSelection
|
id: currentSelection
|
||||||
anchors { right: root.selectDirectory ? parent.right : selectionType.left; rightMargin: 8; left: parent.left; leftMargin: 8; top: selectionType.top }
|
anchors { right: root.selectDirectory ? parent.right : selectionType.left; rightMargin: 8; left: parent.left; leftMargin: 8; top: selectionType.top }
|
||||||
readOnly: true
|
readOnly: true
|
||||||
|
activeFocusOnTab: false
|
||||||
}
|
}
|
||||||
|
|
||||||
FileTypeSelection {
|
FileTypeSelection {
|
||||||
|
@ -187,17 +200,7 @@ ModalWindow {
|
||||||
anchors.rightMargin: 8
|
anchors.rightMargin: 8
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.bottomMargin: 8
|
anchors.bottomMargin: 8
|
||||||
layoutDirection: Qt.RightToLeft
|
|
||||||
spacing: 8
|
spacing: 8
|
||||||
Button {
|
|
||||||
id: cancelButton
|
|
||||||
text: "Cancel"
|
|
||||||
KeyNavigation.up: selectionType
|
|
||||||
KeyNavigation.left: openButton
|
|
||||||
KeyNavigation.right: fileTableView.contentItem
|
|
||||||
Keys.onReturnPressed: { canceled(); root.enabled = false }
|
|
||||||
onClicked: { canceled(); root.visible = false; }
|
|
||||||
}
|
|
||||||
Button {
|
Button {
|
||||||
id: openButton
|
id: openButton
|
||||||
text: root.selectDirectory ? "Choose" : "Open"
|
text: root.selectDirectory ? "Choose" : "Open"
|
||||||
|
@ -209,12 +212,28 @@ ModalWindow {
|
||||||
KeyNavigation.left: selectionType
|
KeyNavigation.left: selectionType
|
||||||
KeyNavigation.right: cancelButton
|
KeyNavigation.right: cancelButton
|
||||||
}
|
}
|
||||||
|
Button {
|
||||||
|
id: cancelButton
|
||||||
|
text: "Cancel"
|
||||||
|
KeyNavigation.up: selectionType
|
||||||
|
KeyNavigation.left: openButton
|
||||||
|
KeyNavigation.right: fileTableView.contentItem
|
||||||
|
Keys.onReturnPressed: { canceled(); root.enabled = false }
|
||||||
|
onClicked: { canceled(); root.visible = false; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Keys.onPressed: {
|
Keys.onPressed: {
|
||||||
if (event.key === Qt.Key_Backspace && d.navigateUp()) {
|
switch (event.key) {
|
||||||
event.accepted = true
|
case Qt.Key_Backspace:
|
||||||
|
event.accepted = d.navigateUp();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Qt.Key_Home:
|
||||||
|
event.accepted = d.navigateHome();
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ ModalWindow {
|
||||||
|
|
||||||
VrControls.ComboBox {
|
VrControls.ComboBox {
|
||||||
id: comboBox
|
id: comboBox
|
||||||
focus: items ? true : false
|
focus: true
|
||||||
visible: items ? true : false
|
visible: items ? true : false
|
||||||
anchors { left: parent.left; right: parent.right; verticalCenter: parent.verticalCenter }
|
anchors { left: parent.left; right: parent.right; verticalCenter: parent.verticalCenter }
|
||||||
model: items ? items : []
|
model: items ? items : []
|
||||||
|
|
Loading…
Reference in a new issue