Commit 8d1711c03c3139ed3ed5efc74793a4de2636d5bd

Authored by tatiana
1 parent a1b9aeaa

ENH: Close project working (still testing)

invesalius/control.py
@@ -68,12 +68,16 @@ class Controller(): @@ -68,12 +68,16 @@ class Controller():
68 ps.Publisher().subscribe(self.Progress, "Update dicom load") 68 ps.Publisher().subscribe(self.Progress, "Update dicom load")
69 ps.Publisher().subscribe(self.OnLoadImportPanel, "End dicom load") 69 ps.Publisher().subscribe(self.OnLoadImportPanel, "End dicom load")
70 ps.Publisher().subscribe(self.OnCancelImport, 'Cancel DICOM load') 70 ps.Publisher().subscribe(self.OnCancelImport, 'Cancel DICOM load')
71 - ps.Publisher().subscribe(self.OnCloseProject, 'Close Project') 71 + ps.Publisher().subscribe(self.OnShowDialogCloseProject, 'Close Project')
72 72
73 73
74 def OnCancelImport(self, pubsub_evt): 74 def OnCancelImport(self, pubsub_evt):
75 #self.cancel_import = True 75 #self.cancel_import = True
76 ps.Publisher().sendMessage('Hide import panel') 76 ps.Publisher().sendMessage('Hide import panel')
  77 +
  78 +
  79 +###########################
  80 +###########################
77 81
78 def OnShowDialogImportDirectory(self, pubsub_evt): 82 def OnShowDialogImportDirectory(self, pubsub_evt):
79 self.ShowDialogImportDirectory() 83 self.ShowDialogImportDirectory()
@@ -85,19 +89,71 @@ class Controller(): @@ -85,19 +89,71 @@ class Controller():
85 saveas = pubsub_evt.data 89 saveas = pubsub_evt.data
86 self.ShowDialogSaveProject(saveas) 90 self.ShowDialogSaveProject(saveas)
87 91
  92 + def OnShowDialogCloseProject(self, pubsub_evt):
  93 + self.ShowDialogCloseProject()
  94 +
88 ########################### 95 ###########################
89 96
90 def ShowDialogImportDirectory(self): 97 def ShowDialogImportDirectory(self):
91 dirpath = dialog.ShowImportDirDialog() 98 dirpath = dialog.ShowImportDirDialog()
92 if dirpath: 99 if dirpath:
  100 + # Close project if necessary
  101 + session = ses.Session()
  102 + st = session.project_status
  103 + if st != const.PROJ_CLOSE:
  104 + self.ShowDialogCloseProject()
  105 + # Import project
93 self.StartImportPanel(dirpath) 106 self.StartImportPanel(dirpath)
94 ps.Publisher().sendMessage("Load data to import panel", dirpath) 107 ps.Publisher().sendMessage("Load data to import panel", dirpath)
95 108
96 def ShowDialogOpenProject(self): 109 def ShowDialogOpenProject(self):
97 filepath = dialog.ShowOpenProjectDialog() 110 filepath = dialog.ShowOpenProjectDialog()
98 if filepath: 111 if filepath:
  112 + # Close project if necessary
  113 + session = ses.Session()
  114 + st = session.project_status
  115 + if st != const.PROJ_CLOSE:
  116 + self.ShowDialogCloseProject()
  117 + # Open project
