diff --git a/checkbox.go b/checkbox.go index 4613927..5f07f83 100644 --- a/checkbox.go +++ b/checkbox.go @@ -112,6 +112,14 @@ func (button *checkboxData) set(tag string, value any) bool { case CellVerticalAlign, CellHorizontalAlign, CellWidth, CellHeight: return false + case AccentColor: + if !button.setColorProperty(AccentColor, value) { + return false + } + if button.created { + updateInnerHTML(button.htmlID(), button.session) + } + default: return button.viewsContainerData.set(tag, value) } @@ -278,10 +286,16 @@ func (button *checkboxData) htmlCheckbox(buffer *strings.Builder, checked bool) } buffer.WriteString(`">`) + + accentColor := Color(0) + if color := GetAccentColor(button, ""); color != 0 { + accentColor = color + } + if checked { - buffer.WriteString(button.Session().checkboxOnImage()) + buffer.WriteString(button.Session().checkboxOnImage(accentColor)) } else { - buffer.WriteString(button.Session().checkboxOffImage()) + buffer.WriteString(button.Session().checkboxOffImage(accentColor)) } buffer.WriteString(``) diff --git a/listView.go b/listView.go index 336d0e7..b055f82 100644 --- a/listView.go +++ b/listView.go @@ -322,6 +322,11 @@ func (listView *listViewData) set(tag string, value any) bool { return false } + case AccentColor: + if !listView.setColorProperty(AccentColor, value) { + return false + } + default: return listView.viewData.set(tag, value) } @@ -672,12 +677,17 @@ func (listView *listViewData) getDivs(checkbox, hCheckboxAlign, vCheckboxAlign i offDivBuilder.WriteString(onDivBuilder.String()) + accentColor := Color(0) + if color := GetAccentColor(listView, ""); color != 0 { + accentColor = color + } + if checkbox == SingleCheckbox { offDivBuilder.WriteString(session.radiobuttonOffImage()) - onDivBuilder.WriteString(session.radiobuttonOnImage()) + onDivBuilder.WriteString(session.radiobuttonOnImage(accentColor)) } else { - offDivBuilder.WriteString(session.checkboxOffImage()) - onDivBuilder.WriteString(session.checkboxOnImage()) + offDivBuilder.WriteString(session.checkboxOffImage(accentColor)) + onDivBuilder.WriteString(session.checkboxOnImage(accentColor)) } onDivBuilder.WriteString("") diff --git a/session.go b/session.go index 23025f9..9794564 100644 --- a/session.go +++ b/session.go @@ -125,10 +125,10 @@ type Session interface { registerAnimation(props []AnimatedProperty) string resolveConstants(value string) (string, bool) - checkboxOffImage() string - checkboxOnImage() string + checkboxOffImage(accentColor Color) string + checkboxOnImage(accentColor Color) string radiobuttonOffImage() string - radiobuttonOnImage() string + radiobuttonOnImage(accentColor Color) string viewByHTMLID(id string) View nextViewID() string diff --git a/sessionTheme.go b/sessionTheme.go index a9fdbf2..23e4920 100644 --- a/sessionTheme.go +++ b/sessionTheme.go @@ -203,7 +203,7 @@ func (session *sessionData) SetCustomTheme(name string) bool { const checkImage = `` -func (session *sessionData) checkboxImage(checked bool) string { +func (session *sessionData) checkboxImage(checked bool, accentColor Color) string { var borderColor, backgroundColor Color var ok bool @@ -217,7 +217,9 @@ func (session *sessionData) checkboxImage(checked bool) string { } if checked { - if backgroundColor, ok = session.Color("ruiHighlightColor"); !ok { + if accentColor != 0 { + backgroundColor = accentColor + } else if backgroundColor, ok = session.Color("ruiHighlightColor"); !ok { backgroundColor = 0xFF1A74E8 } } else if backgroundColor, ok = session.Color("ruiBackgroundColor"); !ok { @@ -244,16 +246,22 @@ func (session *sessionData) checkboxImage(checked bool) 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 == "" { - session.checkboxOff = session.checkboxImage(false) + session.checkboxOff = session.checkboxImage(false, accentColor) } 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 == "" { - session.checkboxOn = session.checkboxImage(true) + session.checkboxOn = session.checkboxImage(true, accentColor) } return session.checkboxOn } @@ -285,12 +293,14 @@ func (session *sessionData) radiobuttonOffImage() string { return session.radiobuttonOff } -func (session *sessionData) radiobuttonOnImage() string { +func (session *sessionData) radiobuttonOnImage(accentColor Color) string { if session.radiobuttonOn == "" { var borderColor, backgroundColor Color 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 } diff --git a/tableView.go b/tableView.go index 33c5110..3bfc64b 100644 --- a/tableView.go +++ b/tableView.go @@ -588,7 +588,7 @@ func (table *tableViewData) propertyChanged(tag string) { CellBorder, HeadHeight, HeadStyle, FootHeight, FootStyle, CellPaddingTop, CellPaddingRight, CellPaddingBottom, CellPaddingLeft, TableCellClickedEvent, TableCellSelectedEvent, TableRowClickedEvent, - TableRowSelectedEvent, AllowSelection: + TableRowSelectedEvent, AllowSelection, AccentColor: table.ReloadTableData() case Current: @@ -1350,10 +1350,14 @@ func (table *tableViewData) writeCellHtml(adapter TableAdapter, row, column int, buffer.WriteString(fmt.Sprintf("%g", value)) case bool: + accentColor := Color(0) + if color := GetAccentColor(table, ""); color != 0 { + accentColor = color + } if value { - buffer.WriteString(table.Session().checkboxOnImage()) + buffer.WriteString(table.Session().checkboxOnImage(accentColor)) } else { - buffer.WriteString(table.Session().checkboxOffImage()) + buffer.WriteString(table.Session().checkboxOffImage(accentColor)) } default: