various fixes
This commit is contained in:
5 files changed
+148
-3
No files matched your search
@@ -29,6 +29,29 @@ ScrollView {
|
||||
controller.patchSettings({ notifications: { telegram: patch } })
|
||||
}
|
||||
|
||||
// Presets are a saved list on the server (`pomodoro.presets`), each one a
|
||||
// name plus its own work/short/long minutes — editable here, not baked
|
||||
// into the UI. `_merge` on the backend replaces list fields wholesale, so
|
||||
// editing one preset's number means resending the whole list.
|
||||
function patchPreset(index, key, value) {
|
||||
if (!page.pomodoro || !page.pomodoro.presets) return
|
||||
var presets = page.pomodoro.presets.map(function (p) { return Object.assign({}, p) })
|
||||
presets[index][key] = value
|
||||
controller.patchSettings({ pomodoro: { presets: presets } })
|
||||
}
|
||||
function applyPreset(index) {
|
||||
if (!page.pomodoro || !page.pomodoro.presets) return
|
||||
var preset = page.pomodoro.presets[index]
|
||||
controller.patchSettings({
|
||||
pomodoro: {
|
||||
work_minutes: preset.work_minutes,
|
||||
short_break_minutes: preset.short_break_minutes,
|
||||
long_break_minutes: preset.long_break_minutes,
|
||||
cycles_before_long_break: preset.cycles_before_long_break
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
component Field: ColumnLayout {
|
||||
property string label: ""
|
||||
default property alias content: holder.data
|
||||
@@ -104,6 +127,70 @@ ScrollView {
|
||||
spacing: 12
|
||||
SectionTitle { text: "Timer" }
|
||||
|
||||
// Presets: a saved list of work/short/long combos. "Apply" copies
|
||||
// one onto the live settings below; the numbers on each row are
|
||||
// the preset's own and edit it in place.
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: 8
|
||||
|
||||
Repeater {
|
||||
model: page.pomodoro && page.pomodoro.presets ? page.pomodoro.presets : []
|
||||
|
||||
RowLayout {
|
||||
id: presetRow
|
||||
required property var modelData
|
||||
required property int index
|
||||
Layout.fillWidth: true
|
||||
spacing: 16
|
||||
|
||||
readonly property bool isActive: page.pomodoro
|
||||
&& page.pomodoro.work_minutes === modelData.work_minutes
|
||||
&& page.pomodoro.short_break_minutes === modelData.short_break_minutes
|
||||
&& page.pomodoro.long_break_minutes === modelData.long_break_minutes
|
||||
|
||||
Label {
|
||||
text: presetRow.modelData.name
|
||||
color: presetRow.isActive ? Theme.ember : Theme.ink
|
||||
font.pixelSize: 13
|
||||
font.weight: presetRow.isActive ? Font.DemiBold : Font.Medium
|
||||
font.family: Theme.sansFamily
|
||||
Layout.preferredWidth: 70
|
||||
}
|
||||
Field {
|
||||
label: "Focus"
|
||||
SpinBox {
|
||||
from: 1; to: 240
|
||||
value: presetRow.modelData.work_minutes
|
||||
onValueModified: page.patchPreset(presetRow.index, "work_minutes", value)
|
||||
}
|
||||
}
|
||||
Field {
|
||||
label: "Short break"
|
||||
SpinBox {
|
||||
from: 1; to: 120
|
||||
value: presetRow.modelData.short_break_minutes
|
||||
onValueModified: page.patchPreset(presetRow.index, "short_break_minutes", value)
|
||||
}
|
||||
}
|
||||
Field {
|
||||
label: "Long break"
|
||||
SpinBox {
|
||||
from: 1; to: 240
|
||||
value: presetRow.modelData.long_break_minutes
|
||||
onValueModified: page.patchPreset(presetRow.index, "long_break_minutes", value)
|
||||
}
|
||||
}
|
||||
GhostButton {
|
||||
text: presetRow.isActive ? "Active" : "Apply"
|
||||
enabled: !presetRow.isActive
|
||||
onClicked: page.applyPreset(presetRow.index)
|
||||
}
|
||||
Item { Layout.fillWidth: true }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Flow {
|
||||
Layout.fillWidth: true
|
||||
spacing: 20
|
||||
|
||||
Reference in new issue
Block a user