99 self.OpenProject(filepath) 118 self.OpenProject(filepath)
100 119
  120 + def ShowDialogSaveProject(self, saveas=False):
  121 + session = ses.Session()
  122 + if saveas:
  123 + proj = prj.Project()
  124 + filepath = dialog.ShowSaveAsProjectDialog(proj.name)
  125 + if filepath:
  126 + session.RemoveTemp()
  127 + session.OpenProject(filepath)
  128 + else:
  129 + return
  130 + else:
  131 + dirpath, filename = session.project_path
  132 + filepath = os.path.join(dirpath, filename)
  133 +
  134 + self.SaveProject(filepath)
  135 +
  136 +
  137 + def ShowDialogCloseProject(self):
  138 + session = ses.Session()
  139 + st = session.project_status
  140 + filename = session.project_path[1]
  141 + if (st == const.PROJ_NEW) or (st == const.PROJ_CHANGE):
  142 + answer = dialog.SaveChangesDialog(filename)
  143 + if not answer:
  144 + print "Close without changes"
  145 + self.CloseProject()
  146 + elif answer == 1:
  147 + self.ShowDialogSaveProject()
  148 + print "Save changes and close"
  149 + self.CloseProject()
  150 + #elif answer == -1:
  151 + # print "Cancel"
  152 + else:
  153 + self.CloseProject()
  154 +
  155 +###########################
  156 +
101 def OpenProject(self, filepath): 157 def OpenProject(self, filepath):
102 path = os.path.abspath(filepath) 158 path = os.path.abspath(filepath)
103 159
@@ -105,9 +161,6 @@ class Controller(): @@ -105,9 +161,6 @@ class Controller():
105 proj.OpenPlistProject(path) 161 proj.OpenPlistProject(path)
106 proj.SetAcquisitionModality(proj.modality) 162 proj.SetAcquisitionModality(proj.modality)
107 163
108 - session = ses.Session()  
109 - session.OpenProject(path)  
110 -  
111 mask = msk.Mask() 164 mask = msk.Mask()
112 mask._set_class_index(proj.last_mask_index) 165 mask._set_class_index(proj.last_mask_index)
113 166
@@ -116,21 +169,8 @@ class Controller(): @@ -116,21 +169,8 @@ class Controller():
116 169
117 self.LoadProject() 170 self.LoadProject()
118 171
119 - def ShowDialogSaveProject(self, saveas=False):  
120 session = ses.Session() 172 session = ses.Session()
121 - if saveas:  
122 - proj = prj.Project()  
123 - filepath = dialog.ShowSaveAsProjectDialog(proj.name)  
124 - if filepath:  
125 - session.RemoveTemp()  
126 - session.OpenProject(filepath)  
127 - else:  
128 - return  
129 - else:  
130 - dirpath, filename = session.project_path  
131 - filepath = os.path.join(dirpath, filename)  
132 -  
133 - self.SaveProject(filepath) 173 + session.OpenProject(filepath)
134 174
135 def SaveProject(self, path=None): 175 def SaveProject(self, path=None):
136 session = ses.Session() 176 session = ses.Session()
@@ -143,28 +183,19 @@ class Controller(): @@ -143,28 +183,19 @@ class Controller():
143 proj = prj.Project() 183 proj = prj.Project()
144 prj.Project().SavePlistProject(dirpath, filename) 184 prj.Project().SavePlistProject(dirpath, filename)
145 185
  186 + session.SaveProject()
  187 +
146 def CloseProject(self): 188 def CloseProject(self):
147 - print "Close Project"  
148 - session = ses.Session()  
149 - session.CloseProject()  
150 -  
151 proj = prj.Project() 189 proj = prj.Project()
152 proj.Close() 190 proj.Close()
153 191
154 - # TODO:  
155 - # Remove items from combo of masks  
156 - # Remove items from combo of surfaces  
157 - # Remove items from dictionaries  
158 - # Slice  
159 - # Surface  
160 - # --------------  
161 - #  
162 -  
163 ps.Publisher().sendMessage('Hide content panel') 192 ps.Publisher().sendMessage('Hide content panel')
  193 + ps.Publisher().sendMessage('Close project data')
164 194
  195 + session = ses.Session()
  196 + session.CloseProject()
