diff --git a/colorizer/colorizer_object.go b/colorizer/colorizer_object.go new file mode 100644 index 0000000..b144e8e --- /dev/null +++ b/colorizer/colorizer_object.go @@ -0,0 +1,62 @@ +// URTator - Urban Terror server browser and game launcher, written in +// Go. +// +// Copyright (c) 2016, Stanslav N. a.k.a pztrn (or p0z1tr0n) +// All rights reserved. +// +// Licensed under Terms and Conditions of GNU General Public License +// version 3 or any higher. +// ToDo: put full text of license here. +package colorizer + +import ( + // stdlib + "fmt" + "html" + "strings" +) + +type Colorizer struct { + // RAW colors to Pango relation. + colors map[string]string +} + +func (c *Colorizer) Fix(data string) string { + 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 += "" + html.EscapeString(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() +} + +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", + } +} diff --git a/colorizer/exported.go b/colorizer/exported.go new file mode 100644 index 0000000..3b0404c --- /dev/null +++ b/colorizer/exported.go @@ -0,0 +1,15 @@ +// URTator - Urban Terror server browser and game launcher, written in +// Go. +// +// Copyright (c) 2016, Stanslav N. a.k.a pztrn (or p0z1tr0n) +// All rights reserved. +// +// Licensed under Terms and Conditions of GNU General Public License +// version 3 or any higher. +// ToDo: put full text of license here. +package colorizer + +func New() *Colorizer { + c := Colorizer {} + return &c +} diff --git a/context/context_object.go b/context/context_object.go index 36965eb..01c9736 100644 --- a/context/context_object.go +++ b/context/context_object.go @@ -14,6 +14,7 @@ import ( "fmt" // local + "github.com/pztrn/urtrator/colorizer" "github.com/pztrn/urtrator/configuration" "github.com/pztrn/urtrator/database" "github.com/pztrn/urtrator/eventer" @@ -25,6 +26,8 @@ import ( ) type Context struct { + // Colors parser and prettifier. + Colorizer *colorizer.Colorizer // Configuration. Cfg *configuration.Config // Database. @@ -46,6 +49,11 @@ func (ctx *Context) Close() { gtk.MainQuit() } +func (ctx *Context) initializeColorizer() { + ctx.Colorizer = colorizer.New() + ctx.Colorizer.Initialize() +} + func (ctx *Context) initializeConfig() { ctx.Cfg = configuration.New() ctx.Cfg.Initialize() @@ -74,6 +82,7 @@ func (ctx *Context) initializeRequester() { func (ctx *Context) Initialize() { fmt.Println("Initializing application context...") + ctx.initializeColorizer() ctx.initializeConfig() ctx.initializeDatabase() ctx.initializeEventer() diff --git a/ui/mainwindow.go b/ui/mainwindow.go index b645bfa..b05ce0b 100644 --- a/ui/mainwindow.go +++ b/ui/mainwindow.go @@ -14,6 +14,7 @@ import ( "encoding/base64" "errors" "fmt" + "runtime" "strconv" "strings" @@ -277,11 +278,21 @@ func (m *MainWindow) editFavorite() { func (m *MainWindow) hideOfflineAllServers() { fmt.Println("(Un)Hiding offline servers in 'Servers' tab...") + if m.all_servers_hide_offline.GetActive() { + ctx.Cfg.Cfg["/serverslist/all_servers/hide_offline"] = "1" + } else { + ctx.Cfg.Cfg["/serverslist/all_servers/hide_offline"] = "0" + } ctx.Eventer.LaunchEvent("loadAllServers") } func (m *MainWindow) hideOfflineFavoriteServers() { fmt.Println("(Un)Hiding offline servers in 'Favorite' tab...") + if m.fav_servers_hide_offline.GetActive() { + ctx.Cfg.Cfg["/serverslist/favorite/hide_offline"] = "1" + } else { + ctx.Cfg.Cfg["/serverslist/favorite/hide_offline"] = "0" + } ctx.Eventer.LaunchEvent("loadFavoriteServers") } @@ -548,7 +559,7 @@ func (m *MainWindow) InitializeTabs() { m.all_servers.SetModel(m.all_servers_store) m.all_servers.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Status", gtk.NewCellRendererPixbuf(), "pixbuf", 0)) - all_srv_name_column := gtk.NewTreeViewColumnWithAttributes("Name", gtk.NewCellRendererText(), "text", 1) + all_srv_name_column := gtk.NewTreeViewColumnWithAttributes("Name", gtk.NewCellRendererText(), "markup", 1) all_srv_name_column.SetSortColumnId(1) m.all_servers.AppendColumn(all_srv_name_column) @@ -590,6 +601,9 @@ func (m *MainWindow) InitializeTabs() { m.all_servers_hide_offline.SetTooltipText("Hide offline servers on Servers tab") tab_all_srv_ctl_vbox.PackStart(m.all_servers_hide_offline, false, true, 5) m.all_servers_hide_offline.Clicked(m.hideOfflineAllServers) + if ctx.Cfg.Cfg["/serverslist/all_servers/hide_offline"] == "1" { + m.all_servers_hide_offline.SetActive(true) + } // Final separator. ctl_sep := gtk.NewVSeparator() @@ -606,7 +620,7 @@ func (m *MainWindow) InitializeTabs() { m.fav_servers.SetModel(m.fav_servers_store) m.fav_servers.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Status", gtk.NewCellRendererPixbuf(), "pixbuf", 0)) - fav_name_column := gtk.NewTreeViewColumnWithAttributes("Name", gtk.NewCellRendererText(), "text", 1) + fav_name_column := gtk.NewTreeViewColumnWithAttributes("Name", gtk.NewCellRendererText(), "markup", 1) fav_name_column.SetSortColumnId(1) m.fav_servers.AppendColumn(fav_name_column) @@ -643,6 +657,9 @@ func (m *MainWindow) InitializeTabs() { m.fav_servers_hide_offline.SetTooltipText("Hide offline servers on Favorites tab") tab_fav_srv_ctl_vbox.PackStart(m.fav_servers_hide_offline, false, true, 5) m.fav_servers_hide_offline.Clicked(m.hideOfflineFavoriteServers) + if ctx.Cfg.Cfg["/serverslist/favorite/hide_offline"] == "1" { + m.fav_servers_hide_offline.SetActive(true) + } // Final separator. ctl_fav_sep := gtk.NewVSeparator() @@ -704,26 +721,30 @@ func (m *MainWindow) initializeTrayIcon() { m.tray_icon.SetTitle("URTrator") m.tray_icon.SetTooltipText("URTrator is ready") - m.tray_menu = gtk.NewMenu() + // Tray menu is still buggy on windows, so skipping initialization, + // if OS is Windows. + if runtime.GOOS != "windows" { + m.tray_menu = gtk.NewMenu() - // Open/Close URTrator menu item. - open_close_item := gtk.NewMenuItemWithLabel("Show / Hide URTrator") - open_close_item.Connect("activate", m.showHide) - m.tray_menu.Append(open_close_item) + // Open/Close URTrator menu item. + open_close_item := gtk.NewMenuItemWithLabel("Show / Hide URTrator") + open_close_item.Connect("activate", m.showHide) + m.tray_menu.Append(open_close_item) - // Separator - sep1 := gtk.NewSeparatorMenuItem() - m.tray_menu.Append(sep1) + // Separator + sep1 := gtk.NewSeparatorMenuItem() + m.tray_menu.Append(sep1) - // Exit menu item. - exit_item := gtk.NewMenuItemWithLabel("Exit") - exit_item.Connect("activate", m.window.Destroy) - m.tray_menu.Append(exit_item) + // Exit menu item. + exit_item := gtk.NewMenuItemWithLabel("Exit") + exit_item.Connect("activate", m.window.Destroy) + m.tray_menu.Append(exit_item) - // Connect things. - m.tray_icon.Connect("activate", m.showHide) - m.tray_icon.Connect("popup-menu", m.showTrayMenu) - m.tray_menu.ShowAll() + // Connect things. + m.tray_icon.Connect("activate", m.showHide) + m.tray_icon.Connect("popup-menu", m.showTrayMenu) + m.tray_menu.ShowAll() + } } func (m *MainWindow) launchGame() error { @@ -857,7 +878,8 @@ func (m *MainWindow) loadAllServers() { } else { m.all_servers_store.Set(&iter, 0, gtk.NewImage().RenderIcon(gtk.STOCK_OK, gtk.ICON_SIZE_SMALL_TOOLBAR, "").GPixbuf) } - m.all_servers_store.Set(&iter, 1, srv.Name) + srv_name := ctx.Colorizer.Fix(srv.Name) + m.all_servers_store.Set(&iter, 1, srv_name) m.all_servers_store.Set(&iter, 2, m.gamemodes[srv.Gamemode]) m.all_servers_store.Set(&iter, 3, srv.Map) m.all_servers_store.Set(&iter, 4, srv.Players + "/" + srv.Maxplayers) @@ -890,7 +912,8 @@ func (m *MainWindow) loadFavoriteServers() { } else { m.fav_servers_store.Set(&iter, 0, gtk.NewImage().RenderIcon(gtk.STOCK_OK, gtk.ICON_SIZE_SMALL_TOOLBAR, "").GPixbuf) } - m.fav_servers_store.Set(&iter, 1, srv.Name) + srv_name := ctx.Colorizer.Fix(srv.Name) + m.fav_servers_store.Set(&iter, 1, srv_name) m.fav_servers_store.Set(&iter, 2, m.gamemodes[srv.Gamemode]) m.fav_servers_store.Set(&iter, 3, srv.Map) m.fav_servers_store.Set(&iter, 4, srv.Players + "/" + srv.Maxplayers) diff --git a/ui/server_info.go b/ui/server_info.go new file mode 100644 index 0000000..daccc3b --- /dev/null +++ b/ui/server_info.go @@ -0,0 +1,33 @@ +// URTator - Urban Terror server browser and game launcher, written in +// Go. +// +// Copyright (c) 2016, Stanslav N. a.k.a pztrn (or p0z1tr0n) +// All rights reserved. +// +// Licensed under Terms and Conditions of GNU General Public License +// version 3 or any higher. +// ToDo: put full text of license here. +package ui + +import ( + // stdlib + "fmt" + + // Local + //"github.com/pztrn/urtrator/datamodels" + + // Other + "github.com/mattn/go-gtk/gtk" + //"github.com/mattn/go-gtk/glib" +) + +type ServerInfoDialog struct { + // Window. + window *gtk.Window + // Main Vertical Box. + vbox *gtk.VBox +} + +func (sid *ServerInfoDialog) Initialize() { + fmt.Println("Showing server's information...") +}