mirror of
https://gitlab.com/eql/lqml.git
synced 2025-12-06 02:30:38 -08:00
164 lines
3.9 KiB
QML
164 lines
3.9 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Controls 2.15
|
|
import Qt.labs.folderlistmodel 2.15
|
|
import "." as Ext
|
|
|
|
Rectangle {
|
|
id: fileBrowser
|
|
objectName: "file_browser"
|
|
visible: false
|
|
|
|
property bool editMode: false
|
|
property string editFrom
|
|
|
|
function urlToString(url) {
|
|
var cut = (Qt.platform.os === "windows") ? "file:///" : "file://"
|
|
return url.toString().substring(cut.length)
|
|
}
|
|
|
|
Rectangle {
|
|
id: header
|
|
width: fileBrowser.width
|
|
height: headerColumn.height
|
|
z: 2
|
|
color: "#f0f0f0"
|
|
|
|
Column {
|
|
id: headerColumn
|
|
|
|
Ext.MenuBack {
|
|
id: menuBack
|
|
|
|
Row {
|
|
id: buttonRow
|
|
spacing: 4
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
// one directory up
|
|
Ext.FileButton {
|
|
text: "\uf062"
|
|
onClicked: Lisp.call("dialogs:set-file-browser-path",
|
|
urlToString(folderModel.parentFolder))
|
|
}
|
|
|
|
// documents
|
|
Ext.FileButton {
|
|
text: "\uf0f6"
|
|
onClicked: Lisp.call("dialogs:set-file-browser-path", ":data")
|
|
}
|
|
|
|
// home
|
|
Ext.FileButton {
|
|
text: "\uf015"
|
|
onClicked: Lisp.call("dialogs:set-file-browser-path", ":home")
|
|
}
|
|
}
|
|
}
|
|
|
|
Ext.TextField {
|
|
id: path
|
|
objectName: "path"
|
|
width: fileBrowser.width
|
|
inputMethodHints: Qt.ImhNoAutoUppercase | Qt.ImhNoPredictiveText
|
|
|
|
onFocusChanged: if (focus) { cursorPosition = length }
|
|
|
|
onAccepted: {
|
|
if (fileBrowser.editMode) {
|
|
Lisp.call("dialogs:rename-file*", fileBrowser.editFrom, path.text)
|
|
fileBrowser.editMode = false
|
|
} else {
|
|
Lisp.call("dialogs:set-file-name", text)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// edit mode
|
|
Ext.FileButton {
|
|
id: fileEdit
|
|
objectName: "file_edit"
|
|
anchors.right: parent.right
|
|
contentItem: Text {
|
|
id: editButton
|
|
horizontalAlignment: Text.AlignHCenter
|
|
verticalAlignment: Text.AlignVCenter
|
|
text: "\uf044"
|
|
color: fileBrowser.editMode ? "red" : "#007aff"
|
|
font.family: fontAwesome.name
|
|
font.pixelSize: 24
|
|
}
|
|
|
|
onClicked: fileBrowser.editMode = !fileBrowser.editMode
|
|
}
|
|
}
|
|
|
|
ListView {
|
|
id: folderView
|
|
objectName: "folder_view"
|
|
y: header.height
|
|
width: parent.width
|
|
height: parent.height - y
|
|
delegate: Ext.FileDelegate {}
|
|
currentIndex: -1 // no initial highlight
|
|
footerPositioning: ListView.OverlayHeader
|
|
|
|
property var colors: ["white", "#f0f0f0"]
|
|
|
|
model: FolderListModel {
|
|
id: folderModel
|
|
objectName: "folder_model"
|
|
showDirsFirst: true
|
|
showHidden: true
|
|
nameFilters: ["*.lisp", "*.lsp", "*.qml", "*.asd", "*.exp", "*.sexp",
|
|
"*.fas", "*.fasb", "*.fasc", ".eclrc", ".repl-history"]
|
|
|
|
onFolderChanged: path.text = urlToString(folder)
|
|
}
|
|
|
|
Row {
|
|
y: main.small ? 7 : 10
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
spacing: 20
|
|
visible: Lisp.call("qml:mobile-p") ? path.focus : false
|
|
|
|
// cursor back
|
|
Ext.ArrowButton {
|
|
opacity: 0.15
|
|
text: "\uf137"
|
|
|
|
onPressed: path.cursorPosition--
|
|
onPressAndHold: path.cursorPosition = 0
|
|
}
|
|
|
|
// cursor forward
|
|
Ext.ArrowButton {
|
|
opacity: 0.15
|
|
text: "\uf138"
|
|
|
|
onPressed: path.cursorPosition++
|
|
onPressAndHold: path.cursorPosition = path.length
|
|
}
|
|
}
|
|
|
|
footer: Rectangle {
|
|
width: fileBrowser.width
|
|
height: itemCount.height + 4
|
|
z: 2
|
|
color: "lightgray"
|
|
border.width: 1
|
|
border.color: "gray"
|
|
|
|
Row {
|
|
anchors.fill: parent
|
|
|
|
Text {
|
|
id: itemCount
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: Lisp.call("cl:format", null, " ~D item~P", folderModel.count, folderModel.count)
|
|
font.pixelSize: 18
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|