Excluding default properties of CustomView from the result of String()

This commit is contained in:
Alexei Anoshenko 2024-05-02 15:07:57 +03:00
parent 918fbf3473
commit b1628023f7
29 changed files with 67 additions and 36 deletions

View File

@ -27,7 +27,7 @@ func (player *audioPlayerData) init(session Session) {
} }
func (player *audioPlayerData) String() string { func (player *audioPlayerData) String() string {
return getViewString(player) return getViewString(player, nil)
} }
func (player *audioPlayerData) htmlTag() string { func (player *audioPlayerData) htmlTag() string {

View File

@ -37,7 +37,7 @@ func (canvasView *canvasViewData) init(session Session) {
} }
func (canvasView *canvasViewData) String() string { func (canvasView *canvasViewData) String() string {
return getViewString(canvasView) return getViewString(canvasView, nil)
} }
func (canvasView *canvasViewData) normalizeTag(tag string) string { func (canvasView *canvasViewData) normalizeTag(tag string) string {

View File

@ -43,7 +43,7 @@ func (button *checkboxData) init(session Session) {
} }
func (button *checkboxData) String() string { func (button *checkboxData) String() string {
return getViewString(button) return getViewString(button, nil)
} }
func (button *checkboxData) Focusable() bool { func (button *checkboxData) Focusable() bool {

View File

@ -40,7 +40,7 @@ func (picker *colorPickerData) init(session Session) {
} }
func (picker *colorPickerData) String() string { func (picker *colorPickerData) String() string {
return getViewString(picker) return getViewString(picker, nil)
} }
func (picker *colorPickerData) normalizeTag(tag string) string { func (picker *colorPickerData) normalizeTag(tag string) string {

View File

@ -81,7 +81,7 @@ func (ColumnLayout *columnLayoutData) init(session Session) {
} }
func (columnLayout *columnLayoutData) String() string { func (columnLayout *columnLayoutData) String() string {
return getViewString(columnLayout) return getViewString(columnLayout, nil)
} }
func (columnLayout *columnLayoutData) normalizeTag(tag string) string { func (columnLayout *columnLayoutData) normalizeTag(tag string) string {

View File

@ -13,8 +13,9 @@ type CustomView interface {
// CustomViewData defines a data of a basic custom view // CustomViewData defines a data of a basic custom view
type CustomViewData struct { type CustomViewData struct {
tag string tag string
superView View superView View
defaultParams Params
} }
// InitCustomView initializes fields of CustomView by default values // InitCustomView initializes fields of CustomView by default values
@ -37,6 +38,12 @@ func (customView *CustomViewData) SuperView() View {
func (customView *CustomViewData) setSuperView(view View) { func (customView *CustomViewData) setSuperView(view View) {
customView.superView = view customView.superView = view
customView.defaultParams = Params{}
for _, tag := range view.AllTags() {
if value := view.getRaw(tag); value != nil {
customView.defaultParams[tag] = value
}
}
} }
func (customView *CustomViewData) setTag(tag string) { func (customView *CustomViewData) setTag(tag string) {
@ -252,9 +259,22 @@ func (customView *CustomViewData) ViewIndex(view View) int {
return -1 return -1
} }
func (customView *CustomViewData) exscludeTags() []string {
if customView.superView != nil {
exsclude := []string{}
for tag, value := range customView.defaultParams {
if value == customView.superView.getRaw(tag) {
exsclude = append(exsclude, tag)
}
}
return exsclude
}
return nil
}
func (customView *CustomViewData) String() string { func (customView *CustomViewData) String() string {
if customView.superView != nil { if customView.superView != nil {
return getViewString(customView) return getViewString(customView, customView.exscludeTags())
} }
return customView.tag + " { }" return customView.tag + " { }"
} }

View File

@ -45,7 +45,7 @@ func (picker *datePickerData) init(session Session) {
} }
func (picker *datePickerData) String() string { func (picker *datePickerData) String() string {
return getViewString(picker) return getViewString(picker, nil)
} }
func (picker *datePickerData) Focusable() bool { func (picker *datePickerData) Focusable() bool {

View File

@ -46,7 +46,7 @@ func (list *dropDownListData) init(session Session) {
} }
func (list *dropDownListData) String() string { func (list *dropDownListData) String() string {
return getViewString(list) return getViewString(list, nil)
} }
func (list *dropDownListData) Focusable() bool { func (list *dropDownListData) Focusable() bool {

View File

@ -64,7 +64,7 @@ func (edit *editViewData) init(session Session) {
} }
func (edit *editViewData) String() string { func (edit *editViewData) String() string {
return getViewString(edit) return getViewString(edit, nil)
} }
func (edit *editViewData) Focusable() bool { func (edit *editViewData) Focusable() bool {

View File

@ -90,7 +90,7 @@ func (picker *filePickerData) init(session Session) {
} }
func (picker *filePickerData) String() string { func (picker *filePickerData) String() string {
return getViewString(picker) return getViewString(picker, nil)
} }
func (picker *filePickerData) Focusable() bool { func (picker *filePickerData) Focusable() bool {

View File

@ -72,7 +72,7 @@ func (gridLayout *gridLayoutData) init(session Session) {
} }
func (gridLayout *gridLayoutData) String() string { func (gridLayout *gridLayoutData) String() string {
return getViewString(gridLayout) return getViewString(gridLayout, nil)
} }
func (style *viewStyle) setGridCellSize(tag string, value any) bool { func (style *viewStyle) setGridCellSize(tag string, value any) bool {

View File

@ -71,7 +71,7 @@ func (imageView *imageViewData) init(session Session) {
} }
func (imageView *imageViewData) String() string { func (imageView *imageViewData) String() string {
return getViewString(imageView) return getViewString(imageView, nil)
} }
func (imageView *imageViewData) normalizeTag(tag string) string { func (imageView *imageViewData) normalizeTag(tag string) string {

View File

@ -56,7 +56,7 @@ func (listLayout *listLayoutData) init(session Session) {
} }
func (listLayout *listLayoutData) String() string { func (listLayout *listLayoutData) String() string {
return getViewString(listLayout) return getViewString(listLayout, nil)
} }
func (listLayout *listLayoutData) normalizeTag(tag string) string { func (listLayout *listLayoutData) normalizeTag(tag string) string {

View File

@ -97,7 +97,7 @@ func (listView *listViewData) init(session Session) {
} }
func (listView *listViewData) String() string { func (listView *listViewData) String() string {
return getViewString(listView) return getViewString(listView, nil)
} }
func (listView *listViewData) Views() []View { func (listView *listViewData) Views() []View {

View File

@ -211,7 +211,7 @@ func (player *mediaPlayerData) init(session Session) {
} }
func (player *mediaPlayerData) String() string { func (player *mediaPlayerData) String() string {
return getViewString(player) return getViewString(player, nil)
} }
func (player *mediaPlayerData) Focusable() bool { func (player *mediaPlayerData) Focusable() bool {

View File

@ -72,7 +72,7 @@ func (picker *numberPickerData) init(session Session) {
} }
func (picker *numberPickerData) String() string { func (picker *numberPickerData) String() string {
return getViewString(picker) return getViewString(picker, nil)
} }
func (picker *numberPickerData) Focusable() bool { func (picker *numberPickerData) Focusable() bool {

View File

@ -37,7 +37,7 @@ func (progress *progressBarData) init(session Session) {
} }
func (progress *progressBarData) String() string { func (progress *progressBarData) String() string {
return getViewString(progress) return getViewString(progress, nil)
} }
func (progress *progressBarData) normalizeTag(tag string) string { func (progress *progressBarData) normalizeTag(tag string) string {

View File

@ -63,7 +63,7 @@ func (resizable *resizableData) init(session Session) {
} }
func (resizable *resizableData) String() string { func (resizable *resizableData) String() string {
return getViewString(resizable) return getViewString(resizable, nil)
} }
func (resizable *resizableData) Views() []View { func (resizable *resizableData) Views() []View {

View File

@ -82,7 +82,7 @@ func (layout *stackLayoutData) init(session Session) {
} }
func (layout *stackLayoutData) String() string { func (layout *stackLayoutData) String() string {
return getViewString(layout) return getViewString(layout, nil)
} }
func (layout *stackLayoutData) pushFinished(view View, tag string) { func (layout *stackLayoutData) pushFinished(view View, tag string) {

View File

@ -36,7 +36,7 @@ func (imageView *svgImageViewData) init(session Session) {
} }
func (imageView *svgImageViewData) String() string { func (imageView *svgImageViewData) String() string {
return getViewString(imageView) return getViewString(imageView, nil)
} }
func (imageView *svgImageViewData) normalizeTag(tag string) string { func (imageView *svgImageViewData) normalizeTag(tag string) string {

View File

@ -270,7 +270,7 @@ func (table *tableViewData) init(session Session) {
} }
func (table *tableViewData) String() string { func (table *tableViewData) String() string {
return getViewString(table) return getViewString(table, nil)
} }
func (table *tableViewData) normalizeTag(tag string) string { func (table *tableViewData) normalizeTag(tag string) string {

View File

@ -99,7 +99,7 @@ func (tabsLayout *tabsLayoutData) init(session Session) {
} }
func (tabsLayout *tabsLayoutData) String() string { func (tabsLayout *tabsLayoutData) String() string {
return getViewString(tabsLayout) return getViewString(tabsLayout, nil)
} }
func (tabsLayout *tabsLayoutData) currentItem(defaultValue int) int { func (tabsLayout *tabsLayoutData) currentItem(defaultValue int) int {

View File

@ -33,7 +33,7 @@ func (textView *textViewData) init(session Session) {
} }
func (textView *textViewData) String() string { func (textView *textViewData) String() string {
return getViewString(textView) return getViewString(textView, nil)
} }
func (textView *textViewData) Get(tag string) any { func (textView *textViewData) Get(tag string) any {

View File

@ -933,7 +933,7 @@ func (theme *theme) String() string {
for _, tag := range tags { for _, tag := range tags {
if style, ok := styles[tag]; ok && len(style.AllTags()) > 0 { if style, ok := styles[tag]; ok && len(style.AllTags()) > 0 {
buffer.WriteString("\t\t") buffer.WriteString("\t\t")
writeViewStyle(tag, style, buffer, "\t\t") writeViewStyle(tag, style, buffer, "\t\t", nil)
buffer.WriteString(",\n") buffer.WriteString(",\n")
} }
} }
@ -984,7 +984,7 @@ func (theme *theme) String() string {
for _, tag := range tags { for _, tag := range tags {
if style, ok := media.styles[tag]; ok && len(style.AllTags()) > 0 { if style, ok := media.styles[tag]; ok && len(style.AllTags()) > 0 {
buffer.WriteString("\t\t") buffer.WriteString("\t\t")
writeViewStyle(tag, style, buffer, "\t\t") writeViewStyle(tag, style, buffer, "\t\t", nil)
buffer.WriteString(",\n") buffer.WriteString(",\n")
} }
} }

View File

@ -45,7 +45,7 @@ func (picker *timePickerData) init(session Session) {
} }
func (picker *timePickerData) String() string { func (picker *timePickerData) String() string {
return getViewString(picker) return getViewString(picker, nil)
} }
func (picker *timePickerData) Focusable() bool { func (picker *timePickerData) Focusable() bool {

View File

@ -47,7 +47,7 @@ func (player *videoPlayerData) init(session Session) {
} }
func (player *videoPlayerData) String() string { func (player *videoPlayerData) String() string {
return getViewString(player) return getViewString(player, nil)
} }
func (player *videoPlayerData) htmlTag() string { func (player *videoPlayerData) htmlTag() string {

View File

@ -76,6 +76,7 @@ type View interface {
htmlProperties(self View, buffer *strings.Builder) htmlProperties(self View, buffer *strings.Builder)
cssStyle(self View, builder cssBuilder) cssStyle(self View, builder cssBuilder)
addToCSSStyle(addCSS map[string]string) addToCSSStyle(addCSS map[string]string)
exscludeTags() []string
onResize(self View, x, y, width, height float64) onResize(self View, x, y, width, height float64)
onItemResize(self View, index string, x, y, width, height float64) onItemResize(self View, index string, x, y, width, height float64)
@ -999,5 +1000,9 @@ func (view *viewData) HasFocus() bool {
} }
func (view *viewData) String() string { func (view *viewData) String() string {
return getViewString(view) return getViewString(view, nil)
}
func (view *viewData) exscludeTags() []string {
return nil
} }

View File

@ -710,14 +710,14 @@ func writePropertyValue(buffer *strings.Builder, tag string, value any, indent s
buffer.WriteString("[]") buffer.WriteString("[]")
case 1: case 1:
writeViewStyle(value[0].Tag(), value[0], buffer, indent) writeViewStyle(value[0].Tag(), value[0], buffer, indent, value[0].exscludeTags())
default: default:
buffer.WriteString("[\n") buffer.WriteString("[\n")
indent2 := indent + "\t" indent2 := indent + "\t"
for _, v := range value { for _, v := range value {
buffer.WriteString(indent2) buffer.WriteString(indent2)
writeViewStyle(v.Tag(), v, buffer, indent2) writeViewStyle(v.Tag(), v, buffer, indent2, v.exscludeTags())
buffer.WriteString(",\n") buffer.WriteString(",\n")
} }
@ -819,12 +819,18 @@ func writePropertyValue(buffer *strings.Builder, tag string, value any, indent s
} }
} }
func writeViewStyle(name string, view ViewStyle, buffer *strings.Builder, indent string) { func writeViewStyle(name string, view ViewStyle, buffer *strings.Builder, indent string, excludeTags []string) {
buffer.WriteString(name) buffer.WriteString(name)
buffer.WriteString(" {\n") buffer.WriteString(" {\n")
indent += "\t" indent += "\t"
writeProperty := func(tag string, value any) { writeProperty := func(tag string, value any) {
for _, exclude := range excludeTags {
if exclude == tag {
return
}
}
if supportedPropertyValue(value) { if supportedPropertyValue(value) {
buffer.WriteString(indent) buffer.WriteString(indent)
buffer.WriteString(tag) buffer.WriteString(tag)
@ -896,10 +902,10 @@ func writeViewStyle(name string, view ViewStyle, buffer *strings.Builder, indent
buffer.WriteString("}") buffer.WriteString("}")
} }
func getViewString(view View) string { func getViewString(view View, excludeTags []string) string {
buffer := allocStringBuilder() buffer := allocStringBuilder()
defer freeStringBuilder(buffer) defer freeStringBuilder(buffer)
writeViewStyle(view.Tag(), view, buffer, "") writeViewStyle(view.Tag(), view, buffer, "", excludeTags)
return buffer.String() return buffer.String()
} }

View File

@ -38,7 +38,7 @@ func (container *viewsContainerData) init(session Session) {
} }
func (container *viewsContainerData) String() string { func (container *viewsContainerData) String() string {
return getViewString(container) return getViewString(container, nil)
} }
func (container *viewsContainerData) setParentID(parentID string) { func (container *viewsContainerData) setParentID(parentID string) {