Commit ddf1aff6fd810a3a2929b059217036c1f2c2c51d

Authored by tatiana
1 parent e0499e2f

ENH: GUI-Flow (tasks) - save surface and next step working

invesalius/gui/default_tasks.py
@@ -118,6 +118,7 @@ class LowerTaskPanel(wx.Panel): @@ -118,6 +118,7 @@ class LowerTaskPanel(wx.Panel):
118 fpb.FPB_COLLAPSE_TO_BOTTOM) 118 fpb.FPB_COLLAPSE_TO_BOTTOM)
119 119
120 self.enable_items = [] 120 self.enable_items = []
  121 + self.overwrite = False
121 122
122 sizer = wx.BoxSizer(wx.VERTICAL) 123 sizer = wx.BoxSizer(wx.VERTICAL)
123 sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND) 124 sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND)
@@ -267,6 +268,19 @@ class UpperTaskPanel(wx.Panel): @@ -267,6 +268,19 @@ class UpperTaskPanel(wx.Panel):
267 def __bind_events(self): 268 def __bind_events(self):
268 self.fold_panel.Bind(fpb.EVT_CAPTIONBAR, self.OnFoldPressCaption) 269 self.fold_panel.Bind(fpb.EVT_CAPTIONBAR, self.OnFoldPressCaption)
269 ps.Publisher().subscribe(self.OnEnableState, "Enable state project") 270 ps.Publisher().subscribe(self.OnEnableState, "Enable state project")
  271 + ps.Publisher().subscribe(self.OnOverwrite, 'Create surface from index')
  272 + ps.Publisher().subscribe(self.OnFoldSurface, 'Update surface info in GUI')
  273 + ps.Publisher().subscribe(self.OnFoldExport, 'Fold export task')
  274 +
  275 + def OnOverwrite(self, pubsub_evt):
  276 + self.overwrite = pubsub_evt.data[1]
  277 +
  278 + def OnFoldSurface(self, pubsub_evt):
  279 + if not self.overwrite:
  280 + self.fold_panel.Expand(self.fold_panel.GetFoldPanel(2))
  281 +
  282 + def OnFoldExport(self, pubsub_evt):
  283 + self.fold_panel.Expand(self.fold_panel.GetFoldPanel(3))
270 284
271 def OnEnableState(self, pubsub_evt): 285 def OnEnableState(self, pubsub_evt):
272 state = pubsub_evt.data 286 state = pubsub_evt.data
invesalius/gui/dialogs.py
@@ -384,3 +384,81 @@ def ShowSavePresetDialog(default_filename="raycasting"): @@ -384,3 +384,81 @@ def ShowSavePresetDialog(default_filename="raycasting"):
384 filename = dlg.GetValue() 384 filename = dlg.GetValue()
385 385
386 return filename 386 return filename
  387 +
  388 +
  389 +class NewSurfaceDialog(wx.Dialog):
  390 + def __init__(self, parent, ID, title, size=wx.DefaultSize,
  391 + pos=wx.DefaultPosition, style=wx.DEFAULT_DIALOG_STYLE,
  392 + useMetal=False):
  393 +
  394 + # Instead of calling wx.Dialog.__init__ we precreate the dialog
  395 + # so we can set an extra style that must be set before
  396 + # creation, and then we create the GUI object using the Create
  397 + # method.
  398 + pre = wx.PreDialog()
  399 + pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
  400 + pre.Create(parent, ID, title, pos, (500,300), style)
  401 +
  402 + # This next step is the most important, it turns this Python
  403 + # object into the real wrapper of the dialog (instead of pre)
  404 + # as far as the wxPython extension is concerned.
  405 + self.PostCreate(pre)
  406 +
  407 + # This extra style can be set after the UI object has been created.
  408 + if 'wxMac' in wx.PlatformInfo and useMetal:
  409 + self.SetExtraStyle(wx.DIALOG_EX_METAL)
  410 +
  411 + self.CenterOnScreen()
  412 +
  413 + # Now continue with the normal construction of the dialog
  414 + # contents
  415 +
  416 + # Label related to mask name
  417 + label_mask = wx.StaticText(self, -1, _("Select mask to be used for creating 3D surface:"))
  418 +
  419 + # Combo related to mask name
  420 + combo_surface_name = wx.ComboBox(self, -1, "", choices= MASK_LIST,
  421 + style=wx.CB_DROPDOWN|wx.CB_READONLY)
  422 + combo_surface_name.SetSelection(0)
  423 + if sys.platform != 'win32':
  424 + combo_surface_name.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)
  425 + self.combo_surface_name = combo_surface_name
  426 +
  427 +
  428 + label_surface = wx.StaticText(self, -1, _("Set new surface name:"))
  429 +
  430 + text = wx.TextCtrl(self, -1, "", size=(80,-1))
  431 + text.SetHelpText(_("Name of the new surface to be created"))
  432 + text.SetValue(_("Surface"))
  433 + self.text = text
  434 +
  435 + sizer = wx.BoxSizer(wx.VERTICAL)
  436 + sizer.Add(label_mask, 0, wx.ALL|wx.GROW|wx.EXPAND, 5)
  437 + sizer.Add(combo_surface_name, 1, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 10)
  438 + sizer.Add(label_surface, 0, wx.ALL|wx.GROW|wx.EXPAND, 5)
  439 + sizer.Add(text, 0, wx.GROW|wx.EXPAND|wx.RIGHT|wx.LEFT, 10)
  440 +
  441 + btnsizer = wx.StdDialogButtonSizer()
  442 +
  443 + #if wx.Platform != "__WXMSW__":
  444 + # btn = wx.ContextHelpButton(self)
  445 + # btnsizer.AddButton(btn)
  446 +
  447 + btn = wx.Button(self, wx.ID_OK)
  448 + btn.SetDefault()
  449 + btnsizer.AddButton(btn)
  450 +
  451 + btn = wx.Button(self, wx.ID_CANCEL)
  452 + btnsizer.AddButton(btn)
  453 + btnsizer.Realize()
  454 +
  455 + sizer.Add(btnsizer, 0, wx.ALIGN_RIGHT|wx.ALL, 5)
  456 +
  457 + self.SetSizer(sizer)
  458 + sizer.Fit(self)
  459 +
  460 + #def GetValue(self):
  461 + # return self.text.GetValue() + _("| mask: ") + MASK_LIST[self.combo_surface_name.GetSelection()]
  462 +
  463 +
  464 +
