qtdeclarative/examples/quickcontrols/filesystemexplorer/Main.qml

189 lines
6.0 KiB
QML
Raw Normal View History

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls.Basic
import QtQuick.Layouts
import FileSystemModule
ApplicationWindow {
id: root
width: 1100
height: 600
visible: true
flags: Qt.Window | Qt.FramelessWindowHint
title: qsTr("Qt Quick Controls 2 - File System Explorer")
property string currentFilePath: ""
property bool expandPath: false
menuBar: MyMenuBar {
rootWindow: root
infoText: currentFilePath
? (expandPath ? currentFilePath
: currentFilePath.substring(currentFilePath.lastIndexOf("/") + 1, currentFilePath.length))
: "File System Explorer"
MyMenu {
title: qsTr("File")
Action {
text: qsTr("Increase Font")
shortcut: "Ctrl++"
onTriggered: textArea.font.pixelSize += 1
}
Action {
text: qsTr("Decrease Font")
shortcut: "Ctrl+-"
onTriggered: textArea.font.pixelSize -= 1
}
Action {
text: expandPath ? qsTr("Toggle Short Path") : qsTr("Toggle Expand Path")
enabled: currentFilePath
onTriggered: expandPath = !expandPath
}
Action {
text: qsTr("Exit")
onTriggered: Qt.exit(0)
}
}
MyMenu {
title: qsTr("Edit")
Action {
text: qsTr("Cut")
shortcut: StandardKey.Cut
enabled: textArea.selectedText.length > 0
onTriggered: textArea.cut()
}
Action {
text: qsTr("Copy")
shortcut: StandardKey.Copy
enabled: textArea.selectedText.length > 0
onTriggered: textArea.copy()
}
Action {
text: qsTr("Paste")
shortcut: StandardKey.Paste
enabled: textArea.canPaste
onTriggered: textArea.paste()
}
Action {
text: qsTr("Select All")
shortcut: StandardKey.SelectAll
enabled: textArea.length > 0
onTriggered: textArea.selectAll()
}
Action {
text: qsTr("Undo")
shortcut: StandardKey.Undo
enabled: textArea.canUndo
onTriggered: textArea.undo()
}
}
}
Rectangle {
anchors.fill: parent
color: Colors.background
RowLayout {
anchors.fill: parent
spacing: 0
// Stores the buttons that navigate the application.
Sidebar {
id: sidebar
rootWindow: root
Layout.preferredWidth: 60
Layout.fillHeight: true
}
// Allows resizing parts of the UI.
SplitView {
Layout.fillWidth: true
Layout.fillHeight: true
handle: Rectangle {
implicitWidth: 10
color: SplitHandle.pressed ? Colors.color2 : Colors.background
border.color: Colors.color2
opacity: SplitHandle.hovered || SplitHandle.pressed ? 1.0 : 0.0
Behavior on opacity {
OpacityAnimator {
duration: 900
}
}
}
// We use an inline component to make a reusable TextArea component.
// This is convenient when the component is only used in one file.
component MyTextArea: TextArea {
antialiasing: true
color: Colors.textFile
selectedTextColor: Colors.textFile
selectionColor: Colors.selection
renderType: Text.QtRendering
textFormat: TextEdit.PlainText
background: null
}
Rectangle {
color: Colors.surface1
SplitView.preferredWidth: 250
SplitView.fillHeight: true
StackLayout {
currentIndex: sidebar.currentTabIndex
anchors.fill: parent
// Shows the help text.
MyTextArea {
readOnly: true
text: qsTr("This example shows how to use and visualize the file system.\n\n"
+ "Customized Qt Quick Components have been used to achieve this look.\n\n"
+ "You can edit the files but they won't be changed on the file system.\n\n"
+ "Click on the folder icon to the left to get started.")
wrapMode: TextArea.Wrap
}
// Shows the files on the file system.
FileSystemView {
id: fileSystemView
color: Colors.surface1
onFileClicked: (path) => root.currentFilePath = path
}
}
}
// The ScrollView that contains the TextArea which shows the file's content.
ScrollView {
leftPadding: 20
topPadding: 20
bottomPadding: 20
clip: true
SplitView.fillWidth: true
SplitView.fillHeight: true
property alias textArea: textArea
MyTextArea {
id: textArea
text: FileSystemModel.readFile(root.currentFilePath)
}
}
}
}
ResizeButton {}
}
}