Window and elements size and position saving and restore.
This commit is contained in:
parent
8e58104cfa
commit
dbf5b60ead
@ -87,6 +87,22 @@ type MainWindow struct {
|
|||||||
// Other
|
// Other
|
||||||
// Old profiles count.
|
// Old profiles count.
|
||||||
old_profiles_count int
|
old_profiles_count int
|
||||||
|
// Window size.
|
||||||
|
window_width int
|
||||||
|
window_height int
|
||||||
|
// Window position.
|
||||||
|
window_pos_x int
|
||||||
|
window_pos_y int
|
||||||
|
// Main pane delimiter position. It is calculated like:
|
||||||
|
//
|
||||||
|
// window_width - pane_position
|
||||||
|
//
|
||||||
|
// so we will get same right pane width even if we will resize
|
||||||
|
// main window. On resize and restore it will be set like:
|
||||||
|
//
|
||||||
|
// window_width - m.pane_negative_position
|
||||||
|
pane_negative_position int
|
||||||
|
|
||||||
|
|
||||||
// Flags.
|
// Flags.
|
||||||
// Window is hidden?
|
// Window is hidden?
|
||||||
@ -131,7 +147,25 @@ func (m *MainWindow) addToFavorites() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *MainWindow) checkMainPanePosition() {
|
||||||
|
m.pane_negative_position = m.window_width - m.hpane.GetPosition()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MainWindow) checkPositionAndSize() {
|
||||||
|
m.window.GetPosition(&m.window_pos_x, &m.window_pos_y)
|
||||||
|
m.window.GetSize(&m.window_width, &m.window_height)
|
||||||
|
|
||||||
|
m.hpane.SetPosition(m.window_width - m.pane_negative_position)
|
||||||
|
}
|
||||||
|
|
||||||
func (m *MainWindow) Close() {
|
func (m *MainWindow) Close() {
|
||||||
|
// Save window parameters.
|
||||||
|
ctx.Cfg.Cfg["/mainwindow/width"] = strconv.Itoa(m.window_width)
|
||||||
|
ctx.Cfg.Cfg["/mainwindow/height"] = strconv.Itoa(m.window_height)
|
||||||
|
ctx.Cfg.Cfg["/mainwindow/position_x"] = strconv.Itoa(m.window_pos_x)
|
||||||
|
ctx.Cfg.Cfg["/mainwindow/position_y"] = strconv.Itoa(m.window_pos_y)
|
||||||
|
ctx.Cfg.Cfg["/mainwindow/pane_negative_position"] = strconv.Itoa(m.pane_negative_position)
|
||||||
|
|
||||||
ctx.Close()
|
ctx.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -259,7 +293,6 @@ func (m *MainWindow) Initialize() {
|
|||||||
m.window.SetTitle("URTrator")
|
m.window.SetTitle("URTrator")
|
||||||
m.window.Connect("destroy", m.Close)
|
m.window.Connect("destroy", m.Close)
|
||||||
m.vbox = gtk.NewVBox(false, 0)
|
m.vbox = gtk.NewVBox(false, 0)
|
||||||
m.hpane = gtk.NewHPaned()
|
|
||||||
|
|
||||||
// Load program icon from base64.
|
// Load program icon from base64.
|
||||||
icon_bytes, _ := base64.StdEncoding.DecodeString(common.Logo)
|
icon_bytes, _ := base64.StdEncoding.DecodeString(common.Logo)
|
||||||
@ -268,10 +301,38 @@ func (m *MainWindow) Initialize() {
|
|||||||
logo = icon_pixbuf.GetPixbuf()
|
logo = icon_pixbuf.GetPixbuf()
|
||||||
m.window.SetIcon(logo)
|
m.window.SetIcon(logo)
|
||||||
|
|
||||||
// Default window size.
|
m.window.Connect("configure-event", m.checkPositionAndSize)
|
||||||
// ToDo: size and position restoring.
|
|
||||||
m.window.SetSizeRequest(1000, 600)
|
// Restoring window position.
|
||||||
m.window.SetPosition(gtk.WIN_POS_CENTER)
|
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)
|
||||||
|
m.window.Move(win_pos_x, win_pos_y)
|
||||||
|
|
||||||
|
// 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.SetDefaultSize(m.window_width, m.window_height)
|
||||||
|
|
||||||
// Dialogs initialization.
|
// Dialogs initialization.
|
||||||
m.options_dialog = &OptionsDialog{}
|
m.options_dialog = &OptionsDialog{}
|
||||||
@ -282,6 +343,22 @@ func (m *MainWindow) Initialize() {
|
|||||||
// Toolbar.
|
// Toolbar.
|
||||||
m.InitializeToolbar()
|
m.InitializeToolbar()
|
||||||
|
|
||||||
|
m.hpane = gtk.NewHPaned()
|
||||||
|
m.vbox.PackStart(m.hpane, true, true, 5)
|
||||||
|
m.hpane.Connect("event", m.checkMainPanePosition)
|
||||||
|
|
||||||
|
// Restore pane 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)
|
||||||
|
m.hpane.SetPosition(m.window_width - pane_negative_pos)
|
||||||
|
} else {
|
||||||
|
var w, h int = 0, 0
|
||||||
|
m.window.GetSize(&w, &h)
|
||||||
|
m.hpane.SetPosition(w - 150)
|
||||||
|
}
|
||||||
|
|
||||||
// Tabs initialization.
|
// Tabs initialization.
|
||||||
m.InitializeTabs()
|
m.InitializeTabs()
|
||||||
|
|
||||||
@ -293,13 +370,6 @@ func (m *MainWindow) Initialize() {
|
|||||||
m.initializeTrayIcon()
|
m.initializeTrayIcon()
|
||||||
}
|
}
|
||||||
|
|
||||||
m.vbox.PackStart(m.hpane, true, true, 5)
|
|
||||||
|
|
||||||
// Temporary hack.
|
|
||||||
var w, h int = 0, 0
|
|
||||||
m.window.GetSize(&w, &h)
|
|
||||||
m.hpane.SetPosition(w - 150)
|
|
||||||
|
|
||||||
// Game profiles and launch button.
|
// Game profiles and launch button.
|
||||||
profile_and_launch_hbox := gtk.NewHBox(false, 0)
|
profile_and_launch_hbox := gtk.NewHBox(false, 0)
|
||||||
m.vbox.PackStart(profile_and_launch_hbox, false, true, 5)
|
m.vbox.PackStart(profile_and_launch_hbox, false, true, 5)
|
||||||
@ -852,11 +922,12 @@ func (m *MainWindow) loadProfiles() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *MainWindow) showHide() {
|
func (m *MainWindow) showHide() {
|
||||||
// ToDo: set window position on restore. Window loosing it on
|
|
||||||
// multimonitor configurations.
|
|
||||||
if m.hidden {
|
if m.hidden {
|
||||||
m.window.Show()
|
m.window.Show()
|
||||||
m.hidden = false
|
m.hidden = false
|
||||||
|
// Set window position on restore. Window loosing it on
|
||||||
|
// multimonitor configurations.
|
||||||
|
m.window.Move(m.window_pos_x, m.window_pos_y)
|
||||||
} else {
|
} else {
|
||||||
m.window.Hide()
|
m.window.Hide()
|
||||||
m.hidden = true
|
m.hidden = true
|
||||||
|
Reference in New Issue
Block a user