invesalius/gui/task_surface.py
@@ -23,11 +23,11 @@ import wx.lib.hyperlink as hl @@ -23,11 +23,11 @@ import wx.lib.hyperlink as hl
23 import wx.lib.platebtn as pbtn 23 import wx.lib.platebtn as pbtn
24 import wx.lib.pubsub as ps 24 import wx.lib.pubsub as ps
25 25
  26 +import gui.dialogs as dlg
26 import gui.widgets.foldpanelbar as fpb 27 import gui.widgets.foldpanelbar as fpb
27 -import widgets.colourselect as csel 28 +import gui.widgets.colourselect as csel
28 29
29 #INTERPOLATION_MODE_LIST = ["Cubic", "Linear", "NearestNeighbor"] 30 #INTERPOLATION_MODE_LIST = ["Cubic", "Linear", "NearestNeighbor"]
30 -QUALITY_LIST = [_("Low"), _("Medium"), _("High"), _("Optimal *"), _("Custom")]  
31 SURFACE_LIST = [] 31 SURFACE_LIST = []
32 MASK_LIST = [] 32 MASK_LIST = []
33 MIN_TRANSPARENCY = 0 33 MIN_TRANSPARENCY = 0
@@ -102,7 +102,7 @@ class InnerTaskPanel(wx.Panel): @@ -102,7 +102,7 @@ class InnerTaskPanel(wx.Panel):
102 button_next = wx.Button(self, -1, _("Next step")) 102 button_next = wx.Button(self, -1, _("Next step"))
103 if sys.platform != 'win32': 103 if sys.platform != 'win32':
104 button_next.SetWindowVariant(wx.WINDOW_VARIANT_SMALL) 104 button_next.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)
105 - #button_next.Bind(wx.EVT_BUTTON, self.OnButtonNextTask) 105 + button_next.Bind(wx.EVT_BUTTON, self.OnButtonNextTask)
106 106
107 # Add line sizers into main sizer 107 # Add line sizers into main sizer
108 main_sizer = wx.BoxSizer(wx.VERTICAL) 108 main_sizer = wx.BoxSizer(wx.VERTICAL)
@@ -123,93 +123,18 @@ class InnerTaskPanel(wx.Panel): @@ -123,93 +123,18 @@ class InnerTaskPanel(wx.Panel):
123 self.OnLinkNewSurface() 123 self.OnLinkNewSurface()
124 124
125 def OnButtonNextTask(self, evt): 125 def OnButtonNextTask(self, evt):
126 - self.OnLinkNewSurface()  
127 if evt: 126 if evt:
  127 + ps.Publisher().sendMessage('Fold export task')
