Added support of AccentColor to Checkbox, ListView, and TableView

This commit is contained in:
Alexei Anoshenko 2024-09-03 15:31:11 +03:00
parent 6afb518645
commit 1110375cb6
5 changed files with 57 additions and 19 deletions

View File

@ -112,6 +112,14 @@ func (button *checkboxData) set(tag string, value any) bool {
case CellVerticalAlign, CellHorizontalAlign, CellWidth, CellHeight: case CellVerticalAlign, CellHorizontalAlign, CellWidth, CellHeight:
return false return false
case AccentColor:
if !button.setColorProperty(AccentColor, value) {
return false
}
if button.created {
updateInnerHTML(button.htmlID(), button.session)
}
default: default:
return button.viewsContainerData.set(tag, value) return button.viewsContainerData.set(tag, value)
} }
@ -278,10 +286,16 @@ func (button *checkboxData) htmlCheckbox(buffer *strings.Builder, checked bool)
} }
buffer.WriteString(`">`) buffer.WriteString(`">`)
accentColor := Color(0)
if color := GetAccentColor(button, ""); color != 0 {
accentColor = color
}
if checked { if checked {
buffer.WriteString(button.Session().checkboxOnImage()) buffer.WriteString(button.Session().checkboxOnImage(accentColor))
} else { } else {
buffer.WriteString(button.Session().checkboxOffImage()) buffer.WriteString(button.Session().checkboxOffImage(accentColor))
} }
buffer.WriteString(`</div>`) buffer.WriteString(`</div>`)

View File

