1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-24 13:32:50 -05:00
Files
DankMaterialShell/quickshell/Modals/DankLauncherV2/Section.qml
bbedward 1d5d876e16 launcher: Dank Launcher V2 (beta)
- Aggregate plugins/extensions in new "all" tab
- Quick tab actions
- New tile mode for results
- Plugins can enforce/require view mode, or set preferred default
- Danksearch under "files" category
2026-01-20 17:59:13 -05:00

115 lines
3.6 KiB
QML

pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import qs.Common
Item {
id: root
property var section: null
property var controller: null
property string viewMode: "list"
property int gridColumns: 4
property int startIndex: 0
signal itemClicked(int flatIndex)
signal itemRightClicked(int flatIndex, var item, real mouseX, real mouseY)
height: headerItem.height + (section?.collapsed ? 0 : contentLoader.height + Theme.spacingXS)
width: parent?.width ?? 200
SectionHeader {
id: headerItem
width: parent.width
section: root.section
controller: root.controller
viewMode: root.viewMode
canChangeViewMode: root.controller?.canChangeSectionViewMode(root.section?.id) ?? true
onViewModeToggled: {
if (root.controller && root.section) {
var newMode = root.viewMode === "list" ? "grid" : "list";
root.controller.setSectionViewMode(root.section.id, newMode);
}
}
}
Loader {
id: contentLoader
anchors.top: headerItem.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.topMargin: Theme.spacingXS
active: !root.section?.collapsed
visible: active
sourceComponent: root.viewMode === "grid" ? gridComponent : listComponent
Component {
id: listComponent
Column {
spacing: 2
width: contentLoader.width
Repeater {
model: ScriptModel {
values: root.section?.items ?? []
objectProp: "id"
}
ResultItem {
required property var modelData
required property int index
width: parent?.width ?? 200
item: modelData
isSelected: (root.startIndex + index) === root.controller?.selectedFlatIndex
controller: root.controller
flatIndex: root.startIndex + index
onClicked: root.itemClicked(root.startIndex + index)
onRightClicked: (mouseX, mouseY) => {
root.itemRightClicked(root.startIndex + index, modelData, mouseX, mouseY);
}
}
}
}
}
Component {
id: gridComponent
Flow {
width: contentLoader.width
spacing: 4
Repeater {
model: ScriptModel {
values: root.section?.items ?? []
objectProp: "id"
}
GridItem {
required property var modelData
required property int index
width: Math.floor((contentLoader.width - (root.gridColumns - 1) * 4) / root.gridColumns)
height: width + 24
item: modelData
isSelected: (root.startIndex + index) === root.controller?.selectedFlatIndex
controller: root.controller
flatIndex: root.startIndex + index
onClicked: root.itemClicked(root.startIndex + index)
onRightClicked: (mouseX, mouseY) => {
root.itemRightClicked(root.startIndex + index, modelData, mouseX, mouseY);
}
}
}
}
}
}
}