From 50e3d457db14ae0eea05fedbcd022b5a60964e7a Mon Sep 17 00:00:00 2001 From: tatiana Date: Tue, 24 Nov 2009 11:44:06 +0000 Subject: [PATCH] ENH: Structure of project management (moved all to control) --- invesalius/control.py | 145 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------ invesalius/gui/dialogs.py | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- invesalius/gui/frame.py | 46 +++++----------------------------------------- invesalius/gui/task_importer.py | 41 +++++++++++++++++++++++++---------------- 4 files changed, 186 insertions(+), 124 deletions(-) diff --git a/invesalius/control.py b/invesalius/control.py index 2ce7658..e8dc566 100755 --- a/invesalius/control.py +++ b/invesalius/control.py @@ -51,7 +51,14 @@ class Controller(): def __bind_events(self): ps.Publisher().subscribe(self.OnImportMedicalImages, 'Import directory') - ps.Publisher().subscribe(self.StartImportPanel, "Load data to import panel") + #ps.Publisher().subscribe(self.StartImportPanel, "Load data to import panel") + ps.Publisher().subscribe(self.OnShowDialogImportDirectory, + 'Show import directory dialog') + ps.Publisher().subscribe(self.OnShowDialogOpenProject, + 'Show open project dialog') + + ps.Publisher().subscribe(self.OnShowDialogSaveProject, 'Show save dialog') + ps.Publisher().subscribe(self.LoadRaycastingPreset, 'Load raycasting preset') ps.Publisher().subscribe(self.SaveRaycastingPreset, @@ -61,18 +68,82 @@ class Controller(): ps.Publisher().subscribe(self.Progress, "Update dicom load") ps.Publisher().subscribe(self.OnLoadImportPanel, "End dicom load") ps.Publisher().subscribe(self.OnCancelImport, 'Cancel DICOM load') - ps.Publisher().subscribe(self.OnSaveProject, 'Save Project') - ps.Publisher().subscribe(self.OnOpenProject, 'Open Project') + #ps.Publisher().subscribe(self.OnSaveProject, 'Save Project') + #ps.Publisher().subscribe(self.OnOpenProject, 'Open Project') ps.Publisher().subscribe(self.OnCloseProject, 'Close Project') def OnCancelImport(self, pubsub_evt): #self.cancel_import = True ps.Publisher().sendMessage('Hide import panel') + + def OnShowDialogImportDirectory(self, pubsub_evt): + self.ShowDialogImportDirectory() + + def OnShowDialogOpenProject(self, pubsub_evt): + self.ShowDialogOpenProject() + + def OnShowDialogSaveProject(self, pubsub_evt): + saveas = pubsub_evt.data + self.ShowDialogSaveProject(saveas) + +########################### + + def ShowDialogImportDirectory(self): + dirpath = dialog.ShowImportDirDialog() + if dirpath: + self.StartImportPanel(dirpath) + ps.Publisher().sendMessage("Load data to import panel", dirpath) + + def ShowDialogOpenProject(self): + filepath = dialog.ShowOpenProjectDialog() + if filepath: + self.OpenProject(filepath) + + def OpenProject(self, filepath): + path = os.path.abspath(filepath) + + proj = prj.Project() + proj.OpenPlistProject(path) + proj.SetAcquisitionModality(proj.modality) + + session = ses.Session() + session.OpenProject(path) + + self.LoadProject() + + def ShowDialogSaveProject(self, saveas=False): + session = ses.Session() + if saveas: + proj = prj.Project() + filepath = dialog.ShowSaveAsProjectDialog(proj.name) + if filepath: + session.RemoveTemp() + session.OpenProject(filepath) + else: + return + else: + dirpath, filename = session.project_path + filepath = os.path.join(dirpath, filename) - def StartImportPanel(self, pubsub_evt): - # path to directory - path = pubsub_evt.data + self.SaveProject(filepath) + + def SaveProject(self, path=None): + session = ses.Session() + if path: + dirpath, filename = os.path.split(path) + session.SaveProject((dirpath, filename)) + else: + dirpath, filename = session.project_path + + proj = prj.Project() + prj.Project().SavePlistProject(dirpath, filename) + +################################## + + + + def StartImportPanel(self, path): # retrieve DICOM files splited into groups reader = dcm.ProgressDicomReader() @@ -265,59 +336,8 @@ class Controller(): preset_dir = os.path.join(const.USER_RAYCASTING_PRESETS_DIRECTORY, preset_name) plistlib.writePlist(preset, preset_dir) - def OnSaveProject(self, pubsub_evt): - session = ses.Session() - - path = pubsub_evt.data - if path: - print "----- FILENAME" - dirpath, filename = os.path.split(path) - session.SaveProject((dirpath, filename)) - else: - dirpath, filename = session.project_path - - print "$$$$$$$$$$$$$$$$$$$$$$$$$$" - print "filename: ", filename - print "dirpath: ", dirpath - - proj = prj.Project() - prj.Project().SavePlistProject(dirpath, filename) - - - - - #if not(pubsub_evt.data): - # filename = prj.Project().path - #else: - # filename = pubsub_evt.data - #dir_,filename = os.path.split(filename) - - #if not (filename): - # filename = prj.Project().name - #else: - # filename = filename.replace(' ','_') - # prj.Project().name = filename - #prj.Project().path = filename - #print prj.Project().path - - #prj.Project().SavePlistProject(dirpath, filename) - - #session.project_status = const.PROJ_OPEN - #session.project_path = (dirpath, filename) - - def OnOpenProject(self, pubsub_evt): - path = os.path.abspath(pubsub_evt.data) - - proj = prj.Project() - proj.OpenPlistProject(path) - proj.SetAcquisitionModality(proj.modality) - ###proj.path = filename - ###proj.save_as = False - session = ses.Session() - session.OpenProject(path) - self.LoadProject() def OnCloseProject(self, pubsub_evt): print "OnCloseProject" @@ -327,7 +347,12 @@ class Controller(): if (st == const.PROJ_NEW) or (st == const.PROJ_CHANGE): answer = dialog.SaveChangesDialog(filename) if not answer: - print "Delete all" - elif answer > 1: - print "Save" + print "Close without changes" + elif answer == 1: + print "Save changes and close" + #else: + # print "Cancel" + else: + print ":) Close without changes" + diff --git a/invesalius/gui/dialogs.py b/invesalius/gui/dialogs.py index 76839ee..e4ced68 100644 --- a/invesalius/gui/dialogs.py +++ b/invesalius/gui/dialogs.py @@ -47,7 +47,7 @@ class NumberDialog(wx.Dialog): btn_ok.SetDefault() btn_cancel = wx.Button(self, wx.ID_CANCEL) - btn_cancel.SetHelpText("Value will not be applied.)") + btn_cancel.SetHelpText("Value will not be applied.") btnsizer = wx.StdDialogButtonSizer() btnsizer.AddButton(btn_ok) @@ -192,16 +192,80 @@ def ShowSaveAsProjectDialog(default_filename=None): filename = filename + "." + extension return filename + + + + + + + + + + +class MessageDialog(wx.Dialog): + def __init__(self, message): + pre = wx.PreDialog() + pre.Create(None, -1, "InVesalius 3", size=(360, 370), pos=wx.DefaultPosition, + style=wx.DEFAULT_DIALOG_STYLE|wx.ICON_INFORMATION) + self.PostCreate(pre) + + # Static text which contains message to user + label = wx.StaticText(self, -1, message) + + # Buttons + btn_yes = wx.Button(self, wx.ID_YES) + btn_yes.SetHelpText("") + btn_yes.SetDefault() + + btn_no = wx.Button(self, wx.ID_NO) + btn_no.SetHelpText("") + + btn_cancel = wx.Button(self, wx.ID_CANCEL) + btn_cancel.SetHelpText("") + + btnsizer = wx.StdDialogButtonSizer() + btnsizer.AddButton(btn_yes) + btnsizer.AddButton(btn_cancel) + btnsizer.AddButton(btn_no) + btnsizer.Realize() + + + sizer = wx.BoxSizer(wx.VERTICAL) + sizer.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5) + sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL| + wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5) + self.SetSizer(sizer) + sizer.Fit(self) + + self.Centre() + +def SaveChangesDialog__Old(filename): + message = "Save changes to "+filename+"?" + dlg = MessageDialog(message) + + answer = dlg.ShowModal() + dlg.Destroy() + if answer == wx.ID_YES: + return 1 + elif answer == wx.ID_NO: + return 0 + else: + return -1 + + def SaveChangesDialog(filename): - dlg = wx.MessageDialog(None, - "InVesalius 3", - "Save changes to "+filename+"?", - wx.YES | wx.NO | wx.CANCEL | wx.ICON_INFORMATION) - if dlg.ShowModal() == wx.ID_YES: + dlg = wx.MessageDialog(None, "", + "Save changes to "+filename+"?", + wx.ICON_QUESTION | wx.YES_NO | wx.CANCEL) + answer = dlg.ShowModal() + dlg.Destroy() + + if answer == wx.ID_YES: return 1 - elif dlg.ShowModal() == wx.ID_NO: + elif answer == wx.ID_NO: return 0 else: return -1 + diff --git a/invesalius/gui/frame.py b/invesalius/gui/frame.py index 848952a..2e2e1bd 100755 --- a/invesalius/gui/frame.py +++ b/invesalius/gui/frame.py @@ -214,10 +214,7 @@ class Frame(wx.Frame): evt.Skip() def OnMenuClick(self, evt): - #ps.Publisher().sendMessage(("Event from GUI", - # evt.GetId())) id = evt.GetId() - #proj = prj.Project() session = ses.Session() if id == const.ID_DICOM_IMPORT: self.ImportDicom() @@ -237,49 +234,16 @@ class Frame(wx.Frame): self.Exit() def ImportDicom(self): - dirpath = dlg.ShowImportDirDialog() - if dirpath: - ps.Publisher().sendMessage("Load data to import panel", dirpath) + ps.Publisher().sendMessage('Show import directory dialog') def OpenProject(self): - filepath = dlg.ShowOpenProjectDialog() - if filepath: - ps.Publisher().sendMessage('Open Project', filepath) + ps.Publisher().sendMessage('Show open project dialog') def SaveAsProject(self): - self.SaveProject(True) + ps.Publisher().sendMessage('Show save dialog', True) - def SaveProject(self, saveas=False): - - session = ses.Session() - if saveas: - proj = prj.Project() - filepath = dlg.ShowSaveAsProjectDialog(proj.name) - if filepath: - session.RemoveTemp() - session.OpenProject(filepath) - else: - return - else: - dirpath, filename = session.project_path - filepath = os.path.join(dirpath, filename) - ps.Publisher().sendMessage('Save Project',filepath) - - - def SaveAsOld(self): - - filename = (Project().name).replace(' ','_') - filename = dlg.ShowSaveAsProjectDialog(filename) - if filename: - Project().save_as = False - else: - return - self.SaveProject(filename) - - def SaveProjectOld(self, filename=None): - if not filename: - filename = Project().name - ps.Publisher().sendMessage('Save Project',filename) + def SaveProject(self): + ps.Publisher().sendMessage('Show save dialog', False) def CloseProject(self): ps.Publisher().sendMessage('Close Project') diff --git a/invesalius/gui/task_importer.py b/invesalius/gui/task_importer.py index 52eef22..c177af7 100644 --- a/invesalius/gui/task_importer.py +++ b/invesalius/gui/task_importer.py @@ -138,42 +138,51 @@ class InnerTaskPanel(wx.Panel): #self.TestLoadProjects() def OnLinkImport(self, event): - self.LinkImport() + self.ImportDicom() event.Skip() def OnLinkImportPACS(self, event): - self.LinkImportPACS() + self.ImportPACS() event.Skip() def OnLinkOpenProject(self, event): - self.LinkOpenProject() + self.OpenProject() event.Skip() - def LinkImport(self): - dirpath = dlg.ShowImportDirDialog() - if dirpath: - ps.Publisher().sendMessage("Load data to import panel", dirpath) - def LinkImportPACS(self): + def ImportPACS(self): print "TODO: Send Signal - Import DICOM files from PACS" - def LinkOpenProject(self, filename=None): + +####### + def ImportDicom(self): + ps.Publisher().sendMessage('Show import directory dialog') + + def OpenProject(self, filename=None): if filename: - print "TODO: Send Signal - Open inv3 last project" + print "TODO: Send Signal - Open "+filename else: - filepath = dlg.ShowOpenProjectDialog() - if filepath: - ps.Publisher().sendMessage('Open Project', filepath) + ps.Publisher().sendMessage('Show open project dialog') + + def SaveAsProject(self): + ps.Publisher().sendMessage('Show save dialog', True) + + def SaveProject(self): + ps.Publisher().sendMessage('Show save dialog', False) + + def CloseProject(self): + ps.Publisher().sendMessage('Close Project') +####### def OnButton(self, evt): id = evt.GetId() if id == BTN_IMPORT_LOCAL: - self.LinkImport() + self.ImportDicom() elif id == BTN_IMPORT_PACS: - self.LinkImportPACS() + self.ImportPACS() else: #elif id == BTN_OPEN_PROJECT: - self.LinkOpenProject() + self.OpenProject() def TestLoadProjects(self): self.LoadProject("test1.inv3") -- libgit2 0.21.2