summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorAlexander Neumann <alexander.neumann@picos-software.com>2019-02-25 17:18:26 +0100
committerAlexander Neumann <alexander.neumann@picos-software.com>2019-02-25 17:18:26 +0100
commitf38d1fcab5cfc2dc95f1e72a12892366972be4f7 (patch)
tree09c211a3363e349423632f4fcc0ea75335f85d10
parentAdd ItemsInserted + ItemsRemoved to ListModel and support them in ComboBox + ListBox (diff)
downloadwireguard-windows-f38d1fcab5cfc2dc95f1e72a12892366972be4f7.tar.xz
wireguard-windows-f38d1fcab5cfc2dc95f1e72a12892366972be4f7.zip
NumberEdit: Add MinValue and MaxValue properties
-rw-r--r--numberedit.go44
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
}