From dff1e5b0d7b661e2c1ba74bed7ec5466d47434a9 Mon Sep 17 00:00:00 2001 From: Thiago Franco de Moraes Date: Thu, 21 May 2020 17:11:26 -0300 Subject: [PATCH] wxpython 4.1 and remove mixin from ListCtrl (#237) --- app.py | 6 +++++- invesalius/data/viewer_slice.py | 8 ++++++-- invesalius/gui/brain_seg_dialog.py | 10 +++++----- invesalius/gui/data_notebook.py | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------- invesalius/gui/default_viewers.py | 4 ++-- invesalius/gui/dialogs.py | 35 +++++++++++++++++------------------ invesalius/gui/frame.py | 2 +- invesalius/gui/preferences.py | 4 ++-- invesalius/gui/task_navigator.py | 8 ++++---- invesalius/gui/task_slice.py | 2 +- invesalius/gui/task_surface.py | 24 ++++++++++++++++++++---- invesalius/gui/widgets/slice_menu.py | 2 +- 12 files changed, 165 insertions(+), 117 deletions(-) diff --git a/app.py b/app.py index 2d4b509..165b42d 100644 --- a/app.py +++ b/app.py @@ -40,7 +40,11 @@ if sys.platform == 'win32': # #wxversion.ensureMinimal('2.8-unicode', optionsRequired=True) # #wxversion.select('2.8-unicode', optionsRequired=True) # # wxversion.ensureMinimal('4.0') - + +# Forcing to use X11, OpenGL in wxPython doesn't work with Wayland. +if sys.platform not in ("win32", "darwin"): + os.environ["GDK_BACKEND"] = "x11" + import wx try: from wx.adv import SplashScreen diff --git a/invesalius/data/viewer_slice.py b/invesalius/data/viewer_slice.py index 53bec39..ec51539 100644 --- a/invesalius/data/viewer_slice.py +++ b/invesalius/data/viewer_slice.py @@ -1438,8 +1438,12 @@ class Viewer(wx.Panel): index = max_slice_number - 1 inverted = self.mip_ctrls.inverted.GetValue() border_size = self.mip_ctrls.border_spin.GetValue() - image = self.slice_.GetSlices(self.orientation, index, - self.number_slices, inverted, border_size) + try: + image = self.slice_.GetSlices(self.orientation, index, + self.number_slices, inverted, + border_size) + except IndexError: + return self.slice_data.actor.SetInputData(image) for actor in self.actors_by_slice_number[self.slice_data.number]: self.slice_data.renderer.RemoveActor(actor) diff --git a/invesalius/gui/brain_seg_dialog.py b/invesalius/gui/brain_seg_dialog.py index 0e02520..60762b4 100644 --- a/invesalius/gui/brain_seg_dialog.py +++ b/invesalius/gui/brain_seg_dialog.py @@ -115,7 +115,7 @@ class BrainSegmenterDialog(wx.Dialog): sizer_3.Add( self.sld_threshold, 1, - wx.ALIGN_CENTER | wx.BOTTOM | wx.EXPAND | wx.LEFT | wx.RIGHT, + wx.BOTTOM | wx.EXPAND | wx.LEFT | wx.RIGHT, 5, ) sizer_3.Add(self.txt_threshold, 0, wx.ALL, 5) @@ -128,15 +128,15 @@ class BrainSegmenterDialog(wx.Dialog): main_sizer.Add(time_sizer, 0, wx.EXPAND | wx.ALL, 5) sizer_buttons = wx.BoxSizer(wx.HORIZONTAL) sizer_buttons.Add( - self.btn_close, 0, wx.ALIGN_BOTTOM | wx.ALIGN_RIGHT | wx.ALL, 5 + self.btn_close, 0, wx.ALIGN_BOTTOM | wx.ALL, 5 ) sizer_buttons.Add( - self.btn_stop, 0, wx.ALIGN_BOTTOM | wx.ALIGN_RIGHT | wx.ALL, 5 + self.btn_stop, 0, wx.ALIGN_BOTTOM | wx.ALL, 5 ) sizer_buttons.Add( - self.btn_segment, 0, wx.ALIGN_BOTTOM | wx.ALIGN_RIGHT | wx.ALL, 5 + self.btn_segment, 0, wx.ALIGN_BOTTOM | wx.ALL, 5 ) - main_sizer.Add(sizer_buttons, 0, wx.ALIGN_BOTTOM | wx.ALIGN_RIGHT | wx.ALL, 0) + main_sizer.Add(sizer_buttons, 0, wx.ALIGN_RIGHT | wx.ALL, 0) self.SetSizer(main_sizer) main_sizer.Fit(self) main_sizer.SetSizeHints(self) diff --git a/invesalius/gui/data_notebook.py b/invesalius/gui/data_notebook.py index 4052ba9..a3ef0eb 100644 --- a/invesalius/gui/data_notebook.py +++ b/invesalius/gui/data_notebook.py @@ -351,18 +351,11 @@ class ButtonControlPanel(wx.Panel): else: dlg.MaskSelectionRequiredForDuplication() -class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckListCtrlMixin): - +class MasksListCtrlPanel(wx.ListCtrl): def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, - size=wx.DefaultSize, style=wx.LC_REPORT): - - # native look and feel for MacOS - #if wx.Platform == "__WXMAC__": - # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0) - - wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT) - listmix.TextEditMixin.__init__(self) - listmix.CheckListCtrlMixin.__init__(self) + size=wx.DefaultSize, style=wx.LC_REPORT | wx.LC_EDIT_LABELS): + wx.ListCtrl.__init__(self, parent, ID, pos, size, style=style) + self._click_check = False self.mask_list_index = {} self.current_index = 0 self.__init_columns() @@ -371,11 +364,10 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckListCt self.__bind_events() def __bind_events_wx(self): - self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated) - self.Bind(wx.EVT_LIST_BEGIN_LABEL_EDIT, self.OnBeginLabelEdit) self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnEditLabel) self.Bind(wx.EVT_KEY_UP, self.OnKeyEvent) - + self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated) + self.Bind(wx.EVT_LEFT_UP, self.OnClickItem) def __bind_events(self): Publisher.subscribe(self.AddMask, 'Add mask') @@ -438,7 +430,6 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckListCt self.current_index -= 1 self.SetItemImage(self.current_index, 1) - def OnCloseProject(self): self.DeleteAllItems() self.mask_list_index = {} @@ -491,21 +482,14 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckListCt self.image_gray = Image.open(os.path.join(inv_paths.ICON_DIR, "object_colour.jpg")) - def OnBeginLabelEdit(self, evt): - if evt.GetColumn() == 1: - evt.Skip() - else: - evt.Veto() - def OnEditLabel(self, evt): - Publisher.sendMessage('Change mask name', - index=evt.GetIndex(), name=evt.GetLabel()) + if not evt.IsEditCancelled(): + index = evt.GetIndex() + self.SetItem(index, 1, evt.GetLabel()) + Publisher.sendMessage('Change mask name', + index=evt.GetIndex(), name=evt.GetLabel()) evt.Skip() - def OnItemActivated(self, evt): - self.ToggleItem(evt.Index) - # pass - def OnCheckItem(self, index, flag): if flag: for key in self.mask_list_index.keys(): @@ -515,6 +499,28 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckListCt self.current_index = index Publisher.sendMessage('Show mask', index=index, value=flag) + def OnClickItem(self, evt): + self._click_check = False + item_idx, flag = (self.HitTest(evt.GetPosition())) + if flag == wx.LIST_HITTEST_ONITEMICON: + self._click_check = True + item = self.GetItem(item_idx, 0) + flag = not bool(item.GetImage()) + self.SetItemImage(item_idx, int(flag)) + self.OnCheckItem(item_idx, flag) + evt.Skip() + + def OnItemActivated(self, evt): + if not self._click_check: + item = self.GetItem(evt.GetItem().GetId(), 1) + ctrl = self.EditLabel(item.GetId()) + w, h = ctrl.GetClientSize() + w = self.GetColumnWidth(1) + ctrl.SetClientSize(w, h) + ctrl.SetValue(item.GetText()) + ctrl.SelectAll() + evt.Skip() + def CreateColourBitmap(self, colour): """ Create a wx Image with a mask colour. @@ -718,19 +724,11 @@ class SurfaceButtonControlPanel(wx.Panel): def AffineStatus(self, affine, status): self.affinestatus = status -class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckListCtrlMixin): - +class SurfacesListCtrlPanel(wx.ListCtrl): def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, - size=wx.DefaultSize, style=wx.LC_REPORT): - - # native look and feel for MacOS - #if wx.Platform == "__WXMAC__": - # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0) - - wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT) - listmix.TextEditMixin.__init__(self) - listmix.CheckListCtrlMixin.__init__(self) - + size=wx.DefaultSize, style=wx.LC_REPORT | wx.LC_EDIT_LABELS): + wx.ListCtrl.__init__(self, parent, ID, pos, size, style=style) + self._click_check = False self.__init_columns() self.__init_image_list() self.__init_evt() @@ -752,11 +750,33 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckLis Publisher.subscribe(self.OnShowMultiple, 'Show multiple surfaces') def __bind_events_wx(self): - self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated) - self.Bind(wx.EVT_LIST_BEGIN_LABEL_EDIT, self.OnBeginLabelEdit) self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnEditLabel) #self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected_) self.Bind(wx.EVT_KEY_UP, self.OnKeyEvent) + self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated) + self.Bind(wx.EVT_LEFT_UP, self.OnClickItem) + + def OnClickItem(self, evt): + self._click_check = False + item_idx, flag = (self.HitTest(evt.GetPosition())) + if flag == wx.LIST_HITTEST_ONITEMICON: + self._click_check = True + item = self.GetItem(item_idx, 0) + flag = not bool(item.GetImage()) + self.SetItemImage(item_idx, int(flag)) + self.OnCheckItem(item_idx, flag) + evt.Skip() + + def OnItemActivated(self, evt): + if not self._click_check: + item = self.GetItem(evt.GetItem().GetId(), 1) + ctrl = self.EditLabel(item.GetId()) + w, h = ctrl.GetClientSize() + w = self.GetColumnWidth(1) + ctrl.SetClientSize(w, h) + ctrl.SetValue(item.GetText()) + ctrl.SelectAll() + evt.Skip() def OnKeyEvent(self, event): keycode = event.GetKeyCode() @@ -864,11 +884,10 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckLis evt.Veto() def OnEditLabel(self, evt): - Publisher.sendMessage('Change surface name', index=evt.GetIndex(), name=evt.GetLabel()) - evt.Skip() - - def OnItemActivated(self, evt): - self.ToggleItem(evt.Index) + if not evt.IsEditCancelled(): + index = evt.GetIndex() + self.SetItem(index, 1, evt.GetLabel()) + Publisher.sendMessage('Change surface name', index=evt.GetIndex(), name=evt.GetLabel()) evt.Skip() def OnCheckItem(self, index, flag): @@ -985,19 +1004,12 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckLis #------------------------------------------------- #------------------------------------------------- -class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckListCtrlMixin): +class MeasuresListCtrlPanel(wx.ListCtrl): def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, - size=wx.DefaultSize, style=wx.LC_REPORT): - - # native look and feel for MacOS - #if wx.Platform == "__WXMAC__": - # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0) - - wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT) - listmix.TextEditMixin.__init__(self) - listmix.CheckListCtrlMixin.__init__(self) - + size=wx.DefaultSize, style=wx.LC_REPORT | wx.LC_EDIT_LABELS): + wx.ListCtrl.__init__(self, parent, ID, pos, size, style=style) + self._click_check = False self.__init_columns() self.__init_image_list() self.__init_evt() @@ -1017,11 +1029,33 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckLis Publisher.subscribe(self.OnRemoveGUIMeasure, 'Remove GUI measurement') def __bind_events_wx(self): - self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated) - self.Bind(wx.EVT_LIST_BEGIN_LABEL_EDIT, self.OnBeginLabelEdit) self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnEditLabel) self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected_) self.Bind(wx.EVT_KEY_UP, self.OnKeyEvent) + self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated) + self.Bind(wx.EVT_LEFT_UP, self.OnClickItem) + + def OnClickItem(self, evt): + self._click_check = False + item_idx, flag = (self.HitTest(evt.GetPosition())) + if flag == wx.LIST_HITTEST_ONITEMICON: + self._click_check = True + item = self.GetItem(item_idx, 0) + flag = not bool(item.GetImage()) + self.SetItemImage(item_idx, int(flag)) + self.OnCheckItem(item_idx, flag) + evt.Skip() + + def OnItemActivated(self, evt): + if not self._click_check: + item = self.GetItem(evt.GetItem().GetId(), 1) + ctrl = self.EditLabel(item.GetId()) + w, h = ctrl.GetClientSize() + w = self.GetColumnWidth(1) + ctrl.SetClientSize(w, h) + ctrl.SetValue(item.GetText()) + ctrl.SelectAll() + evt.Skip() def OnKeyEvent(self, event): @@ -1139,14 +1173,12 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckLis evt.Veto() def OnEditLabel(self, evt): - Publisher.sendMessage('Change measurement name', index=evt.GetIndex(), name=evt.GetLabel()) - evt.Skip() - - def OnItemActivated(self, evt): - self.ToggleItem(evt.Index) + if not evt.IsEditCancelled(): + index = evt.GetIndex() + self.SetItem(index, 1, evt.GetLabel()) + Publisher.sendMessage('Change measurement name', index=evt.GetIndex(), name=evt.GetLabel()) evt.Skip() - def OnCheckItem(self, index, flag): Publisher.sendMessage('Show measurement', index=index, visibility=flag) @@ -1273,19 +1305,12 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckLis #******************************************************************* -class AnnotationsListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin, listmix.CheckListCtrlMixin): +class AnnotationsListCtrlPanel(wx.ListCtrl): # TODO: Remove edimixin, allow only visible and invisible def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, - size=wx.DefaultSize, style=wx.LC_REPORT): - - # native look and feel for MacOS - #if wx.Platform == "__WXMAC__": - # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0) - - wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT) - listmix.TextEditMixin.__init__(self) - listmix.CheckListCtrlMixin.__init__(self) - + size=wx.DefaultSize, style=wx.LC_REPORT | wx.LC_EDIT_LABELS): + wx.ListCtrl.__init__(self, parent, ID, pos, size, style=style) + self._click_check = False self.__init_columns() self.__init_image_list() self.__init_evt() diff --git a/invesalius/gui/default_viewers.py b/invesalius/gui/default_viewers.py index 660876e..1f31287 100644 --- a/invesalius/gui/default_viewers.py +++ b/invesalius/gui/default_viewers.py @@ -111,7 +111,7 @@ class Panel(wx.Panel): p3.SetPopupMenu(menu) - if sys.platform == 'win32': + if sys.platform == 'win32' or wx.VERSION >= (4, 1): self.aui_manager.AddPane(p1, s1) self.aui_manager.AddPane(p2, s2) self.aui_manager.AddPane(p3, s3) @@ -604,7 +604,7 @@ class VolumeToolPanel(wx.Panel): id = evt.GetId() item = ID_TO_ITEMSLICEMENU[id] checked = item.IsChecked() - label = item.GetLabel() + label = item.GetItemLabelText() if not (checked): Publisher.sendMessage('Disable plane', plane_label=label) diff --git a/invesalius/gui/dialogs.py b/invesalius/gui/dialogs.py index 309d264..bcfbef5 100644 --- a/invesalius/gui/dialogs.py +++ b/invesalius/gui/dialogs.py @@ -1947,17 +1947,17 @@ class WatershedOptionsPanel(wx.Panel): min_value=1, max_value=10) box_sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Conectivity"), wx.VERTICAL) - box_sizer.Add(self.choice_2dcon, 0, wx.ALIGN_CENTER_VERTICAL,2) - box_sizer.Add(self.choice_3dcon, 0, wx.ALIGN_CENTER_VERTICAL,2) + box_sizer.Add(self.choice_2dcon, 0, wx.ALL, 5) + box_sizer.Add(self.choice_3dcon, 0, wx.ALL, 5) g_sizer = wx.BoxSizer(wx.HORIZONTAL) - g_sizer.Add(wx.StaticText(self, -1, _("Gaussian sigma")), 0, wx.ALIGN_RIGHT | wx.ALL, 5) - g_sizer.Add(self.gaussian_size, 0, wx.ALIGN_LEFT | wx.ALL, 5) + g_sizer.Add(wx.StaticText(self, -1, _("Gaussian sigma")), 0, wx.ALIGN_CENTER | wx.ALL, 5) + g_sizer.Add(self.gaussian_size, 0, wx.ALL, 5) sizer = wx.BoxSizer(wx.VERTICAL) - sizer.Add(self.choice_algorithm, 0, wx.ALIGN_CENTER_VERTICAL,2) - sizer.Add(box_sizer, 1, wx.EXPAND,2) - sizer.Add(g_sizer, 0, wx.ALIGN_LEFT, 2) + sizer.Add(self.choice_algorithm, 0, wx.ALL, 5) + sizer.Add(box_sizer, 1, wx.EXPAND | wx.ALL, 5) + sizer.Add(g_sizer, 0, wx.ALL, 5) self.SetSizer(sizer) sizer.Fit(self) @@ -1995,8 +1995,7 @@ class WatershedOptionsDialog(wx.Dialog): btnsizer.Realize() sizer.Add(wop, 0, wx.EXPAND) - sizer.Add(btnsizer, 0, wx.EXPAND) - sizer.AddSpacer(5) + sizer.Add(btnsizer, 0, wx.ALIGN_RIGHT | wx.BOTTOM, 5) self.SetSizer(sizer) sizer.Fit(self) @@ -2057,16 +2056,16 @@ class MaskBooleanDialog(wx.Dialog): gsizer = wx.FlexGridSizer(rows=3, cols=2, hgap=5, vgap=5) - gsizer.Add(wx.StaticText(self, -1, _(u"Mask 1"))) + gsizer.Add(wx.StaticText(self, -1, _(u"Mask 1")), 0, wx.ALIGN_CENTER_VERTICAL) gsizer.Add(self.mask1, 1, wx.EXPAND) - gsizer.Add(wx.StaticText(self, -1, _(u"Operation"))) + gsizer.Add(wx.StaticText(self, -1, _(u"Operation")), 0, wx.ALIGN_CENTER_VERTICAL) gsizer.Add(self.op_boolean, 1, wx.EXPAND) - gsizer.Add(wx.StaticText(self, -1, _(u"Mask 2"))) + gsizer.Add(wx.StaticText(self, -1, _(u"Mask 2")), 0, wx.ALIGN_CENTER_VERTICAL) gsizer.Add(self.mask2, 1, wx.EXPAND) sizer = wx.BoxSizer(wx.VERTICAL) - sizer.Add(gsizer, 0, wx.EXPAND | wx.ALIGN_CENTER | wx.ALL, border=5) - sizer.Add(btnsizer, 0, wx.EXPAND | wx.ALIGN_CENTER | wx.ALL, border=5) + sizer.Add(gsizer, 0, wx.EXPAND | wx.ALL, border=5) + sizer.Add(btnsizer, 0, wx.EXPAND | wx.ALL, border=5) self.SetSizer(sizer) sizer.Fit(self) @@ -2795,8 +2794,8 @@ class SelectPartsOptionsDialog(wx.Dialog): sizer.AddSpacer(5) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) - btn_sizer.Add(self.btn_ok, 0, flag=wx.ALIGN_RIGHT, border=5) - btn_sizer.Add(self.btn_cancel, 0, flag=wx.LEFT|wx.ALIGN_RIGHT, border=5) + btn_sizer.Add(self.btn_ok, 0)# flag=wx.ALIGN_RIGHT, border=5) + btn_sizer.Add(self.btn_cancel, 0, flag=wx.LEFT, border=5) sizer.Add(btn_sizer, 0, flag=wx.ALIGN_RIGHT|wx.LEFT|wx.RIGHT, border=5) sizer.AddSpacer(5) @@ -3199,8 +3198,8 @@ class FillHolesAutoDialog(wx.Dialog): sizer.AddSpacer(5) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) - btn_sizer.Add(self.apply_btn, 0, flag=wx.ALIGN_RIGHT, border=5) - btn_sizer.Add(self.close_btn, 0, flag=wx.LEFT|wx.ALIGN_RIGHT, border=5) + btn_sizer.Add(self.apply_btn, 0)# flag=wx.ALIGN_RIGHT, border=5) + btn_sizer.Add(self.close_btn, 0, flag=wx.LEFT, border=5) sizer.Add(btn_sizer, 0, flag=wx.ALIGN_RIGHT|wx.LEFT|wx.RIGHT, border=5) diff --git a/invesalius/gui/frame.py b/invesalius/gui/frame.py index 4744e45..29a8919 100644 --- a/invesalius/gui/frame.py +++ b/invesalius/gui/frame.py @@ -214,7 +214,7 @@ class Frame(wx.Frame): # Add toolbars to manager # This is pretty tricky -- order on win32 is inverted when # compared to linux2 & darwin - if sys.platform == 'win32': + if sys.platform == 'win32' or wx.VERSION >= (4, 1): t1 = ProjectToolBar(self) t2 = HistoryToolBar(self) t3 = LayoutToolBar(self) diff --git a/invesalius/gui/preferences.py b/invesalius/gui/preferences.py index f41da69..47536e3 100644 --- a/invesalius/gui/preferences.py +++ b/invesalius/gui/preferences.py @@ -49,13 +49,13 @@ class Preferences(wx.Dialog): self.book.AddPage(self.pnl_language, _("Language")) line = wx.StaticLine(self, -1, size=(20, -1), style=wx.LI_HORIZONTAL) - sizer.Add(line, 0, wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.RIGHT | wx.TOP, 5) + sizer.Add(line, 0, wx.GROW | wx.RIGHT | wx.TOP, 5) btnsizer = self.CreateStdDialogButtonSizer(wx.OK | wx.CANCEL) sizer.Add( btnsizer, 0, - wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.RIGHT | wx.TOP | wx.BOTTOM, + wx.GROW | wx.RIGHT | wx.TOP | wx.BOTTOM, 5, ) diff --git a/invesalius/gui/task_navigator.py b/invesalius/gui/task_navigator.py index f0d4a3e..0a7d5a6 100644 --- a/invesalius/gui/task_navigator.py +++ b/invesalius/gui/task_navigator.py @@ -211,7 +211,7 @@ class InnerFoldPanel(wx.Panel): line_sizer = wx.BoxSizer(wx.HORIZONTAL) line_sizer.Add(checkcamera, 0, wx.ALIGN_LEFT | wx.RIGHT | wx.LEFT, 5) line_sizer.Add(checktrigger, 0, wx.ALIGN_CENTER) - line_sizer.Add(checkobj, 0, wx.ALIGN_RIGHT | wx.RIGHT | wx.LEFT, 5) + line_sizer.Add(checkobj, 0, wx.RIGHT | wx.LEFT, 5) line_sizer.Fit(self) # Panel sizer to expand fold panel @@ -396,7 +396,7 @@ class NeuronavigationPanel(wx.Panel): (nav_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL)]) main_sizer = wx.BoxSizer(wx.HORIZONTAL) - main_sizer.Add(group_sizer, 1, wx.ALIGN_CENTER_HORIZONTAL, 10) + main_sizer.Add(group_sizer, 1)# wx.ALIGN_CENTER_HORIZONTAL, 10) self.sizer = main_sizer self.SetSizer(main_sizer) self.Fit() @@ -808,7 +808,7 @@ class ObjectRegistrationPanel(wx.Panel): line_checks = wx.BoxSizer(wx.HORIZONTAL) line_checks.Add(checkrecordcoords, 0, wx.ALIGN_LEFT | wx.RIGHT | wx.LEFT, 5) - line_checks.Add(checktrack, 0, wx.ALIGN_RIGHT | wx.RIGHT | wx.LEFT, 5) + line_checks.Add(checktrack, 0, wx.RIGHT | wx.LEFT, 5) # Add line sizers into main sizer main_sizer = wx.BoxSizer(wx.VERTICAL) @@ -1038,7 +1038,7 @@ class MarkersPanel(wx.Panel): group_sizer.Add(sizer_create, 0, wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL, 5) group_sizer.Add(sizer_btns, 0, wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL, 5) group_sizer.Add(sizer_delete, 0, wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL, 5) - group_sizer.Add(self.lc, 0, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) + group_sizer.Add(self.lc, 0, wx.EXPAND | wx.ALL, 5) group_sizer.Fit(self) self.SetSizer(group_sizer) diff --git a/invesalius/gui/task_slice.py b/invesalius/gui/task_slice.py index 64e16f6..7862bbc 100644 --- a/invesalius/gui/task_slice.py +++ b/invesalius/gui/task_slice.py @@ -141,7 +141,7 @@ class InnerTaskPanel(wx.Panel): line_sizer = wx.BoxSizer(wx.HORIZONTAL) line_sizer.Add(check_box, 0, wx.ALIGN_LEFT|wx.RIGHT|wx.LEFT, 5) - line_sizer.Add(next_btn_sizer, 1, wx.EXPAND|wx.ALIGN_RIGHT|wx.RIGHT|wx.LEFT, 5) + line_sizer.Add(next_btn_sizer, 1, wx.EXPAND|wx.RIGHT|wx.LEFT, 5) line_sizer.Fit(self) # Add line sizers into main sizer diff --git a/invesalius/gui/task_surface.py b/invesalius/gui/task_surface.py index 1e7b7b9..8fd6ea1 100644 --- a/invesalius/gui/task_surface.py +++ b/invesalius/gui/task_surface.py @@ -30,6 +30,7 @@ except ImportError: from pubsub import pub as Publisher import wx.lib.colourselect as csel +import wx.lib.scrolledpanel as scrolled import invesalius.constants as const import invesalius.data.slice_ as slice_ @@ -74,9 +75,9 @@ class TaskPanel(wx.Panel): # Contour - slider # enable / disable Fill holes -class InnerTaskPanel(wx.Panel): +class InnerTaskPanel(scrolled.ScrolledPanel): def __init__(self, parent): - wx.Panel.__init__(self, parent) + scrolled.ScrolledPanel.__init__(self, parent) default_colour = self.GetBackgroundColour() backgroud_colour = wx.Colour(255,255,255) self.SetBackgroundColour(backgroud_colour) @@ -134,6 +135,13 @@ class InnerTaskPanel(wx.Panel): self.sizer = main_sizer + self.SetupScrolling() + + self.Bind(wx.EVT_SIZE, self.OnSize) + + def OnSize(self, evt): + self.SetupScrolling() + def OnButton(self, evt): id = evt.GetId() if id == BTN_NEW: @@ -437,9 +445,9 @@ class SurfaceTools(wx.Panel): -class SurfaceProperties(wx.Panel): +class SurfaceProperties(scrolled.ScrolledPanel): def __init__(self, parent): - wx.Panel.__init__(self, parent) + scrolled.ScrolledPanel.__init__(self, parent) try: default_colour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_MENUBAR) except AttributeError: @@ -507,8 +515,16 @@ class SurfaceProperties(wx.Panel): self.Update() #self.SetAutoLayout(1) + self.SetupScrolling() + + self.Bind(wx.EVT_SIZE, self.OnResize) + self.__bind_events() + def OnResize(self, evt): + print("Resize") + self.SetupScrolling() + def __bind_events(self): Publisher.subscribe(self.InsertNewSurface, 'Update surface info in GUI') diff --git a/invesalius/gui/widgets/slice_menu.py b/invesalius/gui/widgets/slice_menu.py index ccc2d09..6a825b5 100644 --- a/invesalius/gui/widgets/slice_menu.py +++ b/invesalius/gui/widgets/slice_menu.py @@ -205,7 +205,7 @@ class SliceMenu(wx.Menu): def OnPopup(self, evt): id = evt.GetId() item = self.ID_TO_TOOL_ITEM[evt.GetId()] - key = item.GetLabel() + key = item.GetItemLabelText() if(key in const.WINDOW_LEVEL.keys()): window, level = const.WINDOW_LEVEL[key] Publisher.sendMessage('Bright and contrast adjustment image', -- libgit2 0.21.2