package main import ( "github.com/lxn/walk" "github.com/lxn/walk/declarative" ) func runSettingsDG(owner walk.Form, settings *SerIPscan) (int, error) { var settingsGuiHolder struct { dlg *walk.Dialog db *walk.DataBinder acceptPB, cancelPB *walk.PushButton valueEdit, pEdi *walk.NumberEdit slv, slx *walk.Slider gbox, gpibox *walk.GroupBox } return declarative.Dialog{ AssignTo: &settingsGuiHolder.dlg, FixedSize: true, Title: "IP Scanner Settings", DefaultButton: &settingsGuiHolder.acceptPB, CancelButton: &settingsGuiHolder.cancelPB, DataBinder: declarative.DataBinder{ AssignTo: &settingsGuiHolder.db, Name: "Setting", DataSource: settings, ErrorPresenter: declarative.ToolTipErrorPresenter{}, }, MinSize: declarative.Size{Width: 300, Height: 300}, Layout: declarative.VBox{}, Children: []declarative.Widget{ declarative.GroupBox{ Title: "IP Scanner Settings", Layout: declarative.VBox{}, Children: []declarative.Widget{ declarative.Composite{ Layout: declarative.Grid{Columns: 1}, Children: []declarative.Widget{ declarative.Composite{ Layout: declarative.HBox{Spacing: 0}, Children: []declarative.Widget{ declarative.RadioButtonGroupBox{ Title: "Port Scan", Layout: declarative.Grid{Columns: 1}, DataMember: "PscanTOF", Buttons: []declarative.RadioButton{ {MaxSize: declarative.Size{Width: 60}, Text: "True", Value: true, OnClicked: func() { settingsGuiHolder.gbox.SetEnabled(true) }}, {MaxSize: declarative.Size{Width: 60}, Text: "False", Value: false, OnClicked: func() { settingsGuiHolder.gbox.SetEnabled(false) }}, }, }, declarative.RadioButtonGroupBox{ Title: "Manufacture", Layout: declarative.Grid{Columns: 1}, DataMember: "NetBs", Buttons: []declarative.RadioButton{ {MaxSize: declarative.Size{Width: 60}, Text: "True", Value: true}, {MaxSize: declarative.Size{Width: 60}, Text: "False", Value: false}, }, }, declarative.RadioButtonGroupBox{ Title: "Ping Hosts", Layout: declarative.Grid{Columns: 1}, DataMember: "Pong", Buttons: []declarative.RadioButton{ {Text: "True", Value: true, MaxSize: declarative.Size{Width: 60}, OnClicked: func() { settingsGuiHolder.gpibox.SetEnabled(true) }}, {Text: "False", Value: false, MaxSize: declarative.Size{Width: 60}, OnClicked: func() { settingsGuiHolder.gpibox.SetEnabled(false) }}, }, }, }, }, declarative.GroupBox{ AssignTo: &settingsGuiHolder.gbox, Title: "Port Number To Scan", Layout: declarative.Grid{Columns: 4}, Children: []declarative.Widget{ declarative.Label{ Text: "Port Number:", }, declarative.NumberEdit{ MaxSize: declarative.Size{Width: 45}, Value: declarative.Bind("Pscan1.Nm", declarative.Range{Min: 1, Max: 65535}), }, declarative.RadioButtonGroup{ DataMember: "Pscan1.Tp", Buttons: []declarative.RadioButton{ {Text: "TCP", Value: "TCP", MaxSize: declarative.Size{Width: 55}}, {Text: "UDP", Value: "UDP", MaxSize: declarative.Size{Width: 55}}, }, }, declarative.Label{ Text: "Port Number:", }, declarative.NumberEdit{ MaxSize: declarative.Size{Width: 45}, Value: declarative.Bind("Pscan2.Nm", declarative.Range{Min: 1, Max: 65535}), }, declarative.RadioButtonGroup{ DataMember: "Pscan2.Tp", Buttons: []declarative.RadioButton{ {Text: "TCP", Value: "TCP", MaxSize: declarative.Size{Width: 55}}, {Text: "UDP", Value: "UDP", MaxSize: declarative.Size{Width: 55}}, }, }, declarative.Label{ Text: "Port Number:", }, declarative.NumberEdit{ MaxSize: declarative.Size{Width: 45}, Value: declarative.Bind("Pscan3.Nm", declarative.Range{Min: 1, Max: 65535}), }, declarative.RadioButtonGroup{ DataMember: "Pscan3.Tp", Buttons: []declarative.RadioButton{ {Text: "TCP", Value: "TCP", MaxSize: declarative.Size{Width: 55}}, {Text: "UDP", Value: "UDP", MaxSize: declarative.Size{Width: 55}}, }, }, declarative.Label{ Text: "Port Number:", }, declarative.NumberEdit{ MaxSize: declarative.Size{Width: 45}, Value: declarative.Bind("Pscan4.Nm", declarative.Range{Min: 1, Max: 65535}), }, declarative.RadioButtonGroup{ DataMember: "Pscan4.Tp", Buttons: []declarative.RadioButton{ {Text: "TCP", Value: "TCP", MaxSize: declarative.Size{Width: 55}}, {Text: "UDP", Value: "UDP", MaxSize: declarative.Size{Width: 55}}, }, }, declarative.Label{ Text: "Port Number:", }, declarative.NumberEdit{ MaxSize: declarative.Size{Width: 45}, Value: declarative.Bind("Pscan5.Nm", declarative.Range{Min: 1, Max: 65535}), }, declarative.RadioButtonGroup{ DataMember: "Pscan5.Tp", Buttons: []declarative.RadioButton{ {Text: "TCP", Value: "TCP", MaxSize: declarative.Size{Width: 55}}, {Text: "UDP", Value: "UDP", MaxSize: declarative.Size{Width: 55}}, }, }, }, }, declarative.GroupBox{ AssignTo: &settingsGuiHolder.gpibox, Title: "Ping Timeout", Layout: declarative.Grid{Columns: 3}, Children: []declarative.Widget{ declarative.Label{ Text: "Timeoute:", }, declarative.Slider{ AssignTo: &settingsGuiHolder.slx, Value: declarative.Bind("Ptime"), MaxValue: 8, MinValue: 1, RowSpan: 2, MinSize: declarative.Size{Width: 130}, ToolTipText: "Timeout in second", OnValueChanged: func() { settings.Ptime = settingsGuiHolder.slx.Value() settingsGuiHolder.pEdi.SetValue(float64(settings.Ptime)) }, }, declarative.NumberEdit{ AssignTo: &settingsGuiHolder.pEdi, Value: declarative.Bind("Ptime", declarative.Range{Min: 1, Max: 8}), MaxSize: declarative.Size{Width: 45}, OnValueChanged: func() { settings.Ptime = int(settingsGuiHolder.pEdi.Value()) settingsGuiHolder.slx.SetValue(int(settings.Ptime)) }, }, }, }, declarative.GroupBox{ Title: "Performace Setting", Layout: declarative.Grid{Columns: 3}, Children: []declarative.Widget{ declarative.Label{ Text: "Threads:", MinSize: declarative.Size{Width: 48}, }, declarative.Slider{ AssignTo: &settingsGuiHolder.slv, Value: declarative.Bind("GreenThreads"), MaxValue: 256, MinValue: 8, RowSpan: 2, MinSize: declarative.Size{Width: 130}, ToolTipText: "Number of threads (GreenThreads)", OnValueChanged: func() { settings.GreenThreads = settingsGuiHolder.slv.Value() settingsGuiHolder.valueEdit.SetValue(float64(settings.GreenThreads)) }, }, declarative.NumberEdit{ AssignTo: &settingsGuiHolder.valueEdit, MaxSize: declarative.Size{Width: 45}, Value: declarative.Bind("GreenThreads", declarative.Range{Min: 8, Max: 256}), OnValueChanged: func() { settings.GreenThreads = int(settingsGuiHolder.valueEdit.Value()) settingsGuiHolder.slv.SetValue(settings.GreenThreads) }, }, }, }, }, }, }, }, declarative.Composite{ Layout: declarative.HBox{}, Children: []declarative.Widget{ declarative.HSpacer{}, declarative.PushButton{ AssignTo: &settingsGuiHolder.acceptPB, Text: "OK", OnClicked: func() { if err := settingsGuiHolder.db.Submit(); err != nil { return } settingsGuiHolder.dlg.Accept() }, }, declarative.PushButton{ AssignTo: &settingsGuiHolder.cancelPB, Text: "Cancel", OnClicked: func() { settingsGuiHolder.dlg.Cancel() }, }, }, }, }, }.Run(owner) }