/
config.go
82 lines (70 loc) · 2.11 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package gui
import (
"github.com/geniot/digger/src/glb"
"github.com/magiconair/properties"
"github.com/veandco/go-sdl2/sdl"
"os"
"path/filepath"
"strconv"
)
type ConfigImpl struct {
props *properties.Properties
homeDir string
pathToConfig string
}
func NewConfig() *ConfigImpl {
hD, _ := os.UserHomeDir()
pToC := filepath.Join(hD, glb.CONF_FILE_NAME)
cfg := &ConfigImpl{nil,
hD,
pToC}
cfg.load()
return cfg
}
func (cfg ConfigImpl) Get(key string) uint32 {
valStr, _ := cfg.props.Get(key)
valInt, _ := strconv.ParseInt(valStr, 10, 0)
return uint32(valInt)
}
func (cfg ConfigImpl) Set(key string, value string) {
cfg.props.Set(key, value)
}
func (cfg *ConfigImpl) load() {
loadedProps, _ := properties.LoadFile(cfg.pathToConfig, properties.UTF8)
if loadedProps == nil {
loadedProps = properties.NewProperties()
}
displayMode, _ := sdl.GetCurrentDisplayMode(0)
if _, ok := loadedProps.Get(glb.WINDOW_XPOS_KEY); !ok {
loadedProps.Set(glb.WINDOW_XPOS_KEY, strconv.FormatInt(int64(sdl.WINDOWPOS_UNDEFINED), 10))
}
if _, ok := loadedProps.Get(glb.WINDOW_YPOS_KEY); !ok {
loadedProps.Set(glb.WINDOW_YPOS_KEY, strconv.FormatInt(int64(sdl.WINDOWPOS_UNDEFINED), 10))
}
if _, ok := loadedProps.Get(glb.WINDOW_WIDTH_KEY); !ok {
loadedProps.Set(glb.WINDOW_WIDTH_KEY, strconv.FormatInt(int64(displayMode.W/2), 10))
}
if _, ok := loadedProps.Get(glb.WINDOW_HEIGHT_KEY); !ok {
loadedProps.Set(glb.WINDOW_HEIGHT_KEY, strconv.FormatInt(int64(displayMode.H/2), 10))
}
//patching window state
windowStateStr, ok := loadedProps.Get(glb.WINDOW_STATE_KEY)
windowState := int64(sdl.WINDOW_HIDDEN | sdl.WINDOW_RESIZABLE)
if ok {
windowState, _ = strconv.ParseInt(windowStateStr, 10, 0)
}
windowState |= sdl.WINDOW_HIDDEN
windowState |= sdl.WINDOW_RESIZABLE
loadedProps.Set(glb.WINDOW_STATE_KEY, strconv.FormatInt(windowState, 10))
cfg.props = loadedProps
}
func (cfg ConfigImpl) Save() {
f, err := os.OpenFile(cfg.pathToConfig, os.O_WRONLY|os.O_CREATE, 0600)
if err != nil {
println(err.Error())
}
defer f.Close()
err = f.Truncate(0)
_, err = f.Seek(0, 0)
cfg.props.Write(f, properties.UTF8)
}