165 197
166 -##################################  
167 - 198 +###########################
168 199
169 200
170 def StartImportPanel(self, path): 201 def StartImportPanel(self, path):
@@ -363,24 +394,4 @@ class Controller(): @@ -363,24 +394,4 @@ class Controller():
363 394
364 395
365 396
366 - def OnCloseProject(self, pubsub_evt):  
367 - print "OnCloseProject"  
368 - session = ses.Session()  
369 - st = session.project_status  
370 - filename = session.project_path[1]  
371 - if (st == const.PROJ_NEW) or (st == const.PROJ_CHANGE):  
372 - answer = dialog.SaveChangesDialog(filename)  
373 - if not answer:  
374 - print "Close without changes"  
375 - self.CloseProject()  
376 - elif answer == 1:  
377 - self.ShowDialogSaveProject()  
378 - print "Save changes and close"  
379 - self.CloseProject()  
380 - #else:  
381 - # print "Cancel"  
382 - else:  
383 - print ":) Close without changes"  
384 - self.CloseProject()  
385 -  
386 397
invesalius/data/slice_.py
@@ -40,10 +40,12 @@ class Slice(object): @@ -40,10 +40,12 @@ class Slice(object):
40 self.imagedata = None 40 self.imagedata = None
41 self.current_mask = None 41 self.current_mask = None
42 self.blend_filter = None 42 self.blend_filter = None
43 - self.__bind_events() 43 +
44 self.num_gradient = 0 44 self.num_gradient = 0
45 self.mode = md.SliceMode() 45 self.mode = md.SliceMode()
46 46
  47 + self.__bind_events()
  48 +
