diff --git a/clipboardwatcher/clipboardwatcher_object.go b/clipboardwatcher/clipboardwatcher_object.go index 6439c8d..b0df6c6 100644 --- a/clipboardwatcher/clipboardwatcher_object.go +++ b/clipboardwatcher/clipboardwatcher_object.go @@ -10,105 +10,105 @@ package clipboardwatcher import ( - // stdlib - "errors" - "fmt" - "strings" + // stdlib + "errors" + "fmt" + "strings" - // other - "github.com/mattn/go-gtk/gdk" - "github.com/mattn/go-gtk/gtk" + // other + "github.com/mattn/go-gtk/gdk" + "github.com/mattn/go-gtk/gtk" ) type ClipboardWatcher struct { - // Clipboard. - clipboard *gtk.Clipboard - // PRIMARY clipboard. - prim_clipboard *gtk.Clipboard + // Clipboard. + clipboard *gtk.Clipboard + // PRIMARY clipboard. + prim_clipboard *gtk.Clipboard - // Flags. - // We have just copy connect string to clipboard. - // Used to ignore clipboard data in check*Input() - just_set bool + // Flags. + // We have just copy connect string to clipboard. + // Used to ignore clipboard data in check*Input() + just_set bool } func (cw *ClipboardWatcher) checkInput() { - if !cw.just_set { - text := cw.clipboard.WaitForText() - cw.parseData(text) - } else { - cw.just_set = false - } + if !cw.just_set { + text := cw.clipboard.WaitForText() + cw.parseData(text) + } else { + cw.just_set = false + } } func (cw *ClipboardWatcher) checkPrimaryInput() { - if !cw.just_set { - text := cw.prim_clipboard.WaitForText() - cw.parseData(text) - } else { - cw.just_set = false - } + if !cw.just_set { + text := cw.prim_clipboard.WaitForText() + cw.parseData(text) + } else { + cw.just_set = false + } } func (cw *ClipboardWatcher) CopyServerData(server_address string) error { - server, ok := Cache.Servers[server_address] - if !ok { - // ToDo: show message box? - return errors.New("Server wasn't selected") - } + server, ok := Cache.Servers[server_address] + if !ok { + // ToDo: show message box? + return errors.New("Server wasn't selected") + } - // Composing connection string. - var connect_string string = "" - connect_string += "/connect " + server.Server.Ip + ":" + server.Server.Port - if len(server.Server.Password) >= 1 { - connect_string += ";password " + server.Server.Password - } - fmt.Println("Connect string: ", connect_string) - cw.just_set = true - cw.clipboard.SetText(connect_string) + // Composing connection string. + var connect_string string = "" + connect_string += "/connect " + server.Server.Ip + ":" + server.Server.Port + if len(server.Server.Password) >= 1 { + connect_string += ";password " + server.Server.Password + } + fmt.Println("Connect string: ", connect_string) + cw.just_set = true + cw.clipboard.SetText(connect_string) - return nil + return nil } func (cw *ClipboardWatcher) Initialize() { - fmt.Println("Initializing clipboard watcher...") + fmt.Println("Initializing clipboard watcher...") - cw.just_set = false + cw.just_set = false - cw.clipboard = gtk.NewClipboardGetForDisplay(gdk.DisplayGetDefault(), gdk.SELECTION_CLIPBOARD) - cw.clipboard.Connect("owner-change", cw.checkInput) + cw.clipboard = gtk.NewClipboardGetForDisplay(gdk.DisplayGetDefault(), gdk.SELECTION_CLIPBOARD) + cw.clipboard.Connect("owner-change", cw.checkInput) - cw.prim_clipboard = gtk.NewClipboardGetForDisplay(gdk.DisplayGetDefault(), gdk.SELECTION_PRIMARY) - cw.prim_clipboard.Connect("owner-change", cw.checkPrimaryInput) + cw.prim_clipboard = gtk.NewClipboardGetForDisplay(gdk.DisplayGetDefault(), gdk.SELECTION_PRIMARY) + cw.prim_clipboard.Connect("owner-change", cw.checkPrimaryInput) } func (cw *ClipboardWatcher) parseData(data string) { - // We should check only first string. - data = strings.Split(data, "\n")[0] - // Checking if we have connection string here. - if strings.Contains(data, "ct ") { - fmt.Println("Connection string detected!") - var server string = "" - var password string = "" - conn_string := strings.Split(data, ";") - if len(conn_string) > 0 { - srv_string := strings.Split(data, ";")[0] - srv_splitted := strings.Split(srv_string, "ct ") - if len(srv_splitted) > 1 { - server_raw := strings.Split(srv_splitted[1], " ")[0] - // Get rid of spaces. - server = strings.TrimSpace(server_raw) - } - } - if len(conn_string) > 1 && strings.Contains(data, "password") { - pw_string := strings.Split(data, ";")[1] - pw_splitted := strings.Split(pw_string, "password ") - if len(pw_splitted) > 1 { - password_raw := strings.Split(pw_splitted[1], " ")[0] - // Get rid of spaces. - password = strings.TrimSpace(password_raw) - } - } - Eventer.LaunchEvent("setQuickConnectDetails", map[string]string{"server": server, "password": password}) - } + // We should check only first string. + data = strings.Split(data, "\n")[0] + // Checking if we have connection string here. + if strings.Contains(data, "ct ") { + fmt.Println("Connection string detected!") + var server string = "" + var password string = "" + conn_string := strings.Split(data, ";") + if len(conn_string) > 0 { + srv_string := strings.Split(data, ";")[0] + srv_splitted := strings.Split(srv_string, "ct ") + if len(srv_splitted) > 1 { + server_raw := strings.Split(srv_splitted[1], " ")[0] + // Get rid of spaces. + server = strings.TrimSpace(server_raw) + } + } + if len(conn_string) > 1 && strings.Contains(data, "password") { + pw_string := strings.Split(data, ";")[1] + pw_splitted := strings.Split(pw_string, "password ") + if len(pw_splitted) > 1 { + password_raw := strings.Split(pw_splitted[1], " ")[0] + // Get rid of spaces. + password = strings.TrimSpace(password_raw) + } + } + Eventer.LaunchEvent("setQuickConnectDetails", map[string]string{"server": server, "password": password}) + } } diff --git a/colorizer/colorizer_object.go b/colorizer/colorizer_object.go index 4223dcc..e0a1eaa 100644 --- a/colorizer/colorizer_object.go +++ b/colorizer/colorizer_object.go @@ -10,76 +10,76 @@ package colorizer import ( - // stdlib - "fmt" - "html" - "strings" + // stdlib + "fmt" + "html" + "strings" ) type Colorizer struct { - // RAW colors to Pango relation. - colors map[string]string + // RAW colors to Pango relation. + colors map[string]string } func (c *Colorizer) ClearFromMarkup(data string) string { - var result string = "" + var result string = "" - data = html.EscapeString(data) + data = html.EscapeString(data) - data_splitted := strings.Split(data, ">") + data_splitted := strings.Split(data, ">") - if len(data_splitted) > 1 { - for item := range data_splitted { - if len(data_splitted[item]) > 0 { - result += strings.Split(data_splitted[item], "<")[0] - } - } - } else { - result = data_splitted[0] - } + if len(data_splitted) > 1 { + for item := range data_splitted { + if len(data_splitted[item]) > 0 { + result += strings.Split(data_splitted[item], "<")[0] + } + } + } else { + result = data_splitted[0] + } - return result + return result } func (c *Colorizer) Fix(data string) string { - var result string = "" + var result string = "" - data = html.EscapeString(data) + data = html.EscapeString(data) - data_splitted := strings.Split(data, "^") - if len(data_splitted) > 1 { - for item := range data_splitted { - if len(data_splitted[item]) > 0 { - colorcode_raw := string([]rune(data_splitted[item])[0]) - colorcode, ok := c.colors[colorcode_raw] - if !ok { - colorcode = "#000000" - } - result += "" + string([]rune(data_splitted[item])[1:]) + "" - } else { - result += data_splitted[item] - } - } - } else { - result = data_splitted[0] - } - return "" + result + "" + data_splitted := strings.Split(data, "^") + if len(data_splitted) > 1 { + for item := range data_splitted { + if len(data_splitted[item]) > 0 { + colorcode_raw := string([]rune(data_splitted[item])[0]) + colorcode, ok := c.colors[colorcode_raw] + if !ok { + colorcode = "#000000" + } + result += "" + string([]rune(data_splitted[item])[1:]) + "" + } else { + result += data_splitted[item] + } + } + } else { + result = data_splitted[0] + } + return "" + result + "" } func (c *Colorizer) Initialize() { - fmt.Println("Initializing colorizer...") - c.initializeStorages() + fmt.Println("Initializing colorizer...") + c.initializeStorages() } func (c *Colorizer) initializeStorages() { - c.colors = map[string]string{ - "1": "#cc0000", - "2": "#00cc00", - "3": "#eeee00", - "4": "#1c86ee", - "5": "#00eeee", - "6": "#ee00ee", - "7": "#000000", - "8": "#000000", - } + c.colors = map[string]string{ + "1": "#cc0000", + "2": "#00cc00", + "3": "#eeee00", + "4": "#1c86ee", + "5": "#00eeee", + "6": "#ee00ee", + "7": "#000000", + "8": "#000000", + } } diff --git a/colorizer/exported.go b/colorizer/exported.go index 3b0404c..a39947d 100644 --- a/colorizer/exported.go +++ b/colorizer/exported.go @@ -10,6 +10,6 @@ package colorizer func New() *Colorizer { - c := Colorizer {} - return &c + c := Colorizer{} + return &c } diff --git a/configuration/config_object.go b/configuration/config_object.go index 22afdcc..5dbc216 100644 --- a/configuration/config_object.go +++ b/configuration/config_object.go @@ -10,85 +10,85 @@ package configuration import ( - // stdlib - "fmt" - "os" - "path" - "runtime" + // stdlib + "fmt" + "os" + "path" + "runtime" ) type Config struct { - // Configuration from database. - Cfg map[string]string - // Temporary (or runtime) configuration things. - TEMP map[string]string + // Configuration from database. + Cfg map[string]string + // Temporary (or runtime) configuration things. + TEMP map[string]string } func (c *Config) initializePathsMac() { - fmt.Println("Initializing configuration paths...") - home_path := os.Getenv("HOME") - data_path := path.Join(home_path, "Library", "Application Support", "URTrator") - fmt.Println("Will use data path: " + data_path) - c.TEMP["DATA"] = data_path + fmt.Println("Initializing configuration paths...") + home_path := os.Getenv("HOME") + data_path := path.Join(home_path, "Library", "Application Support", "URTrator") + fmt.Println("Will use data path: " + data_path) + c.TEMP["DATA"] = data_path - profile_path := path.Join(home_path, "Library", "Application Support", "Quake3", "q3ut4") - c.TEMP["DEFAULT_PROFILE_PATH"] = profile_path + profile_path := path.Join(home_path, "Library", "Application Support", "Quake3", "q3ut4") + c.TEMP["DEFAULT_PROFILE_PATH"] = profile_path - if _, err := os.Stat(data_path); os.IsNotExist(err) { - os.MkdirAll(data_path, 0755) - } + if _, err := os.Stat(data_path); os.IsNotExist(err) { + os.MkdirAll(data_path, 0755) + } } func (c *Config) initializePathsNix() { - fmt.Println("Initializing configuration paths...") + fmt.Println("Initializing configuration paths...") - // Get storage path. By default we will use ~/.config/urtrator - // directory. - home_path := os.Getenv("HOME") - data_path := path.Join(home_path, ".config", "urtrator") - fmt.Println("Will use data path: " + data_path) - c.TEMP["DATA"] = data_path + // Get storage path. By default we will use ~/.config/urtrator + // directory. + home_path := os.Getenv("HOME") + data_path := path.Join(home_path, ".config", "urtrator") + fmt.Println("Will use data path: " + data_path) + c.TEMP["DATA"] = data_path - profile_path := path.Join(home_path, ".q3a", "q3ut4") - c.TEMP["DEFAULT_PROFILE_PATH"] = profile_path + profile_path := path.Join(home_path, ".q3a", "q3ut4") + c.TEMP["DEFAULT_PROFILE_PATH"] = profile_path - if _, err := os.Stat(data_path); os.IsNotExist(err) { - os.MkdirAll(data_path, 0755) - } + if _, err := os.Stat(data_path); os.IsNotExist(err) { + os.MkdirAll(data_path, 0755) + } } func (c *Config) initializePathsWin() { - fmt.Println("Initializing configuration paths...") - homepath_without_drive := os.Getenv("HOMEPATH") - homedrive := os.Getenv("HOMEDRIVE") - data_path := path.Join(homedrive, homepath_without_drive, "AppData", "Roaming", "URTrator") - c.TEMP["DATA"] = data_path + fmt.Println("Initializing configuration paths...") + homepath_without_drive := os.Getenv("HOMEPATH") + homedrive := os.Getenv("HOMEDRIVE") + data_path := path.Join(homedrive, homepath_without_drive, "AppData", "Roaming", "URTrator") + c.TEMP["DATA"] = data_path - // Verify it! - profile_path := path.Join(homedrive, homepath_without_drive, "AppData", "UrbanTerror43", "q3ut4") - c.TEMP["DEFAULT_PROFILE_PATH"] = profile_path + // Verify it! + profile_path := path.Join(homedrive, homepath_without_drive, "AppData", "UrbanTerror43", "q3ut4") + c.TEMP["DEFAULT_PROFILE_PATH"] = profile_path - if _, err := os.Stat(data_path); os.IsNotExist(err) { - os.MkdirAll(data_path, 0755) - } + if _, err := os.Stat(data_path); os.IsNotExist(err) { + os.MkdirAll(data_path, 0755) + } } func (c *Config) initializeStorages() { - c.TEMP = make(map[string]string) - c.Cfg = make(map[string]string) + c.TEMP = make(map[string]string) + c.Cfg = make(map[string]string) } func (c *Config) Initialize() { - fmt.Println("Initializing configuration storage...") - c.initializeStorages() + fmt.Println("Initializing configuration storage...") + c.initializeStorages() - if runtime.GOOS == "linux" { - c.initializePathsNix() - } else if runtime.GOOS == "darwin" { - c.initializePathsMac() - } else if runtime.GOOS == "windows" { - c.initializePathsWin() - } else { - panic("We're not ready for other OSes yet!") - } + if runtime.GOOS == "linux" { + c.initializePathsNix() + } else if runtime.GOOS == "darwin" { + c.initializePathsMac() + } else if runtime.GOOS == "windows" { + c.initializePathsWin() + } else { + panic("We're not ready for other OSes yet!") + } } diff --git a/configuration/exported.go b/configuration/exported.go index cf94706..5c781ef 100644 --- a/configuration/exported.go +++ b/configuration/exported.go @@ -10,6 +10,6 @@ package configuration func New() *Config { - c := Config{} - return &c + c := Config{} + return &c } diff --git a/context/exported.go b/context/exported.go index 692f7e2..56cfe73 100644 --- a/context/exported.go +++ b/context/exported.go @@ -10,6 +10,6 @@ package context func New() *Context { - c := Context{} - return &c + c := Context{} + return &c } diff --git a/database/migrations.go b/database/migrations.go index 19c2646..3cba768 100644 --- a/database/migrations.go +++ b/database/migrations.go @@ -10,8 +10,8 @@ package database import ( - // stdlib - "fmt" + // stdlib + "fmt" ) var start_schema = ` @@ -39,95 +39,128 @@ INSERT INTO database (version) VALUES (1); // Migrate database to latest version. // ToDo: make it more good :). func migrate_full(db *Database, version int) { - if version < 1 {start_to_one(db); version = 1} - if version == 1 {one_to_two(db); version = 2} - if version == 2 {two_to_three(db); version = 3} - if version == 3 {three_to_four(db); version = 4} - if version == 4 {four_to_five(db); version = 5} - if version == 5 {five_to_six(db); version = 6 } - if version == 6 {six_to_seven(db); version = 7} - if version == 7 {seven_to_eight(db); version = 8} - if version == 8 {eight_to_nine(db); version = 9} - if version == 9 {nine_to_ten(db); version = 10} - if version == 10 {ten_to_eleven(db); version = 11} + if version < 1 { + start_to_one(db) + version = 1 + } + if version == 1 { + one_to_two(db) + version = 2 + } + if version == 2 { + two_to_three(db) + version = 3 + } + if version == 3 { + three_to_four(db) + version = 4 + } + if version == 4 { + four_to_five(db) + version = 5 + } + if version == 5 { + five_to_six(db) + version = 6 + } + if version == 6 { + six_to_seven(db) + version = 7 + } + if version == 7 { + seven_to_eight(db) + version = 8 + } + if version == 8 { + eight_to_nine(db) + version = 9 + } + if version == 9 { + nine_to_ten(db) + version = 10 + } + if version == 10 { + ten_to_eleven(db) + version = 11 + } } // Initial database structure. func start_to_one(db *Database) { - fmt.Println("Upgrading database from 0 to 1...") - db.Db.MustExec(start_schema) + fmt.Println("Upgrading database from 0 to 1...") + db.Db.MustExec(start_schema) } // Favorite server mark. func one_to_two(db *Database) { - fmt.Println("Upgrading database from 1 to 2...") - db.Db.MustExec("ALTER TABLE servers ADD favorite VARCHAR(1) DEFAULT '0'") - db.Db.MustExec("UPDATE database SET version=2") + fmt.Println("Upgrading database from 1 to 2...") + db.Db.MustExec("ALTER TABLE servers ADD favorite VARCHAR(1) DEFAULT '0'") + db.Db.MustExec("UPDATE database SET version=2") } // URTRator settings and Urban Terror profiles. func two_to_three(db *Database) { - fmt.Println("Upgrading database from 2 to 3...") - db.Db.MustExec("DROP TABLE IF EXISTS settings") - db.Db.MustExec("CREATE TABLE settings (show_tray_icon VARCHAR(1) NOT NULL DEFAULT '0', enable_autoupdate VARCHAR(1) NOT NULL DEFAULT '0')") - db.Db.MustExec("DROP TABLE IF EXISTS urt_profiles") - db.Db.MustExec("CREATE TABLE urt_profiles (name VARCHAR(128) NOT NULL, version VARCHAR(5) NOT NULL DEFAULT '4.3', binary VARCHAR(1024) NOT NULL, second_x_session VARCHAR(1) NOT NULL DEFAULT '0', additional_parameters VARCHAR(1024) NOT NULL DEFAULT '')") - db.Db.MustExec("UPDATE database SET version=3") + fmt.Println("Upgrading database from 2 to 3...") + db.Db.MustExec("DROP TABLE IF EXISTS settings") + db.Db.MustExec("CREATE TABLE settings (show_tray_icon VARCHAR(1) NOT NULL DEFAULT '0', enable_autoupdate VARCHAR(1) NOT NULL DEFAULT '0')") + db.Db.MustExec("DROP TABLE IF EXISTS urt_profiles") + db.Db.MustExec("CREATE TABLE urt_profiles (name VARCHAR(128) NOT NULL, version VARCHAR(5) NOT NULL DEFAULT '4.3', binary VARCHAR(1024) NOT NULL, second_x_session VARCHAR(1) NOT NULL DEFAULT '0', additional_parameters VARCHAR(1024) NOT NULL DEFAULT '')") + db.Db.MustExec("UPDATE database SET version=3") } // UrT version inconsistency. func three_to_four(db *Database) { - fmt.Println("Upgrading database from 3 to 4...") - db.Db.MustExec("UPDATE urt_profiles SET version='4.3.0' WHERE version='4.3.000'") - db.Db.MustExec("UPDATE database SET version=4") + fmt.Println("Upgrading database from 3 to 4...") + db.Db.MustExec("UPDATE urt_profiles SET version='4.3.0' WHERE version='4.3.000'") + db.Db.MustExec("UPDATE database SET version=4") } // Server's passwords. func four_to_five(db *Database) { - fmt.Println("Upgrading database from 4 to 5...") - db.Db.MustExec("ALTER TABLE servers ADD password VARCHAR(64) DEFAULT ''") - db.Db.MustExec("UPDATE database SET version=5") + fmt.Println("Upgrading database from 4 to 5...") + db.Db.MustExec("ALTER TABLE servers ADD password VARCHAR(64) DEFAULT ''") + db.Db.MustExec("UPDATE database SET version=5") } // Profile for server. func five_to_six(db *Database) { - fmt.Println("Upgrading database from 5 to 6...") - db.Db.MustExec("ALTER TABLE servers ADD profile_to_use VARCHAR(128) DEFAULT ''") - db.Db.MustExec("UPDATE database SET version=6") + fmt.Println("Upgrading database from 5 to 6...") + db.Db.MustExec("ALTER TABLE servers ADD profile_to_use VARCHAR(128) DEFAULT ''") + db.Db.MustExec("UPDATE database SET version=6") } // Configuration storage. func six_to_seven(db *Database) { - fmt.Println("Upgrading database from 6 to 7...") - db.Db.MustExec("CREATE TABLE configuration (key VARCHAR(128) NOT NULL, value VARCHAR(1024) NOT NULL)") - db.Db.MustExec("UPDATE database SET version=7") + fmt.Println("Upgrading database from 6 to 7...") + db.Db.MustExec("CREATE TABLE configuration (key VARCHAR(128) NOT NULL, value VARCHAR(1024) NOT NULL)") + db.Db.MustExec("UPDATE database SET version=7") } // Server's extended information. func seven_to_eight(db *Database) { - fmt.Println("Upgrading database from 7 to 8...") - db.Db.MustExec("ALTER TABLE servers ADD extended_config VARCHAR(4096) NOT NULL DEFAULT ''") - db.Db.MustExec("ALTER TABLE servers ADD players_info VARCHAR(8192) NOT NULL DEFAULT ''") - db.Db.MustExec("UPDATE database SET version=8") + fmt.Println("Upgrading database from 7 to 8...") + db.Db.MustExec("ALTER TABLE servers ADD extended_config VARCHAR(4096) NOT NULL DEFAULT ''") + db.Db.MustExec("ALTER TABLE servers ADD players_info VARCHAR(8192) NOT NULL DEFAULT ''") + db.Db.MustExec("UPDATE database SET version=8") } // Is server private flag. func eight_to_nine(db *Database) { - fmt.Println("Upgrading database from 8 to 9...") - db.Db.MustExec("ALTER TABLE servers ADD is_private VARCHAR(1) NOT NULL DEFAULT '0'") - db.Db.MustExec("UPDATE database SET version=9") + fmt.Println("Upgrading database from 8 to 9...") + db.Db.MustExec("ALTER TABLE servers ADD is_private VARCHAR(1) NOT NULL DEFAULT '0'") + db.Db.MustExec("UPDATE database SET version=9") } // Bots count. func nine_to_ten(db *Database) { - fmt.Println("Upgrading database from 9 to 10...") - db.Db.MustExec("ALTER TABLE servers ADD bots VARCHAR(2) NOT NULL DEFAULT '0'") - db.Db.MustExec("UPDATE database SET version=10") + fmt.Println("Upgrading database from 9 to 10...") + db.Db.MustExec("ALTER TABLE servers ADD bots VARCHAR(2) NOT NULL DEFAULT '0'") + db.Db.MustExec("UPDATE database SET version=10") } // Urban terror's profile path. func ten_to_eleven(db *Database) { - fmt.Println("Upgrading database from 10 to 11...") - db.Db.MustExec("ALTER TABLE urt_profiles ADD profile_path VARCHAR(4096) NOT NULL DEFAULT '~/.q3ut4'") - db.Db.MustExec("UPDATE database SET version=11") + fmt.Println("Upgrading database from 10 to 11...") + db.Db.MustExec("ALTER TABLE urt_profiles ADD profile_path VARCHAR(4096) NOT NULL DEFAULT '~/.q3ut4'") + db.Db.MustExec("UPDATE database SET version=11") } diff --git a/datamodels/configuration.go b/datamodels/configuration.go index a33f447..9c56294 100644 --- a/datamodels/configuration.go +++ b/datamodels/configuration.go @@ -10,6 +10,6 @@ package datamodels type Configuration struct { - Key string `db:"key"` - Value string `db:"value"` + Key string `db:"key"` + Value string `db:"value"` } diff --git a/datamodels/database.go b/datamodels/database.go index f8ee1a2..1d9dc43 100644 --- a/datamodels/database.go +++ b/datamodels/database.go @@ -10,5 +10,5 @@ package datamodels type Database struct { - Version string `db:"version"` + Version string `db:"version"` } diff --git a/datamodels/profile.go b/datamodels/profile.go index a8eb9ee..0120c82 100644 --- a/datamodels/profile.go +++ b/datamodels/profile.go @@ -10,16 +10,16 @@ package datamodels type Profile struct { - // Profile name. - Name string `db:"name"` - // Game version. - Version string `db:"version"` - // Binary path. - Binary string `db:"binary"` - // Will we use second X session? - Second_x_session string `db:"second_x_session"` - // Additional game parameters we will pass. - Additional_params string `db:"additional_parameters"` - // Profile path. - Profile_path string `db:"profile_path"` + // Profile name. + Name string `db:"name"` + // Game version. + Version string `db:"version"` + // Binary path. + Binary string `db:"binary"` + // Will we use second X session? + Second_x_session string `db:"second_x_session"` + // Additional game parameters we will pass. + Additional_params string `db:"additional_parameters"` + // Profile path. + Profile_path string `db:"profile_path"` } diff --git a/datamodels/server.go b/datamodels/server.go index 32e22d3..15bbc17 100644 --- a/datamodels/server.go +++ b/datamodels/server.go @@ -10,36 +10,36 @@ package datamodels type Server struct { - // Server's address - Ip string `db:"ip"` - // Server's port - Port string `db:"port"` - // Server's name - Name string `db:"name"` - // Current players count - Players string `db:"players"` - // Bots count - Bots string `db:"bots"` - // Maximum players - Maxplayers string `db:"maxplayers"` - // Ping - Ping string `db:"ping"` - // Gametype. See Urban Terror documentation on relationship. - Gamemode string `db:"gamemode"` - // Current map - Map string `db:"map"` - // Server's software version - Version string `db:"version"` - // Is server was favorited? - Favorite string `db:"favorite"` - // Server's password. - Password string `db:"password"` - // Profile to use with server. - ProfileToUse string `db:"profile_to_use"` - // Extended server's configuration. - ExtendedConfig string `db:"extended_config"` - // Players information. - PlayersInfo string `db:"players_info"` - // Is server private? - IsPrivate string `db:"is_private"` + // Server's address + Ip string `db:"ip"` + // Server's port + Port string `db:"port"` + // Server's name + Name string `db:"name"` + // Current players count + Players string `db:"players"` + // Bots count + Bots string `db:"bots"` + // Maximum players + Maxplayers string `db:"maxplayers"` + // Ping + Ping string `db:"ping"` + // Gametype. See Urban Terror documentation on relationship. + Gamemode string `db:"gamemode"` + // Current map + Map string `db:"map"` + // Server's software version + Version string `db:"version"` + // Is server was favorited? + Favorite string `db:"favorite"` + // Server's password. + Password string `db:"password"` + // Profile to use with server. + ProfileToUse string `db:"profile_to_use"` + // Extended server's configuration. + ExtendedConfig string `db:"extended_config"` + // Players information. + PlayersInfo string `db:"players_info"` + // Is server private? + IsPrivate string `db:"is_private"` } diff --git a/eventer/eventer_object.go b/eventer/eventer_object.go index 684a53f..6677c2b 100644 --- a/eventer/eventer_object.go +++ b/eventer/eventer_object.go @@ -10,66 +10,66 @@ package eventer import ( - crand "crypto/rand" - "errors" - "fmt" - //"reflect" + crand "crypto/rand" + "errors" + "fmt" + //"reflect" - // github - "github.com/mattn/go-gtk/glib" - "github.com/mattn/go-gtk/gtk" + // github + "github.com/mattn/go-gtk/glib" + "github.com/mattn/go-gtk/gtk" ) type Eventer struct { - // Events - events map[string]map[string]func(data map[string]string) + // Events + events map[string]map[string]func(data map[string]string) } func (e *Eventer) AddEventHandler(event string, handler func(data map[string]string)) { - _, ok := e.events[event] - if !ok { - e.events[event] = make(map[string]func(data map[string]string)) - } - event_id_raw := make([]byte, 16) - crand.Read(event_id_raw) - event_id := fmt.Sprintf("%x", event_id_raw) - e.events[event][event_id] = handler + _, ok := e.events[event] + if !ok { + e.events[event] = make(map[string]func(data map[string]string)) + } + event_id_raw := make([]byte, 16) + crand.Read(event_id_raw) + event_id := fmt.Sprintf("%x", event_id_raw) + e.events[event][event_id] = handler } func (e *Eventer) Initialize() { - e.initializeStorage() + e.initializeStorage() } func (e *Eventer) initializeStorage() { - e.events = make(map[string]map[string]func(data map[string]string)) + e.events = make(map[string]map[string]func(data map[string]string)) } func (e *Eventer) LaunchEvent(event string, data map[string]string) error { - _, ok := e.events[event] - if !ok { - return errors.New("Event " + event + " not found!") - } + _, ok := e.events[event] + if !ok { + return errors.New("Event " + event + " not found!") + } - fmt.Println("Launching event " + event) - glib.IdleAdd(func() bool { - e.reallyLaunchEvent(event, data) - return false - }) + fmt.Println("Launching event " + event) + glib.IdleAdd(func() bool { + e.reallyLaunchEvent(event, data) + return false + }) - for { - if gtk.EventsPending() { - gtk.MainIteration() - } else { - break - } - } + for { + if gtk.EventsPending() { + gtk.MainIteration() + } else { + break + } + } - return nil + return nil } func (e *Eventer) reallyLaunchEvent(event string, data map[string]string) { - fmt.Println("Really launching event " + event + "...") - for _, val := range e.events[event] { - val(data) - } + fmt.Println("Really launching event " + event + "...") + for _, val := range e.events[event] { + val(data) + } } diff --git a/eventer/exported.go b/eventer/exported.go index 27cd73a..ee19547 100644 --- a/eventer/exported.go +++ b/eventer/exported.go @@ -10,6 +10,6 @@ package eventer func New() *Eventer { - e := Eventer{} - return &e + e := Eventer{} + return &e } diff --git a/ioq3dataparser/exported.go b/ioq3dataparser/exported.go index 913b340..6700168 100644 --- a/ioq3dataparser/exported.go +++ b/ioq3dataparser/exported.go @@ -10,39 +10,39 @@ package ioq3dataparser import ( - // stdlib - "strings" + // stdlib + "strings" ) func ParseInfoToMap(data string) map[string]string { - parsed_data := make(map[string]string) + parsed_data := make(map[string]string) - srv_config := strings.Split(data, "\\") - srv_config = srv_config[1:] - // Parse server configuration into passed server's datamodel. - for i := 0; i < len(srv_config[1:]); i = i + 2 { - parsed_data[srv_config[i]] = srv_config[i + 1] - } + srv_config := strings.Split(data, "\\") + srv_config = srv_config[1:] + // Parse server configuration into passed server's datamodel. + for i := 0; i < len(srv_config[1:]); i = i + 2 { + parsed_data[srv_config[i]] = srv_config[i+1] + } - return parsed_data + return parsed_data } func ParsePlayersInfoToMap(data string) map[string]map[string]string { - parsed_data := make(map[string]map[string]string) + parsed_data := make(map[string]map[string]string) - // Structure: frags|ping|nick - raw_data := strings.Split(data, "\\") - for i := range raw_data { - raw_player_data := strings.Split(raw_data[i], " ") - player_data := make(map[string]string) - if len(raw_player_data) > 1 { - nickname := strings.Join(raw_player_data[2:], " ") - player_data["nick"] = string([]byte(nickname)[1:len(nickname)-1]) - player_data["ping"] = raw_player_data[1] - player_data["frags"] = raw_player_data[0] - parsed_data[player_data["nick"]] = player_data - } - } + // Structure: frags|ping|nick + raw_data := strings.Split(data, "\\") + for i := range raw_data { + raw_player_data := strings.Split(raw_data[i], " ") + player_data := make(map[string]string) + if len(raw_player_data) > 1 { + nickname := strings.Join(raw_player_data[2:], " ") + player_data["nick"] = string([]byte(nickname)[1 : len(nickname)-1]) + player_data["ping"] = raw_player_data[1] + player_data["frags"] = raw_player_data[0] + parsed_data[player_data["nick"]] = player_data + } + } - return parsed_data + return parsed_data } diff --git a/launcher/exported.go b/launcher/exported.go index 50dd26a..7303cfd 100644 --- a/launcher/exported.go +++ b/launcher/exported.go @@ -10,6 +10,6 @@ package launcher func New() *Launcher { - l := Launcher{} - return &l + l := Launcher{} + return &l } diff --git a/timer/timer.go b/timer/timer.go index ca3b6a7..403ea69 100644 --- a/timer/timer.go +++ b/timer/timer.go @@ -10,121 +10,121 @@ package timer import ( - // stdlib - "errors" - "fmt" - "strconv" - "sync" - "time" + // stdlib + "errors" + "fmt" + "strconv" + "sync" + "time" ) type Timer struct { - // Tasks. - tasks map[string]*TimerTask - // Tasks map mutex. - tasksMutex sync.Mutex + // Tasks. + tasks map[string]*TimerTask + // Tasks map mutex. + tasksMutex sync.Mutex } func (t *Timer) AddTask(task *TimerTask) error { - fmt.Println("Adding task '" + task.Name + "'...") + fmt.Println("Adding task '" + task.Name + "'...") - _, ok := t.tasks[task.Name] - if ok { - error_text := "Task '" + task.Name + "' already exist! Ignoring..." - fmt.Println(error_text) - return errors.New(error_text) - } + _, ok := t.tasks[task.Name] + if ok { + error_text := "Task '" + task.Name + "' already exist! Ignoring..." + fmt.Println(error_text) + return errors.New(error_text) + } - task.InProgress = false + task.InProgress = false - curtime := time.Now() - nextlaunch := curtime.Add(time.Duration(task.Timeout) * time.Second) - task.NextLaunch = nextlaunch + curtime := time.Now() + nextlaunch := curtime.Add(time.Duration(task.Timeout) * time.Second) + task.NextLaunch = nextlaunch - t.tasksMutex.Lock() - t.tasks[task.Name] = task - t.tasksMutex.Unlock() + t.tasksMutex.Lock() + t.tasks[task.Name] = task + t.tasksMutex.Unlock() - fmt.Println("Added task '" + task.Name + "' with " + strconv.Itoa(task.Timeout) + " seconds timeout") - return nil + fmt.Println("Added task '" + task.Name + "' with " + strconv.Itoa(task.Timeout) + " seconds timeout") + return nil } func (t *Timer) executeTasks() { - t.tasksMutex.Lock() - for task_name, task := range t.tasks { - // Check if task should be run. - curtime := time.Now() - diff := curtime.Sub(task.NextLaunch) - //fmt.Println(diff) - if diff > 0 { - fmt.Println("Checking task '" + task_name + "'...") - // Check if task is already running. - if task.InProgress { - fmt.Println("Already executing, skipping...") - continue - } + t.tasksMutex.Lock() + for task_name, task := range t.tasks { + // Check if task should be run. + curtime := time.Now() + diff := curtime.Sub(task.NextLaunch) + //fmt.Println(diff) + if diff > 0 { + fmt.Println("Checking task '" + task_name + "'...") + // Check if task is already running. + if task.InProgress { + fmt.Println("Already executing, skipping...") + continue + } - fmt.Println("Launching task '" + task_name + "'...") - task.InProgress = true - Eventer.LaunchEvent(task.Callee, map[string]string{}) + fmt.Println("Launching task '" + task_name + "'...") + task.InProgress = true + Eventer.LaunchEvent(task.Callee, map[string]string{}) - curtime = time.Now() - nextlaunch := curtime.Add(time.Duration(task.Timeout) * time.Second) - task.NextLaunch = nextlaunch - } - } - t.tasksMutex.Unlock() + curtime = time.Now() + nextlaunch := curtime.Add(time.Duration(task.Timeout) * time.Second) + task.NextLaunch = nextlaunch + } + } + t.tasksMutex.Unlock() } func (t *Timer) GetTaskStatus(task_name string) bool { - t.tasksMutex.Lock() - task, ok := t.tasks[task_name] - t.tasksMutex.Unlock() - if !ok { - return false - } + t.tasksMutex.Lock() + task, ok := t.tasks[task_name] + t.tasksMutex.Unlock() + if !ok { + return false + } - return task.InProgress + return task.InProgress } func (t *Timer) Initialize() { - fmt.Println("Initializing timer...") + fmt.Println("Initializing timer...") - t.initializeStorage() - Eventer.AddEventHandler("taskDone", t.SetTaskNotInProgress) + t.initializeStorage() + Eventer.AddEventHandler("taskDone", t.SetTaskNotInProgress) - ticker := time.NewTicker(time.Second * 1) - go func() { - for _ = range ticker.C { - go t.executeTasks() - } - }() + ticker := time.NewTicker(time.Second * 1) + go func() { + for _ = range ticker.C { + go t.executeTasks() + } + }() } func (t *Timer) initializeStorage() { - t.tasks = make(map[string]*TimerTask) + t.tasks = make(map[string]*TimerTask) } func (t *Timer) RemoveTask(task_name string) { - t.tasksMutex.Lock() - _, ok := t.tasks[task_name] - t.tasksMutex.Unlock() - if !ok { - return - } + t.tasksMutex.Lock() + _, ok := t.tasks[task_name] + t.tasksMutex.Unlock() + if !ok { + return + } - t.tasksMutex.Lock() - delete(t.tasks, task_name) - t.tasksMutex.Unlock() + t.tasksMutex.Lock() + delete(t.tasks, task_name) + t.tasksMutex.Unlock() } func (t *Timer) SetTaskNotInProgress(data map[string]string) { - t.tasksMutex.Lock() - _, ok := t.tasks[data["task_name"]] - if !ok { - return - } + t.tasksMutex.Lock() + _, ok := t.tasks[data["task_name"]] + if !ok { + return + } - t.tasks[data["task_name"]].InProgress = false - t.tasksMutex.Unlock() + t.tasks[data["task_name"]].InProgress = false + t.tasksMutex.Unlock() } diff --git a/timer/timertask.go b/timer/timertask.go index f4a652f..feae986 100644 --- a/timer/timertask.go +++ b/timer/timertask.go @@ -10,25 +10,25 @@ package timer import ( - // stdlib - "time" + // stdlib + "time" ) type TimerTask struct { - // Task name. - Name string - // Task timeout, in seconds. - Timeout int - // What we should call? - // This should be an event name. - Callee string + // Task name. + Name string + // Task timeout, in seconds. + Timeout int + // What we should call? + // This should be an event name. + Callee string - // Internal variables, used by Timer. - // These variables can be defined, but they will be most likely - // overrided after first task launch. - // Next task launch time. - NextLaunch time.Time - // Is task currently executed? - // Kinda alternative to mutex. - InProgress bool + // Internal variables, used by Timer. + // These variables can be defined, but they will be most likely + // overrided after first task launch. + // Next task launch time. + NextLaunch time.Time + // Is task currently executed? + // Kinda alternative to mutex. + InProgress bool } diff --git a/translator/translator.go b/translator/translator.go index 36c279d..1786e12 100644 --- a/translator/translator.go +++ b/translator/translator.go @@ -14,23 +14,23 @@ package translator import ( - // stdlib - "encoding/json" - "fmt" - "io/ioutil" - "path/filepath" - "strings" + // stdlib + "encoding/json" + "fmt" + "io/ioutil" + "path/filepath" + "strings" ) type Translator struct { - // Accepted languages. - AcceptedLanguages map[string]string - // Currently active language. - Language string - // Translations. - translations map[string]map[string]string - // Path to translations files. - translationsPath string + // Accepted languages. + AcceptedLanguages map[string]string + // Currently active language. + Language string + // Translations. + translations map[string]map[string]string + // Path to translations files. + translationsPath string } // Formats string from passed map. @@ -50,73 +50,73 @@ type Translator struct { // Also note that we will replace ALL occurences of "{{ VAR }}" within string! // All untranslated variables will not be touched at all. func (t *Translator) formatFromMap(data string, params map[string]string) string { - new_data := data - for k, v := range params { - new_data = strings.Replace(new_data, "{{ " + k + " }}", v, -1) - } - return new_data + new_data := data + for k, v := range params { + new_data = strings.Replace(new_data, "{{ "+k+" }}", v, -1) + } + return new_data } // Translator initialization. func (t *Translator) Initialize() { - fmt.Println("Initializing translations...") + fmt.Println("Initializing translations...") - t.AcceptedLanguages = map[string]string{ - "System's default language": "default", - "English": "en_US", - "French": "fr_FR", - "Russian": "ru_RU", - } + t.AcceptedLanguages = map[string]string{ + "System's default language": "default", + "English": "en_US", + "French": "fr_FR", + "Russian": "ru_RU", + } - // Initialize storages. - t.translations = make(map[string]map[string]string) - t.translationsPath = "" + // Initialize storages. + t.translations = make(map[string]map[string]string) + t.translationsPath = "" - // Getting locale name from environment. - // ToDo: Windows compatability. Possible reference: - // https://github.com/cloudfoundry-attic/jibber_jabber/blob/master/jibber_jabber_windows.go - t.detectLanguage() + // Getting locale name from environment. + // ToDo: Windows compatability. Possible reference: + // https://github.com/cloudfoundry-attic/jibber_jabber/blob/master/jibber_jabber_windows.go + t.detectLanguage() - fmt.Println("Using translations for '" + t.Language + "'") + fmt.Println("Using translations for '" + t.Language + "'") - err := t.detectTranslationsDirectory() - if err == nil { - t.loadTranslations() - } else { - fmt.Println("Skipping translations loading due to missing translations directory.") - } + err := t.detectTranslationsDirectory() + if err == nil { + t.loadTranslations() + } else { + fmt.Println("Skipping translations loading due to missing translations directory.") + } } // Load translations into memory. func (t *Translator) loadTranslations() { - fmt.Println("Loading translations for language " + t.Language) - fmt.Println("Translations directory: " + t.translationsPath) + fmt.Println("Loading translations for language " + t.Language) + fmt.Println("Translations directory: " + t.translationsPath) - t.translations[t.Language] = make(map[string]string) + t.translations[t.Language] = make(map[string]string) - if t.translationsPath != "" { - // Check if language was selected in options dialog. In that - // case it will overwrite autodetected language. - var translationsDir string = "" - if cfg.Cfg["/general/language"] != "" { - translationsDir = filepath.Join(t.translationsPath, cfg.Cfg["/general/language"]) - t.Language = cfg.Cfg["/general/language"] - } else { - translationsDir = filepath.Join(t.translationsPath, t.Language) - } - files_list, _ := ioutil.ReadDir(translationsDir) - if len(files_list) > 0 { - for i := range files_list { - // Read file. - file_path := filepath.Join(translationsDir, files_list[i].Name()) - file_data, _ := ioutil.ReadFile(file_path) - var trans map[string]string - json.Unmarshal(file_data, &trans) - // Assign parsed translations to language code. - t.translations[t.Language] = trans - } - } - } + if t.translationsPath != "" { + // Check if language was selected in options dialog. In that + // case it will overwrite autodetected language. + var translationsDir string = "" + if cfg.Cfg["/general/language"] != "" { + translationsDir = filepath.Join(t.translationsPath, cfg.Cfg["/general/language"]) + t.Language = cfg.Cfg["/general/language"] + } else { + translationsDir = filepath.Join(t.translationsPath, t.Language) + } + files_list, _ := ioutil.ReadDir(translationsDir) + if len(files_list) > 0 { + for i := range files_list { + // Read file. + file_path := filepath.Join(translationsDir, files_list[i].Name()) + file_data, _ := ioutil.ReadFile(file_path) + var trans map[string]string + json.Unmarshal(file_data, &trans) + // Assign parsed translations to language code. + t.translations[t.Language] = trans + } + } + } } // Actual translation function. @@ -129,18 +129,18 @@ func (t *Translator) loadTranslations() { // Translates passed data from loaded translations file. // Returns passed data without changes if translation wasn't found. func (t *Translator) Translate(data string, params map[string]string) string { - val, ok := t.translations[t.Language][data] - if !ok { - if params != nil && len(params) > 0 { - return t.formatFromMap(data, params) - } else { - return data - } - } + val, ok := t.translations[t.Language][data] + if !ok { + if params != nil && len(params) > 0 { + return t.formatFromMap(data, params) + } else { + return data + } + } - if params != nil && len(params) > 0 { - return t.formatFromMap(val, params) - } + if params != nil && len(params) > 0 { + return t.formatFromMap(val, params) + } - return val + return val } diff --git a/translator/translator_unix.go b/translator/translator_unix.go index 58b7317..294a445 100644 --- a/translator/translator_unix.go +++ b/translator/translator_unix.go @@ -22,64 +22,64 @@ package translator import ( - // stdlib - "errors" - "fmt" - "os" - "path/filepath" - "strings" + // stdlib + "errors" + "fmt" + "os" + "path/filepath" + "strings" ) // Detect language on Unices. func (t *Translator) detectLanguage() { - // Use LC_ALL first. - t.Language = os.Getenv("LC_ALL") - // If LC_ALL is empty - use LANG. - if t.Language == "" { - t.Language = os.Getenv("LANG") - } + // Use LC_ALL first. + t.Language = os.Getenv("LC_ALL") + // If LC_ALL is empty - use LANG. + if t.Language == "" { + t.Language = os.Getenv("LANG") + } - // If still nothing - force "en_US" as default locale. Otherwise - // split language string by "." and take first part. - // Note: en_US is a default thing, so you will not found anything - // in "translations" directory! - if t.Language == "" { - fmt.Println("No locale data for current user found, using default (en_US)...") - t.Language = "en_US" - } else { - t.Language = strings.Split(t.Language, ".")[0] - } + // If still nothing - force "en_US" as default locale. Otherwise + // split language string by "." and take first part. + // Note: en_US is a default thing, so you will not found anything + // in "translations" directory! + if t.Language == "" { + fmt.Println("No locale data for current user found, using default (en_US)...") + t.Language = "en_US" + } else { + t.Language = strings.Split(t.Language, ".")[0] + } } func (t *Translator) detectTranslationsDirectory() error { - // Try to use directory near binary. - dir, _ := filepath.Abs(filepath.Dir(os.Args[0])) - // ..which can be overriden by URTRATOR_BINDIR environment variable. - // Useful for developers. - envdir := os.Getenv("URTRATOR_BINDIR") - if envdir != "" { - dir = envdir - } + // Try to use directory near binary. + dir, _ := filepath.Abs(filepath.Dir(os.Args[0])) + // ..which can be overriden by URTRATOR_BINDIR environment variable. + // Useful for developers. + envdir := os.Getenv("URTRATOR_BINDIR") + if envdir != "" { + dir = envdir + } - translations_dir := filepath.Join(dir, "translations") - _, err := os.Stat(translations_dir) - if err != nil { - fmt.Println("Translations wasn't found near binary!") - // As we're using JSON translation storage, it should be - // put in /usr/share/urtrator/translations by package - // maintainers in distros. - fmt.Println("Trying /usr/share/urtrator/translations...") - _, err := os.Stat("/usr/share/urtrator/translations") - if err != nil { - t.Language = "en_US" - fmt.Println("Translations unavailable, forcing en_US language code") - return errors.New("No translations directory was detected!") - } else { - t.translationsPath = "/usr/share/urtrator/translations" - } - } else { - t.translationsPath = translations_dir - } + translations_dir := filepath.Join(dir, "translations") + _, err := os.Stat(translations_dir) + if err != nil { + fmt.Println("Translations wasn't found near binary!") + // As we're using JSON translation storage, it should be + // put in /usr/share/urtrator/translations by package + // maintainers in distros. + fmt.Println("Trying /usr/share/urtrator/translations...") + _, err := os.Stat("/usr/share/urtrator/translations") + if err != nil { + t.Language = "en_US" + fmt.Println("Translations unavailable, forcing en_US language code") + return errors.New("No translations directory was detected!") + } else { + t.translationsPath = "/usr/share/urtrator/translations" + } + } else { + t.translationsPath = translations_dir + } - return nil + return nil } diff --git a/translator/translator_windows.go b/translator/translator_windows.go index e390af2..ee1a2f7 100644 --- a/translator/translator_windows.go +++ b/translator/translator_windows.go @@ -22,23 +22,23 @@ package translator import ( - // stdlib - "fmt" - "path/filepath" - "os" + // stdlib + "fmt" + "os" + "path/filepath" ) // Detect language on Windows. func (t *Translator) detectLanguage() { - fmt.Println("ToDo! Forcing en_US for now!") - t.Language = "en_US" + fmt.Println("ToDo! Forcing en_US for now!") + t.Language = "en_US" } func (t *Translator) detectTranslationsDirectory() error { - // Translations MUST reside in directory neear binary! - // ToDo: more checks. - dir, _ := filepath.Abs(filepath.Dir(os.Args[0])) - t.translationsPath = filepath.Join(dir, "translations") + // Translations MUST reside in directory neear binary! + // ToDo: more checks. + dir, _ := filepath.Abs(filepath.Dir(os.Args[0])) + t.translationsPath = filepath.Join(dir, "translations") - return nil + return nil } diff --git a/ui/gtk2/mainwindow_helpers.go b/ui/gtk2/mainwindow_helpers.go index 941d6b3..4aae9d5 100644 --- a/ui/gtk2/mainwindow_helpers.go +++ b/ui/gtk2/mainwindow_helpers.go @@ -1,47 +1,47 @@ package ui import ( - // stdlib - "strings" + // stdlib + "strings" - // other - "github.com/mattn/go-gtk/glib" - "github.com/mattn/go-gtk/gtk" + // other + "github.com/mattn/go-gtk/glib" + "github.com/mattn/go-gtk/gtk" ) func (m *MainWindow) getGameModeName(name string) string { - val, ok := m.gamemodes[name] + val, ok := m.gamemodes[name] - if !ok { - return "Unknown or custom" - } + if !ok { + return "Unknown or custom" + } - return val + return val } func (m *MainWindow) getIpFromServersList(current_tab string) string { - // Getting server's address from list. - // Assuming that we're on "Servers" tab by default. - sel := m.all_servers.GetSelection() - model := m.all_servers.GetModel() - if strings.Contains(current_tab, ctx.Translator.Translate("Favorites", nil)) { - sel = m.fav_servers.GetSelection() - model = m.fav_servers.GetModel() - } + // Getting server's address from list. + // Assuming that we're on "Servers" tab by default. + sel := m.all_servers.GetSelection() + model := m.all_servers.GetModel() + if strings.Contains(current_tab, ctx.Translator.Translate("Favorites", nil)) { + sel = m.fav_servers.GetSelection() + model = m.fav_servers.GetModel() + } - iter := new(gtk.TreeIter) - _ = sel.GetSelected(iter) + iter := new(gtk.TreeIter) + _ = sel.GetSelected(iter) - // Getting server address. - var srv_addr string - srv_addr_gval := glib.ValueFromNative(srv_addr) + // Getting server address. + var srv_addr string + srv_addr_gval := glib.ValueFromNative(srv_addr) - if strings.Contains(current_tab, ctx.Translator.Translate("Servers", nil)) { - model.GetValue(iter, m.column_pos["Servers"]["IP"], srv_addr_gval) - } else if strings.Contains(current_tab, ctx.Translator.Translate("Favorites", nil)) { - model.GetValue(iter, m.column_pos["Favorites"]["IP"], srv_addr_gval) - } - server_address := srv_addr_gval.GetString() + if strings.Contains(current_tab, ctx.Translator.Translate("Servers", nil)) { + model.GetValue(iter, m.column_pos["Servers"]["IP"], srv_addr_gval) + } else if strings.Contains(current_tab, ctx.Translator.Translate("Favorites", nil)) { + model.GetValue(iter, m.column_pos["Favorites"]["IP"], srv_addr_gval) + } + server_address := srv_addr_gval.GetString() - return server_address + return server_address } diff --git a/ui/qt5/exported.go b/ui/qt5/exported.go index eb12052..8fd9433 100644 --- a/ui/qt5/exported.go +++ b/ui/qt5/exported.go @@ -10,16 +10,16 @@ package ui import ( - // local - "github.com/pztrn/urtrator/context" + // local + "github.com/pztrn/urtrator/context" ) var ( - ctx *context.Context + ctx *context.Context ) func NewMainWindow(c *context.Context) *MainWindow { - ctx = c - m := MainWindow{} - return &m + ctx = c + m := MainWindow{} + return &m } diff --git a/ui/qt5/mainwindow.go b/ui/qt5/mainwindow.go index d3811de..053d076 100644 --- a/ui/qt5/mainwindow.go +++ b/ui/qt5/mainwindow.go @@ -10,109 +10,108 @@ package ui import ( - // stdlib - "fmt" - //"runtime" - //"sort" - //"strconv" - //"strings" + // stdlib + "fmt" + //"runtime" + //"sort" + //"strconv" + //"strings" - // Local - //"github.com/pztrn/urtrator/datamodels" - //"github.com/pztrn/urtrator/ioq3dataparser" + // Local + //"github.com/pztrn/urtrator/datamodels" + //"github.com/pztrn/urtrator/ioq3dataparser" - // github - "github.com/therecipe/qt/widgets" + // github + "github.com/therecipe/qt/widgets" ) type MainWindow struct { - ////////////////////////////////////////////////// - // Main widgets and pointers. - ////////////////////////////////////////////////// - // Application. - app *widgets.QApplication - // Main window. - window *widgets.QMainWindow - // Main menu. - mainmenu *widgets.QMenuBar - // Main vertical box. - vbox *widgets.QVBoxLayout - // Toolbar. - toolbar *widgets.QToolBar - // Splitter. - splitter *widgets.QSplitter - // Tabs widget. - tabs *widgets.QTabWidget + ////////////////////////////////////////////////// + // Main widgets and pointers. + ////////////////////////////////////////////////// + // Application. + app *widgets.QApplication + // Main window. + window *widgets.QMainWindow + // Main menu. + mainmenu *widgets.QMenuBar + // Main vertical box. + vbox *widgets.QVBoxLayout + // Toolbar. + toolbar *widgets.QToolBar + // Splitter. + splitter *widgets.QSplitter + // Tabs widget. + tabs *widgets.QTabWidget - ////////////////////////////////////////////////// - // Servers lists and related. - ////////////////////////////////////////////////// - // "Servers" tab list. - all_servers *widgets.QTreeView - // Hide offline servers checkbox. - all_servers_hide_offline *widgets.QCheckBox - // Hide private servers? - all_servers_hide_private *widgets.QCheckBox - // Server's version. - all_servers_version *widgets.QComboBox - // Game mode. - all_servers_gamemode *widgets.QComboBox - // Favorites tab list. - fav_servers *widgets.QTreeView - // Hide offline servers checkbox. - fav_servers_hide_offline *widgets.QCheckBox - // Hide private servers? - fav_servers_hide_private *widgets.QCheckBox - // Server's version. - fav_servers_version *widgets.QComboBox - // Game mode. - fav_servers_gamemode *widgets.QComboBox - // Sidebar's server's information widget. - sidebar_server_info *widgets.QTreeView - // Sidebar's server's players widget. - sidebar_server_players *widgets.QTreeView + ////////////////////////////////////////////////// + // Servers lists and related. + ////////////////////////////////////////////////// + // "Servers" tab list. + all_servers *widgets.QTreeView + // Hide offline servers checkbox. + all_servers_hide_offline *widgets.QCheckBox + // Hide private servers? + all_servers_hide_private *widgets.QCheckBox + // Server's version. + all_servers_version *widgets.QComboBox + // Game mode. + all_servers_gamemode *widgets.QComboBox + // Favorites tab list. + fav_servers *widgets.QTreeView + // Hide offline servers checkbox. + fav_servers_hide_offline *widgets.QCheckBox + // Hide private servers? + fav_servers_hide_private *widgets.QCheckBox + // Server's version. + fav_servers_version *widgets.QComboBox + // Game mode. + fav_servers_gamemode *widgets.QComboBox + // Sidebar's server's information widget. + sidebar_server_info *widgets.QTreeView + // Sidebar's server's players widget. + sidebar_server_players *widgets.QTreeView - ////////////////////////////////////////////////// - // Datas. - ////////////////////////////////////////////////// - // Window size. - window_width int - window_height int - // Window position. - window_pos_x int - window_pos_y int - // Supported game modes. - gamemodes map[string]string - // Columns names for servers tabs. - column_names map[string]string - // Real columns positions on servers tabs. - column_pos map[string]map[string]int + ////////////////////////////////////////////////// + // Datas. + ////////////////////////////////////////////////// + // Window size. + window_width int + window_height int + // Window position. + window_pos_x int + window_pos_y int + // Supported game modes. + gamemodes map[string]string + // Columns names for servers tabs. + column_names map[string]string + // Real columns positions on servers tabs. + column_pos map[string]map[string]int } func (m *MainWindow) close(a bool) { - fmt.Println("Closing URTrator...") - m.app.Quit() + fmt.Println("Closing URTrator...") + m.app.Quit() } func (m *MainWindow) dropDatabasesData(bool) { - fmt.Println("About to drop databases data...") + fmt.Println("About to drop databases data...") } func (m *MainWindow) showAboutDialog(a bool) { - fmt.Println("Showing about dialog...") + fmt.Println("Showing about dialog...") } func (m *MainWindow) showAboutQtDialog(a bool) { - fmt.Println("Showing about Qt dialog...") - widgets.QMessageBox_AboutQt(m.window, "About Qt") + fmt.Println("Showing about Qt dialog...") + widgets.QMessageBox_AboutQt(m.window, "About Qt") } - func (m *MainWindow) showOptionsDialog(a bool) { - fmt.Println("Showing options dialog...") + fmt.Println("Showing options dialog...") } func (m *MainWindow) splitterMoved(pos int, index int) { - fmt.Println("Splitter moved!") - fmt.Println(index, pos) + fmt.Println("Splitter moved!") + fmt.Println(index, pos) } diff --git a/ui/qt5/mainwindow_init.go b/ui/qt5/mainwindow_init.go index 0da224a..a0fad2e 100644 --- a/ui/qt5/mainwindow_init.go +++ b/ui/qt5/mainwindow_init.go @@ -10,336 +10,336 @@ package ui import ( - // stdlib - "fmt" - "os" - //"runtime" - "sort" - "strconv" + // stdlib + "fmt" + "os" + //"runtime" + "sort" + "strconv" - // local - "github.com/pztrn/urtrator/common" + // local + "github.com/pztrn/urtrator/common" - // Qt5 - "github.com/therecipe/qt/core" - "github.com/therecipe/qt/widgets" + // Qt5 + "github.com/therecipe/qt/core" + "github.com/therecipe/qt/widgets" ) func (m *MainWindow) Initialize() { - fmt.Println("Initializing main window...") + fmt.Println("Initializing main window...") - m.app = widgets.NewQApplication(len(os.Args), os.Args) + m.app = widgets.NewQApplication(len(os.Args), os.Args) - m.initializeStorages() + m.initializeStorages() - m.window = widgets.NewQMainWindow(nil, 0) - m.window.SetWindowTitle("URTrator") + m.window = widgets.NewQMainWindow(nil, 0) + m.window.SetWindowTitle("URTrator") - // Restoring window position. - var win_pos_x_str string = "0" - var win_pos_y_str string = "0" - saved_win_pos_x_str, ok := ctx.Cfg.Cfg["/mainwindow/position_x"] - if ok { - win_pos_x_str = saved_win_pos_x_str - } - saved_win_pos_y_str, ok := ctx.Cfg.Cfg["/mainwindow/position_y"] - if ok { - win_pos_y_str = saved_win_pos_y_str - } - win_pos_x, _ := strconv.Atoi(win_pos_x_str) - win_pos_y, _ := strconv.Atoi(win_pos_y_str) + // Restoring window position. + var win_pos_x_str string = "0" + var win_pos_y_str string = "0" + saved_win_pos_x_str, ok := ctx.Cfg.Cfg["/mainwindow/position_x"] + if ok { + win_pos_x_str = saved_win_pos_x_str + } + saved_win_pos_y_str, ok := ctx.Cfg.Cfg["/mainwindow/position_y"] + if ok { + win_pos_y_str = saved_win_pos_y_str + } + win_pos_x, _ := strconv.Atoi(win_pos_x_str) + win_pos_y, _ := strconv.Atoi(win_pos_y_str) - // Restoring window size. - var win_size_width_str string = "1000" - var win_size_height_str string = "600" - saved_win_size_width_str, ok := ctx.Cfg.Cfg["/mainwindow/width"] - if ok { - win_size_width_str = saved_win_size_width_str - } - saved_win_size_height_str, ok := ctx.Cfg.Cfg["/mainwindow/height"] - if ok { - win_size_height_str = saved_win_size_height_str - } + // Restoring window size. + var win_size_width_str string = "1000" + var win_size_height_str string = "600" + saved_win_size_width_str, ok := ctx.Cfg.Cfg["/mainwindow/width"] + if ok { + win_size_width_str = saved_win_size_width_str + } + saved_win_size_height_str, ok := ctx.Cfg.Cfg["/mainwindow/height"] + if ok { + win_size_height_str = saved_win_size_height_str + } - m.window_width, _ = strconv.Atoi(win_size_width_str) - m.window_height, _ = strconv.Atoi(win_size_height_str) - m.window.SetGeometry2(win_pos_x, win_pos_y, m.window_width, m.window_height) + m.window_width, _ = strconv.Atoi(win_size_width_str) + m.window_height, _ = strconv.Atoi(win_size_height_str) + m.window.SetGeometry2(win_pos_x, win_pos_y, m.window_width, m.window_height) - m.initializeMenu() + m.initializeMenu() - // Central widget. - cv := widgets.NewQWidget(nil, core.Qt__Widget) - //cv_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Expanding, widgets.QSizePolicy__Expanding, widgets.QSizePolicy__DefaultType) - //cv.SetSizePolicy(cv_policy) - m.window.SetCentralWidget(cv) + // Central widget. + cv := widgets.NewQWidget(nil, core.Qt__Widget) + //cv_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Expanding, widgets.QSizePolicy__Expanding, widgets.QSizePolicy__DefaultType) + //cv.SetSizePolicy(cv_policy) + m.window.SetCentralWidget(cv) - // Main vertical box. - m.vbox = widgets.NewQVBoxLayout() - m.vbox.SetContentsMargins(4, 4, 4, 4) - cv.SetLayout(m.vbox) + // Main vertical box. + m.vbox = widgets.NewQVBoxLayout() + m.vbox.SetContentsMargins(4, 4, 4, 4) + cv.SetLayout(m.vbox) - m.initializeToolbar() - m.initializeTabs() - m.initializeSidebar() + m.initializeToolbar() + m.initializeTabs() + m.initializeSidebar() - m.window.Show() + m.window.Show() - // Restore splitter position. - // We will restore saved thing, or will use "window_width - 150". - saved_pane_pos, ok := ctx.Cfg.Cfg["/mainwindow/pane_negative_position"] - if ok { - pane_negative_pos, _ := strconv.Atoi(saved_pane_pos) - new_splitter_pos := m.window_width - pane_negative_pos - fmt.Println(new_splitter_pos) - m.splitter.MoveSplitter(new_splitter_pos, 1) - fmt.Println(m.splitter.ClosestLegalPosition(1, new_splitter_pos)) - } else { - g := m.window.Geometry() - w := g.Width() - m.splitter.MoveSplitter(w - 150, 1) - } + // Restore splitter position. + // We will restore saved thing, or will use "window_width - 150". + saved_pane_pos, ok := ctx.Cfg.Cfg["/mainwindow/pane_negative_position"] + if ok { + pane_negative_pos, _ := strconv.Atoi(saved_pane_pos) + new_splitter_pos := m.window_width - pane_negative_pos + fmt.Println(new_splitter_pos) + m.splitter.MoveSplitter(new_splitter_pos, 1) + fmt.Println(m.splitter.ClosestLegalPosition(1, new_splitter_pos)) + } else { + g := m.window.Geometry() + w := g.Width() + m.splitter.MoveSplitter(w-150, 1) + } - m.splitter.ConnectSplitterMoved(m.splitterMoved) + m.splitter.ConnectSplitterMoved(m.splitterMoved) - widgets.QApplication_Exec() + widgets.QApplication_Exec() } func (m *MainWindow) initializeSidebar() { - sidebar_widget := widgets.NewQWidget(nil, core.Qt__Widget) - m.splitter.AddWidget(sidebar_widget) + sidebar_widget := widgets.NewQWidget(nil, core.Qt__Widget) + m.splitter.AddWidget(sidebar_widget) - sidebar_layout := widgets.NewQVBoxLayout() - sidebar_layout.SetContentsMargins(4, 4, 4, 4) - sidebar_widget.SetLayout(sidebar_layout) + sidebar_layout := widgets.NewQVBoxLayout() + sidebar_layout.SetContentsMargins(4, 4, 4, 4) + sidebar_widget.SetLayout(sidebar_layout) - // Server's information list. - m.sidebar_server_info = widgets.NewQTreeView(nil) - sidebar_layout.AddWidget(m.sidebar_server_info, 0, core.Qt__AlignHCenter & core.Qt__AlignTop) + // Server's information list. + m.sidebar_server_info = widgets.NewQTreeView(nil) + sidebar_layout.AddWidget(m.sidebar_server_info, 0, core.Qt__AlignHCenter&core.Qt__AlignTop) - // Server's players widget. - m.sidebar_server_players = widgets.NewQTreeView(nil) - sidebar_layout.AddWidget(m.sidebar_server_players, 0, core.Qt__AlignHCenter & core.Qt__AlignTop) + // Server's players widget. + m.sidebar_server_players = widgets.NewQTreeView(nil) + sidebar_layout.AddWidget(m.sidebar_server_players, 0, core.Qt__AlignHCenter&core.Qt__AlignTop) - // Add spacer. - spacer := widgets.NewQSpacerItem(6, 6, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Expanding) - sidebar_layout.AddSpacerItem(spacer) + // Add spacer. + spacer := widgets.NewQSpacerItem(6, 6, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Expanding) + sidebar_layout.AddSpacerItem(spacer) } func (m *MainWindow) initializeStorages() { - m.gamemodes = make(map[string]string) - m.gamemodes = map[string]string{ - "1": "Last Man Standing", - "2": "Free For All", - "3": "Team DM", - "4": "Team Survivor", - "5": "Follow The Leader", - "6": "Cap'n'Hold", - "7": "Capture The Flag", - "8": "Bomb", - "9": "Jump", - "10": "Freeze Tag", - "11": "Gun Game", - "12": "Instagib", - } + m.gamemodes = make(map[string]string) + m.gamemodes = map[string]string{ + "1": "Last Man Standing", + "2": "Free For All", + "3": "Team DM", + "4": "Team Survivor", + "5": "Follow The Leader", + "6": "Cap'n'Hold", + "7": "Capture The Flag", + "8": "Bomb", + "9": "Jump", + "10": "Freeze Tag", + "11": "Gun Game", + "12": "Instagib", + } - // Columns names. - // Key - default position in lists. - m.column_names = map[string]string{ - "2": "Name", - "3": "Mode", - "4": "Map", - "5": "Players", - "6": "Ping", - "7": "Version", - "8": "IP", - } - // Real columns positions. - m.column_pos = make(map[string]map[string]int) - m.column_pos["Servers"] = make(map[string]int) - m.column_pos["Favorites"] = make(map[string]int) + // Columns names. + // Key - default position in lists. + m.column_names = map[string]string{ + "2": "Name", + "3": "Mode", + "4": "Map", + "5": "Players", + "6": "Ping", + "7": "Version", + "8": "IP", + } + // Real columns positions. + m.column_pos = make(map[string]map[string]int) + m.column_pos["Servers"] = make(map[string]int) + m.column_pos["Favorites"] = make(map[string]int) } func (m *MainWindow) initializeTabs() { - m.splitter = widgets.NewQSplitter(nil) - m.splitter.SetOrientation(core.Qt__Horizontal) - m.vbox.AddWidget(m.splitter, 0, core.Qt__AlignHCenter & core.Qt__AlignTop) + m.splitter = widgets.NewQSplitter(nil) + m.splitter.SetOrientation(core.Qt__Horizontal) + m.vbox.AddWidget(m.splitter, 0, core.Qt__AlignHCenter&core.Qt__AlignTop) - m.tabs = widgets.NewQTabWidget(nil) - m.splitter.AddWidget(m.tabs) + m.tabs = widgets.NewQTabWidget(nil) + m.splitter.AddWidget(m.tabs) - // Default size policy for filters widget. - filters_size_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__DefaultType) + // Default size policy for filters widget. + filters_size_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__DefaultType) - ////////////////////////////////////////////////// - // Servers page. - ////////////////////////////////////////////////// - serverspagewidget := widgets.NewQWidget(nil, core.Qt__Widget) - serverspagewidget_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Expanding, widgets.QSizePolicy__Expanding, widgets.QSizePolicy__DefaultType) - serverspagewidget.SetSizePolicy(serverspagewidget_policy) - m.tabs.AddTab(serverspagewidget, ctx.Translator.Translate("Servers", nil)) - serverspagewidget_layout := widgets.NewQHBoxLayout() - serverspagewidget_layout.SetContentsMargins(4, 4, 4, 4) - serverspagewidget.SetLayout(serverspagewidget_layout) + ////////////////////////////////////////////////// + // Servers page. + ////////////////////////////////////////////////// + serverspagewidget := widgets.NewQWidget(nil, core.Qt__Widget) + serverspagewidget_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Expanding, widgets.QSizePolicy__Expanding, widgets.QSizePolicy__DefaultType) + serverspagewidget.SetSizePolicy(serverspagewidget_policy) + m.tabs.AddTab(serverspagewidget, ctx.Translator.Translate("Servers", nil)) + serverspagewidget_layout := widgets.NewQHBoxLayout() + serverspagewidget_layout.SetContentsMargins(4, 4, 4, 4) + serverspagewidget.SetLayout(serverspagewidget_layout) - // Servers list. - m.all_servers = widgets.NewQTreeView(nil) - serverspagewidget_layout.AddWidget(m.all_servers, 0, core.Qt__AlignLeft & core.Qt__AlignTop) + // Servers list. + m.all_servers = widgets.NewQTreeView(nil) + serverspagewidget_layout.AddWidget(m.all_servers, 0, core.Qt__AlignLeft&core.Qt__AlignTop) - // Servers list filters widget. - serverspagewidget_filters_widget := widgets.NewQWidget(nil, core.Qt__Widget) - serverspagewidget_filters_widget_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__DefaultType) - serverspagewidget_filters_widget.SetSizePolicy(serverspagewidget_filters_widget_policy) - serverspagewidget_layout.AddWidget(serverspagewidget_filters_widget, 0, core.Qt__AlignRight & core.Qt__AlignTop) + // Servers list filters widget. + serverspagewidget_filters_widget := widgets.NewQWidget(nil, core.Qt__Widget) + serverspagewidget_filters_widget_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__DefaultType) + serverspagewidget_filters_widget.SetSizePolicy(serverspagewidget_filters_widget_policy) + serverspagewidget_layout.AddWidget(serverspagewidget_filters_widget, 0, core.Qt__AlignRight&core.Qt__AlignTop) - // Servers list filters layout. - serverspagewidget_filters_layout := widgets.NewQVBoxLayout() - serverspagewidget_filters_widget.SetLayout(serverspagewidget_filters_layout) - serverspagewidget_filters_layout.SetContentsMargins(4, 4, 4, 4) + // Servers list filters layout. + serverspagewidget_filters_layout := widgets.NewQVBoxLayout() + serverspagewidget_filters_widget.SetLayout(serverspagewidget_filters_layout) + serverspagewidget_filters_layout.SetContentsMargins(4, 4, 4, 4) - // Filters itself. + // Filters itself. - // Hide offline servers checkbox. - m.all_servers_hide_offline = widgets.NewQCheckBox(nil) - m.all_servers_hide_offline.SetText(ctx.Translator.Translate("Hide offline servers", nil)) - m.all_servers_hide_offline.SetSizePolicy(filters_size_policy) - serverspagewidget_filters_layout.AddWidget(m.all_servers_hide_offline, 0, core.Qt__AlignTop) - // Restore value of hide offline servers checkbox. - // Set to checked for new installations. - all_servers_hide_offline_cb_val, ok := ctx.Cfg.Cfg["/serverslist/all_servers/hide_offline"] - if !ok { - m.all_servers_hide_offline.SetCheckState(2) - } else { - if all_servers_hide_offline_cb_val == "1" { - m.all_servers_hide_offline.SetCheckState(2) - } - } + // Hide offline servers checkbox. + m.all_servers_hide_offline = widgets.NewQCheckBox(nil) + m.all_servers_hide_offline.SetText(ctx.Translator.Translate("Hide offline servers", nil)) + m.all_servers_hide_offline.SetSizePolicy(filters_size_policy) + serverspagewidget_filters_layout.AddWidget(m.all_servers_hide_offline, 0, core.Qt__AlignTop) + // Restore value of hide offline servers checkbox. + // Set to checked for new installations. + all_servers_hide_offline_cb_val, ok := ctx.Cfg.Cfg["/serverslist/all_servers/hide_offline"] + if !ok { + m.all_servers_hide_offline.SetCheckState(2) + } else { + if all_servers_hide_offline_cb_val == "1" { + m.all_servers_hide_offline.SetCheckState(2) + } + } - // Hide private servers. - m.all_servers_hide_private = widgets.NewQCheckBox(nil) - m.all_servers_hide_private.SetText(ctx.Translator.Translate("Hide private servers", nil)) - m.all_servers_hide_private.SetSizePolicy(filters_size_policy) - serverspagewidget_filters_layout.AddWidget(m.all_servers_hide_private, 0, core.Qt__AlignTop) - // Restore checkbox value. - all_servers_hide_private_cb_val, ok := ctx.Cfg.Cfg["/serverslist/all_servers/hide_private"] - if !ok { - m.all_servers_hide_private.SetCheckState(2) - } else { - if all_servers_hide_private_cb_val == "1" { - m.all_servers_hide_private.SetCheckState(2) - } - } + // Hide private servers. + m.all_servers_hide_private = widgets.NewQCheckBox(nil) + m.all_servers_hide_private.SetText(ctx.Translator.Translate("Hide private servers", nil)) + m.all_servers_hide_private.SetSizePolicy(filters_size_policy) + serverspagewidget_filters_layout.AddWidget(m.all_servers_hide_private, 0, core.Qt__AlignTop) + // Restore checkbox value. + all_servers_hide_private_cb_val, ok := ctx.Cfg.Cfg["/serverslist/all_servers/hide_private"] + if !ok { + m.all_servers_hide_private.SetCheckState(2) + } else { + if all_servers_hide_private_cb_val == "1" { + m.all_servers_hide_private.SetCheckState(2) + } + } - // Game version. - m.all_servers_version = widgets.NewQComboBox(nil) - m.all_servers_version.SetSizePolicy(filters_size_policy) - serverspagewidget_filters_layout.AddWidget(m.all_servers_version, 0, core.Qt__AlignTop) - // Fill game version combobox with supported versions. - m.all_servers_version.AddItems(common.SUPPORTED_URT_VERSIONS) + // Game version. + m.all_servers_version = widgets.NewQComboBox(nil) + m.all_servers_version.SetSizePolicy(filters_size_policy) + serverspagewidget_filters_layout.AddWidget(m.all_servers_version, 0, core.Qt__AlignTop) + // Fill game version combobox with supported versions. + m.all_servers_version.AddItems(common.SUPPORTED_URT_VERSIONS) - // Game mode. - m.all_servers_gamemode = widgets.NewQComboBox(nil) - m.all_servers_gamemode.SetSizePolicy(filters_size_policy) - serverspagewidget_filters_layout.AddWidget(m.all_servers_gamemode, 0, core.Qt__AlignTop) - // Fill game mode with supported gamemodes. - // First - create sorted gamemodes keys slice. - gm_keys := make([]int, 0, len(m.gamemodes)) - for k, _ := range m.gamemodes { - ki, _ := strconv.Atoi(k) - gm_keys = append(gm_keys, ki) - } - sort.Ints(gm_keys) - // Create a strings slice with gamemodes, using sorted keys. - gmodes := make([]string, 0, len(m.gamemodes)) - // Add "All gamemodes" as first gamemode :) - gmodes = append(gmodes, ctx.Translator.Translate("All gamemodes", nil)) - for i := range gm_keys { - ks := strconv.Itoa(gm_keys[i]) - gmodes = append(gmodes, m.gamemodes[ks]) - } - m.all_servers_gamemode.AddItems(gmodes) + // Game mode. + m.all_servers_gamemode = widgets.NewQComboBox(nil) + m.all_servers_gamemode.SetSizePolicy(filters_size_policy) + serverspagewidget_filters_layout.AddWidget(m.all_servers_gamemode, 0, core.Qt__AlignTop) + // Fill game mode with supported gamemodes. + // First - create sorted gamemodes keys slice. + gm_keys := make([]int, 0, len(m.gamemodes)) + for k, _ := range m.gamemodes { + ki, _ := strconv.Atoi(k) + gm_keys = append(gm_keys, ki) + } + sort.Ints(gm_keys) + // Create a strings slice with gamemodes, using sorted keys. + gmodes := make([]string, 0, len(m.gamemodes)) + // Add "All gamemodes" as first gamemode :) + gmodes = append(gmodes, ctx.Translator.Translate("All gamemodes", nil)) + for i := range gm_keys { + ks := strconv.Itoa(gm_keys[i]) + gmodes = append(gmodes, m.gamemodes[ks]) + } + m.all_servers_gamemode.AddItems(gmodes) - // After creating filters - add spacer to move them on top of widget. - all_servers_filters_spacer := widgets.NewQSpacerItem(6, 6, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Expanding) - serverspagewidget_filters_layout.AddSpacerItem(all_servers_filters_spacer) + // After creating filters - add spacer to move them on top of widget. + all_servers_filters_spacer := widgets.NewQSpacerItem(6, 6, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Expanding) + serverspagewidget_filters_layout.AddSpacerItem(all_servers_filters_spacer) - ////////////////////////////////////////////////// - // Favorites page. - ////////////////////////////////////////////////// - favoritespagewidget := widgets.NewQWidget(nil, core.Qt__Widget) - favoritespagewidget_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Expanding, widgets.QSizePolicy__Expanding, widgets.QSizePolicy__DefaultType) - favoritespagewidget.SetSizePolicy(favoritespagewidget_policy) - m.tabs.AddTab(favoritespagewidget, ctx.Translator.Translate("Favorites", nil)) - favoritespagewidget_layout := widgets.NewQHBoxLayout() - favoritespagewidget_layout.SetContentsMargins(4, 4, 4, 4) - favoritespagewidget.SetLayout(favoritespagewidget_layout) + ////////////////////////////////////////////////// + // Favorites page. + ////////////////////////////////////////////////// + favoritespagewidget := widgets.NewQWidget(nil, core.Qt__Widget) + favoritespagewidget_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Expanding, widgets.QSizePolicy__Expanding, widgets.QSizePolicy__DefaultType) + favoritespagewidget.SetSizePolicy(favoritespagewidget_policy) + m.tabs.AddTab(favoritespagewidget, ctx.Translator.Translate("Favorites", nil)) + favoritespagewidget_layout := widgets.NewQHBoxLayout() + favoritespagewidget_layout.SetContentsMargins(4, 4, 4, 4) + favoritespagewidget.SetLayout(favoritespagewidget_layout) - // Favorites list. - m.fav_servers = widgets.NewQTreeView(nil) - favoritespagewidget_layout.AddWidget(m.fav_servers, 0, core.Qt__AlignHCenter & core.Qt__AlignTop) + // Favorites list. + m.fav_servers = widgets.NewQTreeView(nil) + favoritespagewidget_layout.AddWidget(m.fav_servers, 0, core.Qt__AlignHCenter&core.Qt__AlignTop) - // Favorites list filters widget. - favoritespagewidget_filters_widget := widgets.NewQWidget(nil, core.Qt__Widget) - favoritespagewidget_filters_widget_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__DefaultType) - favoritespagewidget_filters_widget.SetSizePolicy(favoritespagewidget_filters_widget_policy) - favoritespagewidget_layout.AddWidget(favoritespagewidget_filters_widget, 0, core.Qt__AlignRight & core.Qt__AlignTop) + // Favorites list filters widget. + favoritespagewidget_filters_widget := widgets.NewQWidget(nil, core.Qt__Widget) + favoritespagewidget_filters_widget_policy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__DefaultType) + favoritespagewidget_filters_widget.SetSizePolicy(favoritespagewidget_filters_widget_policy) + favoritespagewidget_layout.AddWidget(favoritespagewidget_filters_widget, 0, core.Qt__AlignRight&core.Qt__AlignTop) - // Favorites list filters layout. - favoritespagewidget_filters_layout := widgets.NewQVBoxLayout() - favoritespagewidget_filters_widget.SetLayout(favoritespagewidget_filters_layout) - favoritespagewidget_filters_layout.SetContentsMargins(4, 4, 4, 4) + // Favorites list filters layout. + favoritespagewidget_filters_layout := widgets.NewQVBoxLayout() + favoritespagewidget_filters_widget.SetLayout(favoritespagewidget_filters_layout) + favoritespagewidget_filters_layout.SetContentsMargins(4, 4, 4, 4) - // Filters itself. + // Filters itself. - // Hide offline servers checkbox. - m.fav_servers_hide_offline = widgets.NewQCheckBox(nil) - m.fav_servers_hide_offline.SetText(ctx.Translator.Translate("Hide offline servers", nil)) - m.fav_servers_hide_offline.SetSizePolicy(filters_size_policy) - favoritespagewidget_filters_layout.AddWidget(m.fav_servers_hide_offline, 0, core.Qt__AlignTop) - // Restore it's value. - favorite_servers_hide_offline_cb_val, ok := ctx.Cfg.Cfg["/serverslist/favorite/hide_offline"] - if !ok { - m.fav_servers_hide_offline.SetCheckState(2) - } else { - if favorite_servers_hide_offline_cb_val == "1" { - m.fav_servers_hide_offline.SetCheckState(2) - } - } + // Hide offline servers checkbox. + m.fav_servers_hide_offline = widgets.NewQCheckBox(nil) + m.fav_servers_hide_offline.SetText(ctx.Translator.Translate("Hide offline servers", nil)) + m.fav_servers_hide_offline.SetSizePolicy(filters_size_policy) + favoritespagewidget_filters_layout.AddWidget(m.fav_servers_hide_offline, 0, core.Qt__AlignTop) + // Restore it's value. + favorite_servers_hide_offline_cb_val, ok := ctx.Cfg.Cfg["/serverslist/favorite/hide_offline"] + if !ok { + m.fav_servers_hide_offline.SetCheckState(2) + } else { + if favorite_servers_hide_offline_cb_val == "1" { + m.fav_servers_hide_offline.SetCheckState(2) + } + } - // Hide private servers. - m.fav_servers_hide_private = widgets.NewQCheckBox(nil) - m.fav_servers_hide_private.SetText(ctx.Translator.Translate("Hide private servers", nil)) - m.fav_servers_hide_private.SetSizePolicy(filters_size_policy) - favoritespagewidget_filters_layout.AddWidget(m.fav_servers_hide_private, 0, core.Qt__AlignTop) - fav_servers_hide_private_cb_val, ok := ctx.Cfg.Cfg["/serverslist/favorite/hide_private"] - if !ok { - m.fav_servers_hide_private.SetCheckState(2) - } else { - if fav_servers_hide_private_cb_val == "1" { - m.fav_servers_hide_private.SetCheckState(2) - } - } + // Hide private servers. + m.fav_servers_hide_private = widgets.NewQCheckBox(nil) + m.fav_servers_hide_private.SetText(ctx.Translator.Translate("Hide private servers", nil)) + m.fav_servers_hide_private.SetSizePolicy(filters_size_policy) + favoritespagewidget_filters_layout.AddWidget(m.fav_servers_hide_private, 0, core.Qt__AlignTop) + fav_servers_hide_private_cb_val, ok := ctx.Cfg.Cfg["/serverslist/favorite/hide_private"] + if !ok { + m.fav_servers_hide_private.SetCheckState(2) + } else { + if fav_servers_hide_private_cb_val == "1" { + m.fav_servers_hide_private.SetCheckState(2) + } + } - // Game version. - m.fav_servers_version = widgets.NewQComboBox(nil) - m.fav_servers_version.SetSizePolicy(filters_size_policy) - favoritespagewidget_filters_layout.AddWidget(m.fav_servers_version, 0, core.Qt__AlignTop) - // Fill game version combobox with supported versions. - m.fav_servers_version.AddItems(common.SUPPORTED_URT_VERSIONS) + // Game version. + m.fav_servers_version = widgets.NewQComboBox(nil) + m.fav_servers_version.SetSizePolicy(filters_size_policy) + favoritespagewidget_filters_layout.AddWidget(m.fav_servers_version, 0, core.Qt__AlignTop) + // Fill game version combobox with supported versions. + m.fav_servers_version.AddItems(common.SUPPORTED_URT_VERSIONS) - // Game mode. - m.fav_servers_gamemode = widgets.NewQComboBox(nil) - m.fav_servers_gamemode.SetSizePolicy(filters_size_policy) - favoritespagewidget_filters_layout.AddWidget(m.fav_servers_gamemode, 0, core.Qt__AlignTop) - // Fill game mode with supported gamemodes. - // As we have previously created this list - reuse it. - m.fav_servers_gamemode.AddItems(gmodes) + // Game mode. + m.fav_servers_gamemode = widgets.NewQComboBox(nil) + m.fav_servers_gamemode.SetSizePolicy(filters_size_policy) + favoritespagewidget_filters_layout.AddWidget(m.fav_servers_gamemode, 0, core.Qt__AlignTop) + // Fill game mode with supported gamemodes. + // As we have previously created this list - reuse it. + m.fav_servers_gamemode.AddItems(gmodes) - // After creating filters - add spacer to move them on top of widget. - fav_servers_filters_spacer := widgets.NewQSpacerItem(6, 6, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Expanding) - favoritespagewidget_filters_layout.AddSpacerItem(fav_servers_filters_spacer) + // After creating filters - add spacer to move them on top of widget. + fav_servers_filters_spacer := widgets.NewQSpacerItem(6, 6, widgets.QSizePolicy__Minimum, widgets.QSizePolicy__Expanding) + favoritespagewidget_filters_layout.AddSpacerItem(fav_servers_filters_spacer) } func (m *MainWindow) initializeToolbar() { - m.toolbar = widgets.NewQToolBar("Main Toolbar", m.window) - m.window.AddToolBar(core.Qt__TopToolBarArea, m.toolbar) + m.toolbar = widgets.NewQToolBar("Main Toolbar", m.window) + m.window.AddToolBar(core.Qt__TopToolBarArea, m.toolbar) } diff --git a/ui/qt5/mainwindow_init_menu_mac.go b/ui/qt5/mainwindow_init_menu_mac.go index 7091c9b..949aa01 100644 --- a/ui/qt5/mainwindow_init_menu_mac.go +++ b/ui/qt5/mainwindow_init_menu_mac.go @@ -12,61 +12,61 @@ package ui import ( - // stdlib - //"fmt" - //"os" - //"runtime" + // stdlib + //"fmt" + //"os" + //"runtime" - // Qt5 - "github.com/therecipe/qt/widgets" + // Qt5 + "github.com/therecipe/qt/widgets" ) func (m *MainWindow) initializeMenu() { - m.mainmenu = widgets.NewQMenuBar(nil) + m.mainmenu = widgets.NewQMenuBar(nil) - ////////////////////////////////////////////////// - // File menu. - ////////////////////////////////////////////////// - filemenu := widgets.NewQMenu2("&File", nil) + ////////////////////////////////////////////////// + // File menu. + ////////////////////////////////////////////////// + filemenu := widgets.NewQMenu2("&File", nil) - // Options action. - file_options := filemenu.AddAction("&Options") - file_options.SetMenuRole(widgets.QAction__PreferencesRole) - file_options.ConnectTriggered(m.showOptionsDialog) + // Options action. + file_options := filemenu.AddAction("&Options") + file_options.SetMenuRole(widgets.QAction__PreferencesRole) + file_options.ConnectTriggered(m.showOptionsDialog) - // Separator :) - filemenu.AddSeparator() + // Separator :) + filemenu.AddSeparator() - // Exit URTrator. - file_exit := filemenu.AddAction("&Exit") - file_exit.SetMenuRole(widgets.QAction__QuitRole) - file_exit.ConnectTriggered(m.close) + // Exit URTrator. + file_exit := filemenu.AddAction("&Exit") + file_exit.SetMenuRole(widgets.QAction__QuitRole) + file_exit.ConnectTriggered(m.close) - m.mainmenu.AddMenu(filemenu) - ////////////////////////////////////////////////// - // About menu - ////////////////////////////////////////////////// - aboutmenu := widgets.NewQMenu2("&Help", nil) + m.mainmenu.AddMenu(filemenu) + ////////////////////////////////////////////////// + // About menu + ////////////////////////////////////////////////// + aboutmenu := widgets.NewQMenu2("&Help", nil) - // About URTrator. - about_about := aboutmenu.AddAction("&About URTrator...") - about_about.SetMenuRole(widgets.QAction__AboutRole) - about_about.ConnectTriggered(m.showAboutDialog) + // About URTrator. + about_about := aboutmenu.AddAction("&About URTrator...") + about_about.SetMenuRole(widgets.QAction__AboutRole) + about_about.ConnectTriggered(m.showAboutDialog) - // About Qt. - about_about_qt := aboutmenu.AddAction("About &Qt...") - about_about_qt.SetMenuRole(widgets.QAction__AboutQtRole) - about_about_qt.ConnectTriggered(m.showAboutQtDialog) + // About Qt. + about_about_qt := aboutmenu.AddAction("About &Qt...") + about_about_qt.SetMenuRole(widgets.QAction__AboutQtRole) + about_about_qt.ConnectTriggered(m.showAboutQtDialog) - // Separator :) - aboutmenu.AddSeparator() + // Separator :) + aboutmenu.AddSeparator() - // Drop database data. - about_drop_database := aboutmenu.AddAction("&Drop database...") - //about_drop_database.SetMenuRole(widgets.QAction__ApplicationSpecificRole) - about_drop_database.ConnectTriggered(m.dropDatabasesData) + // Drop database data. + about_drop_database := aboutmenu.AddAction("&Drop database...") + //about_drop_database.SetMenuRole(widgets.QAction__ApplicationSpecificRole) + about_drop_database.ConnectTriggered(m.dropDatabasesData) - m.mainmenu.AddMenu(aboutmenu) + m.mainmenu.AddMenu(aboutmenu) - m.window.SetMenuBar(m.mainmenu) + m.window.SetMenuBar(m.mainmenu) }