client/main.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))
}