@ -322,6 +322,11 @@ func (listView *listViewData) set(tag string, value any) bool {
return false return false
} }
case AccentColor:
if !listView.setColorProperty(AccentColor, value) {
return false
}
default: default:
return listView.viewData.set(tag, value) return listView.viewData.set(tag, value)
} }
@ -672,12 +677,17 @@ func (listView *listViewData) getDivs(checkbox, hCheckboxAlign, vCheckboxAlign i
offDivBuilder.WriteString(onDivBuilder.String()) offDivBuilder.WriteString(onDivBuilder.String())
accentColor := Color(0)
if color := GetAccentColor(listView, ""); color != 0 {
accentColor = color
}
if checkbox == SingleCheckbox { if checkbox == SingleCheckbox {
offDivBuilder.WriteString(session.radiobuttonOffImage()) offDivBuilder.WriteString(session.radiobuttonOffImage())
onDivBuilder.WriteString(session.radiobuttonOnImage()) onDivBuilder.WriteString(session.radiobuttonOnImage(accentColor))
} else { } else {
offDivBuilder.WriteString(session.checkboxOffImage()) offDivBuilder.WriteString(session.checkboxOffImage(accentColor))
onDivBuilder.WriteString(session.checkboxOnImage()) onDivBuilder.WriteString(session.checkboxOnImage(accentColor))
} }
onDivBuilder.WriteString("</div>") onDivBuilder.WriteString("</div>")

View File

@ -125,10 +125,10 @@ type Session interface {
registerAnimation(props []AnimatedProperty) string registerAnimation(props []AnimatedProperty) string
resolveConstants(value string) (string, bool) resolveConstants(value string) (string, bool)
checkboxOffImage() string checkboxOffImage(accentColor Color) string
checkboxOnImage() string checkboxOnImage(accentColor Color) string
radiobuttonOffImage() string radiobuttonOffImage() string
radiobuttonOnImage() string radiobuttonOnImage(accentColor Color) string
viewByHTMLID(id string) View viewByHTMLID(id string) View
nextViewID() string nextViewID() string

View File

@ -203,7 +203,7 @@ func (session *sessionData) SetCustomTheme(name string) bool {
const checkImage = `<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m4 8 3 4 5-8" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"/></svg>` const checkImage = `<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m4 8 3 4 5-8" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5"/></svg>`
func (session *sessionData) checkboxImage(checked bool) string { func (session *sessionData) checkboxImage(checked bool, accentColor Color) string {
var borderColor, backgroundColor Color var borderColor, backgroundColor Color
var ok bool var ok bool
@ -217,7 +217,9 @@ func (session *sessionData) checkboxImage(checked bool) string {
} }
if checked { if checked {
if backgroundColor, ok = session.Color("ruiHighlightColor"); !ok { if accentColor != 0 {
backgroundColor = accentColor
} else if backgroundColor, ok = session.Color("ruiHighlightColor"); !ok {
backgroundColor = 0xFF1A74E8 backgroundColor = 0xFF1A74E8
} }
} else if backgroundColor, ok = session.Color("ruiBackgroundColor"); !ok { } else if backgroundColor, ok = session.Color("ruiBackgroundColor"); !ok {
@ -244,16 +246,22 @@ func (session *sessionData) checkboxImage(checked bool) string {
return buffer.String() return buffer.String()
} }
func (session *sessionData) checkboxOffImage() string { func (session *sessionData) checkboxOffImage(accentColor Color) string {
if accentColor != 0 {
return session.checkboxImage(false, accentColor)
}
if session.checkboxOff == "" { if session.checkboxOff == "" {
session.checkboxOff = session.checkboxImage(false) session.checkboxOff = session.checkboxImage(false, accentColor)
} }
return session.checkboxOff return session.checkboxOff
} }
func (session *sessionData) checkboxOnImage() string { func (session *sessionData) checkboxOnImage(accentColor Color) string {
if accentColor != 0 {
return session.checkboxImage(true, accentColor)
}
if session.checkboxOn == "" { if session.checkboxOn == "" {
session.checkboxOn = session.checkboxImage(true) session.checkboxOn = session.checkboxImage(true, accentColor)
} }
return session.checkboxOn return session.checkboxOn
} }
@ -285,12 +293,14 @@ func (session *sessionData) radiobuttonOffImage() string {
return session.radiobuttonOff return session.radiobuttonOff
} }
func (session *sessionData) radiobuttonOnImage() string { func (session *sessionData) radiobuttonOnImage(accentColor Color) string {
if session.radiobuttonOn == "" { if session.radiobuttonOn == "" {
var borderColor, backgroundColor Color var borderColor, backgroundColor Color
var ok bool var ok bool
if borderColor, ok = session.Color("ruiHighlightColor"); !ok { if accentColor != 0 {
borderColor = accentColor
} else if borderColor, ok = session.Color("ruiHighlightColor"); !ok {
borderColor = 0xFF1A74E8 borderColor = 0xFF1A74E8
} }

View File

@ -588,7 +588,7 @@ func (table *tableViewData) propertyChanged(tag string) {
CellBorder, HeadHeight, HeadStyle, FootHeight, FootStyle, CellBorder, HeadHeight, HeadStyle, FootHeight, FootStyle,
CellPaddingTop, CellPaddingRight, CellPaddingBottom, CellPaddingLeft, CellPaddingTop, CellPaddingRight, CellPaddingBottom, CellPaddingLeft,
TableCellClickedEvent, TableCellSelectedEvent, TableRowClickedEvent, TableCellClickedEvent, TableCellSelectedEvent, TableRowClickedEvent,
TableRowSelectedEvent, AllowSelection: TableRowSelectedEvent, AllowSelection, AccentColor:
table.ReloadTableData() table.ReloadTableData()
case Current: case Current:
@ -1350,10 +1350,14 @@ func (table *tableViewData) writeCellHtml(adapter TableAdapter, row, column int,
buffer.WriteString(fmt.Sprintf("%g", value)) buffer.WriteString(fmt.Sprintf("%g", value))
case bool: case bool:
accentColor := Color(0)
if color := GetAccentColor(table, ""); color != 0 {
accentColor = color
}
if value { if value {
buffer.WriteString(table.Session().checkboxOnImage()) buffer.WriteString(table.Session().checkboxOnImage(accentColor))
} else { } else {
buffer.WriteString(table.Session().checkboxOffImage()) buffer.WriteString(table.Session().checkboxOffImage(accentColor))
} }
default: default: