lxn / walk

A Windows GUI toolkit for the Go Programming Language
Other
6.79k stars 885 forks source link

Why my code doesn't work correct? #719

Open ax-hack opened 3 years ago

ax-hack commented 3 years ago

Why component

  Label{
    AssignTo: &closeDlg.QuestionLabel,
    MinSize:  Size{600, 50},
    Text:     "Вы действительно желаете выйти?",
  }

not displayed in Dialog?

My full code:

package main

 import (
    "log"

    "github.com/lxn/walk"

    . "github.com/lxn/walk/declarative"
 )

func main() {
    // Окно
    mw := new(MyMainWindow)

    //model := NewFooModel()

    if err := (MainWindow{
        AssignTo: &mw.MainWindow,
        Title:    "goAPN: парсер данных для сайтов автозапчастей",
        Size:     Size{800, 600},
        Layout:   VBox{MarginsZero: false},
        Children: []Widget{
            TabWidget{
                Pages: []TabPage{
                    TabPage{
                        Title:   "Скрэпер",
                        MinSize: Size{800, 600},
                        Layout:  VBox{},
                        Children: []Widget{

                            ProgressBar{
                                AssignTo: &mw.ProgressBar,
                                MinSize:  Size{800, 10},
                            },
                        },
                    },
                },
            },
        },
    }.Create()); err != nil {
        log.Fatal(err)
    }

    mw.Closing().Attach(func(canceled *bool, reason walk.CloseReason) {
        //walk.MsgBox(nil, "Info", fmt.Sprintf("Closing now (reason %d)", reason), walk.MsgBoxIconInformation)

        //mw.LogString <- "INFO: Попытка выхода из программы"

        if reason == 0 {

            closeDlg := new(MyCloseDlg)
            if err := (Dialog{
                AssignTo: &closeDlg.Dialog,
                MinSize:  Size{600, 100},
                Title:    "Подтверждение выхода",
                Layout:   VBox{MarginsZero: false},
                Children: []Widget{
                    HSplitter{
                        MinSize: Size{600, 50},
                        Children: []Widget{
                            GroupBox{
                                MinSize: Size{600, 50},
                                Layout:  VBox{},
                                Children: []Widget{
                                    Label{
                                        AssignTo: &closeDlg.QuestionLabel,
                                        MinSize:  Size{600, 50},
                                        Text:     "Вы действительно желаете выйти?",
                                    }}}}},
                    HSplitter{
                        MinSize: Size{600, 50},
                        Children: []Widget{
                            GroupBox{
                                MinSize: Size{600, 50},
                                Layout:  Grid{Columns: 2},
                                Children: []Widget{
                                    PushButton{
                                        AssignTo: &closeDlg.ButtonYes,
                                        Text:     "Да",
                                        OnClicked: func() {
                                            closeDlg.ButtonYes.SetEnabled(false)
                                            closeDlg.ButtonNo.SetEnabled(false)
                                            //mw.LogString <- "exit"
                                            walk.App().Exit(0)
                                        },
                                    },
                                    PushButton{
                                        AssignTo: &closeDlg.ButtonNo,
                                        Text:     "Нет",
                                        OnClicked: func() {
                                            //mw.LogString <- "INFO: Попытка выхода была отмененна"
                                            closeDlg.Close(0)
                                        },
                                    },
                                },
                            },
                        },
                    },
                },
            }).Create(nil); err != nil {
                //mw.LogString <- "FATAL: Ошибка при создании окна: " + err.Error()
                log.Fatal(err)
            }

            closeDlg.Show()
            *canceled = true
        }
    })

    mw.Run()
}

///// Типизация

type MyMainWindow struct {
    *walk.MainWindow

    // Виджеты
    LoginGroup            *walk.GroupBox
    AuthSave              *walk.CheckBox
    WithoutCB             *walk.CheckBox
    AuthState             *walk.LineEdit
    AllPositionCount      *walk.NumberEdit
    StatusLabel           *walk.LineEdit
    WorkingWith           *walk.LineEdit
    CorrListPathEmex      *walk.LineEdit
    CorrListPathArmtek    *walk.LineEdit
    CorrListPathAutopiter *walk.LineEdit
    ProfileListLb         *walk.ComboBox
    EmexRegionsList       *walk.ComboBox
    AutopiterRegionsList  *walk.ComboBox
    INXLSXPathNameEntr    *walk.TextEdit
    CorrListBtnEmex       *walk.PushButton
    CorrListBtnArmtek     *walk.PushButton
    CorrListBtnAutopiter  *walk.PushButton
    ProfileLoadBtn        *walk.PushButton
    ProfileRemoveBtn      *walk.PushButton
    ProfileSaveBtn        *walk.PushButton
    OpenXLSXBtn           *walk.PushButton
    StartBtn              *walk.PushButton
    PauseBtn              *walk.PushButton
    StopBtn               *walk.PushButton
    GroupSites            *walk.GroupBox
    SettingsTab           *walk.TabPage
    ProxyTab              *walk.TabPage
    DangerSettingsTab     *walk.TabPage
    ConsoleLog            *walk.TextEdit   // вывод ошибок и информации
    CurrPosEntr           *walk.NumberEdit // текущая позиция
    ProfileSaveNameEntry  *walk.LineEdit
    LoginEntr             *walk.LineEdit // логин
    PasswdEntr            *walk.LineEdit
    PayFromEntr           *walk.NumberEdit
    PayToEntr             *walk.NumberEdit
    InclWordEntr          *walk.TextEdit
    ExclWordEntr          *walk.TextEdit
    DelFromEntr           *walk.NumberEdit
    DelToEntr             *walk.NumberEdit
    CntFromEntr           *walk.NumberEdit
    CntToEntr             *walk.NumberEdit
    OriginalEntr          *walk.TextEdit
    AnalogEntr            *walk.TextEdit
    ChineEntr             *walk.TextEdit
    OutFNameEntr          *walk.LineEdit
    SettingTimeOut        *walk.NumberEdit
    SettingTimeOutTwo     *walk.NumberEdit
    SettingTimeOutThree   *walk.NumberEdit
    SiteModeEmexRbtn      *walk.RadioButton
    SiteModeArmtekRbtn    *walk.RadioButton
    SiteModeAutopiterRbtn *walk.RadioButton
    ModeRadioBtn_1        *walk.RadioButton
    ModeRadioBtn_2        *walk.RadioButton
    ModeRadioBtn_3        *walk.RadioButton
    ModeRadioButtonGroup  *walk.RadioButtonGroup
    tv                    *walk.TableView
    ProgressBar           *walk.ProgressBar
    ProxyTorAuto          *walk.CheckBox
    LogString             chan string

    //ArmtekSession     ArmtekSessionData
    //WorkState         State
    //config            *Settings
    //configSearch      *SearchConf
    //configCorr        CorrectConf
    //model *FooModel
    //ForFind           []Foo
    //EmexRegionsL      []EmexRegionStruct
    //AutopiterRegionsL []AutopiterRegionStruct

    prevFilePath         string
    prevOutFilePath      string
    RootDir              string
    AutopiterSession     string
    AutopiterAccessToken string

    proxyMode int // 0 - выкл, 1 - tor, 2 - ?

    AutopiterAuthed bool
    ArmtekAuthed    bool
}

type MyCloseDlg struct {
    *walk.Dialog

    QuestionLabel *walk.Label
    ButtonYes     *walk.PushButton
    ButtonNo      *walk.PushButton
}

tmp

lxn commented 3 years ago

If you remove the HSplitters, things should clear up.

ax-hack commented 3 years ago

If you remove the HSplitters, things should clear up.

Ok, but why?