Stanislav N. aka pztrn c2142cc1a6
Some checks failed
Linting and tests / Linting (push) Failing after 4s
Linting and tests / Tests (push) Failing after 3s
Improve client logging.
2025-09-10 20:04:19 +05:00

81 lines
2.1 KiB
Go

package options
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/lang"
"fyne.io/fyne/v2/widget"
)
func (o *options) closeOptionsDialog(save bool) {
o.logger.Debug("Closing options dialog.", "save", save)
if !save {
return
}
for _, widget := range o.widgets {
if widget.SaveHandler == nil {
continue
}
if err := widget.SaveHandler(); err != nil {
o.logger.Error("Failed to save options for module!", "module", widget.Name, "error", err.Error())
}
}
}
func (o *options) optionsListCreateItem() fyne.CanvasObject {
return widget.NewLabel("")
}
func (o *options) optionsListLength() int {
return len(o.widgetsItems)
}
func (o *options) optionsListUpdateItem(itemID widget.ListItemID, obj fyne.CanvasObject) {
label, _ := obj.(*widget.Label)
label.SetText(o.widgets[o.widgetsItems[itemID]].Name)
}
func (o *options) ShowOptionsDialog() {
optionsWidgetScroll := container.NewScroll(widget.NewLabel(lang.L("options_dialog.select_section")))
optionsList := widget.NewList(o.optionsListLength, o.optionsListCreateItem, o.optionsListUpdateItem)
optionsList.OnSelected = func(listID widget.ListItemID) {
// listID должно быть всегда меньше длины, так как является индексом.
// Эта проверка отрабатывает, если настроек по какой-то причине нет.
if listID >= len(o.widgetsItems) {
return
}
optionsWidget := o.widgets[o.widgetsItems[listID]].Widget
if optionsWidget != nil {
optionsWidgetScroll.Content = optionsWidget
} else {
optionsWidgetScroll.Content = widget.NewLabel(lang.L("options_dialog.no_settings"))
}
optionsWidgetScroll.Refresh()
}
optionsListSplitter := container.NewHSplit(optionsList, optionsWidgetScroll)
//nolint:mnd
optionsListSplitter.SetOffset(0.25)
optionsDlg := dialog.NewCustomConfirm(
"Options",
"Save",
"Cancel",
optionsListSplitter,
o.closeOptionsDialog,
o.mainWindow.MainWindow(),
)
optionsDlg.Resize(o.mainWindow.MainWindow().Canvas().Size())
optionsDlg.Show()
}