[game-data-packager] 02/02: doom2 masterlevels: rewrite in OO style
Alexandre Detiste
detiste-guest at moszumanska.debian.org
Sun Apr 19 10:34:49 UTC 2015
This is an automated email from the git hooks/post-receive script.
detiste-guest pushed a commit to branch master
in repository game-data-packager.
commit f287c064af229cba1c243799050529f5535b8b0b
Author: Alexandre Detiste <alexandre.detiste at gmail.com>
Date: Sun Apr 19 12:33:59 2015 +0200
doom2 masterlevels: rewrite in OO style
---
runtime/doom2-masterlevels.py | 347 ++++++++++++++++++++++--------------------
1 file changed, 182 insertions(+), 165 deletions(-)
diff --git a/runtime/doom2-masterlevels.py b/runtime/doom2-masterlevels.py
index 4bf7313..e83bc00 100755
--- a/runtime/doom2-masterlevels.py
+++ b/runtime/doom2-masterlevels.py
@@ -22,7 +22,6 @@ import subprocess
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Pango
-warp = None
# wad : (warp, longname, 'http://doomwiki.org/wiki/' + url)
levels = {
'attack.wad': ( 1, 'Attack' , 'MAP01:_Attack_(Master_Levels)'),
@@ -67,167 +66,185 @@ for level in levels.keys():
md.run()
exit(message)
-window = Gtk.Window()
-window.set_default_size(1020, 800)
-if os.path.isfile('/usr/share/pixmaps/doom2.png'):
- window.set_icon_from_file('/usr/share/pixmaps/doom2.png')
-window.connect("destroy", lambda q: Gtk.main_quit())
-
-grid = Gtk.Grid()
-grid.set_row_spacing(5)
-grid.set_column_spacing(5)
-window.add(grid)
-
-# level list
-games = Gtk.ListStore(str, int)
-description = dict()
-for wad in sorted(levels.keys()):
- game = os.path.splitext(os.path.basename(wad))[0]
- games.append([game, levels[wad][0] ])
- txt = '/usr/share/doc/doom2-masterlevels-wad/%s.txt' % game
- try:
- with open(txt, 'r', encoding='latin1') as f:
- description[game] = f.read()
- except (PermissionError, FileNotFoundError):
- description[game] = "failed to read " + txt
-
-treeview = Gtk.TreeView(model=games)
-grid.attach(treeview, 0, 0, 1, 8)
-
-treeviewcolumn = Gtk.TreeViewColumn("Wad")
-treeview.append_column(treeviewcolumn)
-cellrenderertext = Gtk.CellRendererText()
-treeviewcolumn.pack_start(cellrenderertext, True)
-treeviewcolumn.add_attribute(cellrenderertext, "text", 0)
-
-treeviewcolumn = Gtk.TreeViewColumn("Map")
-treeview.append_column(treeviewcolumn)
-cellrenderertext = Gtk.CellRendererText()
-treeviewcolumn.pack_start(cellrenderertext, True)
-treeviewcolumn.add_attribute(cellrenderertext, "text", 1)
-
-def tooltip_query(treeview, x, y, mode, tooltip):
- path = treeview.get_path_at_pos(x, y - 30) # FIXME
- if path:
- treepath, column = path[:2]
- model = treeview.get_model()
- iter = model.get_iter(treepath)
- game, warp = model[iter]
- wad = game + '.wad'
- if game == 'teeth' and warp == 32: wad += '*'
- tooltip.set_text(levels[wad][1])
- return True
-
-treeview.connect("query-tooltip", tooltip_query)
-treeview.set_tooltip_column(0)
-
-
-# header
-label = Gtk.Label()
-label.set_markup("<span size='xx-large'>Doom II Master Levels</span>")
-grid.attach(label, 1, 0, 1, 1)
-
-logo = Gtk.Image()
-logo.set_from_file('/usr/share/pixmaps/doom2.png')
-grid.attach(logo, 2, 0, 1, 1)
-
-# description
-scrolledwindow = Gtk.ScrolledWindow()
-scrolledwindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
-grid.attach(scrolledwindow, 1, 1, 2, 1)
-
-textbuffer = Gtk.TextBuffer()
-textbuffer.set_text('Please select a map from the list on the left')
-
-textview = Gtk.TextView(buffer=textbuffer)
-textview.set_vexpand(True)
-textview.set_hexpand(True)
-textview.set_property('editable', False)
-textview.modify_font(Pango.FontDescription('Monospace 11'))
-scrolledwindow.add(textview)
-
-doomwiki = Gtk.LinkButton("http://doomwiki.org/wiki/Master_Levels_for_Doom_II",
- label="http://doomwiki.org/wiki/Master_Levels_for_Doom_II")
-grid.attach(doomwiki, 1, 2, 2, 1)
-
-# difficulty
-difflabel = Gtk.Label("Choose your difficulty")
-grid.attach(difflabel, 1, 3, 2, 1)
-
-diffgrid = Gtk.Grid()
-diffradio = Gtk.RadioButton(group=None, label="1) I'm too young to die")
-diffgrid.attach(diffradio, 0, 0, 1, 1)
-for diff in ["2) Hey, Not too Rough",
- "3) Hurt me plenty",
- "4) Ultra Violence",
- "5) Nightmare!"]:
- radiobutton = Gtk.RadioButton(group=diffradio, label=diff)
- if diff[0] == '3':
- radiobutton.set_active(True)
- diffgrid.attach(radiobutton, 0, int(diff[0]), 1, 1)
-grid.attach(diffgrid, 1, 4, 2, 1)
-
-# engine
-label = Gtk.Label("Choose your engine")
-grid.attach(label, 1, 4, 2, 1)
-radiogrid = Gtk.Grid()
-default = os.readlink('/etc/alternatives/doom')
-radiobuttonDefault = Gtk.RadioButton(group=None, label="%s (default)" % default)
-radiogrid.attach(radiobuttonDefault, 0, 0, 1, 1)
-i = 1
-proc = subprocess.Popen(['update-alternatives', '--list', 'doom'], stdout=subprocess.PIPE, universal_newlines=True)
-
-for alternative in proc.stdout:
- alternative = alternative.strip()
- if alternative == default:
- continue
- radiobutton = Gtk.RadioButton(group=radiobuttonDefault, label=alternative)
- i += 1
- radiogrid.attach(radiobutton, 0, i, i, 1)
-grid.attach(radiogrid, 1, 5, 2, 1)
-
-
-# Run !
-button_exec = Gtk.Button(label="Run")
-button_exec.set_sensitive(False)
-grid.attach(button_exec, 1, 6, 1, 1)
-button_quit = Gtk.Button(label="Exit")
-grid.attach(button_quit, 2, 6, 1, 1)
-
-def select_game(event):
- global game, warp, button_exec
- button_exec.set_sensitive(True)
- (model, pathlist) = treeview.get_selection().get_selected_rows()
- for path in pathlist:
- tree_iter = model.get_iter(path)
- game, warp = model[tree_iter]
- textbuffer.set_text(description[game])
- wad = game + '.wad'
- if game == 'teeth' and warp == 32: wad += '*'
- url = 'http://doomwiki.org/wiki/' + levels[wad][2]
- doomwiki.set_uri(url)
- doomwiki.set_label(url)
-
-def run_game(event):
- for button in diffradio.get_group():
- if button.get_active():
- difficulty = button.get_label()[0]
- break
- for button in radiobuttonDefault.get_group():
- if button.get_active():
- engine = [button.get_label().split(' ')[0]]
- break
- if 'doomsday' in engine[0]:
- engine = ['doomsday', '-game', 'doom2']
-
- if warp:
- subprocess.call(engine + ['-file', '/usr/share/games/doom/%s.wad' % game,
- '-warp', '%d' % warp, '-skill', difficulty])
-
-treeview.connect("cursor-changed", select_game)
-button_exec.connect("clicked", run_game)
-button_quit.connect("clicked", Gtk.main_quit)
-
-window.show_all()
-
-Gtk.main()
+class Launcher:
+ def delete_event(self, widget, event, data=None):
+ return False
+
+ def destroy(self, widget, data=None):
+ gtk.main_quit()
+
+ def __init__(self):
+ self.game = None
+ self.warp = None
+
+ self.window = Gtk.Window()
+ self.window.set_default_size(1020, 800)
+ if os.path.isfile('/usr/share/pixmaps/doom2.png'):
+ self.window.set_icon_from_file('/usr/share/pixmaps/doom2.png')
+
+ grid = Gtk.Grid()
+ grid.set_row_spacing(5)
+ grid.set_column_spacing(5)
+ self.window.add(grid)
+
+ # level list
+ games = Gtk.ListStore(str, int)
+ self.description = dict()
+ for wad in sorted(levels.keys()):
+ game = os.path.splitext(os.path.basename(wad))[0]
+ games.append([game, levels[wad][0] ])
+ txt = '/usr/share/doc/doom2-masterlevels-wad/%s.txt' % game
+ try:
+ with open(txt, 'r', encoding='latin1') as f:
+ self.description[game] = f.read()
+ except (PermissionError, FileNotFoundError):
+ self.description[game] = "failed to read " + txt
+
+ self.treeview = Gtk.TreeView(model=games)
+ grid.attach(self.treeview, 0, 0, 1, 8)
+
+ treeviewcolumn = Gtk.TreeViewColumn("Wad")
+ self.treeview.append_column(treeviewcolumn)
+ cellrenderertext = Gtk.CellRendererText()
+ treeviewcolumn.pack_start(cellrenderertext, True)
+ treeviewcolumn.add_attribute(cellrenderertext, "text", 0)
+
+ treeviewcolumn = Gtk.TreeViewColumn("Map")
+ self.treeview.append_column(treeviewcolumn)
+ cellrenderertext = Gtk.CellRendererText()
+ treeviewcolumn.pack_start(cellrenderertext, True)
+ treeviewcolumn.add_attribute(cellrenderertext, "text", 1)
+
+ self.treeview.connect("query-tooltip", self.tooltip_query)
+ self.treeview.set_tooltip_column(0)
+ self.treeview.connect("cursor-changed", self.select_game)
+
+ # header
+ label = Gtk.Label()
+ label.set_markup("<span size='xx-large'>Doom II Master Levels</span>")
+ grid.attach(label, 1, 0, 1, 1)
+
+ logo = Gtk.Image()
+ logo.set_from_file('/usr/share/pixmaps/doom2.png')
+ grid.attach(logo, 2, 0, 1, 1)
+
+ # description
+ scrolledwindow = Gtk.ScrolledWindow()
+ scrolledwindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+ grid.attach(scrolledwindow, 1, 1, 2, 1)
+
+ self.textbuffer = Gtk.TextBuffer()
+ self.textbuffer.set_text('Please select a map from the list on the left')
+
+ textview = Gtk.TextView(buffer=self.textbuffer)
+ textview.set_vexpand(True)
+ textview.set_hexpand(True)
+ textview.set_property('editable', False)
+ textview.modify_font(Pango.FontDescription('Monospace 11'))
+ scrolledwindow.add(textview)
+
+ self.doomwiki = Gtk.LinkButton("http://doomwiki.org/wiki/Master_Levels_for_Doom_II",
+ label="http://doomwiki.org/wiki/Master_Levels_for_Doom_II")
+ grid.attach(self.doomwiki, 1, 2, 2, 1)
+
+ # difficulty
+ difflabel = Gtk.Label("Choose your difficulty")
+ grid.attach(difflabel, 1, 3, 2, 1)
+
+ diffgrid = Gtk.Grid()
+ self.diffradio = Gtk.RadioButton(group=None, label="1) I'm too young to die")
+ diffgrid.attach(self.diffradio, 0, 0, 1, 1)
+ for diff in ["2) Hey, Not too Rough",
+ "3) Hurt me plenty",
+ "4) Ultra Violence",
+ "5) Nightmare!"]:
+ radiobutton = Gtk.RadioButton(group=self.diffradio, label=diff)
+ if diff[0] == '3':
+ radiobutton.set_active(True)
+ diffgrid.attach(radiobutton, 0, int(diff[0]), 1, 1)
+ grid.attach(diffgrid, 1, 4, 2, 1)
+
+ # engine
+ label = Gtk.Label("Choose your engine")
+ grid.attach(label, 1, 4, 2, 1)
+ radiogrid = Gtk.Grid()
+ default = os.readlink('/etc/alternatives/doom')
+ self.radiobuttonDefault = Gtk.RadioButton(group=None, label="%s (default)" % default)
+ radiogrid.attach(self.radiobuttonDefault, 0, 0, 1, 1)
+ i = 1
+ proc = subprocess.Popen(['update-alternatives', '--list', 'doom'], stdout=subprocess.PIPE, universal_newlines=True)
+
+ for alternative in proc.stdout:
+ alternative = alternative.strip()
+ if alternative == default:
+ continue
+ if alternative == '/usr/games/doomsday-compat':
+ alternative = '/usr/games/doomsday'
+ radiobutton = Gtk.RadioButton(group=self.radiobuttonDefault, label=alternative)
+ i += 1
+ radiogrid.attach(radiobutton, 0, i, i, 1)
+ grid.attach(radiogrid, 1, 5, 2, 1)
+
+ # Run !
+ self.button_exec = Gtk.Button(label="Run")
+ self.button_exec.set_sensitive(False)
+ grid.attach(self.button_exec, 1, 6, 1, 1)
+ self.button_exec.connect("clicked", self.run_game)
+
+ button_quit = Gtk.Button(label="Exit")
+ grid.attach(button_quit, 2, 6, 1, 1)
+ button_quit.connect("clicked", Gtk.main_quit)
+
+ self.window.show_all()
+
+ def tooltip_query(self, treeview, x, y, mode, tooltip):
+ path = treeview.get_path_at_pos(x, y - 30) # FIXME
+ if path:
+ treepath, column = path[:2]
+ model = treeview.get_model()
+ iter = model.get_iter(treepath)
+ game, warp = model[iter]
+ wad = game + '.wad'
+ if game == 'teeth' and warp == 32: wad += '*'
+ tooltip.set_text(levels[wad][1])
+ return True
+
+ def select_game(self, event):
+ self.button_exec.set_sensitive(True)
+ (model, pathlist) = self.treeview.get_selection().get_selected_rows()
+ for path in pathlist:
+ tree_iter = model.get_iter(path)
+ self.game, self.warp = model[tree_iter]
+ self.textbuffer.set_text(self.description[self.game])
+ wad = self.game + '.wad'
+ if self.game == 'teeth' and self.warp == 32:
+ wad += '*'
+ url = 'http://doomwiki.org/wiki/' + levels[wad][2]
+ self.doomwiki.set_uri(url)
+ self.doomwiki.set_label(url)
+
+ def run_game(self, event):
+ if not self.warp:
+ return
+
+ for button in self.diffradio.get_group():
+ if button.get_active():
+ difficulty = button.get_label()[0]
+ break
+ for button in self.radiobuttonDefault.get_group():
+ if button.get_active():
+ engine = [button.get_label().split(' ')[0]]
+ break
+ if engine == ['/usr/games/doomsday']:
+ engine.append('-game')
+ engine.append('doom2')
+
+ subprocess.call(engine + ['-file', '/usr/share/games/doom/%s.wad' % self.game,
+ '-warp', '%d' % self.warp, '-skill', difficulty])
+
+ def main(self):
+ Gtk.main()
+
+if __name__ == "__main__":
+ launcher = Launcher()
+ launcher.main()
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git
More information about the Pkg-games-commits
mailing list