128 evt.Skip() 128 evt.Skip()
129 129
130 def OnLinkNewSurface(self, evt=None): 130 def OnLinkNewSurface(self, evt=None):
131 - dlg = NewSurfaceDialog(self, -1, _('InVesalius 3 - New surface')) 131 + dlg = dlg.NewSurfaceDialog(self, -1, _('InVesalius 3 - New surface'))
132 if dlg.ShowModal() == wx.ID_OK: 132 if dlg.ShowModal() == wx.ID_OK:
133 print "TODO: Send Signal - Create 3d surface %s \n" % dlg.GetValue() 133 print "TODO: Send Signal - Create 3d surface %s \n" % dlg.GetValue()
134 dlg.Destroy() 134 dlg.Destroy()
135 if evt: 135 if evt:
136 evt.Skip() 136 evt.Skip()
137 - #default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)  
138 - #self.SetBackgroundColour(default_colour)  
139 137
140 -class NewSurfaceDialog(wx.Dialog):  
141 - def __init__(self, parent, ID, title, size=wx.DefaultSize,  
142 - pos=wx.DefaultPosition, style=wx.DEFAULT_DIALOG_STYLE,  
143 - useMetal=False):  
144 -  
145 - # Instead of calling wx.Dialog.__init__ we precreate the dialog  
146 - # so we can set an extra style that must be set before  
147 - # creation, and then we create the GUI object using the Create  
148 - # method.  
149 - pre = wx.PreDialog()  
150 - pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)  
151 - pre.Create(parent, ID, title, pos, (500,300), style)  
152 -  
153 - # This next step is the most important, it turns this Python  
154 - # object into the real wrapper of the dialog (instead of pre)  
155 - # as far as the wxPython extension is concerned.  
156 - self.PostCreate(pre)  
157 -  
158 - # This extra style can be set after the UI object has been created.  
159 - if 'wxMac' in wx.PlatformInfo and useMetal:  
160 - self.SetExtraStyle(wx.DIALOG_EX_METAL)  
161 -  
162 - self.CenterOnScreen()  
163 -  
164 - # Now continue with the normal construction of the dialog  
165 - # contents  
166 -  
167 - # Label related to mask name  
168 - label_mask = wx.StaticText(self, -1, _("Select mask to be used for creating 3D surface:"))  
169 -  
170 - # Combo related to mask name  
171 - combo_surface_name = wx.ComboBox(self, -1, "", choices= MASK_LIST,  
172 - style=wx.CB_DROPDOWN|wx.CB_READONLY)  
173 - combo_surface_name.SetSelection(0)  
174 - if sys.platform != 'win32':  
175 - combo_surface_name.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)  
176 - self.combo_surface_name = combo_surface_name  
177 -  
178 -  
179 - label_surface = wx.StaticText(self, -1, _("Set new surface name:"))  
180 -  
181 - text = wx.TextCtrl(self, -1, "", size=(80,-1))  
182 - text.SetHelpText(_("Name of the new surface to be created"))  
183 - text.SetValue(_("Surface"))  
184 - self.text = text  
185 -  
186 - sizer = wx.BoxSizer(wx.VERTICAL)  
187 - sizer.Add(label_mask, 0, wx.ALL|wx.GROW|wx.EXPAND, 5)  
188 - sizer.Add(combo_surface_name, 1, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 10)  
189 - sizer.Add(label_surface, 0, wx.ALL|wx.GROW|wx.EXPAND, 5)  
190 - sizer.Add(text, 0, wx.GROW|wx.EXPAND|wx.RIGHT|wx.LEFT, 10)  
191 -  
192 - btnsizer = wx.StdDialogButtonSizer()  
193 -  
194 - #if wx.Platform != "__WXMSW__":  
195 - # btn = wx.ContextHelpButton(self)  
196 - # btnsizer.AddButton(btn)  
197 -  
198 - btn = wx.Button(self, wx.ID_OK)  
199 - btn.SetDefault()  
200 - btnsizer.AddButton(btn)  
201 -  
202 - btn = wx.Button(self, wx.ID_CANCEL)  
203 - btnsizer.AddButton(btn)  
204 - btnsizer.Realize()  
205 -  
206 - sizer.Add(btnsizer, 0, wx.ALIGN_RIGHT|wx.ALL, 5)  
207 -  
208 - self.SetSizer(sizer)  
209 - sizer.Fit(self)  
210 -  
211 - #def GetValue(self):  
212 - # return self.text.GetValue() + _("| mask: ") + MASK_LIST[self.combo_surface_name.GetSelection()]  
213 138
214 class FoldPanel(wx.Panel): 139 class FoldPanel(wx.Panel):
215 def __init__(self, parent): 140 def __init__(self, parent):
@@ -239,7 +164,7 @@ class InnerFoldPanel(wx.Panel): @@ -239,7 +164,7 @@ class InnerFoldPanel(wx.Panel):
239 # parent panel. Perhaps we need to insert the item into the sizer also... 164 # parent panel. Perhaps we need to insert the item into the sizer also...
240 # Study this. 165 # Study this.
241 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition, 166 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
242 - (10, 170), 0,fpb.FPB_SINGLE_FOLD) 167 + (10, 100), 0,fpb.FPB_SINGLE_FOLD)
243 168
244 # Fold panel style 169 # Fold panel style
245 style = fpb.CaptionBarStyle() 170 style = fpb.CaptionBarStyle()
@@ -254,11 +179,14 @@ class InnerFoldPanel(wx.Panel): @@ -254,11 +179,14 @@ class InnerFoldPanel(wx.Panel):
254 leftSpacing=0, rightSpacing=0) 179 leftSpacing=0, rightSpacing=0)
255 fold_panel.Expand(fold_panel.GetFoldPanel(0)) 180 fold_panel.Expand(fold_panel.GetFoldPanel(0))
256 181
257 - # Fold 2 - Surface quality  
258 - item = fold_panel.AddFoldPanel(_("Surface quality"), collapsed=True) 182 + # Fold 2 - Surface tools
  183 + item = fold_panel.AddFoldPanel(_("Advanced options"), collapsed=True)
