Skip to content

Commit

Permalink
wxGUI/nviz: fix showing scrollbars on the Data, Appearance, Analysis …
Browse files Browse the repository at this point in the history
…page (tab) (#3250)
  • Loading branch information
tmszi committed May 2, 2024
1 parent 24f49dc commit 943de90
Showing 1 changed file with 110 additions and 15 deletions.
125 changes: 110 additions & 15 deletions gui/wxpython/nviz/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,11 +200,32 @@ def LoadSettings(self):

def OnPageChanged(self, event):
new = event.GetSelection()
# self.ChangeSelection(new)
# Data, Appearance, Analysis page
if new in (1, 2, 3):
foldpanel = self.GetPage(new).GetChildren()[0]
wx.CallLater(100, self.UpdateScrolling, (foldpanel,))
pages = {
# Data page
1: {
"expand": lambda: self._expandFoldPanelBarPanel(
foldPanelBar=self.foldpanelData,
),
"foldPanelBar": self.foldpanelData,
},
# Appearance page
2: {
"expand": lambda: self._expandFoldPanelBarPanel(
foldPanelBar=self.foldpanelAppear,
),
"foldPanelBar": self.foldpanelAppear,
},
# Analysis page
3: {
"expand": lambda: self._expandFoldPanelBarPanel(
foldPanelBar=self.foldpanelAnalysis,
),
"foldPanelBar": self.foldpanelAnalysis,
},
}
if new in pages.keys():
pages[new]["expand"]()
wx.CallAfter(self.UpdateScrolling, (pages[new]["foldPanelBar"],))

def PostViewEvent(self, zExag=False):
"""Change view settings"""
Expand Down Expand Up @@ -235,9 +256,54 @@ def UpdateScrolling(self, foldpanels):
"""Update scrollbars in foldpanel"""
for foldpanel in foldpanels:
length = foldpanel.GetPanelsLength(collapsed=0, expanded=0)
# virtual width is set to fixed value to suppress GTK warning
foldpanel.GetParent().SetVirtualSize((100, length[2]))
foldpanel.GetParent().Layout()
# Show scrollbars
for panelIdx in range(foldpanel.GetCount()):
# Nested ScrolledPanel widget with horizontal scrollbar
scrolledPanel = (
foldpanel.GetFoldPanel(panelIdx).GetParent().GetGrandParent()
)
width = self.GetSize()[0]
if sys.platform in ("darwin", "win32"):
width -= 60 # 60px right margin to show scrollbar
scrolledPanel.SetVirtualSize(width=width, height=length[2])
scrolledPanel.Layout()

def _expandFoldPanelBarPanel(self, foldPanelBar, expandFoldPanelBarIdx=0):
"""
Expand FoldPanelBar widget panel
Fix expanding FoldPanelBar widget panel (fist panel), because using
AddFoldPanel method with collapsed=True param arg cause the expanding
panel to render incorrectly on wxMAC, wxMSW.
:param obj foldPanelBar: FoldPanelBar widget obj instance
:param int expandFoldpanelbarIdx: FoldPanelBar widget panel index with
default value 0 (first panel)
"""
foldPanelsCount = foldPanelBar.GetCount()
expanded = []
for panelIdx in range(foldPanelsCount):
foldPanel = foldPanelBar.GetFoldPanel(panelIdx)
expanded.append(foldPanel.IsExpanded())
if not any(expanded):
foldPanelBar.Expand(foldPanelBar.GetFoldPanel(expandFoldPanelBarIdx))

def _resizeScrolledPanel(self, foldPanelBar, scrolledPanel, collapsed, expanded):
"""
Resize FoldPanelBar widget ScrolledPanel to show scrollbars
:param obj foldPanelBar: FolPanelBar widget obj instance
:param obj scrolledPanel: ScrolledPanel widget obj instance
:param int collapsed: number of collapsed panels of FoldPanelBar
widget
:param int expanded: number of expanded panels of FoldPanelBar
widget
"""
if expanded > 0:
foldPanelBar.Expand(foldPanelBar.GetFoldPanel(0))
length = foldPanelBar.GetPanelsLength(collapsed, expanded)
scrolledPanel.SetSize(self.GetSize()[0], length[2])
foldPanelBar.Collapse(foldPanelBar.GetFoldPanel(0))

def _createViewPage(self):
"""Create view settings page"""
Expand Down Expand Up @@ -661,8 +727,9 @@ def _createAnimationPage(self):

def _createDataPage(self):
"""Create data (surface, vector, volume) settings page"""
self.mainPanelData = ScrolledPanel(parent=self)
self.mainPanelData = SP.ScrolledPanel(parent=self)
self.mainPanelData.SetupScrolling(scroll_x=False)
self.mainPanelData.AlwaysShowScrollbars(hflag=False)
try: # wxpython <= 2.8.10
self.foldpanelData = fpb.FoldPanelBar(
parent=self.mainPanelData,
Expand All @@ -685,7 +752,7 @@ def _createDataPage(self):
self.foldpanelData.Bind(fpb.EVT_CAPTIONBAR, self.OnPressCaption)

# # surface page
surfacePanel = self.foldpanelData.AddFoldPanel(_("Surface"), collapsed=False)
surfacePanel = self.foldpanelData.AddFoldPanel(_("Surface"), collapsed=True)
self.foldpanelData.AddFoldPanelWindow(
surfacePanel,
window=self._createSurfacePage(parent=surfacePanel),
Expand Down Expand Up @@ -729,13 +796,20 @@ def _createDataPage(self):
self.mainPanelData.Layout()
self.mainPanelData.Fit()

self._resizeScrolledPanel(
foldPanelBar=self.foldpanelData,
scrolledPanel=self.mainPanelData,
collapsed=self.foldpanelData.GetCount() - 1,
expanded=1,
)

return self.mainPanelData

def _createAppearancePage(self):
"""Create data (surface, vector, volume) settings page"""
self.mainPanelAppear = ScrolledPanel(parent=self)
self.mainPanelAppear = SP.ScrolledPanel(parent=self)
self.mainPanelAppear.SetupScrolling(scroll_x=False)

self.mainPanelAppear.AlwaysShowScrollbars(hflag=False)
try: # wxpython <= 2.8.10
self.foldpanelAppear = fpb.FoldPanelBar(
parent=self.mainPanelAppear,
Expand All @@ -757,7 +831,7 @@ def _createAppearancePage(self):

self.foldpanelAppear.Bind(fpb.EVT_CAPTIONBAR, self.OnPressCaption)
# light page
lightPanel = self.foldpanelAppear.AddFoldPanel(_("Lighting"), collapsed=False)
lightPanel = self.foldpanelAppear.AddFoldPanel(_("Lighting"), collapsed=True)
self.foldpanelAppear.AddFoldPanelWindow(
lightPanel,
window=self._createLightPage(parent=lightPanel),
Expand Down Expand Up @@ -789,19 +863,28 @@ def _createAppearancePage(self):
self.mainPanelAppear.SetSizer(sizer)
self.mainPanelAppear.Layout()
self.mainPanelAppear.Fit()

self._resizeScrolledPanel(
foldPanelBar=self.foldpanelAppear,
scrolledPanel=self.mainPanelAppear,
collapsed=self.foldpanelAppear.GetCount() - 1,
expanded=1,
)

return self.mainPanelAppear

def _createAnalysisPage(self):
"""Create data analysis (cutting planes, ...) page"""
self.mainPanelAnalysis = ScrolledPanel(parent=self)
self.mainPanelAnalysis = SP.ScrolledPanel(parent=self)
self.mainPanelAnalysis.SetupScrolling(scroll_x=False)
self.mainPanelAnalysis.AlwaysShowScrollbars(hflag=False)
self.foldpanelAnalysis = fpb.FoldPanelBar(
parent=self.mainPanelAnalysis, id=wx.ID_ANY, style=fpb.FPB_SINGLE_FOLD
)
self.foldpanelAnalysis.Bind(fpb.EVT_CAPTIONBAR, self.OnPressCaption)
# cutting planes page
cplanePanel = self.foldpanelAnalysis.AddFoldPanel(
_("Cutting planes"), collapsed=False
_("Cutting planes"), collapsed=True
)
self.foldpanelAnalysis.AddFoldPanelWindow(
cplanePanel,
Expand All @@ -814,6 +897,14 @@ def _createAnalysisPage(self):
self.mainPanelAnalysis.SetSizer(sizer)
self.mainPanelAnalysis.Layout()
self.mainPanelAnalysis.Fit()

self._resizeScrolledPanel(
foldPanelBar=self.foldpanelAnalysis,
scrolledPanel=self.mainPanelAnalysis,
collapsed=self.foldpanelAnalysis.GetCount() - 1,
expanded=1,
)

return self.mainPanelAnalysis

def _createSurfacePage(self, parent):
Expand Down Expand Up @@ -1377,6 +1468,7 @@ def _createCPlanePage(self, parent):
pageSizer.Add(boxSizer, proportion=0, flag=wx.EXPAND)

panel.SetSizer(pageSizer)
panel.Layout()
panel.Fit()
panel.SetupScrolling(scroll_y=False)

Expand Down Expand Up @@ -1470,6 +1562,7 @@ def _createConstantPage(self, parent):
pageSizer.Add(boxSizer, proportion=0, flag=wx.EXPAND | wx.ALL, border=3)

panel.SetSizer(pageSizer)
panel.Layout()
panel.Fit()
panel.SetupScrolling(scroll_y=False)

Expand Down Expand Up @@ -1903,6 +1996,7 @@ def _createVectorPage(self, parent):
)

panel.SetSizer(pageSizer)
panel.Layout()
panel.Fit()
panel.SetupScrolling(scroll_y=False)

Expand Down Expand Up @@ -2118,6 +2212,7 @@ def _createVolumePage(self, parent):
border=3,
)
panel.SetSizer(pageSizer)
panel.Layout()
panel.Fit()
panel.SetupScrolling(scroll_y=False)

Expand Down

0 comments on commit 943de90

Please sign in to comment.