diff options
author | Alexander Neumann <alexander.neumann@picos-software.com> | 2019-02-25 17:18:26 +0100 |
---|---|---|
committer | Alexander Neumann <alexander.neumann@picos-software.com> | 2019-02-25 17:18:26 +0100 |
commit | f38d1fcab5cfc2dc95f1e72a12892366972be4f7 (patch) | |
tree | 09c211a3363e349423632f4fcc0ea75335f85d10 | |
parent | Add ItemsInserted + ItemsRemoved to ListModel and support them in ComboBox + ListBox (diff) | |
download | wireguard-windows-f38d1fcab5cfc2dc95f1e72a12892366972be4f7.tar.xz wireguard-windows-f38d1fcab5cfc2dc95f1e72a12892366972be4f7.zip |
NumberEdit: Add MinValue and MaxValue properties
-rw-r--r-- | numberedit.go | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/numberedit.go b/numberedit.go index 3254f702..f0d2be7c 100644 --- a/numberedit.go +++ b/numberedit.go @@ -8,13 +8,13 @@ package walk import ( "bytes" + "fmt" + "math" "strconv" "strings" "syscall" "unsafe" -) -import ( "github.com/lxn/win" ) @@ -27,9 +27,11 @@ func init() { // NumberEdit is a widget that is suited to edit numeric values. type NumberEdit struct { WidgetBase - edit *numberLineEdit - prefixChangedPublisher EventPublisher - suffixChangedPublisher EventPublisher + edit *numberLineEdit + maxValueChangedPublisher EventPublisher + minValueChangedPublisher EventPublisher + prefixChangedPublisher EventPublisher + suffixChangedPublisher EventPublisher } // NewNumberEdit returns a new NumberEdit widget as child of parent. @@ -59,6 +61,8 @@ func NewNumberEdit(parent Container) (*NumberEdit, error) { ne.edit.applyFont(ne.Font()) + ne.SetRange(-math.MaxFloat64, math.MaxFloat64) + if err = ne.SetValue(0); err != nil { return nil, err } @@ -66,6 +70,24 @@ func NewNumberEdit(parent Container) (*NumberEdit, error) { ne.GraphicsEffects().Add(InteractionEffect) ne.GraphicsEffects().Add(FocusEffect) + ne.MustRegisterProperty("MaxValue", NewProperty( + func() interface{} { + return ne.MaxValue() + }, + func(v interface{}) error { + return ne.SetRange(ne.MinValue(), assertFloat64Or(v, 0.0)) + }, + ne.minValueChangedPublisher.Event())) + + ne.MustRegisterProperty("MinValue", NewProperty( + func() interface{} { + return ne.MinValue() + }, + func(v interface{}) error { + return ne.SetRange(assertFloat64Or(v, 0.0), ne.MaxValue()) + }, + ne.maxValueChangedPublisher.Event())) + ne.MustRegisterProperty("Prefix", NewProperty( func() interface{} { return ne.Prefix() @@ -262,9 +284,12 @@ func (ne *NumberEdit) MaxValue() float64 { // If the current value is out of this range, it will be adjusted. func (ne *NumberEdit) SetRange(min, max float64) error { if min > max { - return newError("invalid range") + return newError(fmt.Sprintf("invalid range - min: %f, max: %f", min, max)) } + minChanged := min != ne.edit.minValue + maxChanged := max != ne.edit.maxValue + ne.edit.minValue = min ne.edit.maxValue = max if min != max { @@ -279,6 +304,13 @@ func (ne *NumberEdit) SetRange(min, max float64) error { } } + if minChanged { + ne.minValueChangedPublisher.Publish() + } + if maxChanged { + ne.maxValueChangedPublisher.Publish() + } + return nil } |