serv_gui.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // package serv_gui -- десктопная графика для сервера
  2. package serv_gui
  3. import (
  4. "fmt"
  5. "github.com/AllenDang/giu"
  6. "wartank/pkg/types"
  7. )
  8. // ServGui -- десктопная графика для сервера
  9. type ServGui struct {
  10. serv types.IServer
  11. wnd *giu.MasterWindow
  12. }
  13. // NewServGui -- возвращает новую графику для сервера
  14. func NewServGui(serv types.IServer) (*ServGui, error) {
  15. if serv == nil {
  16. return nil, fmt.Errorf("NewServGui(): IServer==nil")
  17. }
  18. sf := &ServGui{
  19. serv: serv,
  20. wnd: giu.NewMasterWindow("Hello world", 400, 200, 0),
  21. }
  22. return sf, nil
  23. }
  24. // Run -- запускает работу графики сервера
  25. func (sf *ServGui) Run() {
  26. sf.wnd.Run(sf.loop)
  27. }
  28. func (sf *ServGui) onClickMe() {
  29. fmt.Println("War-tank end work!")
  30. sf.serv.CancelApp()
  31. sf.wnd.Close()
  32. }
  33. func onImSoCute() {
  34. fmt.Println("click btn!!")
  35. }
  36. func (sf *ServGui) loop() {
  37. giu.SingleWindow().Layout(
  38. giu.Row(
  39. giu.Align(giu.AlignCenter).To(
  40. giu.Style().SetFontSize(20).To(
  41. giu.Label("[ WarTank ]"),
  42. ),
  43. ),
  44. ),
  45. giu.Row(
  46. giu.Column(
  47. giu.Button("Выход").OnClick(sf.onClickMe),
  48. giu.Button("Click me").OnClick(onImSoCute),
  49. ),
  50. giu.Column(
  51. giu.Button("Выход").OnClick(sf.onClickMe),
  52. giu.Spacing(),
  53. giu.Button("Click me").OnClick(onImSoCute),
  54. ),
  55. ),
  56. giu.Row(
  57. giu.Column(
  58. giu.Button("Выход").OnClick(sf.onClickMe),
  59. giu.Button("Click me").OnClick(onImSoCute),
  60. ),
  61. giu.Column(
  62. giu.Button("Выход").OnClick(sf.onClickMe),
  63. giu.Spacing(),
  64. giu.Button("Click me").OnClick(onImSoCute),
  65. ),
  66. ),
  67. )
  68. }