106 lines
1.9 KiB
Go
106 lines
1.9 KiB
Go
package qt
|
|
|
|
import (
|
|
"Sithego/themer"
|
|
"os"
|
|
"path/filepath"
|
|
"text/template"
|
|
)
|
|
|
|
type Adapter struct {
|
|
OutputDir string
|
|
}
|
|
|
|
type Option func(*Adapter)
|
|
|
|
func WithOutputDir(dir string) Option {
|
|
return func(a *Adapter) {
|
|
a.OutputDir = dir
|
|
}
|
|
}
|
|
|
|
func New(opt ...Option) *Adapter {
|
|
home, _ := os.UserHomeDir()
|
|
a := &Adapter{
|
|
OutputDir: home + "/.config/",
|
|
}
|
|
for _, o := range opt {
|
|
o(a)
|
|
}
|
|
return a
|
|
}
|
|
|
|
func (a *Adapter) Name() string {
|
|
return "Qt"
|
|
}
|
|
|
|
func (a *Adapter) Generate(t themer.Theme) error {
|
|
qssComponents := []string{
|
|
"template.qss",
|
|
}
|
|
outputDir := filepath.Join(a.OutputDir, "qt6ct")
|
|
if err := os.MkdirAll(outputDir, 0775); err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, component := range qssComponents {
|
|
templatePath := filepath.Join("themer/adapters/qt", component)
|
|
templ, err := template.ParseFiles(templatePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
qssOutputDir := filepath.Join(outputDir, "qss")
|
|
err = os.MkdirAll(qssOutputDir, 0775)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
outputPath := filepath.Join(qssOutputDir, t.Meta.Name+".qss")
|
|
|
|
file, err := os.Create(outputPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = templ.Execute(file, struct {
|
|
Theme themer.Theme
|
|
}{
|
|
Theme: t,
|
|
})
|
|
_ = file.Close()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// 2. Generate qt5ct/qt6ct color scheme (.conf)
|
|
confTemplatePath := "themer/adapters/qt/colors.conf"
|
|
if _, err := os.Stat(confTemplatePath); err == nil {
|
|
templ, err := template.ParseFiles(confTemplatePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
confOutputDir := filepath.Join(outputDir, "colors")
|
|
err = os.MkdirAll(confOutputDir, 0775)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
outputPath := filepath.Join(confOutputDir, t.Meta.Name+".conf")
|
|
file, err := os.Create(outputPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = templ.Execute(file, struct {
|
|
Theme themer.Theme
|
|
}{
|
|
Theme: t,
|
|
})
|
|
_ = file.Close()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|