// 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 ClideBreadCrumbs { id: breadCrumb Layout.bottomMargin: 5 Layout.leftMargin: 15 Layout.topMargin: 5 path: clideTreeView.rootDirectory onCrumbClicked: path => { Logger.trace("Crumb clicked: " + path); clideTreeView.rootDirectory = path; } } 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.path = clideTreeView.rootDirectory; } } } } ClideEditorView { 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 } }