diff --git a/example/T_TreeView.qml b/example/T_TreeView.qml index 5ec7ec7..932df24 100644 --- a/example/T_TreeView.qml +++ b/example/T_TreeView.qml @@ -66,7 +66,7 @@ Item { } Component.onCompleted: { - var org = createOrg(10, 3, 5) + var org = createOrg(3, 3, 3) updateData(org) } @@ -84,13 +84,13 @@ Item { FluText{ text:{ if(tree_view.selectionMode === FluTreeView.None){ - return "FluTreeView.None" + return "selectionMode->FluTreeView.None" } if(tree_view.selectionMode === FluTreeView.Single){ - return "FluTreeView.Single" + return "selectionMode->FluTreeView.Single" } if(tree_view.selectionMode === FluTreeView.Multiple){ - return "FluTreeView.Multiple" + return "selectionMode->FluTreeView.Multiple" } } } diff --git a/src/Fluent.cpp b/src/Fluent.cpp index bd1e989..40d509d 100644 --- a/src/Fluent.cpp +++ b/src/Fluent.cpp @@ -35,8 +35,8 @@ void Fluent::registerTypes(const char *uri){ qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluTreeView.qml"),uri,major,minor,"FluTreeView"); qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluContentDialog.qml"),uri,major,minor,"FluContentDialog"); - qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluMenu.qml"),uri,major,minor,"FluMenu"); qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluMenuItem.qml"),uri,major,minor,"FluMenuItem"); + qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluMenu.qml"),uri,major,minor,"FluMenu"); qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluScrollBar.qml"),uri,major,minor,"FluScrollBar"); qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluTextButton.qml"),uri,major,minor,"FluTextButton"); qmlRegisterType(QUrl("qrc:/com.zhuzichu/controls/FluMultiLineTextBox.qml"),uri,major,minor,"FluMultiLineTextBox"); diff --git a/src/controls/FluCheckBox.qml b/src/controls/FluCheckBox.qml index 62d0f7b..38b2fb3 100644 --- a/src/controls/FluCheckBox.qml +++ b/src/controls/FluCheckBox.qml @@ -8,6 +8,7 @@ Item { property bool checked: false property string text: "Check Box" property var checkClicked + property bool hovered: mouse_area.containsMouse width: childrenRect.width height: childrenRect.height diff --git a/src/controls/FluTreeItem.qml b/src/controls/FluTreeItem.qml deleted file mode 100644 index 34afaa6..0000000 --- a/src/controls/FluTreeItem.qml +++ /dev/null @@ -1,8 +0,0 @@ -import QtQuick 2.15 - - -Item { - property string name - property bool expanded: false - property list children -} diff --git a/src/controls/FluTreeView.qml b/src/controls/FluTreeView.qml index 5043e22..0346853 100644 --- a/src/controls/FluTreeView.qml +++ b/src/controls/FluTreeView.qml @@ -31,6 +31,8 @@ Rectangle { ListElement{ text: "根节点" expanded:true + key:"123456" + multipSelected:false items:[] } } @@ -66,7 +68,7 @@ Rectangle { property real level: (mapToItem(list_root,0,0).x+list_root.contentX)/0.001 property var text: model.text??"Item" - property bool isItems : (model.items !== undefined) && (model.items.count !== 0) + property bool hasChild : (model.items !== undefined) && (model.items.count !== 0) property var items: model.items??[] property var expanded: model.expanded??true property int width_hint: calculateWidth() @@ -99,12 +101,12 @@ Rectangle { if(item_layout.singleSelected && selectionMode === FluTreeView.Single){ return Qt.rgba(62/255,62/255,62/255,1) } - 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) + return (item_layout_mouse.containsMouse || item_layout_expanded.hovered || item_layout_checkbox.hovered)?Qt.rgba(62/255,62/255,62/255,1):Qt.rgba(50/255,50/255,50/255,1) }else{ if(item_layout.singleSelected && selectionMode === FluTreeView.Single){ return Qt.rgba(244/255,244/255,244/255,1) } - 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) + return (item_layout_mouse.containsMouse || item_layout_expanded.hovered || item_layout_checkbox.hovered)?Qt.rgba(244/255,244/255,244/255,1):Qt.rgba(253/255,253/255,253/255,1) } } @@ -160,14 +162,67 @@ Rectangle { } FluCheckBox{ + id:item_layout_checkbox text:"" - checked: multipElement.includes(itemModel) + checked: itemModel.multipSelected visible: selectionMode === FluTreeView.Multiple checkClicked:function(){ - if(checked){ - multipElement = multipElement.filter((value) => value !== itemModel) + if(hasChild){ + }else{ - multipElement = [...multipElement,itemModel] + itemModel.multipSelected = !itemModel.multipSelected + + const stack = [tree_model.get(0)]; + const result = []; + while (stack.length > 0) { + const curr = stack.pop(); + result.unshift(curr); + if (curr.items) { + for(var i=0 ; i 0) { + // const node = stack.pop(); + // for (var i = 0 ; i controls/FluTextButton.qml controls/FluContentDialog.qml controls/FluTreeView.qml - controls/FluTreeItem.qml