47 def __bind_events(self): 49 def __bind_events(self):
48 # Slice properties 50 # Slice properties
49 ps.Publisher().subscribe(self.UpdateCursorPosition, 51 ps.Publisher().subscribe(self.UpdateCursorPosition,
@@ -85,7 +87,7 @@ class Slice(object): @@ -85,7 +87,7 @@ class Slice(object):
85 ps.Publisher().subscribe(self.InputImageWidget, 'Input Image in the widget') 87 ps.Publisher().subscribe(self.InputImageWidget, 'Input Image in the widget')
86 ps.Publisher().subscribe(self.OnExportMask,'Export mask to file') 88 ps.Publisher().subscribe(self.OnExportMask,'Export mask to file')
87 89
88 - ps.Publisher().subscribe(self.OnCloseProject, 'Close Project') 90 + ps.Publisher().subscribe(self.OnCloseProject, 'Close project data')
89 91
90 def OnCloseProject(self, pubsub_evt): 92 def OnCloseProject(self, pubsub_evt):
91 self.CloseProject() 93 self.CloseProject()
invesalius/data/surface.py
@@ -103,7 +103,7 @@ class SurfaceManager(): @@ -103,7 +103,7 @@ class SurfaceManager():
103 ps.Publisher().subscribe(self.OnShowSurface, 'Show surface') 103 ps.Publisher().subscribe(self.OnShowSurface, 'Show surface')
104 ps.Publisher().subscribe(self.OnExportSurface,'Export surface to file') 104 ps.Publisher().subscribe(self.OnExportSurface,'Export surface to file')
105 ps.Publisher().subscribe(self.OnLoadSurfaceDict, 'Load surface dict') 105 ps.Publisher().subscribe(self.OnLoadSurfaceDict, 'Load surface dict')
106 - ps.Publisher().subscribe(self.OnCloseProject, 'Close Project') 106 + ps.Publisher().subscribe(self.OnCloseProject, 'Close project data')
107 107
108 def OnCloseProject(self, pubsub_evt): 108 def OnCloseProject(self, pubsub_evt):
109 self.CloseProject() 109 self.CloseProject()
invesalius/data/viewer_slice.py
@@ -765,6 +765,26 @@ class Viewer(wx.Panel): @@ -765,6 +765,26 @@ class Viewer(wx.Panel):
765 765
766 ps.Publisher().subscribe(self.OnSetMode, 766 ps.Publisher().subscribe(self.OnSetMode,
767 'Set slice mode') 767 'Set slice mode')
  768 + ps.Publisher().subscribe(self.OnCloseProject, 'Close project data')
  769 +
  770 + def OnCloseProject(self, pubsub_evt):
  771 + self.CloseProject()
  772 +
  773 + def CloseProject(self):
  774 + for slice_data in self.slice_data_list:
  775 + self.interactor.GetRenderWindow().RemoveRenderer(slice_data.renderer)
  776 + del slice_data
  777 +
  778 + self.modes = []#['DEFAULT']
  779 + self.mouse_pressed = 0
  780 + self.slice_data_list = []
  781 + self.layout = (1, 1)
  782 + self.orientation_texts = []
  783 + self.slice_number = 0
  784 + self.cursor = None
  785 + self.wl_text = None
  786 + self.pick = vtk.vtkPropPicker()
  787 +
768 788
769 def OnSetMode(self, pubsub_evt): 789 def OnSetMode(self, pubsub_evt):
770 state = pubsub_evt.data 790 state = pubsub_evt.data
invesalius/gui/data_notebook.py
@@ -84,7 +84,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -84,7 +84,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
84 'Change mask colour in notebook') 84 'Change mask colour in notebook')
85 85
86 ps.Publisher().subscribe(self.OnChangeCurrentMask, 'Change mask selected') 86 ps.Publisher().subscribe(self.OnChangeCurrentMask, 'Change mask selected')
87 - ps.Publisher().subscribe(self.OnCloseProject, 'Close Project') 87 + ps.Publisher().subscribe(self.OnCloseProject, 'Close project data')
88 88
89 def OnCloseProject(self, pubsub_evt): 89 def OnCloseProject(self, pubsub_evt):
90 self.DeleteAllItems() 90 self.DeleteAllItems()
@@ -217,7 +217,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -217,7 +217,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
217 'Set surface transparency') 217 'Set surface transparency')
218 ps.Publisher().subscribe(self.EditSurfaceColour, 218 ps.Publisher().subscribe(self.EditSurfaceColour,
219 'Set surface colour') 219 'Set surface colour')
220 - ps.Publisher().subscribe(self.OnCloseProject, 'Close Project') 220 + ps.Publisher().subscribe(self.OnCloseProject, 'Close project data')
221 221
222 def OnCloseProject(self, pubsub_evt): 222 def OnCloseProject(self, pubsub_evt):
223 self.DeleteAllItems() 223 self.DeleteAllItems()
invesalius/gui/task_slice.py
@@ -291,7 +291,7 @@ class MaskProperties(wx.Panel): @@ -291,7 +291,7 @@ class MaskProperties(wx.Panel):
291 'Set threshold values in gradient') 291 'Set threshold values in gradient')
292 ps.Publisher().subscribe(self.SelectMaskName, 'Select mask name in combo') 292 ps.Publisher().subscribe(self.SelectMaskName, 'Select mask name in combo')
293 ps.Publisher().subscribe(self.ChangeMaskName, 'Change mask name') 293 ps.Publisher().subscribe(self.ChangeMaskName, 'Change mask name')
294 - ps.Publisher().subscribe(self.OnCloseProject, 'Close Project') 294 + ps.Publisher().subscribe(self.OnCloseProject, 'Close project data')
295 295
296 def OnCloseProject(self, pubsub_evt): 296 def OnCloseProject(self, pubsub_evt):
297 self.CloseProject() 297 self.CloseProject()
invesalius/gui/task_surface.py
@@ -341,7 +341,7 @@ class SurfaceProperties(wx.Panel): @@ -341,7 +341,7 @@ class SurfaceProperties(wx.Panel):
341 'Update surface info in GUI') 341 'Update surface info in GUI')
342 ps.Publisher().subscribe(self.ChangeSurfaceName, 342 ps.Publisher().subscribe(self.ChangeSurfaceName,
343 'Change surface name') 343 'Change surface name')
344 - ps.Publisher().subscribe(self.OnCloseProject, 'Close Project') 344 + ps.Publisher().subscribe(self.OnCloseProject, 'Close project data')
345 345
346 def OnCloseProject(self, pubsub_evt): 346 def OnCloseProject(self, pubsub_evt):
347 self.CloseProject() 347 self.CloseProject()