Set background colour when hiding/showing.
[dom-editor.git] / Dome / Window.py
blobbe6db3258f245896c0c1e5716671ef1247c3434f
1 import rox
2 from rox import g, TRUE, FALSE, saving
4 import os.path
5 from Ft.Xml.Domlette import PrettyPrint
7 import __main__
9 #from support import *
10 from rox.saving import SaveBox
12 code = None
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())
24 size = size * 3 / 4
26 self.set_default_size(size, size)
27 self.set_position(g.WIN_POS_CENTER)
28 self.savebox = None
30 self.show()
31 g.gdk.flush()
33 if path:
34 import os.path
35 path = os.path.abspath(path)
37 import Model
38 self.model = Model.Model(path, dome_data = data)
39 self.gui_view = None
40 self.dome_state = ""
42 from GUIView import GUIView
43 from List import List
45 vbox = g.VBox(FALSE, 0)
46 self.add(vbox)
48 tools = g.Toolbar()
49 tools.set_style(g.TOOLBAR_ICONS)
50 vbox.pack_start(tools, FALSE, TRUE, 0)
51 tools.show()
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)
61 paned = g.HPaned()
62 vbox.pack_start(paned)
64 import View
65 view = View.View(self.model)
66 self.view = view
67 self.list = List(view)
68 paned.add1(self.list)
69 self.list.show()
71 swin = g.ScrolledWindow()
72 swin.set_policy(g.POLICY_AUTOMATIC, g.POLICY_ALWAYS)
73 paned.add2(swin)
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())
81 vbox.show_all()
83 self.gui_view.grab_focus()
84 self.update_title()
86 def delete(window, event):
87 if self.model.root_program.modified:
88 self.save(discard = 1)
89 return 1
90 return 0
91 self.connect('delete-event', delete)
93 def discard(self):
94 self.destroy()
96 def set_state(self, state):
97 if state == self.dome_state:
98 return
99 if state:
100 self.dome_state = " " + state
101 else:
102 self.dome_state = ""
104 self.update_title()
106 def update_title(self):
107 title = self.model.uri
108 self.set_title(title + self.dome_state)
110 def save(self, discard = 0):
111 if self.savebox:
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")
118 toggle.show()
119 self.savebox.toggle_export_xml = toggle
120 self.savebox.vbox.pack_start(toggle)
121 self.savebox.show()
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()
133 if export:
134 doc = self.view.model.doc
135 else:
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():
144 self.model.uri = uri
145 self.model.root_program.modified = 0
146 self.update_title()
148 # Toolbar bits
150 def tool_save(self, button = None):
151 self.save()
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
158 else:
159 self.view.run_new()
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
165 try:
166 self.view.do_one_step()
167 except InProgress, Done:
168 pass
169 self.view.single_step = 0
170 self.view.sched()
172 def tool_next(self, button = None):
173 from View import InProgress, Done
174 self.view.single_step = 2
175 try:
176 self.view.do_one_step()
177 except InProgress, Done:
178 pass
180 def tool_step(self, button = None):
181 from View import InProgress, Done
182 self.view.single_step = 1
183 try:
184 self.view.do_one_step()
185 except InProgress, Done:
186 pass
188 def tool_record(self, button = None):
189 if self.view.rec_point:
190 self.view.stop_recording()
191 else:
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'))