Simplify code, remove unnecessary 2D array #5
|
@ -1,7 +1,6 @@
|
|||
from std/osproc import execProcess, ProcessOption, startProcess, waitForExit, close
|
||||
from std/os import symlinkExists, getConfigDir, putEnv, `/`
|
||||
from std/strutils import split, endsWith, strip
|
||||
from std/algorithm import fill
|
||||
from std/strformat import fmt
|
||||
import owlkettle
|
||||
|
||||
|
@ -58,19 +57,11 @@ proc setTheme(themeName: string) =
|
|||
if symlinkExists(getConfigDir() / "gtk-4.0"):
|
||||
putEnv("XDG_CONFIG_HOME", "/dev/null")
|
||||
|
||||
var
|
||||
lastClickedButton: array[2, int]
|
||||
|
||||
# Display the GTK-4 GUI using owlkettle
|
||||
viewable App:
|
||||
# 2D array storing the style for each button
|
||||
buttonStyles: array[themeStyles.len(),array[themeColors.len(), StyleClass]]
|
||||
highlightButton: array[2, string]
|
||||
hooks:
|
||||
build:
|
||||
# Make all buttons flat by default
|
||||
for index in 0..state.buttonStyles.high():
|
||||
fill(state.buttonStyles[index], ButtonFlat)
|
||||
|
||||
let currentTheme: string = execProcess("/usr/bin/xfconf-query",
|
||||
args=["--channel=xsettings", "--property=/Net/ThemeName"],
|
||||
options={}).strip(leading=false, trailing=true, chars={'\n'})
|
||||
|
@ -80,15 +71,11 @@ viewable App:
|
|||
if currentThemeSplit.len() < 3 or currentThemeSplit[0] != "Colloid":
|
||||
return
|
||||
|
||||
let currentThemeColorIndex = find(themeColors, currentThemeSplit[1])
|
||||
let currentThemeStyleIndex = find(themeStyles, currentThemeSplit[2])
|
||||
|
||||
if -1 in [currentThemeColorIndex, currentThemeStyleIndex]:
|
||||
return
|
||||
let currentThemeColor = currentThemeSplit[1]
|
||||
let currentThemeStyle = currentThemeSplit[2]
|
||||
|
||||
# Highlight current theme button
|
||||
state.buttonStyles[currentThemeStyleIndex][currentThemeColorIndex] = ButtonSuggested
|
||||
lastClickedButton = [currentThemeStyleIndex, currentThemeColorIndex]
|
||||
state.highlightButton = [currentThemeColor, currentThemeStyle]
|
||||
|
||||
method view(app: AppState): Widget =
|
||||
result = gui:
|
||||
|
@ -103,26 +90,24 @@ method view(app: AppState): Widget =
|
|||
Label {.vAlign: AlignStart.}:
|
||||
useMarkup = true
|
||||
text="<span size='small'>NOTE: Some apps need to be reopened for the theme to be applied.</span>"
|
||||
for y, themeStyle in themeStyles:
|
||||
for themeStyle in themeStyles:
|
||||
# Horizontal box
|
||||
Box(orient = OrientX, spacing = 5):
|
||||
for x, themeColor in themeColors:
|
||||
for themeColor in themeColors:
|
||||
Button {.vAlign: AlignCenter, hAlign: AlignCenter.}:
|
||||
icon = fmt"Colloid-{themeColor}-{themeStyle}"
|
||||
# Teal-Dark-Nord theme will have "(default)" added to its tooltip
|
||||
tooltip = if (themeColor, themeStyle) == ("Teal", "Dark-Nord"):
|
||||
fmt"{themeColor}-{themeStyle} (default)"
|
||||
else:
|
||||
fmt"{themeColor}-{themeStyle}"
|
||||
style = app.buttonStyles[y][x]
|
||||
fmt"{themeColor}-{themeStyle} (default)"
|
||||
else:
|
||||
fmt"{themeColor}-{themeStyle}"
|
||||
style = if [themeColor, themeStyle] == app.highlightButton:
|
||||
ButtonSuggested
|
||||
else:
|
||||
ButtonFlat
|
||||
proc clicked() =
|
||||
var thisButton = [y, x]
|
||||
setTheme(fmt"Colloid-{themeColor}-{themeStyle}")
|
||||
# Highlight this button
|
||||
app.buttonStyles[y][x] = ButtonSuggested
|
||||
if lastClickedButton != thisButton:
|
||||
# Remove highlight from lastClickedButton
|
||||
app.buttonStyles[lastClickedButton[0]][lastClickedButton[1]] = ButtonFlat
|
||||
lastClickedButton = thisButton
|
||||
app.highlightButton = [themeColor, themeStyle]
|
||||
|
||||
brew("com.tromjaro.ThemeSwitcher", gui(App()), icons=[iconsDir], stylesheets=[newStylesheet(gtkCSS)])
|
||||
|
|
Loading…
Reference in New Issue
Block a user