Commit 8d1711c03c3139ed3ed5efc74793a4de2636d5bd
1 parent
a1b9aeaa
Exists in
master
and in
68 other branches
ENH: Close project working (still testing)
Showing
7 changed files
with
93 additions
and
60 deletions
Show diff stats
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() |