Bug fixing

This commit is contained in:
Alexei Anoshenko 2025-07-10 12:54:04 +03:00
parent 7cec6e5736
commit ff8f6f30f2
17 changed files with 243 additions and 4 deletions

View File

@ -49,6 +49,7 @@ func (button *checkboxData) init(session Session) {
button.viewsContainerData.init(session)
button.tag = "Checkbox"
button.systemClass = "ruiGridLayout ruiCheckbox"
button.get = button.getFunc
button.set = button.setFunc
button.remove = button.removeFunc
button.changed = button.propertyChanged
@ -99,6 +100,17 @@ func (button *checkboxData) propertyChanged(tag PropertyName) {
}
}
func (button *checkboxData) getFunc(tag PropertyName) any {
switch tag {
case CheckboxChangedEvent:
if listeners := getOneArgEventRawListeners[Checkbox, bool](button, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return button.viewData.getFunc(tag)
}
func (button *checkboxData) setFunc(tag PropertyName, value any) []PropertyName {
switch tag {
case ClickEvent:

View File

@ -66,6 +66,7 @@ func (picker *colorPickerData) init(session Session) {
picker.hasHtmlDisabled = true
picker.properties[Padding] = Px(0)
picker.normalize = normalizeColorPickerTag
picker.get = picker.getFunc
picker.set = picker.setFunc
picker.changed = picker.propertyChanged
}
@ -80,6 +81,17 @@ func normalizeColorPickerTag(tag PropertyName) PropertyName {
return normalizeDataListTag(tag)
}
func (picker *colorPickerData) getFunc(tag PropertyName) any {
switch tag {
case ColorChangedEvent:
if listeners := getTwoArgEventRawListeners[ColorPicker, Color](picker, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return picker.viewData.getFunc(tag)
}
func (picker *colorPickerData) setFunc(tag PropertyName, value any) []PropertyName {
switch tag {
case ColorChangedEvent:

View File

@ -139,6 +139,7 @@ func (picker *datePickerData) init(session Session) {
picker.hasHtmlDisabled = true
picker.normalize = normalizeDatePickerTag
picker.set = picker.setFunc
picker.get = picker.getFunc
picker.changed = picker.propertyChanged
}
@ -198,6 +199,17 @@ func stringToDate(value string) (time.Time, bool) {
return time.Now(), false
}
func (picker *datePickerData) getFunc(tag PropertyName) any {
switch tag {
case DateChangedEvent:
if listeners := getTwoArgEventRawListeners[DatePicker, time.Time](picker, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return picker.viewData.getFunc(tag)
}
func (picker *datePickerData) setFunc(tag PropertyName, value any) []PropertyName {
setDateValue := func(tag PropertyName) []PropertyName {

View File

@ -51,6 +51,7 @@ func (list *dropDownListData) init(session Session) {
list.tag = "DropDownList"
list.hasHtmlDisabled = true
list.normalize = normalizeDropDownListTag
list.get = list.getFunc
list.set = list.setFunc
list.changed = list.propertyChanged
}
@ -67,6 +68,17 @@ func normalizeDropDownListTag(tag PropertyName) PropertyName {
return tag
}
func (list *dropDownListData) getFunc(tag PropertyName) any {
switch tag {
case DropDownEvent:
if listeners := getTwoArgEventRawListeners[DropDownList, int](list, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return list.viewData.getFunc(tag)
}
func (list *dropDownListData) setFunc(tag PropertyName, value any) []PropertyName {
switch tag {
case Items:

View File

@ -121,6 +121,7 @@ func (edit *editViewData) init(session Session) {
edit.hasHtmlDisabled = true
edit.tag = "EditView"
edit.normalize = normalizeEditViewTag
edit.get = edit.getFunc
edit.set = edit.setFunc
edit.changed = edit.propertyChanged
}
@ -148,6 +149,17 @@ func normalizeEditViewTag(tag PropertyName) PropertyName {
return normalizeDataListTag(tag)
}
func (edit *editViewData) getFunc(tag PropertyName) any {
switch tag {
case EditTextChangedEvent:
if listeners := getTwoArgEventRawListeners[EditView, string](edit, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return edit.viewData.getFunc(tag)
}
func (edit *editViewData) setFunc(tag PropertyName, value any) []PropertyName {
switch tag {
case Text:

View File

@ -233,7 +233,7 @@ func setNoArgEventListener[V View](view View, tag PropertyName, value any) []Pro
func getNoArgEventListeners[V View](view View, subviewID []string, tag PropertyName) []noArgListener[V] {
if view = getSubview(view, subviewID); view != nil {
if value := view.Get(tag); value != nil {
if value := view.getRaw(tag); value != nil {
if result, ok := value.([]noArgListener[V]); ok {
return result
}

View File

@ -242,7 +242,7 @@ func setOneArgEventListener[V View, T any](view View, tag PropertyName, value an
func getOneArgEventListeners[V View, E any](view View, subviewID []string, tag PropertyName) []oneArgListener[V, E] {
if view = getSubview(view, subviewID); view != nil {
if value := view.Get(tag); value != nil {
if value := view.getRaw(tag); value != nil {
if result, ok := value.([]oneArgListener[V, E]); ok {
return result
}

View File

@ -316,7 +316,7 @@ func setTwoArgEventListener[V View, T any](view View, tag PropertyName, value an
func getTwoArgEventListeners[V View, E any](view View, subviewID []string, tag PropertyName) []twoArgListener[V, E] {
if view = getSubview(view, subviewID); view != nil {
if value := view.Get(tag); value != nil {
if value := view.getRaw(tag); value != nil {
if result, ok := value.([]twoArgListener[V, E]); ok {
return result
}

View File

@ -131,6 +131,7 @@ func (picker *filePickerData) init(session Session) {
picker.hasHtmlDisabled = true
picker.files = []FileInfo{}
//picker.loader = map[int]func(FileInfo, []byte){}
picker.get = picker.getFunc
picker.set = picker.setFunc
picker.changed = picker.propertyChanged
@ -165,6 +166,17 @@ func (picker *filePickerData) LoadFile(file FileInfo, result func(FileInfo, []by
}
}
func (picker *filePickerData) getFunc(tag PropertyName) any {
switch tag {
case FileSelectedEvent:
if listeners := getOneArgEventRawListeners[FilePicker, []FileInfo](picker, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return picker.viewData.getFunc(tag)
}
func (picker *filePickerData) setFunc(tag PropertyName, value any) []PropertyName {
switch tag {

View File

@ -97,6 +97,7 @@ func (imageView *imageViewData) init(session Session) {
imageView.tag = "ImageView"
imageView.systemClass = "ruiImageView"
imageView.normalize = normalizeImageViewTag
imageView.get = imageView.getFunc
imageView.set = imageView.setFunc
imageView.changed = imageView.propertyChanged
}
@ -122,6 +123,17 @@ func normalizeImageViewTag(tag PropertyName) PropertyName {
return tag
}
func (imageView *imageViewData) getFunc(tag PropertyName) any {
switch tag {
case LoadedEvent, ErrorEvent:
if listeners := getNoArgEventRawListeners[ImageView](imageView, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return imageView.viewData.getFunc(tag)
}
func (imageView *imageViewData) setFunc(tag PropertyName, value any) []PropertyName {
switch tag {

View File

@ -310,6 +310,18 @@ func (listView *listViewData) getFunc(tag PropertyName) any {
return rowGap
}
return AutoSize()
case ListItemClickedEvent, ListItemSelectedEvent:
if listeners := getOneArgEventRawListeners[ListView, int](listView, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
case ListItemCheckedEvent:
if listeners := getOneArgEventRawListeners[ListView, []int](listView, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return listView.viewData.getFunc(tag)
}

View File

@ -589,6 +589,7 @@ type MediaSource struct {
func (player *mediaPlayerData) init(session Session) {
player.viewData.init(session)
player.tag = "MediaPlayer"
player.get = player.getFunc
player.set = player.setFunc
player.changed = player.propertyChanged
}
@ -597,6 +598,39 @@ func (player *mediaPlayerData) Focusable() bool {
return true
}
func (player *mediaPlayerData) getFunc(tag PropertyName) any {
switch tag {
case AbortEvent, CanPlayEvent, CanPlayThroughEvent, CompleteEvent, EmptiedEvent, LoadStartEvent,
EndedEvent, LoadedDataEvent, LoadedMetadataEvent, PauseEvent, PlayEvent, PlayingEvent,
ProgressEvent, SeekedEvent, SeekingEvent, StalledEvent, SuspendEvent, WaitingEvent:
if listeners := getNoArgEventRawListeners[MediaPlayer](player, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
case DurationChangedEvent, RateChangedEvent, TimeUpdateEvent, VolumeChangedEvent:
if listeners := getOneArgEventRawListeners[MediaPlayer, float64](player, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
case PlayerErrorEvent:
if value := player.getRaw(tag); value != nil {
if listeners, ok := value.([]mediaPlayerErrorListener); ok && len(listeners) > 0 {
result := make([]any, 0, len(listeners))
for _, listener := range listeners {
result = append(result, listener.rawListener())
}
return result
}
}
return nil
}
return player.viewData.getFunc(tag)
}
func (player *mediaPlayerData) setFunc(tag PropertyName, value any) []PropertyName {
switch tag {

View File

@ -129,6 +129,7 @@ func (picker *numberPickerData) init(session Session) {
picker.tag = "NumberPicker"
picker.hasHtmlDisabled = true
picker.normalize = normalizeNumberPickerTag
picker.get = picker.getFunc
picker.set = picker.setFunc
picker.changed = picker.propertyChanged
}
@ -147,6 +148,17 @@ func normalizeNumberPickerTag(tag PropertyName) PropertyName {
return normalizeDataListTag(tag)
}
func (picker *numberPickerData) getFunc(tag PropertyName) any {
switch tag {
case NumberChangedEvent:
if listeners := getTwoArgEventRawListeners[NumberPicker, float64](picker, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return picker.viewData.getFunc(tag)
}
func (picker *numberPickerData) setFunc(tag PropertyName, value any) []PropertyName {
switch tag {
case NumberChangedEvent:

View File

@ -593,6 +593,7 @@ func (table *tableViewData) init(session Session) {
table.cellViews = []View{}
table.cellFrame = []Frame{}
table.normalize = normalizeTableViewTag
table.get = table.getFunc
table.set = table.setFunc
table.changed = table.propertyChanged
}
@ -618,6 +619,23 @@ func (table *tableViewData) Focusable() bool {
return GetTableSelectionMode(table) != NoneSelection
}
func (table *tableViewData) getFunc(tag PropertyName) any {
switch tag {
case TableCellClickedEvent, TableCellSelectedEvent:
if listeners := getTwoArgEventRawListeners[TableView, int](table, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
case TableRowClickedEvent, TableRowSelectedEvent:
if listeners := getOneArgEventRawListeners[TableView, int](table, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return table.viewData.getFunc(tag)
}
func (table *tableViewData) setFunc(tag PropertyName, value any) []PropertyName {
setLineStyle := func() []PropertyName {

View File

@ -163,6 +163,7 @@ func (tabsLayout *tabsLayoutData) init(session Session) {
tabsLayout.viewsContainerData.init(session)
tabsLayout.tag = "TabsLayout"
tabsLayout.systemClass = "ruiTabsLayout"
tabsLayout.get = tabsLayout.getFunc
tabsLayout.set = tabsLayout.setFunc
tabsLayout.changed = tabsLayout.propertyChanged
}
@ -172,6 +173,23 @@ func tabsLayoutCurrent(view View, defaultValue int) int {
return result
}
func (tabsLayout *tabsLayoutData) getFunc(tag PropertyName) any {
switch tag {
case CurrentTabChangedEvent:
if listeners := getTwoArgEventRawListeners[TabsLayout, int](tabsLayout, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
case TabCloseEvent:
if listeners := getOneArgEventRawListeners[TabsLayout, int](tabsLayout, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return tabsLayout.viewsContainerData.getFunc(tag)
}
func (tabsLayout *tabsLayoutData) setFunc(tag PropertyName, value any) []PropertyName {
switch tag {
case CurrentTabChangedEvent:

View File

@ -120,6 +120,7 @@ func (picker *timePickerData) init(session Session) {
picker.tag = "TimePicker"
picker.hasHtmlDisabled = true
picker.normalize = normalizeTimePickerTag
picker.get = picker.getFunc
picker.set = picker.setFunc
picker.changed = picker.propertyChanged
}
@ -167,6 +168,17 @@ func stringToTime(value string) (time.Time, bool) {
return result, true
}
func (picker *timePickerData) getFunc(tag PropertyName) any {
switch tag {
case TimeChangedEvent:
if listeners := getTwoArgEventRawListeners[TimePicker, time.Time](picker, nil, tag); len(listeners) > 0 {
return listeners
}
return nil
}
return picker.viewData.getFunc(tag)
}
func (picker *timePickerData) setFunc(tag PropertyName, value any) []PropertyName {
setTimeValue := func(tag PropertyName) []PropertyName {

51
view.go
View File

@ -308,8 +308,57 @@ func (view *viewData) getFunc(tag PropertyName) any {
} else {
return nil
}
case FocusEvent, LostFocusEvent:
if listeners := getNoArgEventRawListeners[View](view, nil, tag); len(listeners) > 0 {
}
case KeyDownEvent, KeyUpEvent:
if listeners := getOneArgEventRawListeners[View, KeyEvent](view, nil, tag); len(listeners) > 0 {
return listeners
}
case ClickEvent, DoubleClickEvent, MouseDown, MouseUp, MouseMove, MouseOut, MouseOver, ContextMenuEvent:
if listeners := getOneArgEventRawListeners[View, MouseEvent](view, nil, tag); len(listeners) > 0 {
return listeners
}
case PointerDown, PointerUp, PointerMove, PointerOut, PointerOver, PointerCancel:
if listeners := getOneArgEventRawListeners[View, PointerEvent](view, nil, tag); len(listeners) > 0 {
return listeners
}
case TouchStart, TouchEnd, TouchMove, TouchCancel:
if listeners := getOneArgEventRawListeners[View, TouchEvent](view, nil, tag); len(listeners) > 0 {
return listeners
}
case TransitionRunEvent, TransitionStartEvent, TransitionEndEvent, TransitionCancelEvent:
if listeners := getOneArgEventRawListeners[View, PropertyName](view, nil, tag); len(listeners) > 0 {
return listeners
}
case AnimationStartEvent, AnimationEndEvent, AnimationIterationEvent, AnimationCancelEvent:
if listeners := getOneArgEventRawListeners[View, string](view, nil, tag); len(listeners) > 0 {
return listeners
}
case ResizeEvent, ScrollEvent:
if listeners := getOneArgEventRawListeners[View, Frame](view, nil, tag); len(listeners) > 0 {
return listeners
}
case DragStartEvent, DragEndEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, DropEvent:
if listeners := getOneArgEventRawListeners[View, DragAndDropEvent](view, nil, tag); len(listeners) > 0 {
return listeners
}
default:
return viewStyleGet(view, tag)
}
return viewStyleGet(view, tag)
return nil
}
func (view *viewData) removeFunc(tag PropertyName) []PropertyName {