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 }
}
}
}
}
}
|