2 from rox
import g
, TRUE
, FALSE
, saving
5 from Ft
.Xml
.Domlette
import PrettyPrint
10 from rox
.saving
import SaveBox
14 from codecs
import lookup
15 utf8_encoder
= lookup('UTF-8')[0]
17 class Window(rox
.Window
, saving
.Saveable
):
18 def __init__(self
, path
= None, data
= None):
19 # 'data' is used when 'path' is a stylesheet...
20 rox
.Window
.__init
__(self
)
22 # Make it square, to cope with Xinerama
23 size
= min(g
.gdk
.screen_width(), g
.gdk
.screen_height())
26 self
.set_default_size(size
, size
)
27 self
.set_position(g
.WIN_POS_CENTER
)
35 path
= os
.path
.abspath(path
)
38 self
.model
= Model
.Model(path
, dome_data
= data
)
42 from GUIView
import GUIView
45 vbox
= g
.VBox(FALSE
, 0)
49 tools
.set_style(g
.TOOLBAR_ICONS
)
50 vbox
.pack_start(tools
, FALSE
, TRUE
, 0)
53 tools
.insert_stock(g
.STOCK_HELP
, 'Help', None, self
.tool_help
, None, 0)
54 tools
.insert_stock(g
.STOCK_JUMP_TO
, 'Step', None, self
.tool_step
, None, 0)
55 tools
.insert_stock(g
.STOCK_GO_FORWARD
, 'Next', None, self
.tool_next
, None, 0)
56 tools
.insert_stock(g
.STOCK_GOTO_LAST
, 'Play', None, self
.tool_play
, None, 0)
57 tools
.insert_stock(g
.STOCK_STOP
, 'Stop', None, self
.tool_stop
, None, 0)
58 tools
.insert_stock(g
.STOCK_NO
, 'Record', None, self
.tool_record
, None, 0)
59 tools
.insert_stock(g
.STOCK_SAVE
, 'Save', None, self
.tool_save
, None, 0)
62 vbox
.pack_start(paned
)
65 view
= View
.View(self
.model
)
67 self
.list = List(view
)
71 swin
= g
.ScrolledWindow()
72 swin
.set_policy(g
.POLICY_AUTOMATIC
, g
.POLICY_ALWAYS
)
74 paned
.set_position(200)
76 self
.gui_view
= GUIView(self
, view
)
77 swin
.add(self
.gui_view
)
78 #swin.set_hadjustment(self.gui_view.get_hadjustment())
79 #swin.set_vadjustment(self.gui_view.get_vadjustment())
83 self
.gui_view
.grab_focus()
86 def delete(window
, event
):
87 if self
.model
.root_program
.modified
:
88 self
.save(discard
= 1)
91 self
.connect('delete-event', delete
)
96 def set_state(self
, state
):
97 if state
== self
.dome_state
:
100 self
.dome_state
= " " + state
106 def update_title(self
):
107 title
= self
.model
.uri
108 self
.set_title(title
+ self
.dome_state
)
110 def save(self
, discard
= 0):
112 self
.savebox
.destroy()
113 path
= self
.model
.uri
115 self
.savebox
= saving
.SaveBox(self
, path
,
116 'application/x-dome', discard
= discard
)
117 toggle
= g
.CheckButton("Export XML")
119 self
.savebox
.toggle_export_xml
= toggle
120 self
.savebox
.vbox
.pack_start(toggle
)
123 def write(self
, text
):
124 if type(text
) == unicode:
125 text
= utf8_encoder(text
)[0]
126 self
.output_data
.write(text
)
128 def save_to_stream(self
, stream
):
129 export
= self
.savebox
.toggle_export_xml
.get_active()
131 print "Saving", self
.view
.root
132 self
.view
.model
.strip_space()
134 doc
= self
.view
.model
.doc
136 doc
= self
.view
.export_all()
138 print "Writing data..."
140 PrettyPrint(doc
, stream
)
142 def set_uri(self
, uri
):
143 if not self
.savebox
.toggle_export_xml
.get_active():
145 self
.model
.root_program
.modified
= 0
150 def tool_save(self
, button
= None):
153 def tool_stop(self
, button
= None):
154 if self
.view
.rec_point
:
155 self
.view
.stop_recording()
156 if self
.view
.running():
157 self
.view
.single_step
= 1
161 def tool_play(self
, button
= None):
162 from View
import InProgress
, Done
163 # Step first, in case we're on a breakpoint
164 self
.view
.single_step
= 1
166 self
.view
.do_one_step()
167 except InProgress
, Done
:
169 self
.view
.single_step
= 0
172 def tool_next(self
, button
= None):
173 from View
import InProgress
, Done
174 self
.view
.single_step
= 2
176 self
.view
.do_one_step()
177 except InProgress
, Done
:
180 def tool_step(self
, button
= None):
181 from View
import InProgress
, Done
182 self
.view
.single_step
= 1
184 self
.view
.do_one_step()
185 except InProgress
, Done
:
188 def tool_record(self
, button
= None):
189 if self
.view
.rec_point
:
190 self
.view
.stop_recording()
192 self
.view
.record_at_point()
194 def tool_help(self
, button
= None):
195 rox
.filer
.show_file(os
.path
.join(rox
.app_dir
, 'Help', 'README'))