FluentUI/src/controls/FluTreeView.qml

273 lines
10 KiB
QML
Raw Normal View History

2023-03-07 00:05:27 +08:00
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Layouts 1.15
2023-03-07 18:43:03 +08:00
import QtQuick.Controls 2.15
2023-03-07 00:05:27 +08:00
import FluentUI 1.0
import QtGraphicalEffects 1.15
Rectangle {
id:root
2023-03-07 18:43:03 +08:00
color: FluTheme.isDark ? Qt.rgba(50/255,50/255,50/255,1) : Qt.rgba(253/255,253/255,253/255,1)
2023-03-07 00:05:27 +08:00
2023-03-07 18:43:03 +08:00
property alias model: list_root.model
ListModel {
id: tree_model
ListElement {
text: "Root"
expanded:true
items: [
ListElement {
text: "Node 1"
expanded:false
items: [
ListElement {
text: "Node 1.1"
expanded:true
items:[
ListElement{
text:"Node 1.1.1"
expanded:true
items:[
ListElement{
text:"Node 1.1.1.1"
expanded:false
items:[]
},
ListElement{
text:"Node 1.1.1.2"
expanded:false
items:[]
},
ListElement{
text:"Node 1.1.1.3"
expanded:false
items:[]
},
ListElement{
text:"Node 1.1.1.4"
expanded:false
items:[]
},
ListElement{
text:"Node 1.1.1.5"
expanded:false
items:[]
},
ListElement{
text:"Node 1.1.1.6"
expanded:false
items:[]
}
]
}
]
},
ListElement {
text: "Node 1.2"
expanded:false
items:[]
}
]
},
ListElement {
text: "Node 2"
expanded:false
items:[]
},
ListElement {
text: "Node 3"
expanded:true
items: [
ListElement {
text: "Node 3.1"
expanded:false
items:[]
},
ListElement {
text: "Node 3.2"
expanded:false
items:[]
},
ListElement {
text: "Node 3.3"
expanded:false
items:[]
},
ListElement {
text: "Node 3.4"
expanded:false
items:[]
},
ListElement {
text: "Node 3.5"
expanded:false
items:[]
},
ListElement {
text: "Node 3.6"
expanded:false
items:[]
},
ListElement {
text: "Node 3.7"
expanded:false
items:[]
},
ListElement {
text: "Node 3.8"
expanded:false
items:[]
},
ListElement {
text: "Node 3.9"
expanded:false
items:[]
},
ListElement {
text: "Node 3.10"
expanded:true
items:[
ListElement{
text:"Node 3.10.1"
expanded:false
items:[]
},
ListElement{
text:"Node 3.10.2"
expanded:false
items:[]
},
ListElement{
text:"Node 3.10.3"
expanded:false
items:[]
},
ListElement{
text:"Node 3.10.4"
expanded:false
items:[]
},
ListElement{
text:"Node 3.10.5"
expanded:false
items:[]
},
ListElement{
text:"Node 3.10.6"
expanded:false
items:[]
},
ListElement{
text:"Node 3.10.7"
expanded:false
items:[]
},
ListElement{
text:"Node 3.10.8"
expanded:false
items:[]
},
ListElement{
text:"Node 3.10.9"
expanded:false
items:[]
}
]
},
ListElement {
text: "Node 3.11"
expanded:false
items:[]
}
]
}
]
}
2023-03-07 00:05:27 +08:00
}
2023-03-07 18:43:03 +08:00
Component{
id:comp_delegate
ColumnLayout{
id:layout_column
spacing: 0
property var itemModel: model
property int level: mapToItem(list_root,0,0).x/0.001
2023-03-07 00:05:27 +08:00
width: list_root.width
2023-03-07 18:43:03 +08:00
Item{
Layout.preferredHeight: childrenRect.height
Layout.preferredWidth: childrenRect.width
2023-03-07 00:05:27 +08:00
2023-03-07 18:43:03 +08:00
Rectangle{
height: parent.height
width: list_root.width
anchors.margins: 2
radius: 4
color:{
if(FluTheme.isDark){
return (item_layout_mouse.containsMouse || item_layout_expanded.hovered)?Qt.rgba(62/255,62/255,62/255,1):Qt.rgba(50/255,50/255,50/255,1)
}else{
return (item_layout_mouse.containsMouse || item_layout_expanded.hovered)?Qt.rgba(244/255,244/255,244/255,1):Qt.rgba(253/255,253/255,253/255,1)
}
}
2023-03-07 00:05:27 +08:00
2023-03-07 18:43:03 +08:00
MouseArea{
id:item_layout_mouse
anchors.fill: parent
hoverEnabled: true
onClicked: {
console.debug("---------")
}
}
}
2023-03-07 00:05:27 +08:00
2023-03-07 18:43:03 +08:00
RowLayout{
spacing: 0
Item{
width: 15*level
Layout.alignment: Qt.AlignVCenter
}
FluIconButton{
id:item_layout_expanded
color:"#00000000"
icon:model.expanded?FluentIcons.FA_angle_down:FluentIcons.FA_angle_right
onClicked: {
model.expanded = !model.expanded
}
}
FluText{
text:model.text
Layout.alignment: Qt.AlignVCenter
}
}
}
Item{
Layout.preferredWidth: layout_column.width
Layout.preferredHeight:childrenRect.height
visible: model.expanded
ListView{
x:0.001
width: parent.width
height: childrenRect.height
model:itemModel.items
delegate:comp_delegate
boundsBehavior: ListView.StopAtBounds
}
}
2023-03-07 00:05:27 +08:00
2023-03-07 18:43:03 +08:00
}
2023-03-07 00:05:27 +08:00
}
2023-03-07 18:43:03 +08:00
ListView{
id:list_root
anchors.fill: parent
delegate:comp_delegate
clip: true
}
2023-03-07 00:05:27 +08:00
}