mirror of https://github.com/anoshenko/rui.git
				
				
				
			Optimisation
This commit is contained in:
		
							parent
							
								
									ed639c94c6
								
							
						
					
					
						commit
						6b2a5b4aee
					
				|  | @ -7,7 +7,7 @@ | ||||||
| * Changed Push and Pop method of StackLayout interface. | * Changed Push and Pop method of StackLayout interface. | ||||||
| * Removed DefaultAnimation, StartToEndAnimation, EndToStartAnimation, TopDownAnimation, and BottomUpAnimation constants. | * Removed DefaultAnimation, StartToEndAnimation, EndToStartAnimation, TopDownAnimation, and BottomUpAnimation constants. | ||||||
| * Added "push-transform", "push-duration", "push-timing", and "move-to-front-animation" properties. | * Added "push-transform", "push-duration", "push-timing", and "move-to-front-animation" properties. | ||||||
| * Added GetPushDuration, GetPushTiming, and IsMoveToFrontAnimation functions. | * Added GetPushTransform, GetPushDuration, GetPushTiming, and IsMoveToFrontAnimation functions. | ||||||
| * Added LineJoin type. Type of constants MiterJoin, RoundJoin, and BevelJoin changed to LineJoin. Type of Canvas.SetLineJoin function argument changed to LineJoin. | * Added LineJoin type. Type of constants MiterJoin, RoundJoin, and BevelJoin changed to LineJoin. Type of Canvas.SetLineJoin function argument changed to LineJoin. | ||||||
| * Added LineCap type. Type of constants ButtCap, RoundCap, and SquareCap changed to LineCap. Type of Canvas.SetLineCap function argument changed to LineCap. | * Added LineCap type. Type of constants ButtCap, RoundCap, and SquareCap changed to LineCap. Type of Canvas.SetLineCap function argument changed to LineCap. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								animation.go
								
								
								
								
							
							
						
						
									
										12
									
								
								animation.go
								
								
								
								
							|  | @ -981,11 +981,7 @@ func IsAnimationPaused(view View, subviewID ...string) bool { | ||||||
| // GetTransitions returns the subview transitions. The result is always non-nil.
 | // GetTransitions returns the subview transitions. The result is always non-nil.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then transitions of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then transitions of the first argument (view) is returned
 | ||||||
| func GetTransitions(view View, subviewID ...string) map[PropertyName]Animation { | func GetTransitions(view View, subviewID ...string) map[PropertyName]Animation { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		return view.Transitions() | 		return view.Transitions() | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -1025,11 +1021,7 @@ func AddTransition(view View, subviewID string, tag PropertyName, animation Anim | ||||||
| // GetAnimation returns the subview animations. The result is always non-nil.
 | // GetAnimation returns the subview animations. The result is always non-nil.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then transitions of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then transitions of the first argument (view) is returned
 | ||||||
| func GetAnimation(view View, subviewID ...string) []Animation { | func GetAnimation(view View, subviewID ...string) []Animation { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.getRaw(AnimationTag); value != nil { | 		if value := view.getRaw(AnimationTag); value != nil { | ||||||
| 			if animations, ok := value.([]Animation); ok && animations != nil { | 			if animations, ok := value.([]Animation); ok && animations != nil { | ||||||
| 				return animations | 				return animations | ||||||
|  |  | ||||||
|  | @ -174,10 +174,7 @@ func (picker *colorPickerData) handleCommand(self View, command PropertyName, da | ||||||
| // GetColorPickerValue returns the value of ColorPicker subview.
 | // GetColorPickerValue returns the value of ColorPicker subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetColorPickerValue(view View, subviewID ...string) Color { | func GetColorPickerValue(view View, subviewID ...string) Color { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value, ok := colorProperty(view, ColorPickerValue, view.Session()); ok { | 		if value, ok := colorProperty(view, ColorPickerValue, view.Session()); ok { | ||||||
| 			return value | 			return value | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -199,11 +199,7 @@ func GetColumnGap(view View, subviewID ...string) SizeUnit { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getColumnSeparator(view View, subviewID []string) ViewBorder { | func getColumnSeparator(view View, subviewID []string) ViewBorder { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		value := view.Get(ColumnSeparator) | 		value := view.Get(ColumnSeparator) | ||||||
| 		if value == nil { | 		if value == nil { | ||||||
| 			value = valueFromStyle(view, ColumnSeparator) | 			value = valueFromStyle(view, ColumnSeparator) | ||||||
|  |  | ||||||
							
								
								
									
										75
									
								
								dataList.go
								
								
								
								
							
							
						
						
									
										75
									
								
								dataList.go
								
								
								
								
							|  | @ -322,83 +322,10 @@ func dataListHtmlProperties(view View, buffer *strings.Builder) { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* |  | ||||||
| func (list *dataList) setDataList(view View, value any, created bool) bool { |  | ||||||
| 	items, ok := anyToStringArray(value) |  | ||||||
| 	if !ok { |  | ||||||
| 		notCompatibleType(DataList, value) |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	list.dataList = items |  | ||||||
| 	if created { |  | ||||||
| 		session := view.Session() |  | ||||||
| 		dataListID := dataListID(view) |  | ||||||
| 		buffer := allocStringBuilder() |  | ||||||
| 		defer freeStringBuilder(buffer) |  | ||||||
| 
 |  | ||||||
| 		if list.dataListHtml { |  | ||||||
| 			list.dataListItemsHtml(buffer) |  | ||||||
| 			session.updateInnerHTML(dataListID, buffer.String()) |  | ||||||
| 		} else { |  | ||||||
| 			list.dataListHtmlCode(view, buffer) |  | ||||||
| 			session.appendToInnerHTML(view.parentHTMLID(), buffer.String()) |  | ||||||
| 			list.dataListHtml = true |  | ||||||
| 			session.updateProperty(view.htmlID(), "list", dataListID) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (list *dataList) dataListHtmlSubviews(view View, buffer *strings.Builder) { |  | ||||||
| 	if len(list.dataList) > 0 { |  | ||||||
| 		list.dataListHtmlCode(view, buffer) |  | ||||||
| 		list.dataListHtml = true |  | ||||||
| 	} else { |  | ||||||
| 		list.dataListHtml = false |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (list *dataList) dataListHtmlCode(view View, buffer *strings.Builder) { |  | ||||||
| 	buffer.WriteString(`<datalist id="`) |  | ||||||
| 	buffer.WriteString(dataListID(view)) |  | ||||||
| 	buffer.WriteString(`">`) |  | ||||||
| 	list.dataListItemsHtml(buffer) |  | ||||||
| 	buffer.WriteString(`</datalist>`) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (list *dataList) dataListItemsHtml(buffer *strings.Builder) { |  | ||||||
| 	for _, text := range list.dataList { |  | ||||||
| 		if strings.ContainsRune(text, '"') { |  | ||||||
| 			text = strings.ReplaceAll(text, `"`, `"`) |  | ||||||
| 		} |  | ||||||
| 		if strings.ContainsRune(text, '\n') { |  | ||||||
| 			text = strings.ReplaceAll(text, "\n", `\n`) |  | ||||||
| 		} |  | ||||||
| 		buffer.WriteString(`<option value="`) |  | ||||||
| 		buffer.WriteString(text) |  | ||||||
| 		buffer.WriteString(`"></option>`) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (list *dataList) dataListHtmlProperties(view View, buffer *strings.Builder) { |  | ||||||
| 	if len(list.dataList) > 0 { |  | ||||||
| 		buffer.WriteString(` list="`) |  | ||||||
| 		buffer.WriteString(dataListID(view)) |  | ||||||
| 		buffer.WriteString(`"`) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| // GetDataList returns the data list of an editor.
 | // GetDataList returns the data list of an editor.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetDataList(view View, subviewID ...string) []string { | func GetDataList(view View, subviewID ...string) []string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		return getDataListProperty(view) | 		return getDataListProperty(view) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -402,10 +402,7 @@ func getDateProperty(view View, mainTag, shortTag PropertyName) (time.Time, bool | ||||||
| // "false" as the second value otherwise.
 | // "false" as the second value otherwise.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetDatePickerMin(view View, subviewID ...string) (time.Time, bool) { | func GetDatePickerMin(view View, subviewID ...string) (time.Time, bool) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		return getDateProperty(view, DatePickerMin, Min) | 		return getDateProperty(view, DatePickerMin, Min) | ||||||
| 	} | 	} | ||||||
| 	return time.Now(), false | 	return time.Now(), false | ||||||
|  | @ -415,10 +412,7 @@ func GetDatePickerMin(view View, subviewID ...string) (time.Time, bool) { | ||||||
| // "false" as the second value otherwise.
 | // "false" as the second value otherwise.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetDatePickerMax(view View, subviewID ...string) (time.Time, bool) { | func GetDatePickerMax(view View, subviewID ...string) (time.Time, bool) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		return getDateProperty(view, DatePickerMax, Max) | 		return getDateProperty(view, DatePickerMax, Max) | ||||||
| 	} | 	} | ||||||
| 	return time.Now(), false | 	return time.Now(), false | ||||||
|  | @ -433,10 +427,7 @@ func GetDatePickerStep(view View, subviewID ...string) int { | ||||||
| // GetDatePickerValue returns the date of DatePicker subview.
 | // GetDatePickerValue returns the date of DatePicker subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetDatePickerValue(view View, subviewID ...string) time.Time { | func GetDatePickerValue(view View, subviewID ...string) time.Time { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view == nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { |  | ||||||
| 		return time.Now() | 		return time.Now() | ||||||
| 	} | 	} | ||||||
| 	date, _ := getDateProperty(view, DatePickerValue, Value) | 	date, _ := getDateProperty(view, DatePickerValue, Value) | ||||||
|  |  | ||||||
|  | @ -171,10 +171,7 @@ func (detailsView *detailsViewData) handleCommand(self View, command PropertyNam | ||||||
| // GetDetailsSummary returns a value of the Summary property of DetailsView.
 | // GetDetailsSummary returns a value of the Summary property of DetailsView.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetDetailsSummary(view View, subviewID ...string) View { | func GetDetailsSummary(view View, subviewID ...string) View { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.Get(Summary); value != nil { | 		if value := view.Get(Summary); value != nil { | ||||||
| 			switch value := value.(type) { | 			switch value := value.(type) { | ||||||
| 			case string: | 			case string: | ||||||
|  |  | ||||||
|  | @ -267,10 +267,7 @@ func GetDropDownListeners(view View, subviewID ...string) []func(DropDownList, i | ||||||
| // GetDropDownItems return the DropDownList items list.
 | // GetDropDownItems return the DropDownList items list.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetDropDownItems(view View, subviewID ...string) []string { | func GetDropDownItems(view View, subviewID ...string) []string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.Get(Items); value != nil { | 		if value := view.Get(Items); value != nil { | ||||||
| 			if items, ok := value.([]string); ok { | 			if items, ok := value.([]string); ok { | ||||||
| 				return items | 				return items | ||||||
|  | @ -313,19 +310,13 @@ func getIndicesArray(view View, tag PropertyName) []int { | ||||||
| // GetDropDownDisabledItems return an array of disabled(non selectable) items indices of DropDownList.
 | // GetDropDownDisabledItems return an array of disabled(non selectable) items indices of DropDownList.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetDropDownDisabledItems(view View, subviewID ...string) []int { | func GetDropDownDisabledItems(view View, subviewID ...string) []int { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return getIndicesArray(view, DisabledItems) | 	return getIndicesArray(view, DisabledItems) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetDropDownItemSeparators return an array of indices of DropDownList items after which a separator should be added.
 | // GetDropDownItemSeparators return an array of indices of DropDownList items after which a separator should be added.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetDropDownItemSeparators(view View, subviewID ...string) []int { | func GetDropDownItemSeparators(view View, subviewID ...string) []int { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return getIndicesArray(view, ItemSeparators) | 	return getIndicesArray(view, ItemSeparators) | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								editView.go
								
								
								
								
							
							
						
						
									
										14
									
								
								editView.go
								
								
								
								
							|  | @ -398,10 +398,7 @@ func (edit *editViewData) handleCommand(self View, command PropertyName, data Da | ||||||
| // GetText returns a text of the EditView subview.
 | // GetText returns a text of the EditView subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a text of the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a text of the first argument (view) is returned.
 | ||||||
| func GetText(view View, subviewID ...string) string { | func GetText(view View, subviewID ...string) string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.getRaw(Text); value != nil { | 		if value := view.getRaw(Text); value != nil { | ||||||
| 			if text, ok := value.(string); ok { | 			if text, ok := value.(string); ok { | ||||||
| 				return text | 				return text | ||||||
|  | @ -414,9 +411,7 @@ func GetText(view View, subviewID ...string) string { | ||||||
| // GetHint returns a hint text of the subview.
 | // GetHint returns a hint text of the subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a text of the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a text of the first argument (view) is returned.
 | ||||||
| func GetHint(view View, subviewID ...string) string { | func GetHint(view View, subviewID ...string) string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	session := view.Session() | 	session := view.Session() | ||||||
| 	text := "" | 	text := "" | ||||||
|  | @ -477,10 +472,7 @@ func GetEditViewType(view View, subviewID ...string) int { | ||||||
| // GetEditViewPattern returns a value of the Pattern property of EditView.
 | // GetEditViewPattern returns a value of the Pattern property of EditView.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetEditViewPattern(view View, subviewID ...string) string { | func GetEditViewPattern(view View, subviewID ...string) string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if pattern, ok := stringProperty(view, EditViewPattern, view.Session()); ok { | 		if pattern, ok := stringProperty(view, EditViewPattern, view.Session()); ok { | ||||||
| 			return pattern | 			return pattern | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								events.go
								
								
								
								
							
							
						
						
									
										15
									
								
								events.go
								
								
								
								
							|  | @ -411,10 +411,7 @@ func valueToTwoArgEventListeners[V View, E any](value any) ([]func(V, E, E), boo | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getNoArgEventListeners[V View](view View, subviewID []string, tag PropertyName) []func(V) { | func getNoArgEventListeners[V View](view View, subviewID []string, tag PropertyName) []func(V) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.Get(tag); value != nil { | 		if value := view.Get(tag); value != nil { | ||||||
| 			if result, ok := value.([]func(V)); ok { | 			if result, ok := value.([]func(V)); ok { | ||||||
| 				return result | 				return result | ||||||
|  | @ -425,10 +422,7 @@ func getNoArgEventListeners[V View](view View, subviewID []string, tag PropertyN | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getOneArgEventListeners[V View, E any](view View, subviewID []string, tag PropertyName) []func(V, E) { | func getOneArgEventListeners[V View, E any](view View, subviewID []string, tag PropertyName) []func(V, E) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.Get(tag); value != nil { | 		if value := view.Get(tag); value != nil { | ||||||
| 			if result, ok := value.([]func(V, E)); ok { | 			if result, ok := value.([]func(V, E)); ok { | ||||||
| 				return result | 				return result | ||||||
|  | @ -439,10 +433,7 @@ func getOneArgEventListeners[V View, E any](view View, subviewID []string, tag P | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getTwoArgEventListeners[V View, E any](view View, subviewID []string, tag PropertyName) []func(V, E, E) { | func getTwoArgEventListeners[V View, E any](view View, subviewID []string, tag PropertyName) []func(V, E, E) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.Get(tag); value != nil { | 		if value := view.Get(tag); value != nil { | ||||||
| 			if result, ok := value.([]func(V, E, E)); ok { | 			if result, ok := value.([]func(V, E, E)); ok { | ||||||
| 				return result | 				return result | ||||||
|  |  | ||||||
|  | @ -345,10 +345,7 @@ func IsMultipleFilePicker(view View, subviewID ...string) bool { | ||||||
| // GetFilePickerAccept returns sets the list of allowed file extensions or MIME types.
 | // GetFilePickerAccept returns sets the list of allowed file extensions or MIME types.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetFilePickerAccept(view View, subviewID ...string) []string { | func GetFilePickerAccept(view View, subviewID ...string) []string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		accept, ok := stringProperty(view, Accept, view.Session()) | 		accept, ok := stringProperty(view, Accept, view.Session()) | ||||||
| 		if !ok { | 		if !ok { | ||||||
| 			if value := valueFromStyle(view, Accept); value != nil { | 			if value := valueFromStyle(view, Accept); value != nil { | ||||||
|  |  | ||||||
|  | @ -533,10 +533,7 @@ func GetGridAutoFlow(view View, subviewID ...string) int { | ||||||
| // If the result is a single value array, then the width of all cell is equal.
 | // If the result is a single value array, then the width of all cell is equal.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetCellWidth(view View, subviewID ...string) []SizeUnit { | func GetCellWidth(view View, subviewID ...string) []SizeUnit { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		return gridCellSizes(view, CellWidth, view.Session()) | 		return gridCellSizes(view, CellWidth, view.Session()) | ||||||
| 	} | 	} | ||||||
| 	return []SizeUnit{} | 	return []SizeUnit{} | ||||||
|  | @ -546,10 +543,7 @@ func GetCellWidth(view View, subviewID ...string) []SizeUnit { | ||||||
| // If the result is a single value array, then the height of all cell is equal.
 | // If the result is a single value array, then the height of all cell is equal.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetCellHeight(view View, subviewID ...string) []SizeUnit { | func GetCellHeight(view View, subviewID ...string) []SizeUnit { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		return gridCellSizes(view, CellHeight, view.Session()) | 		return gridCellSizes(view, CellHeight, view.Session()) | ||||||
| 	} | 	} | ||||||
| 	return []SizeUnit{} | 	return []SizeUnit{} | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								imageView.go
								
								
								
								
							
							
						
						
									
										12
									
								
								imageView.go
								
								
								
								
							|  | @ -329,11 +329,7 @@ func (imageView *imageViewData) CurrentSource() string { | ||||||
| // GetImageViewSource returns the image URL of an ImageView subview.
 | // GetImageViewSource returns the image URL of an ImageView subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a left position of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a left position of the first argument (view) is returned
 | ||||||
| func GetImageViewSource(view View, subviewID ...string) string { | func GetImageViewSource(view View, subviewID ...string) string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if image, ok := imageProperty(view, Source, view.Session()); ok { | 		if image, ok := imageProperty(view, Source, view.Session()); ok { | ||||||
| 			return image | 			return image | ||||||
| 		} | 		} | ||||||
|  | @ -345,11 +341,7 @@ func GetImageViewSource(view View, subviewID ...string) string { | ||||||
| // GetImageViewAltText returns an alternative text description of an ImageView subview.
 | // GetImageViewAltText returns an alternative text description of an ImageView subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a left position of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a left position of the first argument (view) is returned
 | ||||||
| func GetImageViewAltText(view View, subviewID ...string) string { | func GetImageViewAltText(view View, subviewID ...string) string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.getRaw(AltText); value != nil { | 		if value := view.getRaw(AltText); value != nil { | ||||||
| 			if text, ok := value.(string); ok { | 			if text, ok := value.(string); ok { | ||||||
| 				text, _ = view.Session().GetString(text) | 				text, _ = view.Session().GetString(text) | ||||||
|  |  | ||||||
|  | @ -222,11 +222,7 @@ func GetListHorizontalAlign(view View, subviewID ...string) int { | ||||||
| // TopDownOrientation (0), StartToEndOrientation (1), BottomUpOrientation (2), or EndToStartOrientation (3)
 | // TopDownOrientation (0), StartToEndOrientation (1), BottomUpOrientation (2), or EndToStartOrientation (3)
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetListOrientation(view View, subviewID ...string) int { | func GetListOrientation(view View, subviewID ...string) int { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if orientation, ok := valueToOrientation(view.Get(Orientation), view.Session()); ok { | 		if orientation, ok := valueToOrientation(view.Get(Orientation), view.Session()); ok { | ||||||
| 			return orientation | 			return orientation | ||||||
| 		} | 		} | ||||||
|  | @ -264,11 +260,7 @@ func GetListColumnGap(view View, subviewID ...string) SizeUnit { | ||||||
| // otherwise does nothing.
 | // otherwise does nothing.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then the first argument (view) updates.
 | // If the second argument (subviewID) is not specified or it is "" then the first argument (view) updates.
 | ||||||
| func UpdateContent(view View, subviewID ...string) { | func UpdateContent(view View, subviewID ...string) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		switch view := view.(type) { | 		switch view := view.(type) { | ||||||
| 		case GridLayout: | 		case GridLayout: | ||||||
| 			view.UpdateGridContent() | 			view.UpdateGridContent() | ||||||
|  | @ -278,6 +270,9 @@ func UpdateContent(view View, subviewID ...string) { | ||||||
| 
 | 
 | ||||||
| 		case ListView: | 		case ListView: | ||||||
| 			view.ReloadListViewData() | 			view.ReloadListViewData() | ||||||
|  | 
 | ||||||
|  | 		case TableView: | ||||||
|  | 			view.ReloadTableData() | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										17
									
								
								listView.go
								
								
								
								
							
							
						
						
									
										17
									
								
								listView.go
								
								
								
								
							|  | @ -1098,11 +1098,7 @@ func GetListViewCheckbox(view View, subviewID ...string) int { | ||||||
| // GetListViewCheckedItems returns the array of ListView checked items.
 | // GetListViewCheckedItems returns the array of ListView checked items.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetListViewCheckedItems(view View, subviewID ...string) []int { | func GetListViewCheckedItems(view View, subviewID ...string) []int { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.getRaw(Checked); value != nil { | 		if value := view.getRaw(Checked); value != nil { | ||||||
| 			if checkedItems, ok := value.([]int); ok { | 			if checkedItems, ok := value.([]int); ok { | ||||||
| 				switch GetListViewCheckbox(view) { | 				switch GetListViewCheckbox(view) { | ||||||
|  | @ -1179,10 +1175,7 @@ func GetListItemFrame(view View, subviewID string, index int) Frame { | ||||||
| // GetListViewAdapter - returns the ListView adapter.
 | // GetListViewAdapter - returns the ListView adapter.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetListViewAdapter(view View, subviewID ...string) ListAdapter { | func GetListViewAdapter(view View, subviewID ...string) ListAdapter { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.Get(Items); value != nil { | 		if value := view.Get(Items); value != nil { | ||||||
| 			if adapter, ok := value.(ListAdapter); ok { | 			if adapter, ok := value.(ListAdapter); ok { | ||||||
| 				return adapter | 				return adapter | ||||||
|  | @ -1195,11 +1188,7 @@ func GetListViewAdapter(view View, subviewID ...string) ListAdapter { | ||||||
| // ReloadListViewData updates ListView content
 | // ReloadListViewData updates ListView content
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then content the first argument (view) is updated.
 | // If the second argument (subviewID) is not specified or it is "" then content the first argument (view) is updated.
 | ||||||
| func ReloadListViewData(view View, subviewID ...string) { | func ReloadListViewData(view View, subviewID ...string) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if listView, ok := view.(ListView); ok { | 		if listView, ok := view.(ListView); ok { | ||||||
| 			listView.ReloadListViewData() | 			listView.ReloadListViewData() | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -304,12 +304,8 @@ func GetNumberPickerType(view View, subviewID ...string) int { | ||||||
| // GetNumberPickerMinMax returns the min and max value of NumberPicker subview.
 | // GetNumberPickerMinMax returns the min and max value of NumberPicker subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetNumberPickerMinMax(view View, subviewID ...string) (float64, float64) { | func GetNumberPickerMinMax(view View, subviewID ...string) (float64, float64) { | ||||||
| 	var pickerType int | 	view = getSubview(view, subviewID) | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	pickerType := GetNumberPickerType(view) | ||||||
| 		pickerType = GetNumberPickerType(view, subviewID[0]) |  | ||||||
| 	} else { |  | ||||||
| 		pickerType = GetNumberPickerType(view) |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	var defMin, defMax float64 | 	var defMin, defMax float64 | ||||||
| 	if pickerType == NumberSlider { | 	if pickerType == NumberSlider { | ||||||
|  | @ -320,8 +316,8 @@ func GetNumberPickerMinMax(view View, subviewID ...string) (float64, float64) { | ||||||
| 		defMax = math.Inf(1) | 		defMax = math.Inf(1) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	min := floatStyledProperty(view, subviewID, NumberPickerMin, defMin) | 	min := floatStyledProperty(view, nil, NumberPickerMin, defMin) | ||||||
| 	max := floatStyledProperty(view, subviewID, NumberPickerMax, defMax) | 	max := floatStyledProperty(view, nil, NumberPickerMax, defMax) | ||||||
| 
 | 
 | ||||||
| 	if min > max { | 	if min > max { | ||||||
| 		return max, min | 		return max, min | ||||||
|  | @ -332,14 +328,10 @@ func GetNumberPickerMinMax(view View, subviewID ...string) (float64, float64) { | ||||||
| // GetNumberPickerStep returns the value changing step of NumberPicker subview.
 | // GetNumberPickerStep returns the value changing step of NumberPicker subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetNumberPickerStep(view View, subviewID ...string) float64 { | func GetNumberPickerStep(view View, subviewID ...string) float64 { | ||||||
| 	var max float64 | 	view = getSubview(view, subviewID) | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	_, max := GetNumberPickerMinMax(view) | ||||||
| 		_, max = GetNumberPickerMinMax(view, subviewID[0]) |  | ||||||
| 	} else { |  | ||||||
| 		_, max = GetNumberPickerMinMax(view) |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	result := floatStyledProperty(view, subviewID, NumberPickerStep, 0) | 	result := floatStyledProperty(view, nil, NumberPickerStep, 0) | ||||||
| 	if result > max { | 	if result > max { | ||||||
| 		return max | 		return max | ||||||
| 	} | 	} | ||||||
|  | @ -349,15 +341,9 @@ func GetNumberPickerStep(view View, subviewID ...string) float64 { | ||||||
| // GetNumberPickerValue returns the value of NumberPicker subview.
 | // GetNumberPickerValue returns the value of NumberPicker subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetNumberPickerValue(view View, subviewID ...string) float64 { | func GetNumberPickerValue(view View, subviewID ...string) float64 { | ||||||
| 	var min float64 | 	view = getSubview(view, subviewID) | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	min, _ := GetNumberPickerMinMax(view) | ||||||
| 		min, _ = GetNumberPickerMinMax(view, subviewID[0]) | 	return floatStyledProperty(view, nil, NumberPickerValue, min) | ||||||
| 	} else { |  | ||||||
| 		min, _ = GetNumberPickerMinMax(view) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	result := floatStyledProperty(view, subviewID, NumberPickerValue, min) |  | ||||||
| 	return result |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetNumberChangedListeners returns the NumberChangedListener list of an NumberPicker subview.
 | // GetNumberChangedListeners returns the NumberChangedListener list of an NumberPicker subview.
 | ||||||
|  |  | ||||||
|  | @ -73,9 +73,7 @@ func (view *viewData) Frame() Frame { | ||||||
| // GetViewFrame returns the size and location of view's viewport.
 | // GetViewFrame returns the size and location of view's viewport.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then the value of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then the value of the first argument (view) is returned
 | ||||||
| func GetViewFrame(view View, subviewID ...string) Frame { | func GetViewFrame(view View, subviewID ...string) Frame { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { | 	if view == nil { | ||||||
| 		return Frame{} | 		return Frame{} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -42,9 +42,7 @@ func (view *viewData) setScroll(x, y, width, height float64) { | ||||||
| // GetViewScroll returns ...
 | // GetViewScroll returns ...
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a value of the first argument (view) is returned
 | ||||||
| func GetViewScroll(view View, subviewID ...string) Frame { | func GetViewScroll(view View, subviewID ...string) Frame { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { | 	if view == nil { | ||||||
| 		return Frame{} | 		return Frame{} | ||||||
| 	} | 	} | ||||||
|  | @ -71,10 +69,7 @@ func ScrollViewTo(view View, subviewID string, x, y float64) { | ||||||
| // ScrollViewToEnd scrolls the view's content to the start of view.
 | // ScrollViewToEnd scrolls the view's content to the start of view.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then the first argument (view) is used
 | // If the second argument (subviewID) is not specified or it is "" then the first argument (view) is used
 | ||||||
| func ScrollViewToStart(view View, subviewID ...string) { | func ScrollViewToStart(view View, subviewID ...string) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		view.Session().callFunc("scrollToStart", view.htmlID()) | 		view.Session().callFunc("scrollToStart", view.htmlID()) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | @ -82,10 +77,7 @@ func ScrollViewToStart(view View, subviewID ...string) { | ||||||
| // ScrollViewToEnd scrolls the view's content to the end of view.
 | // ScrollViewToEnd scrolls the view's content to the end of view.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then the first argument (view) is used
 | // If the second argument (subviewID) is not specified or it is "" then the first argument (view) is used
 | ||||||
| func ScrollViewToEnd(view View, subviewID ...string) { | func ScrollViewToEnd(view View, subviewID ...string) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		view.Session().callFunc("scrollToEnd", view.htmlID()) | 		view.Session().callFunc("scrollToEnd", view.htmlID()) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -560,11 +560,7 @@ func (layout *stackLayoutData) htmlSubviews(self View, buffer *strings.Builder) | ||||||
| // IsMoveToFrontAnimation returns "true" if an animation is used when calling the MoveToFront/MoveToFrontByID method of StackLayout interface.
 | // IsMoveToFrontAnimation returns "true" if an animation is used when calling the MoveToFront/MoveToFrontByID method of StackLayout interface.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func IsMoveToFrontAnimation(view View, subviewID ...string) bool { | func IsMoveToFrontAnimation(view View, subviewID ...string) bool { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value, ok := boolProperty(view, MoveToFrontAnimation, view.Session()); ok { | 		if value, ok := boolProperty(view, MoveToFrontAnimation, view.Session()); ok { | ||||||
| 			return value | 			return value | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -28,11 +28,7 @@ func (cell *tableCellView) cssStyle(self View, builder cssBuilder) { | ||||||
| // GetTableContent returns a TableAdapter which defines the TableView content.
 | // GetTableContent returns a TableAdapter which defines the TableView content.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetTableContent(view View, subviewID ...string) TableAdapter { | func GetTableContent(view View, subviewID ...string) TableAdapter { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if content := view.getRaw(Content); content != nil { | 		if content := view.getRaw(Content); content != nil { | ||||||
| 			if adapter, ok := content.(TableAdapter); ok { | 			if adapter, ok := content.(TableAdapter); ok { | ||||||
| 				return adapter | 				return adapter | ||||||
|  | @ -46,11 +42,7 @@ func GetTableContent(view View, subviewID ...string) TableAdapter { | ||||||
| // GetTableRowStyle returns a TableRowStyle which defines styles of TableView rows.
 | // GetTableRowStyle returns a TableRowStyle which defines styles of TableView rows.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetTableRowStyle(view View, subviewID ...string) TableRowStyle { | func GetTableRowStyle(view View, subviewID ...string) TableRowStyle { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		for _, tag := range []PropertyName{RowStyle, Content} { | 		for _, tag := range []PropertyName{RowStyle, Content} { | ||||||
| 			if value := view.getRaw(tag); value != nil { | 			if value := view.getRaw(tag); value != nil { | ||||||
| 				if style, ok := value.(TableRowStyle); ok { | 				if style, ok := value.(TableRowStyle); ok { | ||||||
|  | @ -66,11 +58,7 @@ func GetTableRowStyle(view View, subviewID ...string) TableRowStyle { | ||||||
| // GetTableColumnStyle returns a TableColumnStyle which defines styles of TableView columns.
 | // GetTableColumnStyle returns a TableColumnStyle which defines styles of TableView columns.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetTableColumnStyle(view View, subviewID ...string) TableColumnStyle { | func GetTableColumnStyle(view View, subviewID ...string) TableColumnStyle { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		for _, tag := range []PropertyName{ColumnStyle, Content} { | 		for _, tag := range []PropertyName{ColumnStyle, Content} { | ||||||
| 			if value := view.getRaw(tag); value != nil { | 			if value := view.getRaw(tag); value != nil { | ||||||
| 				if style, ok := value.(TableColumnStyle); ok { | 				if style, ok := value.(TableColumnStyle); ok { | ||||||
|  | @ -86,11 +74,7 @@ func GetTableColumnStyle(view View, subviewID ...string) TableColumnStyle { | ||||||
| // GetTableCellStyle returns a TableCellStyle which defines styles of TableView cells.
 | // GetTableCellStyle returns a TableCellStyle which defines styles of TableView cells.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetTableCellStyle(view View, subviewID ...string) TableCellStyle { | func GetTableCellStyle(view View, subviewID ...string) TableCellStyle { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		for _, tag := range []PropertyName{CellStyle, Content} { | 		for _, tag := range []PropertyName{CellStyle, Content} { | ||||||
| 			if value := view.getRaw(tag); value != nil { | 			if value := view.getRaw(tag); value != nil { | ||||||
| 				if style, ok := value.(TableCellStyle); ok { | 				if style, ok := value.(TableCellStyle); ok { | ||||||
|  | @ -136,11 +120,7 @@ func GetTableFootHeight(view View, subviewID ...string) int { | ||||||
| // If the selection mode is RowSelection (2) then the returned column index is less than 0.
 | // If the selection mode is RowSelection (2) then the returned column index is less than 0.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetTableCurrent(view View, subviewID ...string) CellIndex { | func GetTableCurrent(view View, subviewID ...string) CellIndex { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if selectionMode := GetTableSelectionMode(view); selectionMode != NoneSelection { | 		if selectionMode := GetTableSelectionMode(view); selectionMode != NoneSelection { | ||||||
| 			return tableViewCurrent(view) | 			return tableViewCurrent(view) | ||||||
| 		} | 		} | ||||||
|  | @ -179,37 +159,23 @@ func GetTableRowSelectedListeners(view View, subviewID ...string) []func(TableVi | ||||||
| // ReloadTableViewData updates TableView
 | // ReloadTableViewData updates TableView
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then updates the first argument (TableView).
 | // If the second argument (subviewID) is not specified or it is "" then updates the first argument (TableView).
 | ||||||
| func ReloadTableViewData(view View, subviewID ...string) bool { | func ReloadTableViewData(view View, subviewID ...string) bool { | ||||||
| 	var tableView TableView | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 		if tableView, ok := view.(TableView); ok { | ||||||
| 		if tableView = TableViewByID(view, subviewID[0]); tableView == nil { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} else { |  | ||||||
| 		var ok bool |  | ||||||
| 		if tableView, ok = view.(TableView); !ok { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 			tableView.ReloadTableData() | 			tableView.ReloadTableData() | ||||||
| 			return true | 			return true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ReloadTableViewCell updates the given table cell.
 | // ReloadTableViewCell updates the given table cell.
 | ||||||
| // If the last argument (subviewID) is not specified or it is "" then updates the cell of the first argument (TableView).
 | // If the last argument (subviewID) is not specified or it is "" then updates the cell of the first argument (TableView).
 | ||||||
| func ReloadTableViewCell(row, column int, view View, subviewID ...string) bool { | func ReloadTableViewCell(row, column int, view View, subviewID ...string) bool { | ||||||
| 	var tableView TableView | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 		if tableView, ok := view.(TableView); ok { | ||||||
| 		if tableView = TableViewByID(view, subviewID[0]); tableView == nil { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} else { |  | ||||||
| 		var ok bool |  | ||||||
| 		if tableView, ok = view.(TableView); !ok { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 			tableView.ReloadCell(row, column) | 			tableView.ReloadCell(row, column) | ||||||
| 			return true | 			return true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -375,10 +375,7 @@ func getTimeProperty(view View, mainTag, shortTag PropertyName) (time.Time, bool | ||||||
| // "false" as the second value otherwise.
 | // "false" as the second value otherwise.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetTimePickerMin(view View, subviewID ...string) (time.Time, bool) { | func GetTimePickerMin(view View, subviewID ...string) (time.Time, bool) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		return getTimeProperty(view, TimePickerMin, Min) | 		return getTimeProperty(view, TimePickerMin, Min) | ||||||
| 	} | 	} | ||||||
| 	return time.Now(), false | 	return time.Now(), false | ||||||
|  | @ -388,10 +385,7 @@ func GetTimePickerMin(view View, subviewID ...string) (time.Time, bool) { | ||||||
| // "false" as the second value otherwise.
 | // "false" as the second value otherwise.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetTimePickerMax(view View, subviewID ...string) (time.Time, bool) { | func GetTimePickerMax(view View, subviewID ...string) (time.Time, bool) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		return getTimeProperty(view, TimePickerMax, Max) | 		return getTimeProperty(view, TimePickerMax, Max) | ||||||
| 	} | 	} | ||||||
| 	return time.Now(), false | 	return time.Now(), false | ||||||
|  | @ -406,10 +400,7 @@ func GetTimePickerStep(view View, subviewID ...string) int { | ||||||
| // GetTimePickerValue returns the time of TimePicker subview.
 | // GetTimePickerValue returns the time of TimePicker subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetTimePickerValue(view View, subviewID ...string) time.Time { | func GetTimePickerValue(view View, subviewID ...string) time.Time { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view == nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { |  | ||||||
| 		return time.Now() | 		return time.Now() | ||||||
| 	} | 	} | ||||||
| 	time, _ := getTimeProperty(view, TimePickerValue, Value) | 	time, _ := getTimeProperty(view, TimePickerValue, Value) | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								viewClip.go
								
								
								
								
							
							
						
						
									
										10
									
								
								viewClip.go
								
								
								
								
							|  | @ -565,10 +565,7 @@ func getClipShape(prop Properties, tag PropertyName, session Session) ClipShape | ||||||
| // GetClip returns a View clipping area.
 | // GetClip returns a View clipping area.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a top position of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a top position of the first argument (view) is returned
 | ||||||
| func GetClip(view View, subviewID ...string) ClipShape { | func GetClip(view View, subviewID ...string) ClipShape { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		return getClipShape(view, Clip, view.Session()) | 		return getClipShape(view, Clip, view.Session()) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -578,10 +575,7 @@ func GetClip(view View, subviewID ...string) ClipShape { | ||||||
| // GetShapeOutside returns a shape around which adjacent inline content.
 | // GetShapeOutside returns a shape around which adjacent inline content.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a top position of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a top position of the first argument (view) is returned
 | ||||||
| func GetShapeOutside(view View, subviewID ...string) ClipShape { | func GetShapeOutside(view View, subviewID ...string) ClipShape { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		return getClipShape(view, ShapeOutside, view.Session()) | 		return getClipShape(view, ShapeOutside, view.Session()) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -321,11 +321,7 @@ func setFilterProperty(properties Properties, tag PropertyName, value any) []Pro | ||||||
| // GetFilter returns a View graphical effects like blur or color shift.
 | // GetFilter returns a View graphical effects like blur or color shift.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a top position of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a top position of the first argument (view) is returned
 | ||||||
| func GetFilter(view View, subviewID ...string) ViewFilter { | func GetFilter(view View, subviewID ...string) ViewFilter { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.getRaw(Filter); value != nil { | 		if value := view.getRaw(Filter); value != nil { | ||||||
| 			if filter, ok := value.(ViewFilter); ok { | 			if filter, ok := value.(ViewFilter); ok { | ||||||
| 				return filter | 				return filter | ||||||
|  | @ -344,11 +340,7 @@ func GetFilter(view View, subviewID ...string) ViewFilter { | ||||||
| // GetBackdropFilter returns the area behind a View graphical effects like blur or color shift.
 | // GetBackdropFilter returns the area behind a View graphical effects like blur or color shift.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a top position of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a top position of the first argument (view) is returned
 | ||||||
| func GetBackdropFilter(view View, subviewID ...string) ViewFilter { | func GetBackdropFilter(view View, subviewID ...string) ViewFilter { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.getRaw(BackdropFilter); value != nil { | 		if value := view.getRaw(BackdropFilter); value != nil { | ||||||
| 			if filter, ok := value.(ViewFilter); ok { | 			if filter, ok := value.(ViewFilter); ok { | ||||||
| 				return filter | 				return filter | ||||||
|  |  | ||||||
							
								
								
									
										189
									
								
								viewUtils.go
								
								
								
								
							
							
						
						
									
										189
									
								
								viewUtils.go
								
								
								
								
							|  | @ -70,13 +70,37 @@ func SetParams(rootView View, viewID string, params Params) bool { | ||||||
| 	return result | 	return result | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func getSubview(view View, subviewID []string) View { | ||||||
|  | 	switch len(subviewID) { | ||||||
|  | 	case 0: | ||||||
|  | 		// do nothing
 | ||||||
|  | 
 | ||||||
|  | 	case 1: | ||||||
|  | 		if subviewID[0] != "" { | ||||||
|  | 			view = ViewByID(view, subviewID[0]) | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	default: | ||||||
|  | 		buffer := allocStringBuilder() | ||||||
|  | 		defer freeStringBuilder(buffer) | ||||||
|  | 		for _, id := range subviewID { | ||||||
|  | 			if id != "" { | ||||||
|  | 				if buffer.Len() > 0 { | ||||||
|  | 					buffer.WriteRune('/') | ||||||
|  | 				} | ||||||
|  | 				buffer.WriteString(id) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		view = ViewByID(view, buffer.String()) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return view | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // IsDisabled returns "true" if the subview is disabled
 | // IsDisabled returns "true" if the subview is disabled
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a state of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a state of the first argument (view) is returned
 | ||||||
| func IsDisabled(view View, subviewID ...string) bool { | func IsDisabled(view View, subviewID ...string) bool { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if disabled, _ := boolProperty(view, Disabled, view.Session()); disabled { | 		if disabled, _ := boolProperty(view, Disabled, view.Session()); disabled { | ||||||
| 			return true | 			return true | ||||||
| 		} | 		} | ||||||
|  | @ -106,10 +130,7 @@ func GetOpacity(view View, subviewID ...string) float64 { | ||||||
| // GetStyle returns the subview style id.
 | // GetStyle returns the subview style id.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a style of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a style of the first argument (view) is returned
 | ||||||
| func GetStyle(view View, subviewID ...string) string { | func GetStyle(view View, subviewID ...string) string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if style, ok := stringProperty(view, Style, view.Session()); ok { | 		if style, ok := stringProperty(view, Style, view.Session()); ok { | ||||||
| 			return style | 			return style | ||||||
| 		} | 		} | ||||||
|  | @ -120,10 +141,7 @@ func GetStyle(view View, subviewID ...string) string { | ||||||
| // GetDisabledStyle returns the disabled subview style id.
 | // GetDisabledStyle returns the disabled subview style id.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a style of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a style of the first argument (view) is returned
 | ||||||
| func GetDisabledStyle(view View, subviewID ...string) string { | func GetDisabledStyle(view View, subviewID ...string) string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if style, ok := stringProperty(view, StyleDisabled, view.Session()); ok { | 		if style, ok := stringProperty(view, StyleDisabled, view.Session()); ok { | ||||||
| 			return style | 			return style | ||||||
| 		} | 		} | ||||||
|  | @ -142,12 +160,8 @@ func GetVisibility(view View, subviewID ...string) int { | ||||||
| // OverflowHidden (0), OverflowVisible (1), OverflowScroll (2), OverflowAuto (3)
 | // OverflowHidden (0), OverflowVisible (1), OverflowScroll (2), OverflowAuto (3)
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a value of the first argument (view) is returned
 | ||||||
| func GetOverflow(view View, subviewID ...string) int { | func GetOverflow(view View, subviewID ...string) int { | ||||||
|  | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		defaultOverflow := OverflowHidden | 		defaultOverflow := OverflowHidden | ||||||
| 	view2 := view |  | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { |  | ||||||
| 		view2 = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view2 != nil { |  | ||||||
| 		switch view.(type) { | 		switch view.(type) { | ||||||
| 		case EditView: | 		case EditView: | ||||||
| 			defaultOverflow = OverflowAuto | 			defaultOverflow = OverflowAuto | ||||||
|  | @ -155,16 +169,16 @@ func GetOverflow(view View, subviewID ...string) int { | ||||||
| 		case ListView: | 		case ListView: | ||||||
| 			defaultOverflow = OverflowAuto | 			defaultOverflow = OverflowAuto | ||||||
| 		} | 		} | ||||||
|  | 		return enumStyledProperty(view, nil, Overflow, defaultOverflow, false) | ||||||
| 	} | 	} | ||||||
| 	return enumStyledProperty(view, subviewID, Overflow, defaultOverflow, false) | 
 | ||||||
|  | 	return OverflowHidden | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetTabIndex returns the subview tab-index.
 | // GetTabIndex returns the subview tab-index.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a tab-index of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a tab-index of the first argument (view) is returned
 | ||||||
| func GetTabIndex(view View, subviewID ...string) int { | func GetTabIndex(view View, subviewID ...string) int { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	defaultValue := -1 | 	defaultValue := -1 | ||||||
| 	if view != nil { | 	if view != nil { | ||||||
|  | @ -264,11 +278,8 @@ func GetBottom(view View, subviewID ...string) SizeUnit { | ||||||
| // Margin returns the subview margin.
 | // Margin returns the subview margin.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a margin of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a margin of the first argument (view) is returned
 | ||||||
| func GetMargin(view View, subviewID ...string) Bounds { | func GetMargin(view View, subviewID ...string) Bounds { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { |  | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	var bounds Bounds | 	var bounds Bounds | ||||||
| 	if view != nil { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		bounds.setFromProperties(Margin, MarginTop, MarginRight, MarginBottom, MarginLeft, view, view.Session()) | 		bounds.setFromProperties(Margin, MarginTop, MarginRight, MarginBottom, MarginLeft, view, view.Session()) | ||||||
| 	} | 	} | ||||||
| 	return bounds | 	return bounds | ||||||
|  | @ -277,11 +288,8 @@ func GetMargin(view View, subviewID ...string) Bounds { | ||||||
| // GetPadding returns the subview padding.
 | // GetPadding returns the subview padding.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a padding of the first argument (view) is returned
 | // If the second argument (subviewID) is not specified or it is "" then a padding of the first argument (view) is returned
 | ||||||
| func GetPadding(view View, subviewID ...string) Bounds { | func GetPadding(view View, subviewID ...string) Bounds { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { |  | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	var bounds Bounds | 	var bounds Bounds | ||||||
| 	if view != nil { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		bounds.setFromProperties(Padding, PaddingTop, PaddingRight, PaddingBottom, PaddingLeft, view, view.Session()) | 		bounds.setFromProperties(Padding, PaddingTop, PaddingRight, PaddingBottom, PaddingLeft, view, view.Session()) | ||||||
| 	} | 	} | ||||||
| 	return bounds | 	return bounds | ||||||
|  | @ -290,10 +298,7 @@ func GetPadding(view View, subviewID ...string) Bounds { | ||||||
| // GetBorder returns ViewBorders of the subview.
 | // GetBorder returns ViewBorders of the subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a ViewBorders of the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a ViewBorders of the first argument (view) is returned.
 | ||||||
| func GetBorder(view View, subviewID ...string) ViewBorders { | func GetBorder(view View, subviewID ...string) ViewBorders { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if border := getBorderProperty(view, Border); border != nil { | 		if border := getBorderProperty(view, Border); border != nil { | ||||||
| 			return border.ViewBorders(view.Session()) | 			return border.ViewBorders(view.Session()) | ||||||
| 		} | 		} | ||||||
|  | @ -304,9 +309,7 @@ func GetBorder(view View, subviewID ...string) ViewBorders { | ||||||
| // Radius returns the BoxRadius structure of the subview.
 | // Radius returns the BoxRadius structure of the subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a BoxRadius of the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a BoxRadius of the first argument (view) is returned.
 | ||||||
| func GetRadius(view View, subviewID ...string) BoxRadius { | func GetRadius(view View, subviewID ...string) BoxRadius { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { | 	if view == nil { | ||||||
| 		return BoxRadius{} | 		return BoxRadius{} | ||||||
| 	} | 	} | ||||||
|  | @ -316,10 +319,7 @@ func GetRadius(view View, subviewID ...string) BoxRadius { | ||||||
| // GetOutline returns ViewOutline of the subview.
 | // GetOutline returns ViewOutline of the subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a ViewOutline of the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a ViewOutline of the first argument (view) is returned.
 | ||||||
| func GetOutline(view View, subviewID ...string) ViewOutline { | func GetOutline(view View, subviewID ...string) ViewOutline { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if outline := getOutlineProperty(view); outline != nil { | 		if outline := getOutlineProperty(view); outline != nil { | ||||||
| 			return outline.ViewOutline(view.Session()) | 			return outline.ViewOutline(view.Session()) | ||||||
| 		} | 		} | ||||||
|  | @ -336,9 +336,7 @@ func GetOutlineOffset(view View, subviewID ...string) SizeUnit { | ||||||
| // GetViewShadows returns shadows of the subview.
 | // GetViewShadows returns shadows of the subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then shadows of the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then shadows of the first argument (view) is returned.
 | ||||||
| func GetViewShadows(view View, subviewID ...string) []ViewShadow { | func GetViewShadows(view View, subviewID ...string) []ViewShadow { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { | 	if view == nil { | ||||||
| 		return []ViewShadow{} | 		return []ViewShadow{} | ||||||
| 	} | 	} | ||||||
|  | @ -348,9 +346,7 @@ func GetViewShadows(view View, subviewID ...string) []ViewShadow { | ||||||
| // GetTextShadows returns text shadows of the subview.
 | // GetTextShadows returns text shadows of the subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then shadows of the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then shadows of the first argument (view) is returned.
 | ||||||
| func GetTextShadows(view View, subviewID ...string) []ViewShadow { | func GetTextShadows(view View, subviewID ...string) []ViewShadow { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { | 	if view == nil { | ||||||
| 		return []ViewShadow{} | 		return []ViewShadow{} | ||||||
| 	} | 	} | ||||||
|  | @ -530,10 +526,7 @@ func GetVerticalTextOrientation(view View, subviewID ...string) int { | ||||||
| // GetRow returns the range of row numbers of a GridLayout in which the subview is placed.
 | // GetRow returns the range of row numbers of a GridLayout in which the subview is placed.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a values from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a values from the first argument (view) is returned.
 | ||||||
| func GetRow(view View, subviewID ...string) Range { | func GetRow(view View, subviewID ...string) Range { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		session := view.Session() | 		session := view.Session() | ||||||
| 		if result, ok := rangeProperty(view, Row, session); ok { | 		if result, ok := rangeProperty(view, Row, session); ok { | ||||||
| 			return result | 			return result | ||||||
|  | @ -550,10 +543,7 @@ func GetRow(view View, subviewID ...string) Range { | ||||||
| // GetColumn returns the range of column numbers of a GridLayout in which the subview is placed.
 | // GetColumn returns the range of column numbers of a GridLayout in which the subview is placed.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a values from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a values from the first argument (view) is returned.
 | ||||||
| func GetColumn(view View, subviewID ...string) Range { | func GetColumn(view View, subviewID ...string) Range { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		session := view.Session() | 		session := view.Session() | ||||||
| 		if result, ok := rangeProperty(view, Column, session); ok { | 		if result, ok := rangeProperty(view, Column, session); ok { | ||||||
| 			return result | 			return result | ||||||
|  | @ -586,9 +576,7 @@ func GetPerspective(view View, subviewID ...string) SizeUnit { | ||||||
| // It is used as the vanishing point by the Perspective property. The default value is (50%, 50%).
 | // It is used as the vanishing point by the Perspective property. The default value is (50%, 50%).
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetPerspectiveOrigin(view View, subviewID ...string) (SizeUnit, SizeUnit) { | func GetPerspectiveOrigin(view View, subviewID ...string) (SizeUnit, SizeUnit) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { | 	if view == nil { | ||||||
| 		return AutoSize(), AutoSize() | 		return AutoSize(), AutoSize() | ||||||
| 	} | 	} | ||||||
|  | @ -608,9 +596,7 @@ func GetBackfaceVisible(view View, subviewID ...string) bool { | ||||||
| // The default value is (50%, 50%, 50%).
 | // The default value is (50%, 50%, 50%).
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetTransformOrigin(view View, subviewID ...string) (SizeUnit, SizeUnit, SizeUnit) { | func GetTransformOrigin(view View, subviewID ...string) (SizeUnit, SizeUnit, SizeUnit) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { | 	if view == nil { | ||||||
| 		return AutoSize(), AutoSize(), AutoSize() | 		return AutoSize(), AutoSize(), AutoSize() | ||||||
| 	} | 	} | ||||||
|  | @ -620,9 +606,7 @@ func GetTransformOrigin(view View, subviewID ...string) (SizeUnit, SizeUnit, Siz | ||||||
| // GetTranslate returns a x-, y-, and z-axis translation value of a 2D/3D translation
 | // GetTranslate returns a x-, y-, and z-axis translation value of a 2D/3D translation
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetTranslate(view View, subviewID ...string) (SizeUnit, SizeUnit, SizeUnit) { | func GetTranslate(view View, subviewID ...string) (SizeUnit, SizeUnit, SizeUnit) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { | 	if view == nil { | ||||||
| 		return AutoSize(), AutoSize(), AutoSize() | 		return AutoSize(), AutoSize(), AutoSize() | ||||||
| 	} | 	} | ||||||
|  | @ -638,9 +622,7 @@ func GetTranslate(view View, subviewID ...string) (SizeUnit, SizeUnit, SizeUnit) | ||||||
| // and the ordinate (y-axis). The default value is 0.
 | // and the ordinate (y-axis). The default value is 0.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetSkew(view View, subviewID ...string) (AngleUnit, AngleUnit) { | func GetSkew(view View, subviewID ...string) (AngleUnit, AngleUnit) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { | 	if view == nil { | ||||||
| 		return AngleUnit{Value: 0, Type: Radian}, AngleUnit{Value: 0, Type: Radian} | 		return AngleUnit{Value: 0, Type: Radian}, AngleUnit{Value: 0, Type: Radian} | ||||||
| 	} | 	} | ||||||
|  | @ -652,9 +634,7 @@ func GetSkew(view View, subviewID ...string) (AngleUnit, AngleUnit) { | ||||||
| // GetScale returns a x-, y-, and z-axis scaling value of a 2D/3D scale. The default value is 1.
 | // GetScale returns a x-, y-, and z-axis scaling value of a 2D/3D scale. The default value is 1.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetScale(view View, subviewID ...string) (float64, float64, float64) { | func GetScale(view View, subviewID ...string) (float64, float64, float64) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { | 	if view == nil { | ||||||
| 		return 1, 1, 1 | 		return 1, 1, 1 | ||||||
| 	} | 	} | ||||||
|  | @ -669,9 +649,7 @@ func GetScale(view View, subviewID ...string) (float64, float64, float64) { | ||||||
| // GetRotate returns a x-, y, z-coordinate of the vector denoting the axis of rotation, and the angle of the view rotation
 | // GetRotate returns a x-, y, z-coordinate of the vector denoting the axis of rotation, and the angle of the view rotation
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetRotate(view View, subviewID ...string) (float64, float64, float64, AngleUnit) { | func GetRotate(view View, subviewID ...string) (float64, float64, float64, AngleUnit) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	view = getSubview(view, subviewID) | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view == nil { | 	if view == nil { | ||||||
| 		return 0, 0, 0, AngleUnit{Value: 0, Type: Radian} | 		return 0, 0, 0, AngleUnit{Value: 0, Type: Radian} | ||||||
| 	} | 	} | ||||||
|  | @ -717,10 +695,7 @@ func valueFromStyle(view View, tag PropertyName) any { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func stringStyledProperty(view View, subviewID []string, tag PropertyName, inherit bool) string { | func stringStyledProperty(view View, subviewID []string, tag PropertyName, inherit bool) string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if text, ok := stringProperty(view, tag, view.Session()); ok { | 		if text, ok := stringProperty(view, tag, view.Session()); ok { | ||||||
| 			return text | 			return text | ||||||
| 		} | 		} | ||||||
|  | @ -740,11 +715,7 @@ func stringStyledProperty(view View, subviewID []string, tag PropertyName, inher | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func sizeStyledProperty(view View, subviewID []string, tag PropertyName, inherit bool) SizeUnit { | func sizeStyledProperty(view View, subviewID []string, tag PropertyName, inherit bool) SizeUnit { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value, ok := sizeProperty(view, tag, view.Session()); ok { | 		if value, ok := sizeProperty(view, tag, view.Session()); ok { | ||||||
| 			return value | 			return value | ||||||
| 		} | 		} | ||||||
|  | @ -764,11 +735,7 @@ func sizeStyledProperty(view View, subviewID []string, tag PropertyName, inherit | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func enumStyledProperty(view View, subviewID []string, tag PropertyName, defaultValue int, inherit bool) int { | func enumStyledProperty(view View, subviewID []string, tag PropertyName, defaultValue int, inherit bool) int { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value, ok := enumProperty(view, tag, view.Session(), defaultValue); ok { | 		if value, ok := enumProperty(view, tag, view.Session(), defaultValue); ok { | ||||||
| 			return value | 			return value | ||||||
| 		} | 		} | ||||||
|  | @ -788,11 +755,7 @@ func enumStyledProperty(view View, subviewID []string, tag PropertyName, default | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func boolStyledProperty(view View, subviewID []string, tag PropertyName, inherit bool) bool { | func boolStyledProperty(view View, subviewID []string, tag PropertyName, inherit bool) bool { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value, ok := boolProperty(view, tag, view.Session()); ok { | 		if value, ok := boolProperty(view, tag, view.Session()); ok { | ||||||
| 			return value | 			return value | ||||||
| 		} | 		} | ||||||
|  | @ -813,11 +776,7 @@ func boolStyledProperty(view View, subviewID []string, tag PropertyName, inherit | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func intStyledProperty(view View, subviewID []string, tag PropertyName, defaultValue int) int { | func intStyledProperty(view View, subviewID []string, tag PropertyName, defaultValue int) int { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value, ok := intProperty(view, tag, view.Session(), defaultValue); ok { | 		if value, ok := intProperty(view, tag, view.Session(), defaultValue); ok { | ||||||
| 			return value | 			return value | ||||||
| 		} | 		} | ||||||
|  | @ -830,10 +789,7 @@ func intStyledProperty(view View, subviewID []string, tag PropertyName, defaultV | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func floatStyledProperty(view View, subviewID []string, tag PropertyName, defaultValue float64) float64 { | func floatStyledProperty(view View, subviewID []string, tag PropertyName, defaultValue float64) float64 { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value, ok := floatProperty(view, tag, view.Session(), defaultValue); ok { | 		if value, ok := floatProperty(view, tag, view.Session(), defaultValue); ok { | ||||||
| 			return value | 			return value | ||||||
| 		} | 		} | ||||||
|  | @ -846,10 +802,7 @@ func floatStyledProperty(view View, subviewID []string, tag PropertyName, defaul | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func colorStyledProperty(view View, subviewID []string, tag PropertyName, inherit bool) Color { | func colorStyledProperty(view View, subviewID []string, tag PropertyName, inherit bool) Color { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value, ok := colorProperty(view, tag, view.Session()); ok { | 		if value, ok := colorProperty(view, tag, view.Session()); ok { | ||||||
| 			return value | 			return value | ||||||
| 		} | 		} | ||||||
|  | @ -868,10 +821,7 @@ func colorStyledProperty(view View, subviewID []string, tag PropertyName, inheri | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func transformStyledProperty(view View, subviewID []string, tag PropertyName) TransformProperty { | func transformStyledProperty(view View, subviewID []string, tag PropertyName) TransformProperty { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		if transform := getTransformProperty(view, tag); transform != nil { | 		if transform := getTransformProperty(view, tag); transform != nil { | ||||||
| 			return transform | 			return transform | ||||||
| 		} | 		} | ||||||
|  | @ -887,10 +837,7 @@ func transformStyledProperty(view View, subviewID []string, tag PropertyName) Tr | ||||||
| // The focused View is the View which will receive keyboard events by default.
 | // The focused View is the View which will receive keyboard events by default.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then focus is set on the first argument (view)
 | // If the second argument (subviewID) is not specified or it is "" then focus is set on the first argument (view)
 | ||||||
| func FocusView(view View, subviewID ...string) { | func FocusView(view View, subviewID ...string) { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 	if view != nil { |  | ||||||
| 		view.Session().callFunc("focus", view.htmlID()) | 		view.Session().callFunc("focus", view.htmlID()) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | @ -920,12 +867,8 @@ func BlurViewByID(viewID string, session Session) { | ||||||
| // GetCurrent returns the index of the selected item (<0 if there is no a selected item) or the current view index (StackLayout, TabsLayout).
 | // GetCurrent returns the index of the selected item (<0 if there is no a selected item) or the current view index (StackLayout, TabsLayout).
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetCurrent(view View, subviewID ...string) int { | func GetCurrent(view View, subviewID ...string) int { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { |  | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	defaultValue := -1 | 	defaultValue := -1 | ||||||
| 	if view != nil { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		if result, ok := intProperty(view, Current, view.Session(), defaultValue); ok { | 		if result, ok := intProperty(view, Current, view.Session(), defaultValue); ok { | ||||||
| 			return result | 			return result | ||||||
| 		} else if view.Tag() != "ListView" { | 		} else if view.Tag() != "ListView" { | ||||||
|  | @ -938,11 +881,7 @@ func GetCurrent(view View, subviewID ...string) int { | ||||||
| // IsUserSelect returns "true" if the user can select text, "false" otherwise.
 | // IsUserSelect returns "true" if the user can select text, "false" otherwise.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func IsUserSelect(view View, subviewID ...string) bool { | func IsUserSelect(view View, subviewID ...string) bool { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		value, _ := isUserSelect(view) | 		value, _ := isUserSelect(view) | ||||||
| 		return value | 		return value | ||||||
| 	} | 	} | ||||||
|  | @ -1006,11 +945,7 @@ func GetBackgroundBlendMode(view View, subviewID ...string) int { | ||||||
| // GetTooltip returns a tooltip text of the subview.
 | // GetTooltip returns a tooltip text of the subview.
 | ||||||
| // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | // If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
 | ||||||
| func GetTooltip(view View, subviewID ...string) string { | func GetTooltip(view View, subviewID ...string) string { | ||||||
| 	if len(subviewID) > 0 && subviewID[0] != "" { | 	if view = getSubview(view, subviewID); view != nil { | ||||||
| 		view = ViewByID(view, subviewID[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if view != nil { |  | ||||||
| 		if value := view.Get(Tooltip); value != nil { | 		if value := view.Get(Tooltip); value != nil { | ||||||
| 			if text, ok := value.(string); ok { | 			if text, ok := value.(string); ok { | ||||||
| 				return text | 				return text | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue