103 lines
3.2 KiB
Go
103 lines
3.2 KiB
Go
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))
|
|
}
|