package main import ( "fmt" "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" config "main/config" ) func main() { a := app.New() W := a.NewWindow("Буревестник") W.Resize(fyne.NewSize(800, 600)) // Создаем виджеты ip := widget.NewEntry() ip.SetPlaceHolder("IP address") port := widget.NewEntry() port.SetPlaceHolder("Port") logs := widget.NewMultiLineEntry() logs.SetPlaceHolder("Logs will appear here...") logs.Disable() // Сделаем read-only connectButton := widget.NewButton("Connect", func() { ipAddress := ip.Text portNumber := port.Text logs.SetText(fmt.Sprintf("IP: %s\nPort: %s\nConnecting...\n", ipAddress, portNumber)) fmt.Println("IP:", ipAddress) fmt.Println("Port:", portNumber) }) wrdOptions := []string{"WR", "RD"} wrd := widget.NewRadioGroup(wrdOptions, func(state string) { logs.SetText(fmt.Sprintf("%s Enabled", state)) fmt.Println(state + " Enabled") }) incCheckBox := widget.NewCheck("INC", func(checked bool) { if checked { logs.SetText("INC Enabled") fmt.Println("INC Enabled") } else { logs.SetText("INC Disabled") fmt.Println("INC Disabled") } }) address := widget.NewEntry() address.SetPlaceHolder("Address") data := widget.NewEntry() data.SetPlaceHolder("Data") sendButton := widget.NewButton("Send", func() { addr := address.Text d := data.Text logs.SetText(fmt.Sprintf("Sending data...\nAddress: %s\nData: %s\n", addr, d)) fmt.Println("Address:", addr) fmt.Println("Data:", d) }) config.AddWidget(config.WidgetConfig{Name: "IpWidget", Widget: ip, Width: 200, Height: 40, XPos: 0, YPos: 5}) config.AddWidget(config.WidgetConfig{Name: "PortWidget", Widget: port, Width: 150, Height: 40, XPos: 205, YPos: 5}) config.AddWidget(config.WidgetConfig{Name: "ConnectWidget", Widget: connectButton, Width: 100, Height: 40, XPos: 360, YPos: 5}) config.AddWidget(config.WidgetConfig{Name: "WrdWidget", Widget: wrd, Width: 60, Height: 20, XPos: 0, YPos: 40}) config.AddWidget(config.WidgetConfig{Name: "IncWidget", Widget: incCheckBox, Width: 60, Height: 20, XPos: 60, YPos: 47}) config.AddWidget(config.WidgetConfig{Name: "AddressWidget", Widget: address, Width: 80, Height: 40, XPos: 120, YPos: 47}) config.AddWidget(config.WidgetConfig{Name: "DataWidget", Widget: data, Width: 150, Height: 40, XPos: 205, YPos: 47}) config.AddWidget(config.WidgetConfig{Name: "SendWidget", Widget: sendButton, Width: 100, Height: 40, XPos: 360, YPos: 47}) // Применяем настройки для каждого виджета for _, cfg := range config.WidgetConfigs { Resize(cfg.Width, cfg.Height, cfg.Widget) Move(cfg.XPos, cfg.YPos, cfg.Widget) } var widgets []fyne.CanvasObject // Собираем интерфейс for _, cfg := range config.WidgetConfigs { widgets = append(widgets, cfg.Widget) } content := container.NewHSplit(container.NewWithoutLayout(widgets...), logs) content.SetOffset(0.6) W.SetContent(content) W.ShowAndRun() } // Resize задает размер для виджета func Resize(w, h float32, obj fyne.Widget) { obj.Resize(fyne.NewSize(w, h)) } // Move задает позицию для виджета func Move(x, y float32, obj fyne.Widget) { obj.Move(fyne.NewPos(x, y)) }