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