Commit fbd518e2bbba9bbc27f84140166d0fa9327eacea
1 parent
dabdb21a
Exists in
master
and in
6 other branches
ENH: (under devel) save session plist
Showing
3 changed files
with
20 additions
and
132 deletions
Show diff stats
.gitattributes
@@ -135,7 +135,6 @@ invesalius/gui/widgets/gradient.py -text | @@ -135,7 +135,6 @@ invesalius/gui/widgets/gradient.py -text | ||
135 | invesalius/gui/widgets/listctrl.py -text | 135 | invesalius/gui/widgets/listctrl.py -text |
136 | invesalius/gui/widgets/slice_menu.py -text | 136 | invesalius/gui/widgets/slice_menu.py -text |
137 | invesalius/invesalius.py -text | 137 | invesalius/invesalius.py -text |
138 | -invesalius/mode.py -text | ||
139 | invesalius/presets.py -text | 138 | invesalius/presets.py -text |
140 | invesalius/project.py -text | 139 | invesalius/project.py -text |
141 | invesalius/reader/__init__.py -text | 140 | invesalius/reader/__init__.py -text |
invesalius/mode.py
@@ -1,128 +0,0 @@ | @@ -1,128 +0,0 @@ | ||
1 | -#-------------------------------------------------------------------------- | ||
2 | -# Software: InVesalius - Software de Reconstrucao 3D de Imagens Medicas | ||
3 | -# Copyright: (C) 2001 Centro de Pesquisas Renato Archer | ||
4 | -# Homepage: http://www.softwarepublico.gov.br | ||
5 | -# Contact: invesalius@cti.gov.br | ||
6 | -# License: GNU - GPL 2 (LICENSE.txt/LICENCA.txt) | ||
7 | -#-------------------------------------------------------------------------- | ||
8 | -# Este programa e software livre; voce pode redistribui-lo e/ou | ||
9 | -# modifica-lo sob os termos da Licenca Publica Geral GNU, conforme | ||
10 | -# publicada pela Free Software Foundation; de acordo com a versao 2 | ||
11 | -# da Licenca. | ||
12 | -# | ||
13 | -# Este programa eh distribuido na expectativa de ser util, mas SEM | ||
14 | -# QUALQUER GARANTIA; sem mesmo a garantia implicita de | ||
15 | -# COMERCIALIZACAO ou de ADEQUACAO A QUALQUER PROPOSITO EM | ||
16 | -# PARTICULAR. Consulte a Licenca Publica Geral GNU para obter mais | ||
17 | -# detalhes. | ||
18 | -#-------------------------------------------------------------------------- | ||
19 | - | ||
20 | -import wx.lib.pubsub as ps | ||
21 | - | ||
22 | - | ||
23 | -# mode.py | ||
24 | -# to be instanced inside Controller (control.py) | ||
25 | - | ||
26 | - | ||
27 | - | ||
28 | -# IMPORTANT: When adding a new state, remember o insert it into LEVEL | ||
29 | -# dictionary | ||
30 | - | ||
31 | - | ||
32 | -# RULE: | ||
33 | -# default is the only level 0 | ||
34 | -# states controlled somehow by taskmenu are level 1 | ||
35 | -# states controlled by toolbar are level 2 | ||
36 | -#LEVEL = {SLICE_STATE_DEFAULT: 0, | ||
37 | -# SLICE_STATE_EDITOR: 1, | ||
38 | -# SLICE_STATE_WL: 2, | ||
39 | -# SLICE_STATE_SPIN: 2, | ||
40 | -# SLICE_STATE_ZOOM: 2, | ||
41 | -# SLICE_STATE_ZOOM_SL: 2} | ||
42 | -#---------------------- | ||
43 | -# TODO: Add to viewer_slice.py: | ||
44 | - | ||
45 | -#ps.Publisher().subscribe(self.OnSetMode, 'Set slice mode') | ||
46 | - | ||
47 | -#def OnSetMode(self, pubsub_evt): | ||
48 | -# mode = pubsub_evt.data | ||
49 | - # according to mode, set cursor, interaction, etc | ||
50 | -#---------------------- | ||
51 | -# TODO: Add GUI classes (frame, tasks related to slice, toolbar): | ||
52 | - | ||
53 | -# always bind to this class (regarding slice mode) and not to | ||
54 | -# viewer_slice directly | ||
55 | - | ||
56 | -# example - pseudo code | ||
57 | -#def OnToggleButtonSpin(self, evt) | ||
58 | -# if evt.toggle: # doesn't exist, just to illustrate | ||
59 | -# ps.Publisher().sendMessage('Enable mode', const.SLICE_STATE_ZOOM) | ||
60 | -# else: | ||
61 | -# ps.Publisher().subscribe('Disable mode', const.SLICE_STATE_ZOOM) | ||
62 | - | ||
63 | - | ||
64 | -#---------------------- | ||
65 | - | ||
66 | - | ||
67 | -import constants as const | ||
68 | - | ||
69 | -class SliceMode(object): | ||
70 | -# don't need to be singleton, only needs to be instantiated inside | ||
71 | -# (Controller) self.slice_mode = SliceMode() | ||
72 | - | ||
73 | - def __init__(self): | ||
74 | - self.stack = {} | ||
75 | - | ||
76 | - # push default value to stack | ||
77 | - self.stack[const.LEVEL[const.STATE_DEFAULT]] = \ | ||
78 | - const.STATE_DEFAULT | ||
79 | - print "Foi chamando............................." | ||
80 | - # bind pubsub evt | ||
81 | - self.__bind_events() | ||
82 | - | ||
83 | - def __bind_events(self): | ||
84 | - print "__bind_events" | ||
85 | - ps.Publisher().subscribe(self.OnEnableState, 'Enable mode') | ||
86 | - ps.Publisher().subscribe(self.OnDisableState, 'Disable mode') | ||
87 | - | ||
88 | - def OnEnableState(self, pubsub_evt): | ||
89 | - state = pubsub_evt.data | ||
90 | - self.AddState(state) | ||
91 | - | ||
92 | - def OnDisableState(self, pubsub_evt): | ||
93 | - state = pubsub_evt.data | ||
94 | - self.RemoveState(state) | ||
95 | - | ||
96 | - def AddState(self, state): | ||
97 | - | ||
98 | - level = const.LEVEL[state] | ||
99 | - max_level = max(self.stack.keys()) | ||
100 | - | ||
101 | - # Insert new state into stack | ||
102 | - self.stack[level] = state | ||
103 | - | ||
104 | - ps.Publisher().sendMessage('Set slice mode', state) | ||
105 | - | ||
106 | - def RemoveState(self, state): | ||
107 | - level = const.LEVEL[state] | ||
108 | - max_level = max(self.stack.keys()) | ||
109 | - | ||
110 | - # Remove item from stack | ||
111 | - | ||
112 | - self.stack.pop(level) | ||
113 | - | ||
114 | - # New max level | ||
115 | - new_max_level = max(self.stack.keys()) | ||
116 | - | ||
117 | - # Only will affect InVesalius behaviour if the highest | ||
118 | - # level in stack has been removed | ||
119 | - if level == max_level: | ||
120 | - new_state = self.stack[new_max_level] | ||
121 | - | ||
122 | - #Case one state in the stack | ||
123 | - if(len(self.stack) == 1): | ||
124 | - state = self.stack[self.stack.keys()[0]] | ||
125 | - | ||
126 | - ps.Publisher().sendMessage('Set slice mode', state) | ||
127 | - | ||
128 | - | ||
129 | \ No newline at end of file | 0 | \ No newline at end of file |
invesalius/session.py
@@ -4,12 +4,13 @@ import constants as const | @@ -4,12 +4,13 @@ import constants as const | ||
4 | from utils import Singleton | 4 | from utils import Singleton |
5 | 5 | ||
6 | class Session(object): | 6 | class Session(object): |
7 | - # Only one project will be initialized per time. Therefore, we use | 7 | + # Only one session will be initialized per time. Therefore, we use |
8 | # Singleton design pattern for implementing it | 8 | # Singleton design pattern for implementing it |
9 | __metaclass__= Singleton | 9 | __metaclass__= Singleton |
10 | 10 | ||
11 | def __init__(self): | 11 | def __init__(self): |
12 | self.project_path = () | 12 | self.project_path = () |
13 | + self.debug = False | ||
13 | 14 | ||
14 | self.project_status = const.PROJ_CLOSE | 15 | self.project_status = const.PROJ_CLOSE |
15 | # const.PROJ_NEW*, const.PROJ_OPEN, const.PROJ_CHANGE*, | 16 | # const.PROJ_NEW*, const.PROJ_OPEN, const.PROJ_CHANGE*, |
@@ -32,12 +33,14 @@ class Session(object): | @@ -32,12 +33,14 @@ class Session(object): | ||
32 | self.recent_projects = [] | 33 | self.recent_projects = [] |
33 | 34 | ||
34 | def CloseProject(self): | 35 | def CloseProject(self): |
36 | + print "-- CloseProject" | ||
35 | self.project_path = () | 37 | self.project_path = () |
36 | self.project_status = const.PROJ_CLOSE | 38 | self.project_status = const.PROJ_CLOSE |
37 | self.mode = const.MODE_RP | 39 | self.mode = const.MODE_RP |
38 | self.temp_item = False | 40 | self.temp_item = False |
39 | 41 | ||
40 | def SaveProject(self, path=()): | 42 | def SaveProject(self, path=()): |
43 | + print "-- SaveProject" | ||
41 | self.project_status = const.PROJ_OPEN | 44 | self.project_status = const.PROJ_OPEN |
42 | if path: | 45 | if path: |
43 | self.project_path = path | 46 | self.project_path = path |
@@ -46,17 +49,19 @@ class Session(object): | @@ -46,17 +49,19 @@ class Session(object): | ||
46 | self.temp_item = False | 49 | self.temp_item = False |
47 | 50 | ||
48 | def ChangeProject(self): | 51 | def ChangeProject(self): |
52 | + print "-- ChangeProject" | ||
49 | self.project_status = const.PROJ_CHANGE | 53 | self.project_status = const.PROJ_CHANGE |
50 | 54 | ||
51 | def CreateProject(self, filename): | 55 | def CreateProject(self, filename): |
56 | + print "-- CreateProject" | ||
52 | # Set session info | 57 | # Set session info |
53 | self.project_path = (self.invdir, filename) | 58 | self.project_path = (self.invdir, filename) |
54 | self.project_status = const.PROJ_NEW | 59 | self.project_status = const.PROJ_NEW |
55 | self.temp_item = True | 60 | self.temp_item = True |
56 | return self.invdir | 61 | return self.invdir |
57 | - | ||
58 | 62 | ||
59 | def OpenProject(self, filepath): | 63 | def OpenProject(self, filepath): |
64 | + print "-- OpenProject" | ||
60 | # Add item to recent projects list | 65 | # Add item to recent projects list |
61 | item = (path, file) = os.path.split(filepath) | 66 | item = (path, file) = os.path.split(filepath) |
62 | self.__add_to_list(item) | 67 | self.__add_to_list(item) |
@@ -88,4 +93,16 @@ class Session(object): | @@ -88,4 +93,16 @@ class Session(object): | ||
88 | if len(l)>const.PROJ_MAX: | 93 | if len(l)>const.PROJ_MAX: |
89 | for i in xrange(len(l)-const.PROJ_MAX): | 94 | for i in xrange(len(l)-const.PROJ_MAX): |
90 | l.pop() | 95 | l.pop() |
91 | - | 96 | + |
97 | + def SavePlist(self): | ||
98 | + filename = 'session.conf' | ||
99 | + filepath = os.join(self.invdir, filename) | ||
100 | + plistlib.writePlist(self.__dict__, filepath) | ||
101 | + | ||
102 | + def OpenPlist(self): | ||
103 | + filename = 'session.conf' | ||
104 | + filepath = os.join(self.invdir, filename) | ||
105 | + # TODO: try/except | ||
106 | + dict = plistlib.readPlist(main_plist) | ||
107 | + for key in dict: | ||
108 | + setattr(self, key, dict[key]) |