Skip to content

Commit

Permalink
wxGUI: Default Single-Window size is too small (#3024)
Browse files Browse the repository at this point in the history
Maximize or set dimensions from user settings.
  • Loading branch information
lindakarlovska authored and petrasovaa committed Jun 21, 2023
1 parent 5aaf500 commit 105b05b
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 41 deletions.
1 change: 1 addition & 0 deletions gui/wxpython/core/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ def _defaultSettings(self):
globalvar.MAP_WINDOW_SIZE[0],
globalvar.MAP_WINDOW_SIZE[1],
),
"dimSingleWindow": "1,1,1,1",
},
# workspace
"workspace": {
Expand Down
49 changes: 32 additions & 17 deletions gui/wxpython/gui_core/preferences.py
Original file line number Diff line number Diff line change
Expand Up @@ -1830,32 +1830,47 @@ def _updateSettings(self):
#
# update default window dimension
#
if (
self.settings.Get(group="general", key="defWindowPos", subkey="enabled")
is True
):
dim = ""
# layer manager
windows_pos = self.settings.Get(
group="general",
key="defWindowPos",
subkey="enabled",
)
single_window = self.settings.Get(
group="appearance",
key="singleWindow",
subkey="enabled",
)
if windows_pos:
# get dimension of main window
pos = self.parent.GetPosition()
size = self.parent.GetSize()
dim = "%d,%d,%d,%d" % (pos[0], pos[1], size[0], size[1])
# opened displays
dim = f"{pos[0]},{pos[1]},{size[0]},{size[1]}"

# extend dimension by dimensions of opened displays
for mapdisp in self._giface.GetAllMapDisplays():
pos = mapdisp.GetPosition()
size = mapdisp.GetSize()

# window size must be larger than zero, not minimized
# when mapdisp is inside single window (panel has no IsIconized), don't save dim
if (
hasattr(mapdisp, "IsIconized")
and not mapdisp.IsIconized()
and (size[0] > 0 and size[1] > 0)
# do not save dim when mapdisp is docked within single window
if (not mapdisp.IsDockable() or not mapdisp.IsDocked()) and (
size[0] > 0 and size[1] > 0
):
dim += ",%d,%d,%d,%d" % (pos[0], pos[1], size[0], size[1])
dim += f",{pos[0]},{pos[1]},{size[0]},{size[1]}"

self.settings.Set(
group="general", key="defWindowPos", subkey="dim", value=dim
)
if single_window:
# single window mode
self.settings.Set(
group="general",
key="defWindowPos",
subkey="dimSingleWindow",
value=dim,
)
else:
# multi window mode
self.settings.Set(
group="general", key="defWindowPos", subkey="dim", value=dim
)

return True

Expand Down
50 changes: 26 additions & 24 deletions gui/wxpython/main_window/frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def __init__(
id=wx.ID_ANY,
title=None,
workspace=None,
size=wx.Display().GetGeometry().GetSize(),
size=wx.GetClientDisplayRect().GetSize(),
style=wx.DEFAULT_FRAME_STYLE,
**kwargs,
):
Expand Down Expand Up @@ -173,30 +173,32 @@ def show_menu_errors(messages):

# use default window layout ?
if UserSettings.Get(group="general", key="defWindowPos", subkey="enabled"):
dim = UserSettings.Get(group="general", key="defWindowPos", subkey="dim")
try:
x, y = map(int, dim.split(",")[0:2])
w, h = map(int, dim.split(",")[2:4])
client_disp = wx.ClientDisplayRect()
if x == 1:
# Get client display x offset (OS panel)
x = client_disp[0]
if y == 1:
# Get client display y offset (OS panel)
y = client_disp[1]
self.SetPosition((x, y))
self.SetSize((w, h))
except Exception:
pass
self.Layout()
if w <= globalvar.GM_WINDOW_SIZE[0] or h <= globalvar.GM_WINDOW_SIZE[1]:
self.Fit()
single_window_dim = {
"group": "general",
"key": "defWindowPos",
"subkey": "dimSingleWindow",
}
dim = UserSettings.Get(**single_window_dim)
default_dim = UserSettings.Get(**single_window_dim, settings_type="default")

if dim != default_dim:
try:
x, y, w, h = map(int, dim.split(",")[:4])
client_disp = wx.ClientDisplayRect()
if x == 1:
# Get client display x offset (OS panel)
x = client_disp[0]
if y == 1:
# Get client display y offset (OS panel)
y = client_disp[1]
self.SetPosition((x, y))
self.SetSize((w, h))
except Exception:
pass
else:
self.Maximize(True)
else:
self.Layout()
self.Fit()
# does center (of screen) make sense for lmgr?
self.Centre()

self.Maximize(True)
self.Show()

# load workspace file if requested
Expand Down

0 comments on commit 105b05b

Please sign in to comment.