Skip to content

Commit 8e9d7c2

Browse files
committed
fix: auto theme detection not working
1 parent f2a890a commit 8e9d7c2

File tree

3 files changed

+134
-94
lines changed

3 files changed

+134
-94
lines changed

internal/app/ui/theme.go

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,26 @@ var themeColors = map[fyne.ThemeColorName][]color.Color{
3535
},
3636
}
3737

38-
type myTheme struct {
39-
mode settings.ColorTheme
38+
// customTheme represents a custom Fyne theme.
39+
// It adds colors to the default theme
40+
// and allows setting a fixed theme variant.
41+
type customTheme struct {
42+
defaultTheme fyne.Theme
43+
mode settings.ColorTheme
4044
}
4145

42-
func (ct myTheme) Color(c fyne.ThemeColorName, v fyne.ThemeVariant) color.Color {
43-
switch ct.mode {
46+
// newCustomTheme returns a new custom theme.
47+
// Must be called after the app has started.
48+
func newCustomTheme(mode settings.ColorTheme) *customTheme {
49+
th := &customTheme{
50+
defaultTheme: fyne.CurrentApp().Settings().Theme(),
51+
mode: mode,
52+
}
53+
return th
54+
}
55+
56+
func (th customTheme) Color(c fyne.ThemeColorName, v fyne.ThemeVariant) color.Color {
57+
switch th.mode {
4458
case settings.Dark:
4559
v = theme.VariantDark
4660
case settings.Light:
@@ -50,18 +64,18 @@ func (ct myTheme) Color(c fyne.ThemeColorName, v fyne.ThemeVariant) color.Color
5064
case colorNameInfo, colorNameCreative, colorNameSystem, colorNameAttention:
5165
return themeColors[c][v]
5266
default:
53-
return theme.DefaultTheme().Color(c, v)
67+
return th.defaultTheme.Color(c, v)
5468
}
5569
}
5670

57-
func (myTheme) Font(style fyne.TextStyle) fyne.Resource {
58-
return theme.DefaultTheme().Font(style)
71+
func (th customTheme) Font(style fyne.TextStyle) fyne.Resource {
72+
return th.defaultTheme.Font(style)
5973
}
6074

61-
func (myTheme) Icon(n fyne.ThemeIconName) fyne.Resource {
62-
return theme.DefaultTheme().Icon(n)
75+
func (th customTheme) Icon(n fyne.ThemeIconName) fyne.Resource {
76+
return th.defaultTheme.Icon(n)
6377
}
6478

65-
func (myTheme) Size(s fyne.ThemeSizeName) float32 {
66-
return theme.DefaultTheme().Size(s)
79+
func (th customTheme) Size(s fyne.ThemeSizeName) float32 {
80+
return th.defaultTheme.Size(s)
6781
}

internal/app/ui/ui.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,6 @@ func NewBaseUI(arg BaseUIParams) *baseUI {
420420
u.training = newTraining(u)
421421
u.wealth = newWealth(u)
422422

423-
u.setColorTheme(u.settings.ColorTheme())
424423
u.MainWindow().SetMaster()
425424

426425
// SetOnStarted is called on initial start,
@@ -462,6 +461,7 @@ func (u *baseUI) Start() bool {
462461
return false
463462
}
464463
// First app start
464+
u.setColorTheme(u.settings.ColorTheme())
465465
if u.isOffline {
466466
slog.Info("App started in offline mode")
467467
} else {
@@ -912,7 +912,7 @@ func (u *baseUI) updateStatus() {
912912
}
913913

914914
func (u *baseUI) setColorTheme(s settings.ColorTheme) {
915-
u.app.Settings().SetTheme(myTheme{s})
915+
u.app.Settings().SetTheme(newCustomTheme(s))
916916
}
917917

918918
func (u *baseUI) updateMailIndicator() {

internal/app/ui/wealth.go

Lines changed: 107 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,12 @@ func newWealth(u *baseUI) *wealth {
5858
color := theme.ColorNameForeground
5959
a.assetDetail.SetTitleStyle(size, color)
6060
a.assetDetail.HideLegend()
61+
a.assetDetail.SetYAxisLabel("B ISK")
6162
a.assetSplit.SetTitleStyle(size, color)
6263
a.walletSplit.SetTitleStyle(size, color)
6364
a.walletDetail.SetTitleStyle(size, color)
6465
a.walletDetail.HideLegend()
66+
a.walletDetail.SetYAxisLabel("B ISK")
6567
a.totalSplit.SetTitleStyle(size, color)
6668
a.characterSplit.SetTitleStyle(size, color)
6769

@@ -132,146 +134,170 @@ func (a *wealth) update() {
132134
totalAssets += r.assets
133135
totalWallet += r.wallet
134136
}
135-
colors := newColorWheel()
136-
137137
// totals
138138
if a.onUpdate != nil {
139139
a.onUpdate(totalWallet*wealthMultiplier, totalAssets*wealthMultiplier)
140140
}
141141

142-
// total
143-
s5, err := prop.NewSeries("", []chartData.ProportionalPoint{
144-
{
145-
C: "Assets combined",
146-
Val: totalAssets,
147-
Col: colors.next(),
148-
},
149-
{
150-
C: "Wallets combined",
151-
Val: totalWallet,
152-
Col: colors.next(),
153-
},
154-
})
155-
fyne.Do(func() {
156-
a.totalSplit.RemoveSeries("")
157-
err = a.totalSplit.AddSeries(s5)
158-
if err != nil {
159-
panic(err)
160-
}
161-
a.totalSplit.SetTitle(fmt.Sprintf("Wealth By Source - Total: %.1f B ISK", totalWallet+totalAssets))
162-
})
142+
a.updateAssetDetail(data, totalAssets)
143+
a.updateAssetSplit(data, totalAssets)
144+
a.updateCharacterSplit(data, totalAssets, totalWallet)
145+
a.updateTotalSplit(totalAssets, totalWallet)
146+
a.updateWalletDetail(data, totalWallet)
147+
a.updateWalletSplit(data, totalWallet)
148+
}
163149

164-
// Total split
165-
d6 := xslices.Map(data, func(r dataRow) chartData.ProportionalPoint {
166-
return chartData.ProportionalPoint{
150+
func (a *wealth) updateAssetDetail(data []dataRow, totalAssets float64) {
151+
colors := newColorWheel()
152+
d := xslices.Map(data, func(r dataRow) chartData.CategoricalPoint {
153+
return chartData.CategoricalPoint{
167154
C: r.label,
168155
Val: r.assets,
169-
Col: colors.next(),
170156
}
171157
})
172-
d6 = reduceProportionalPoints(d6, wealthMaxCharacters)
173-
s6, err := prop.NewSeries("Characters", d6)
158+
d = reduceCategoricalPoints(d, wealthMaxCharacters)
159+
s, err := coord.NewCategoricalPointSeries("Characters", colors.next(), d)
174160
if err != nil {
175-
panic(err)
161+
slog.Error("wealth: asset details", "error", err)
162+
return
176163
}
177164
fyne.Do(func() {
178-
a.characterSplit.RemoveSeries("Characters")
179-
err = a.characterSplit.AddSeries(s6)
165+
a.assetDetail.RemoveSeries("Characters")
166+
err = a.assetDetail.AddBarSeries(s)
180167
if err != nil {
181-
panic(err)
168+
slog.Error("wealth: asset details", "error", err)
169+
return
182170
}
183-
a.characterSplit.SetTitle(fmt.Sprintf("Wealth By Character - Total: %.1f B ISK", totalAssets+totalWallet))
171+
a.assetDetail.SetTitle(fmt.Sprintf("Assets By Character - Total: %.1f B ISK", totalAssets))
184172
})
173+
}
185174

186-
// Asset split
187-
d1 := xslices.Map(data, func(r dataRow) chartData.ProportionalPoint {
175+
func (a *wealth) updateAssetSplit(data []dataRow, totalAssets float64) {
176+
colors := newColorWheel()
177+
d := xslices.Map(data, func(r dataRow) chartData.ProportionalPoint {
188178
return chartData.ProportionalPoint{
189179
C: r.label,
190180
Val: r.assets,
191181
Col: colors.next(),
192182
}
193183
})
194-
d1 = reduceProportionalPoints(d1, wealthMaxCharacters)
195-
s1, err := prop.NewSeries("Characters", d1)
184+
d = reduceProportionalPoints(d, wealthMaxCharacters)
185+
s, err := prop.NewSeries("Characters", d)
196186
if err != nil {
197-
panic(err)
187+
slog.Error("wealth: asset split", "error", err)
188+
return
198189
}
199190
fyne.Do(func() {
200191
a.assetSplit.RemoveSeries("Characters")
201-
err = a.assetSplit.AddSeries(s1)
192+
err = a.assetSplit.AddSeries(s)
202193
if err != nil {
203-
panic(err)
194+
slog.Error("wealth: asset split", "error", err)
195+
return
204196
}
205197
a.assetSplit.SetTitle(fmt.Sprintf("Assets By Character - Total: %.1f B ISK", totalAssets))
206198
})
199+
}
207200

208-
// Wallet split
209-
colors.reset()
210-
d2 := xslices.Map(data, func(r dataRow) chartData.ProportionalPoint {
201+
func (a *wealth) updateCharacterSplit(data []dataRow, totalAssets float64, totalWallet float64) {
202+
colors := newColorWheel()
203+
d := xslices.Map(data, func(r dataRow) chartData.ProportionalPoint {
211204
return chartData.ProportionalPoint{
212205
C: r.label,
213-
Val: r.wallet,
206+
Val: r.assets,
214207
Col: colors.next(),
215208
}
216209
})
217-
d2 = reduceProportionalPoints(d2, wealthMaxCharacters)
218-
s2, err := prop.NewSeries("Characters", d2)
210+
d = reduceProportionalPoints(d, wealthMaxCharacters)
211+
s, err := prop.NewSeries("Characters", d)
219212
if err != nil {
220-
panic(err)
213+
slog.Error("wealth: character split", "error", err)
214+
return
221215
}
222216
fyne.Do(func() {
223-
a.walletSplit.RemoveSeries("Characters")
224-
err = a.walletSplit.AddSeries(s2)
217+
a.characterSplit.RemoveSeries("Characters")
218+
err = a.characterSplit.AddSeries(s)
225219
if err != nil {
226-
panic(err)
220+
slog.Error("wealth: character split", "error", err)
221+
return
227222
}
228-
a.walletSplit.SetTitle(fmt.Sprintf("Wallets By Character - Total: %.1f B ISK", totalWallet))
223+
a.characterSplit.SetTitle(fmt.Sprintf("Wealth By Character - Total: %.1f B ISK", totalAssets+totalWallet))
224+
})
225+
}
226+
227+
func (a *wealth) updateTotalSplit(totalAssets float64, totalWallet float64) {
228+
colors := newColorWheel()
229+
s, err := prop.NewSeries("", []chartData.ProportionalPoint{
230+
{
231+
C: "Assets combined",
232+
Val: totalAssets,
233+
Col: colors.next(),
234+
},
235+
{
236+
C: "Wallets combined",
237+
Val: totalWallet,
238+
Col: colors.next(),
239+
},
229240
})
241+
fyne.Do(func() {
242+
a.totalSplit.RemoveSeries("")
243+
err = a.totalSplit.AddSeries(s)
244+
if err != nil {
245+
slog.Error("wealth: total split", "error", err)
246+
return
247+
}
248+
a.totalSplit.SetTitle(fmt.Sprintf("Wealth By Source - Total: %.1f B ISK", totalWallet+totalAssets))
249+
})
250+
}
230251

231-
// Assets detail
232-
colors.reset()
233-
d4 := xslices.Map(data, func(r dataRow) chartData.CategoricalPoint {
252+
func (a *wealth) updateWalletDetail(data []dataRow, totalWallet float64) {
253+
colors := newColorWheel()
254+
d := xslices.Map(data, func(r dataRow) chartData.CategoricalPoint {
234255
return chartData.CategoricalPoint{
235256
C: r.label,
236-
Val: r.assets,
257+
Val: r.wallet,
237258
}
238259
})
239-
d4 = reduceCategoricalPoints(d4, wealthMaxCharacters)
240-
s4, err := coord.NewCategoricalPointSeries("Characters", colors.next(), d4)
260+
d = reduceCategoricalPoints(d, wealthMaxCharacters)
261+
s, err := coord.NewCategoricalPointSeries("Characters", colors.next(), d)
241262
if err != nil {
242-
panic(err)
263+
slog.Error("wealth: wallet details", "error", err)
264+
return
243265
}
244266
fyne.Do(func() {
245-
a.assetDetail.RemoveSeries("Characters")
246-
err = a.assetDetail.AddBarSeries(s4)
267+
a.walletDetail.RemoveSeries("Characters")
268+
err = a.walletDetail.AddBarSeries(s)
247269
if err != nil {
248-
panic(err)
270+
slog.Error("wealth: wallet details", "error", err)
271+
return
249272
}
250-
a.assetDetail.SetTitle(fmt.Sprintf("Assets By Character - Total: %.1f B ISK", totalAssets))
273+
a.walletDetail.SetTitle(fmt.Sprintf("Wallets By Character - Total: %.1f B ISK", totalWallet))
251274
})
275+
}
252276

253-
// Wallet details
254-
colors.reset()
255-
d3 := xslices.Map(data, func(r dataRow) chartData.CategoricalPoint {
256-
return chartData.CategoricalPoint{
277+
func (a *wealth) updateWalletSplit(data []dataRow, totalWallet float64) {
278+
colors := newColorWheel()
279+
d := xslices.Map(data, func(r dataRow) chartData.ProportionalPoint {
280+
return chartData.ProportionalPoint{
257281
C: r.label,
258282
Val: r.wallet,
283+
Col: colors.next(),
259284
}
260285
})
261-
d3 = reduceCategoricalPoints(d3, wealthMaxCharacters)
262-
s3, err := coord.NewCategoricalPointSeries("Characters", colors.next(), d3)
286+
d = reduceProportionalPoints(d, wealthMaxCharacters)
287+
s, err := prop.NewSeries("Characters", d)
263288
if err != nil {
264-
panic(err)
289+
slog.Error("wealth: wallet split", "error", err)
290+
return
265291
}
266292
fyne.Do(func() {
267-
a.walletDetail.RemoveSeries("Characters")
268-
err = a.walletDetail.AddBarSeries(s3)
293+
a.walletSplit.RemoveSeries("Characters")
294+
err = a.walletSplit.AddSeries(s)
269295
if err != nil {
270-
panic(err)
296+
slog.Error("wealth: wallet split", "error", err)
297+
return
271298
}
272-
a.walletDetail.SetTitle(fmt.Sprintf("Wallets By Character - Total: %.1f B ISK", totalWallet))
299+
a.walletSplit.SetTitle(fmt.Sprintf("Wallets By Character - Total: %.1f B ISK", totalWallet))
273300
})
274-
275301
}
276302

277303
func reduceProportionalPoints(data []chartData.ProportionalPoint, m int) []chartData.ProportionalPoint {
@@ -382,14 +408,14 @@ func newColorWheel() colorWheel {
382408
colors: make([]color.Color, 0),
383409
}
384410
w.colors = []color.Color{
385-
theme.Color(theme.ColorNameSuccess),
386-
theme.Color(theme.ColorNameError),
387411
theme.Color(theme.ColorNamePrimary),
388412
theme.Color(theme.ColorNameWarning),
413+
theme.Color(theme.ColorNameSuccess),
414+
theme.Color(theme.ColorNameError),
389415
theme.Color(colorNameInfo),
416+
theme.Color(colorNameAttention),
390417
theme.Color(colorNameCreative),
391418
theme.Color(colorNameSystem),
392-
theme.Color(colorNameAttention),
393419
theme.Color(theme.ColorNamePlaceHolder),
394420
}
395421
return w
@@ -405,6 +431,6 @@ func (w *colorWheel) next() color.Color {
405431
return c
406432
}
407433

408-
func (w *colorWheel) reset() {
409-
w.n = 0
410-
}
434+
// func (w *colorWheel) reset() {
435+
// w.n = 0
436+
// }

0 commit comments

Comments
 (0)