| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- // package win_main -- главное окно приложения
- package win_main
- import (
- "time"
- "gitp78su.ipnodns.ru/svi/kern"
- . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
- tk "modernc.org/tk9.0"
- . "wartank/app/lev0/types"
- "wartank/desktop/win_add_bot"
- "wartank/desktop/win_main/frm_bot_param"
- "wartank/desktop/win_main/frm_status"
- )
- // Главное окно приложения
- type WinMain struct {
- ctx IKernelCtx
- winMain *tk.Window
- listBot *tk.ListboxWidget
- btnBotAdd *tk.ButtonWidget
- dictBot map[string]bool
- chBotAdd chan ИБот
- frmStatus *frm_status.FrmStatus
- frmBotForce *frm_bot_param.FrmBotParam
- }
- var (
- win *WinMain
- )
- func GetWinMain() *WinMain {
- if win != nil {
- return win
- }
- win = &WinMain{
- winMain: tk.App,
- ctx: kern.GetKernelCtx(),
- dictBot: map[string]bool{},
- chBotAdd: make(chan ИБот, 2),
- }
- win.new()
- win.frmStatus = frm_status.NewFrmStatus()
- return win
- }
- func (sf *WinMain) new() {
- _ = tk.ActivateTheme("azure light")
- sf.winMain = tk.App
- sf.winMain.WmTitle("WarBot")
- tk.StyleThemeUse("alt")
- tk.WmWithdraw(sf.winMain)
- tk.WmMinSize(sf.winMain, 640, 480)
- sf.winMain.Configure(tk.Padx(0), tk.Pady(0))
- { // Панель списка ботов
- frmListBot := sf.winMain.Frame(tk.Border(1), tk.Relief(tk.SUNKEN))
- tk.Pack(frmListBot, tk.Fill(tk.FILL_Y), tk.Side(tk.LEFT))
- lblText := frmListBot.Label(tk.Txt("Список ботов"),
- tk.Width(20),
- tk.Background("#888"),
- tk.Border(1),
- tk.Relief(tk.GROOVE),
- )
- tk.Pack(lblText, tk.Side(tk.TOP), tk.Fill(tk.FILL_X))
- sf.listBot = frmListBot.Listbox()
- tk.Pack(sf.listBot, tk.Side(tk.TOP))
- sf.btnBotAdd = frmListBot.Button(tk.Txt("Добавить"), tk.Command(sf.botAdd))
- tk.Pack(sf.btnBotAdd, tk.Fill(tk.FILL_X))
- }
- frmStateBot := sf.winMain.TFrame(tk.Border(1), tk.Relief(tk.SUNKEN))
- { // Панель состояния бота
- tk.Pack(frmStateBot, tk.Fill(tk.FILL_BOTH), tk.Expand(true))
- lblStateBot := frmStateBot.Label(tk.Txt("Состояние бота"),
- tk.Background("#888"),
- tk.Border(1),
- tk.Relief(tk.GROOVE),
- )
- tk.Pack(lblStateBot, tk.Side(tk.TOP), tk.Fill(tk.FILL_X))
- }
- // Панель силы бота
- sf.frmBotForce = frm_bot_param.NewFrmBotParam(frmStateBot)
- tk.WmProtocol(sf.winMain, tk.WM_DELETE_WINDOW, tk.Command(sf.quit))
- sf.liveUpdate()
- }
- func (sf *WinMain) quit() {
- sf.ctx.Cancel()
- tk.Destroy(sf.winMain)
- }
- func (sf *WinMain) botAdd() {
- _ = win_add_bot.NewWinAddBot(sf.chBotAdd)
- }
- func (sf *WinMain) liveUpdate() {
- select {
- case bot := <-sf.chBotAdd:
- _, isOk := sf.dictBot[bot.Имя()]
- if !isOk {
- sf.dictBot[bot.Имя()] = true
- sf.listBot.Insert("end", bot.Имя())
- }
- default:
- }
- // Обновить список ботов
- // sf.listBot.Delete("0", "end")
- farmBot := sf.ctx.Get("ботоФерма").Val().(ИБотоФерма)
- lstBot := farmBot.ListBot()
- for _, bot := range lstBot {
- botName := bot.Имя()
- _, isOk := sf.dictBot[botName]
- if !isOk {
- sf.dictBot[botName] = true
- sf.listBot.Insert("end", bot.Имя())
- }
- }
- tk.TclAfter(time.Millisecond*250, sf.liveUpdate)
- }
- func (sf *WinMain) Run() {
- tk.WmDeiconify(sf.winMain)
- sf.winMain.Wait()
- }
|