259 fold_panel.ApplyCaptionStyle(item, style) 184 fold_panel.ApplyCaptionStyle(item, style)
260 - fold_panel.AddFoldPanelWindow(item, QualityAdjustment(item), Spacing= 0, 185 + fold_panel.AddFoldPanelWindow(item, SurfaceTools(item), Spacing= 0,
261 leftSpacing=0, rightSpacing=0) 186 leftSpacing=0, rightSpacing=0)
  187 +
  188 + #fold_panel.AddFoldPanelWindow(item, QualityAdjustment(item), Spacing= 0,
  189 + # leftSpacing=0, rightSpacing=0)
262 #fold_panel.Expand(fold_panel.GetFoldPanel(1)) 190 #fold_panel.Expand(fold_panel.GetFoldPanel(1))
263 191
264 # Panel sizer to expand fold panel 192 # Panel sizer to expand fold panel
@@ -270,6 +198,13 @@ class InnerFoldPanel(wx.Panel): @@ -270,6 +198,13 @@ class InnerFoldPanel(wx.Panel):
270 self.Update() 198 self.Update()
271 self.SetAutoLayout(1) 199 self.SetAutoLayout(1)
272 200
  201 +
  202 +class SurfaceTools(wx.Panel):
  203 + def __init__(self, parent):
  204 + wx.Panel.__init__(self, parent, size=(50,240))
  205 + default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
  206 + self.SetBackgroundColour(default_colour)
  207 +
273 class SurfaceProperties(wx.Panel): 208 class SurfaceProperties(wx.Panel):
274 def __init__(self, parent): 209 def __init__(self, parent):
275 wx.Panel.__init__(self, parent, size=(50,240)) 210 wx.Panel.__init__(self, parent, size=(50,240))
@@ -386,14 +321,17 @@ class SurfaceProperties(wx.Panel): @@ -386,14 +321,17 @@ class SurfaceProperties(wx.Panel):
386 (self.combo_surface_name.GetSelection(), 321 (self.combo_surface_name.GetSelection(),
387 transparency)) 322 transparency))
388 323
  324 +
389 class QualityAdjustment(wx.Panel): 325 class QualityAdjustment(wx.Panel):
390 def __init__(self, parent): 326 def __init__(self, parent):
  327 + import constants as const
391 wx.Panel.__init__(self, parent, size=(50,240)) 328 wx.Panel.__init__(self, parent, size=(50,240))
392 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR) 329 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
393 self.SetBackgroundColour(default_colour) 330 self.SetBackgroundColour(default_colour)
394 331
395 # LINE 1 332 # LINE 1
396 - combo_quality = wx.ComboBox(self, -1, "", choices= QUALITY_LIST, 333 +
  334 + combo_quality = wx.ComboBox(self, -1, "", choices=const.SURFACE_QUALITY.keys(),
397 style=wx.CB_DROPDOWN|wx.CB_READONLY) 335 style=wx.CB_DROPDOWN|wx.CB_READONLY)
398 combo_quality.SetSelection(3) 336 combo_quality.SetSelection(3)
399 combo_quality.SetWindowVariant(wx.WINDOW_VARIANT_SMALL) 337 combo_quality.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)