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 118 fpb.FPB_COLLAPSE_TO_BOTTOM)
119 119  
120 120 self.enable_items = []
  121 + self.overwrite = False
121 122  
122 123 sizer = wx.BoxSizer(wx.VERTICAL)
123 124 sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND)
... ... @@ -267,6 +268,19 @@ class UpperTaskPanel(wx.Panel):
267 268 def __bind_events(self):
268 269 self.fold_panel.Bind(fpb.EVT_CAPTIONBAR, self.OnFoldPressCaption)
269 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 285 def OnEnableState(self, pubsub_evt):
272 286 state = pubsub_evt.data
... ...
invesalius/gui/dialogs.py
... ... @@ -384,3 +384,81 @@ def ShowSavePresetDialog(default_filename="raycasting"):
384 384 filename = dlg.GetValue()
385 385  
386 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 23 import wx.lib.platebtn as pbtn
24 24 import wx.lib.pubsub as ps
25 25  
  26 +import gui.dialogs as dlg
26 27 import gui.widgets.foldpanelbar as fpb
27   -import widgets.colourselect as csel
  28 +import gui.widgets.colourselect as csel
28 29  
29 30 #INTERPOLATION_MODE_LIST = ["Cubic", "Linear", "NearestNeighbor"]
30   -QUALITY_LIST = [_("Low"), _("Medium"), _("High"), _("Optimal *"), _("Custom")]
31 31 SURFACE_LIST = []
32 32 MASK_LIST = []
33 33 MIN_TRANSPARENCY = 0
... ... @@ -102,7 +102,7 @@ class InnerTaskPanel(wx.Panel):
102 102 button_next = wx.Button(self, -1, _("Next step"))
103 103 if sys.platform != 'win32':
104 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 107 # Add line sizers into main sizer
108 108 main_sizer = wx.BoxSizer(wx.VERTICAL)
... ... @@ -123,93 +123,18 @@ class InnerTaskPanel(wx.Panel):
123 123 self.OnLinkNewSurface()
124 124  
125 125 def OnButtonNextTask(self, evt):
126   - self.OnLinkNewSurface()
127 126 if evt:
  127 + ps.Publisher().sendMessage('Fold export task')
128 128 evt.Skip()
129 129  
130 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 132 if dlg.ShowModal() == wx.ID_OK:
133 133 print "TODO: Send Signal - Create 3d surface %s \n" % dlg.GetValue()
134 134 dlg.Destroy()
135 135 if evt:
136 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 139 class FoldPanel(wx.Panel):
215 140 def __init__(self, parent):
... ... @@ -239,7 +164,7 @@ class InnerFoldPanel(wx.Panel):
239 164 # parent panel. Perhaps we need to insert the item into the sizer also...
240 165 # Study this.
241 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 169 # Fold panel style
245 170 style = fpb.CaptionBarStyle()
... ... @@ -254,11 +179,14 @@ class InnerFoldPanel(wx.Panel):
254 179 leftSpacing=0, rightSpacing=0)
255 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 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 186 leftSpacing=0, rightSpacing=0)
  187 +
  188 + #fold_panel.AddFoldPanelWindow(item, QualityAdjustment(item), Spacing= 0,
  189 + # leftSpacing=0, rightSpacing=0)
262 190 #fold_panel.Expand(fold_panel.GetFoldPanel(1))
263 191  
264 192 # Panel sizer to expand fold panel
... ... @@ -270,6 +198,13 @@ class InnerFoldPanel(wx.Panel):
270 198 self.Update()
271 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 208 class SurfaceProperties(wx.Panel):
274 209 def __init__(self, parent):
275 210 wx.Panel.__init__(self, parent, size=(50,240))
... ... @@ -386,14 +321,17 @@ class SurfaceProperties(wx.Panel):
386 321 (self.combo_surface_name.GetSelection(),
387 322 transparency))
388 323  
  324 +
389 325 class QualityAdjustment(wx.Panel):
390 326 def __init__(self, parent):
  327 + import constants as const
391 328 wx.Panel.__init__(self, parent, size=(50,240))
392 329 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
393 330 self.SetBackgroundColour(default_colour)
394 331  
395 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 335 style=wx.CB_DROPDOWN|wx.CB_READONLY)
398 336 combo_quality.SetSelection(3)
399 337 combo_quality.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)
... ...