forked from mbk-lab/rui_orig
2
0
Fork 0

Changed the main NumberPicker listener

This commit is contained in:
anoshenko 2023-04-23 18:39:25 +03:00
parent 763de29698
commit 05fa725003
3 changed files with 64 additions and 42 deletions

View File

@ -3178,13 +3178,21 @@ NumberPicker может работать в двух режимах: редак
Для отслеживания изменения вводимого значения используется событие "number-changed" (константа
NumberChangedEvent). Основной слушатель события имеет следующий формат:
func(picker NumberPicker, newValue float64)
func(picker NumberPicker, newValue, oldValue float64)
где второй аргумент это новое значение
где второй аргумент это новое значение, третий аргумент - предыдущее значение.
Дополнительные слушатели события могут иметь следующий формат
func(picker NumberPicker, newValue string)
func(newValue, oldValue string)
func(newValue string)
func(picker NumberPicker)
func()
Получить текущий список слушателей изменения значения можно с помощью функции
func GetNumberChangedListeners(view View, subviewID ...string) []func(NumberPicker, float64)
func GetNumberChangedListeners(view View, subviewID ...string) []func(NumberPicker, float64, float64)
## DatePicker

View File

@ -769,7 +769,7 @@ equivalent to
view.Set(rui.Border, NewBorder(rui.Params{
rui.Style : rui.SolidBorder,
rui.Width : rui.Px(1),
rui.ColorProperty: rui.Black,
rui.ColorTag: rui.Black,
}))
The BorderProperty interface can be converted to a ViewBorders structure using the Border function.
@ -833,7 +833,7 @@ equivalent to
view.Set(rui.Border, NewBorder(rui.Params{
rui.Style : rui.SolidBorder,
rui.Width : rui.Px(1),
rui.ColorProperty: rui.Black,
rui.ColorTag: rui.Black,
}))
### "outline" and "outline-offset" properties
@ -1012,7 +1012,7 @@ The shadow has the following properties:
| Property | Constant | Type | Description |
|-----------------|---------------|----------|-----------------------------------------------------------------------|
| "color" | ColorProperty | Color | Shadow color |
| "color" | ColorTag | Color | Shadow color |
| "inset" | Inset | bool | true - the shadow inside the View, false - outside |
| "x-offset" | XOffset | SizeUnit | Offset the shadow along the X axis |
| "y-offset" | YOffset | SizeUnit | Offset the shadow along the Y axis |
@ -1031,7 +1031,7 @@ The NewShadowWithParams function is used when constants must be used as paramete
For example:
shadow := NewShadowWithParams(rui.Params{
rui.ColorProperty : "@shadowColor",
rui.ColorTag : "@shadowColor",
rui.BlurRadius: 8.0,
rui.Dilation : 16.0,
})
@ -1652,7 +1652,7 @@ To create a ViewShadow for the text shadow, the following functions are used:
The NewShadowWithParams function is used when constants must be used as parameters. For example:
shadow := NewShadowWithParams(rui.Params{
rui.ColorProperty : "@shadowColor",
rui.ColorTag : "@shadowColor",
rui.BlurRadius: 8.0,
})
@ -2530,10 +2530,10 @@ The value of the "column-separator" property is stored as the ColumnSeparatorPro
which implements the Properties interface (see above). ColumnSeparatorProperty can contain the following properties:
| Property | Constant | Type | Description |
|----------|---------------|----------|----------------|
|----------|-----------|----------|----------------|
| "style" | Style | int | Line style |
| "width" | Width | SizeUnit | Line thickness |
| "color" | ColorProperty | Color | Line color |
| "color" | ColorTag | Color | Line color |
Line style can take the following values:
@ -2589,7 +2589,7 @@ equivalent to
view.Set(rui.ColumnSeparator, ColumnSeparatorProperty(rui.Params{
rui.Style : rui.SolidBorder,
rui.Width : rui.Px(1),
rui.ColorProperty: rui.Black,
rui.ColorTag: rui.Black,
}))
### "column-fill" property
@ -3141,13 +3141,21 @@ You can read the values of these properties using the functions:
The "number-changed" event (NumberChangedEvent constant) is used to track the change in the entered value.
The main event listener has the following format:
func(picker NumberPicker, newValue float64)
func(picker NumberPicker, newValue, oldValue float64)
where the second argument is the new value
where the second argument is the new value, the third argument is the previous value.
Additional event listeners can have the following format
func(picker NumberPicker, newValue string)
func(newValue, oldValue string)
func(newValue string)
func(picker NumberPicker)
func()
You can get the current list of value change listeners using the function
func GetNumberChangedListeners(view View, subviewID ...string) []func(NumberPicker, float64)
func GetNumberChangedListeners(view View, subviewID ...string) []func(NumberPicker, float64, float64)
## DatePicker

