summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/DankLauncherV2/ResultItem.qml
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/DankLauncherV2/ResultItem.qml')
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/DankLauncherV2/ResultItem.qml196
1 files changed, 196 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/DankLauncherV2/ResultItem.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/DankLauncherV2/ResultItem.qml
new file mode 100644
index 0000000..0a50cd3
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/DankLauncherV2/ResultItem.qml
@@ -0,0 +1,196 @@
+pragma ComponentBehavior: Bound
+
+import QtQuick
+import qs.Common
+import qs.Widgets
+
+Rectangle {
+ id: root
+
+ property var item: null
+ property bool isSelected: false
+ property bool isHovered: itemArea.containsMouse || allModeToggleArea.containsMouse
+ property var controller: null
+ property int flatIndex: -1
+
+ signal clicked
+ signal rightClicked(real mouseX, real mouseY)
+
+ readonly property string iconValue: {
+ if (!item)
+ return "";
+ switch (item.iconType) {
+ case "material":
+ case "nerd":
+ return "material:" + (item.icon || "apps");
+ case "unicode":
+ return "unicode:" + (item.icon || "");
+ case "composite":
+ return item.iconFull || "";
+ case "image":
+ default:
+ return item.icon || "";
+ }
+ }
+
+ width: parent?.width ?? 200
+ height: 52
+ color: isSelected ? Theme.primaryPressed : isHovered ? Theme.primaryHoverLight : "transparent"
+ radius: Theme.cornerRadius
+
+ DankRipple {
+ id: rippleLayer
+ rippleColor: Theme.surfaceText
+ cornerRadius: root.radius
+ }
+
+ MouseArea {
+ id: itemArea
+ z: 1
+ anchors.fill: parent
+ anchors.rightMargin: root.item?.type === "plugin_browse" ? 40 : 0
+ hoverEnabled: true
+ cursorShape: Qt.PointingHandCursor
+ acceptedButtons: Qt.LeftButton | Qt.RightButton
+
+ onPressed: mouse => {
+ if (mouse.button === Qt.LeftButton)
+ rippleLayer.trigger(mouse.x, mouse.y);
+ }
+ onClicked: mouse => {
+ if (mouse.button === Qt.RightButton) {
+ var scenePos = mapToItem(null, mouse.x, mouse.y);
+ root.rightClicked(scenePos.x, scenePos.y);
+ } else {
+ root.clicked();
+ }
+ }
+
+ onPositionChanged: {
+ if (root.controller)
+ root.controller.keyboardNavigationActive = false;
+ }
+ }
+
+ Row {
+ anchors.fill: parent
+ anchors.leftMargin: Theme.spacingM
+ anchors.rightMargin: Theme.spacingM
+ spacing: Theme.spacingM
+
+ AppIconRenderer {
+ width: 36
+ height: 36
+ anchors.verticalCenter: parent.verticalCenter
+ iconValue: root.iconValue
+ iconSize: 36
+ fallbackText: (root.item?.name?.length > 0) ? root.item.name.charAt(0).toUpperCase() : "?"
+ materialIconSizeAdjustment: 12
+ }
+
+ Column {
+ anchors.verticalCenter: parent.verticalCenter
+ width: parent.width - 36 - Theme.spacingM * 3 - rightContent.width
+ spacing: 2
+
+ Text {
+ width: parent.width
+ text: root.item?._hName ?? root.item?.name ?? ""
+ textFormat: root.item?._hRich ? Text.RichText : Text.PlainText
+ font.pixelSize: Theme.fontSizeMedium
+ font.weight: Font.Medium
+ font.family: Theme.fontFamily
+ color: Theme.surfaceText
+ elide: Text.ElideRight
+ horizontalAlignment: Text.AlignLeft
+ }
+
+ Text {
+ width: parent.width
+ text: root.item?._hSub ?? root.item?.subtitle ?? ""
+ textFormat: root.item?._hRich ? Text.RichText : Text.PlainText
+ font.pixelSize: Theme.fontSizeSmall
+ font.family: Theme.fontFamily
+ color: Theme.surfaceVariantText
+ elide: Text.ElideRight
+ clip: true
+ visible: (root.item?.subtitle ?? "").length > 0
+ horizontalAlignment: Text.AlignLeft
+ }
+ }
+
+ Row {
+ id: rightContent
+ anchors.verticalCenter: parent.verticalCenter
+ spacing: Theme.spacingS
+
+ Rectangle {
+ id: allModeToggle
+ visible: root.item?.type === "plugin_browse"
+ width: 28
+ height: 28
+ radius: 14
+ anchors.verticalCenter: parent.verticalCenter
+ color: allModeToggleArea.containsMouse ? Theme.surfaceHover : "transparent"
+
+ property bool isAllowed: {
+ if (root.item?.type !== "plugin_browse")
+ return false;
+ var pluginId = root.item?.data?.pluginId;
+ if (!pluginId)
+ return false;
+ SettingsData.launcherPluginVisibility;
+ return SettingsData.getPluginAllowWithoutTrigger(pluginId);
+ }
+
+ DankIcon {
+ anchors.centerIn: parent
+ name: allModeToggle.isAllowed ? "visibility" : "visibility_off"
+ size: 18
+ color: allModeToggle.isAllowed ? Theme.primary : Theme.surfaceVariantText
+ }
+
+ MouseArea {
+ id: allModeToggleArea
+ anchors.fill: parent
+ hoverEnabled: true
+ cursorShape: Qt.PointingHandCursor
+ onClicked: {
+ var pluginId = root.item?.data?.pluginId;
+ if (!pluginId)
+ return;
+ SettingsData.setPluginAllowWithoutTrigger(pluginId, !allModeToggle.isAllowed);
+ }
+ }
+ }
+
+ Rectangle {
+ visible: !!root.item?.type && root.item.type !== "app" && root.item.type !== "plugin_browse"
+ width: typeBadge.implicitWidth + Theme.spacingS * 2
+ height: 20
+ radius: 10
+ color: Theme.surfaceVariantAlpha
+ anchors.verticalCenter: parent.verticalCenter
+
+ StyledText {
+ id: typeBadge
+ anchors.centerIn: parent
+ text: {
+ if (!root.item)
+ return "";
+ switch (root.item.type) {
+ case "plugin":
+ return I18n.tr("Plugin");
+ case "file":
+ return root.item.data?.is_dir ? I18n.tr("Folder") : I18n.tr("File");
+ default:
+ return "";
+ }
+ }
+ font.pixelSize: Theme.fontSizeSmall - 2
+ color: Theme.surfaceVariantText
+ }
+ }
+ }
+ }
+}