3 # Author: Martin Willemoes Hansen
6 # Next two lines are a workaround for Debian bug 163794
19 RESOURCE_DIR
='/usr/share/games/jumpnbump'
20 BINARY_DIR
='/usr/games'
22 def populate_treeview():
24 for file in os
.listdir (RESOURCE_DIR
):
25 if (file.endswith ('.dat')):
31 store
= gtk
.ListStore (gobject
.TYPE_STRING
)
35 store
.set (iter, COLUMN_LEVEL
, level
)
37 treeview
.set_model (store
)
39 renderer
= gtk
.CellRendererText()
40 treeview
.append_column (gtk
.TreeViewColumn ('Level', renderer
, text
=COLUMN_LEVEL
))
42 def standalone_mode (widget
):
43 disable_enable_level (1)
44 disable_enable_server (0)
45 num_clients
.set_sensitive (0)
46 nogore
.set_sensitive (1)
47 noflies
.set_sensitive (1)
49 def client_mode (widget
):
50 disable_enable_level (1)
51 disable_enable_server (1)
52 num_clients
.set_sensitive (0)
53 nogore
.set_sensitive (1)
54 noflies
.set_sensitive (1)
56 def server_mode (widget
):
57 disable_enable_level (1)
58 disable_enable_server (0)
59 num_clients
.set_sensitive (1)
60 nogore
.set_sensitive (1)
61 noflies
.set_sensitive (1)
63 def fireworks_mode (widget
):
64 disable_enable_level (0)
65 disable_enable_server (0)
66 nogore
.set_sensitive (0)
68 noflies
.set_sensitive (0)
69 noflies
.set_active (0)
71 def disable_enable_server (setting
):
72 server_entry
.set_sensitive (setting
)
73 player_num
.set_sensitive (setting
)
75 def disable_enable_level (setting
):
76 treeview
.set_sensitive (setting
)
77 mirror
.set_sensitive (setting
)
79 mirror
.set_active (setting
)
81 def level_changed (widget
):
82 model
, iter = treeview
.get_selection().get_selected()
84 choosen_level
= '%s/%s' % (RESOURCE_DIR
, model
.get_value (iter, 0))
87 unpackdir
= tempfile
.mkdtemp ("", "jumpnbump-menu-")
89 os
.spawnlp (os
.P_WAIT
, 'jumpnbump-unpack', 'jumpnbump', choosen_level
)
90 os
.spawnlp (os
.P_WAIT
, 'convert', 'convert', '-scale', '50%', 'level.pcx', 'level_scaled.pcx')
91 os
.spawnlp (os
.P_WAIT
, 'convert', 'convert', 'level_scaled.pcx', 'level.png')
92 image
.set_from_file ('level.png')
93 except Exception, err
:
96 shutil
.rmtree (unpackdir
)
103 if (not about_dialog
):
104 gui
= gtk
.glade
.XML (gladefile
, 'about')
105 about_dialog
= gui
.get_widget ('about')
106 gui
.signal_connect ('ok', about_close
)
108 def about_close (widget
):
111 about_dialog
.destroy()
115 if (standalone
.get_active()):
116 execute (*get_level()+common_options())
117 elif (fireworks
.get_active()):
118 execute ('-fireworks', *common_options())
119 elif (client
.get_active()):
120 execute ('-player', str (player_num
.get_value_as_int()),
121 '-connect', server_entry
.get_text(),
122 *get_level() + common_options())
124 execute ('-server', str (num_clients
.get_value_as_int()),
125 *get_level() + common_options())
129 if (mirror
.get_active()):
130 level
.append ('-mirror')
132 level
.append ('-dat')
133 level
.append (choosen_level
)
137 def common_options():
140 if (fullscreen
.get_active()):
141 options
.append ('-fullscreen')
142 if (nogore
.get_active()):
143 options
.append ('-nogore')
144 if (double_res
.get_active()):
145 options
.append ('-scaleup')
146 if (nosound
.get_active()):
147 options
.append ('-nosound')
148 if (noflies
.get_active()):
149 options
.append ('-noflies')
150 if (withmusic
.get_active()):
151 options
.append ('-musicnosound')
152 if (mirror
.get_active()):
153 options
.append ('-mirror')
159 os
.spawnl (os
.P_NOWAIT
, BINARY_DIR
+ '/jumpnbump', 'jumpnbump', *cmd
)
160 except Exception, err
:
166 global_gladefile
= RESOURCE_DIR
+ '/jumpnbump_menu.glade'
167 local_gladefile
= './jumpnbump_menu.glade'
169 if (os
.access (global_gladefile
, os
.R_OK
)):
170 gladefile
= global_gladefile
172 elif (os
.access (local_gladefile
, os
.R_OK
)):
173 gladefile
= local_gladefile
176 print 'Could not find the glade file'
179 gui
= gtk
.glade
.XML (gladefile
, 'main')
181 global about_dialog
, choosen_level
, standalone
, fireworks
, client
, server
, treeview
, \
182 mirror
, num_clients
, server_entry
, player_num
, fullscreen
, \
183 nogore
, double_res
, nosound
, noflies
, withmusic
, image
187 standalone
= gui
.get_widget ('standalone')
188 fireworks
= gui
.get_widget ('fireworks')
189 client
= gui
.get_widget ('client')
190 server
= gui
.get_widget ('server')
191 treeview
= gui
.get_widget ('level_treeview')
193 mirror
= gui
.get_widget ('mirror')
194 num_clients
= gui
.get_widget ('num_of_clients')
195 server_entry
= gui
.get_widget ('server_entry')
196 player_num
= gui
.get_widget ('player_num')
197 fullscreen
= gui
.get_widget ('fullscreen')
198 nogore
= gui
.get_widget ('nogore')
199 double_res
= gui
.get_widget ('double_res')
200 nosound
= gui
.get_widget ('nosound')
201 noflies
= gui
.get_widget ('noflies')
202 withmusic
= gui
.get_widget ('withmusic')
203 image
= gui
.get_widget ('image')
205 gui
.signal_autoconnect ({'standalone_mode': standalone_mode
,
206 'client_mode': client_mode
,
207 'server_mode': server_mode
,
208 'fireworks_mode': fireworks_mode
,
209 'level_changed': level_changed
,
210 'quit': lambda *args
: gtk
.main_quit(),
216 if __name__
== '__main__':