View File

@ -29,7 +29,7 @@ type NumberPicker interface {
type numberPickerData struct {
viewData
numberChangedListeners []func(NumberPicker, float64)
numberChangedListeners []func(NumberPicker, float64, float64)
}
// NewNumberPicker create new NumberPicker object and return it
@ -47,7 +47,7 @@ func newNumberPicker(session Session) View {
func (picker *numberPickerData) init(session Session) {
picker.viewData.init(session)
picker.tag = "NumberPicker"
picker.numberChangedListeners = []func(NumberPicker, float64){}
picker.numberChangedListeners = []func(NumberPicker, float64, float64){}
}
func (picker *numberPickerData) String() string {
@ -76,7 +76,20 @@ func (picker *numberPickerData) remove(tag string) {
switch tag {
case NumberChangedEvent:
if len(picker.numberChangedListeners) > 0 {
picker.numberChangedListeners = []func(NumberPicker, float64){}
picker.numberChangedListeners = []func(NumberPicker, float64, float64){}
picker.propertyChangedEvent(tag)
}
case NumberPickerValue:
oldValue := GetNumberPickerValue(picker)
picker.viewData.remove(tag)
if oldValue != 0 {
if picker.created {
picker.session.callFunc("setInputValue", picker.htmlID(), 0)
}
for _, listener := range picker.numberChangedListeners {
listener(picker, 0, oldValue)
}
picker.propertyChangedEvent(tag)
}
@ -98,12 +111,12 @@ func (picker *numberPickerData) set(tag string, value any) bool {
switch tag {
case NumberChangedEvent:
listeners, ok := valueToEventListeners[NumberPicker, float64](value)
listeners, ok := valueToEventWithOldListeners[NumberPicker, float64](value)
if !ok {
notCompatibleType(tag, value)
return false
} else if listeners == nil {
listeners = []func(NumberPicker, float64){}
listeners = []func(NumberPicker, float64, float64){}
}
picker.numberChangedListeners = listeners
picker.propertyChangedEvent(tag)
@ -119,7 +132,7 @@ func (picker *numberPickerData) set(tag string, value any) bool {
picker.session.callFunc("setInputValue", picker.htmlID(), newValue)
}
for _, listener := range picker.numberChangedListeners {
listener(picker, f)
listener(picker, f, oldValue)
}
picker.propertyChangedEvent(tag)
}
@ -159,13 +172,6 @@ func (picker *numberPickerData) propertyChanged(tag string) {
} else {
picker.session.updateProperty(picker.htmlID(), Step, "any")
}
case NumberPickerValue:
value := GetNumberPickerValue(picker)
picker.session.callFunc("setInputValue", picker.htmlID(), value)
for _, listener := range picker.numberChangedListeners {
listener(picker, value)
}
}
}
}
@ -242,7 +248,7 @@ func (picker *numberPickerData) handleCommand(self View, command string, data Da
picker.properties[NumberPickerValue] = text
if value != oldValue {
for _, listener := range picker.numberChangedListeners {
listener(picker, value)
listener(picker, value, oldValue)
}
}
}
@ -323,6 +329,6 @@ func GetNumberPickerValue(view View, subviewID ...string) float64 {
// GetNumberChangedListeners returns the NumberChangedListener list of an NumberPicker subview.
// If there are no listeners then the empty list is returned
// If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
func GetNumberChangedListeners(view View, subviewID ...string) []func(NumberPicker, float64) {
return getEventListeners[NumberPicker, float64](view, subviewID, NumberChangedEvent)
func GetNumberChangedListeners(view View, subviewID ...string) []func(NumberPicker, float64, float64) {
return getEventWithOldListeners[NumberPicker, float64](view, subviewID, NumberChangedEvent)
}