mirror of
https://github.com/end-4/dots-hyprland.git
synced 2026-06-07 07:49:28 -05:00
121 lines
3.7 KiB
QML
121 lines
3.7 KiB
QML
import QtQuick
|
|
import QtQuick.Layouts
|
|
import qs
|
|
import qs.modules.common
|
|
import qs.modules.common.widgets
|
|
import qs.modules.common.functions
|
|
|
|
Rectangle {
|
|
id: root
|
|
required property var directory
|
|
property bool showBreadcrumb: true
|
|
onShowBreadcrumbChanged: {
|
|
addressInput.text = root.directory;
|
|
}
|
|
|
|
signal navigateToDirectory(string path)
|
|
|
|
property real padding: 6
|
|
implicitWidth: mainLayout.implicitWidth + padding * 2
|
|
implicitHeight: mainLayout.implicitHeight + padding * 2
|
|
color: Appearance.colors.colLayer2
|
|
|
|
function focusBreadcrumb() {
|
|
root.showBreadcrumb = false;
|
|
addressInput.forceActiveFocus();
|
|
}
|
|
|
|
RowLayout {
|
|
id: mainLayout
|
|
anchors {
|
|
fill: parent
|
|
margins: root.padding
|
|
}
|
|
spacing: 8
|
|
|
|
RippleButton {
|
|
id: parentDirButton
|
|
onClicked: root.navigateToDirectory(FileUtils.parentDirectory(root.directory))
|
|
contentItem: MaterialSymbol {
|
|
text: "drive_folder_upload"
|
|
iconSize: Appearance.font.pixelSize.larger
|
|
}
|
|
}
|
|
|
|
Item {
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
|
|
Rectangle {
|
|
id: directoryEntry
|
|
visible: !root.showBreadcrumb
|
|
anchors.fill: parent
|
|
color: Appearance.colors.colLayer1
|
|
radius: Appearance.rounding.full
|
|
implicitWidth: addressInput.implicitWidth
|
|
implicitHeight: addressInput.implicitHeight
|
|
|
|
Keys.onPressed: event => {
|
|
if (directoryEntry.visible && event.key === Qt.Key_Escape) {
|
|
root.showBreadcrumb = true;
|
|
event.accepted = true;
|
|
return;
|
|
}
|
|
event.accepted = false;
|
|
}
|
|
|
|
StyledTextInput {
|
|
id: addressInput
|
|
anchors.fill: parent
|
|
padding: 10
|
|
text: root.directory
|
|
|
|
Keys.onPressed: event => {
|
|
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
|
|
root.navigateToDirectory(text);
|
|
root.showBreadcrumb = true;
|
|
event.accepted = true;
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
// I-beam cursor
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.NoButton
|
|
hoverEnabled: true
|
|
cursorShape: Qt.IBeamCursor
|
|
}
|
|
}
|
|
}
|
|
|
|
Loader {
|
|
id: breadcrumbLoader
|
|
active: root.showBreadcrumb
|
|
visible: root.showBreadcrumb
|
|
anchors.fill: parent
|
|
sourceComponent: AddressBreadcrumb {
|
|
directory: root.directory
|
|
onNavigateToDirectory: dir => {
|
|
root.navigateToDirectory(dir);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
RippleButton {
|
|
id: dirEditButton
|
|
toggled: !root.showBreadcrumb
|
|
onClicked: root.showBreadcrumb = !root.showBreadcrumb
|
|
contentItem: MaterialSymbol {
|
|
text: "edit"
|
|
iconSize: Appearance.font.pixelSize.larger
|
|
color: dirEditButton.toggled ? Appearance.colors.colOnPrimary : Appearance.colors.colOnLayer2
|
|
}
|
|
|
|
StyledToolTip {
|
|
text: Translation.tr("Edit directory")
|
|
}
|
|
}
|
|
}
|
|
}
|