diff --git a/invesalius/constants.py b/invesalius/constants.py index 7fa2326..95b814c 100644 --- a/invesalius/constants.py +++ b/invesalius/constants.py @@ -519,6 +519,8 @@ ID_CREATE_MASK = wx.NewId() ID_GOTO_SLICE = wx.NewId() ID_GOTO_COORD = wx.NewId() +ID_MANUAL_WWWL = wx.NewId() + #--------------------------------------------------------- STATE_DEFAULT = 1000 STATE_WL = 1001 diff --git a/invesalius/gui/dialogs.py b/invesalius/gui/dialogs.py index e7ec0ff..9510d7d 100644 --- a/invesalius/gui/dialogs.py +++ b/invesalius/gui/dialogs.py @@ -3989,3 +3989,73 @@ class SetCOMport(wx.Dialog): def GetValue(self): return self.com_ports.GetString(self.com_ports.GetSelection()) + + +class ManualWWWLDialog(wx.Dialog): + def __init__(self, parent): + wx.Dialog.__init__(self, parent, -1, _("Set WW&WL manually")) + self._init_gui() + + def _init_gui(self): + import invesalius.data.slice_ as slc + ww = slc.Slice().window_width + wl = slc.Slice().window_level + + self.txt_wl = wx.TextCtrl(self, -1, str(int(wl))) + wl_sizer = wx.BoxSizer(wx.HORIZONTAL) + wl_sizer.Add(wx.StaticText(self, -1, _("Window Level")), 0, wx.ALIGN_CENTER_VERTICAL) + wl_sizer.Add(self.txt_wl, 1, wx.ALL | wx.EXPAND, 5) + wl_sizer.Add(wx.StaticText(self, -1, _("WL")), 0, wx.ALIGN_CENTER_VERTICAL) + + self.txt_ww = wx.TextCtrl(self, -1, str(int(ww))) + ww_sizer = wx.BoxSizer(wx.HORIZONTAL) + ww_sizer.Add(wx.StaticText(self, -1, _("Window Width")), 0, wx.ALIGN_CENTER_VERTICAL) + ww_sizer.Add(self.txt_ww, 1, wx.ALL | wx.EXPAND, 5) + ww_sizer.Add(wx.StaticText(self, -1, _("WW")), 0, wx.ALIGN_CENTER_VERTICAL) + + btn_ok = wx.Button(self, wx.ID_OK) + btn_cancel = wx.Button(self, wx.ID_CANCEL) + btnsizer = wx.StdDialogButtonSizer() + btnsizer.AddButton(btn_ok) + btnsizer.AddButton(btn_cancel) + btnsizer.Realize() + + main_sizer = wx.BoxSizer(wx.VERTICAL) + main_sizer.Add(wl_sizer, 1, wx.ALL | wx.EXPAND, 5) + main_sizer.Add(ww_sizer, 1, wx.ALL | wx.EXPAND, 5) + main_sizer.Add(btnsizer, 1, wx.ALL | wx.EXPAND, 5) + + btn_ok.Bind(wx.EVT_BUTTON, self.OnOK) + btn_cancel.Bind(wx.EVT_BUTTON, self.OnCancel) + self.Bind(wx.EVT_CLOSE, self.OnClose) + + self.SetSizer(main_sizer) + main_sizer.Fit(self) + main_sizer.SetSizeHints(self) + + self.Layout() + self.Center() + + def OnOK(self, evt): + try: + ww = int(self.txt_ww.GetValue()) + wl = int(self.txt_wl.GetValue()) + except ValueError: + self.Close() + return + + Publisher.sendMessage('Bright and contrast adjustment image', window=ww, level=wl) + const.WINDOW_LEVEL['Manual'] = (ww, wl) + Publisher.sendMessage('Check window and level other') + Publisher.sendMessage('Update window level value', window=ww, level=wl) + #Necessary update the slice plane in the volume case exists + Publisher.sendMessage('Update slice viewer') + Publisher.sendMessage('Render volume viewer') + + self.Close() + + def OnCancel(self, evt): + self.Close() + + def OnClose(self, evt): + self.Destroy() diff --git a/invesalius/gui/frame.py b/invesalius/gui/frame.py index 4aa8a92..3aa23c6 100644 --- a/invesalius/gui/frame.py +++ b/invesalius/gui/frame.py @@ -478,6 +478,10 @@ class Frame(wx.Frame): ddlg = dlg.MaskDensityDialog(self) ddlg.Show() + elif id == const.ID_MANUAL_WWWL: + wwwl_dlg = dlg.ManualWWWLDialog(self) + wwwl_dlg.Show() + elif id == const.ID_THRESHOLD_SEGMENTATION: Publisher.sendMessage("Show panel", panel_id=const.ID_THRESHOLD_SEGMENTATION) Publisher.sendMessage('Disable actual style') @@ -818,7 +822,8 @@ class MenuBar(wx.MenuBar): const.ID_MASK_DENSITY_MEASURE, const.ID_CREATE_SURFACE, const.ID_CREATE_MASK, - const.ID_GOTO_SLICE] + const.ID_GOTO_SLICE, + const.ID_MANUAL_WWWL] self.__init_items() self.__bind_events() @@ -981,6 +986,7 @@ class MenuBar(wx.MenuBar): mask_density_menu = image_menu.Append(const.ID_MASK_DENSITY_MEASURE, _(u'Mask Density measure')) reorient_menu = image_menu.Append(const.ID_REORIENT_IMG, _(u'Reorient image\tCtrl+Shift+R')) + image_menu.Append(const.ID_MANUAL_WWWL, _("Set WW&&WL manually")) reorient_menu.Enable(False) tools_menu.Append(-1, _(u'Image'), image_menu) -- libgit2 0.21.2