win_main.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // package win_main -- главное окно приложения
  2. package win_main
  3. import (
  4. "github.com/sirupsen/logrus"
  5. "github.com/visualfc/atk/tk"
  6. )
  7. type WinMain struct {
  8. win *tk.Window
  9. pack *tk.PackLayout
  10. }
  11. // NewWinmain -- возвращает новое главное окно
  12. func NewWinMain() *WinMain {
  13. sf := &WinMain{}
  14. return sf
  15. }
  16. func (sf *WinMain) quit() {
  17. logrus.Infoln("Winmain.quit()")
  18. tk.Quit()
  19. }
  20. // Вызывается в отдельном потоке, как значение mainloop
  21. func (sf *WinMain) newWindow() {
  22. sf.win = tk.RootWindow()
  23. sf.pack = tk.NewVPackLayout(sf.win)
  24. lbl := tk.NewLabel(sf.win, "Hello ATK")
  25. btnExit := tk.NewButton(sf.win, "Выход")
  26. btnExit.OnCommand(sf.quit)
  27. hPack := tk.NewHPackLayout(sf.win)
  28. hPack.AddWidgetEx(btnExit, tk.FillX, true, tk.AnchorEast)
  29. // Вертикальная раскладка
  30. vPack := tk.NewVPackLayout(sf.win)
  31. vPack.AddWidgets(lbl, tk.NewLayoutSpacer(sf.win, 0, true))
  32. sf.win.ResizeN(300, 200)
  33. sf.win.SetTitle("WarTank")
  34. sf.win.Center(nil)
  35. sf.pack.SetBorderWidth(3)
  36. sf.pack.AddWidgetEx(vPack, tk.FillBoth, true, tk.AnchorCenter)
  37. sf.pack.AddWidgetEx(hPack, tk.FillX, false, tk.AnchorSouth)
  38. sf.win.ShowNormal()
  39. }
  40. // Запускает графику в работу
  41. func (sf *WinMain) Run() {
  42. tk.MainLoop(sf.newWindow)
  43. }