// SPDX-FileCopyrightText: 2026, Shaun Reed // // SPDX-License-Identifier: GNU General Public License v3.0 or later import QtQuick import QtQuick.Controls import QtQuick.Layouts import clide.module 1.0 import Logger 1.0 SplitView { id: root // Path to the directory of the project opened in clide. required property string projectDir Layout.fillHeight: true Layout.fillWidth: true anchors.fill: parent // Customized handle to drag between the Navigation and the Editor. handle: Rectangle { id: verticalSplitHandle border.color: SplitHandle.pressed ? RustColors.pressed : SplitHandle.hovered ? RustColors.hovered : RustColors.gutter color: SplitHandle.pressed ? RustColors.pressed : SplitHandle.hovered ? RustColors.hovered : RustColors.gutter implicitWidth: 8 radius: 2.5 // Execute these behaviors when the color is changed. Behavior on color { ColorAnimation { duration: 400 } } } Rectangle { id: navigationView SplitView.fillHeight: true SplitView.maximumWidth: 250 SplitView.minimumWidth: 0 SplitView.preferredWidth: 200 color: RustColors.explorer_background ColumnLayout { spacing: 2 // TODO: Make a ClideBreadCrumb element to support select parent paths as root Rectangle { color: RustColors.explorer_background height: 25 width: navigationView.width Text { id: breadCrumb anchors.fill: parent color: RustColors.explorer_text elide: Text.ElideLeft horizontalAlignment: Text.AlignHCenter text: clideTreeView.rootDirectory verticalAlignment: Text.AlignVCenter } TapHandler { acceptedButtons: Qt.RightButton onSingleTapped: (eventPoint, button) => contextMenu.popup() } Menu { id: contextMenu Action { text: qsTr("Reset root index") onTriggered: { Logger.log("Resetting root directory: " + clideTreeView.originalRootDirectory); clideTreeView.rootDirectory = clideTreeView.originalRootDirectory; } } } } ClideTreeView { id: clideTreeView height: navigationView.height // Path to the directory opened in the file explorer. originalRootDirectory: root.projectDir rootDirectory: root.projectDir width: navigationView.width onFileClicked: path => clideEditor.filePath = path onRootDirectoryChanged: { Logger.log("Setting root directory: " + clideTreeView.rootDirectory); breadCrumb.text = clideTreeView.rootDirectory; } } } } ClideEditor { id: clideEditor SplitView.fillWidth: true // Provide a path to the file currently open in the text editor. // Initialized using the Default trait in Rust QML singleton FileSystem. filePath: FileSystem.filePath } }