aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/companion/CompanionModule.qml
blob: 8d6a68d873d310d068e4384a55a4c40f9ff3a3d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright (C) 2026 Danilo M. <danix@danix.xyz>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

import QtQuick
import "../.."
import "../appearance"
import "../../companion"

// The desktop companion's settings: whether she is shown, the same
// preference SUPER+\ toggles, so the switch follows the key; and where her
// wallpaper list is, marked with the heart in the wallpaper picker.
Module {
    name: "companion"
    label: "Companion"
    // nf-md-account_heart, present in Inconsolata Nerd Font.
    icon: "\u{F0899}"
    settings: true
    group: "Companion"
    keywords: ["companion", "2b", "mascot", "character", "show", "hide", "wallpaper", "blush", "leotard", "timeout"]

    page: Component {
        Page {
            title: "Companion"
            Column {
                width: parent.width
                spacing: 6

                Item {
                    width: parent.width
                    height: 34
                    Text {
                        id: lbl
                        anchors { left: parent.left; verticalCenter: parent.verticalCenter }
                        width: 160
                        text: "Shown"
                        color: Theme.subtext
                        font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 3 }
                    }
                    Switch {
                        id: sw
                        anchors { left: lbl.right; leftMargin: 8; verticalCenter: parent.verticalCenter }
                        checked: Prefs.companion
                        onToggled: on => Prefs.setCompanion(on)
                    }
                    Text {
                        anchors { left: sw.right; leftMargin: 10; right: parent.right; verticalCenter: parent.verticalCenter }
                        elide: Text.ElideRight
                        text: "Also SUPER+\\. Kept across restarts."
                        color: Theme.overlay
                        font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 5 }
                    }
                }
                // After the self-destruct. Off keeps the leotard until she is
                // hidden and shown again; turning it back on starts from the
                // seconds in the field.
                Item {
                    width: parent.width
                    height: 34
                    Text {
                        id: lblSk
                        anchors { left: parent.left; verticalCenter: parent.verticalCenter }
                        width: 160
                        text: "Leotard timeout"
                        color: Theme.subtext
                        font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 3 }
                    }
                    Switch {
                        id: swSk
                        anchors { left: lblSk.right; leftMargin: 8; verticalCenter: parent.verticalCenter }
                        checked: Prefs.companionSkirtless > 0
                        onToggled: on => Prefs.setCompanionSkirtless(on ? (parseInt(fSk.value) || 60) : 0)
                    }
                    Field {
                        id: fSk
                        anchors { left: swSk.right; leftMargin: 10; verticalCenter: parent.verticalCenter }
                        width: 60
                        enabled: swSk.checked
                        opacity: enabled ? 1 : 0.4
                        value: String(Prefs.companionSkirtless || 60)
                        placeholder: "60"
                        onEdited: {
                            const n = parseInt(value);
                            if (n >= 1 && String(n) === value.trim()) Prefs.setCompanionSkirtless(n);
                            else value = String(Prefs.companionSkirtless || 60);
                        }
                    }
                    Text {
                        anchors { left: fSk.right; leftMargin: 10; right: parent.right; verticalCenter: parent.verticalCenter }
                        elide: Text.ElideRight
                        text: swSk.checked ? "seconds" : "until she is hidden and shown again"
                        color: Theme.overlay
                        font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 5 }
                    }
                }
                Item {
                    width: parent.width
                    height: 34
                    Text {
                        id: lbl2
                        anchors { left: parent.left; verticalCenter: parent.verticalCenter }
                        width: 160
                        text: "Wallpaper list"
                        color: Theme.subtext
                        font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 3 }
                    }
                    Field {
                        anchors { left: lbl2.right; leftMargin: 8; right: parent.right; verticalCenter: parent.verticalCenter }
                        value: Prefs.companionBlushFile
                        placeholder: Admired.defaultPath.replace(Admired.home, "~")
                        onEdited: Prefs.setCompanionBlushFile(value)
                    }
                }
                Text {
                    width: parent.width
                    wrapMode: Text.WordWrap
                    text: "One path per line. She blushes at these on an empty workspace; the heart in Wallpaper adds and removes them."
                    color: Theme.overlay
                    font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 5 }
                }
            }
        }
    }
}