[SCM] Installer for game data files branch, gui, updated. 9092133f0b2589fd66ef16e6348f2c3989f9aa4c

Jon Dowland jmtd at debian.org
Fri Sep 25 17:28:56 UTC 2009


The following commit has been merged in the gui branch:
commit 9092133f0b2589fd66ef16e6348f2c3989f9aa4c
Merge: 1f678092d8f600df649729df374595d2c69d5c35 f9c551a8a3fbc0f9303e296f0fe26faf21ccfba7
Author: Jon Dowland <jmtd at debian.org>
Date:   Fri Sep 25 18:20:47 2009 +0100

    Merge branch 'yaml' into gui
    
    Conflicts:
    	gdp.glade
    	gdp.py

diff --combined gdp.py
index c4e660a,d9cd224..d9cd224
mode 100644,100755..100644
--- a/gdp.py
+++ b/gdp.py
@@@ -1,21 -1,72 +1,72 @@@
  import os
+ import yaml
+ 
+ class Model(list):
+ 	def __init__(self):
+ 		self.active_item = -1
+ 
+ 	def set_active_item(self,item):
+ 		self.active_item = item
  
  class Controller:
  	def __init__(self):
  		pass
+ 
  	def add_view(self,v):
  		self.view = v
- 	def find_supported_games(self):
- 		for game in os.listdir("supported"):
- 			self.view.supported_game_added(game)
+ 
+ 	def get_model(self):
+ 		self.m = m = Model()
+ 		for game in [ x for x in os.listdir("supported")]:
+ 			y = yaml.load(open("supported/%s"%game,"r").read())
+ 			m.append(y)
+ 			self.view.supported_game_added(y)
+ 		return m
+ 
+ 	def set_game(self, game):
+ 		self.m.set_active_item(game)
+ 
+ 	def get_next_action(self):
+ 		"""return the next action required for the selected game.
+ 		   currently we do not handle dependencies: the actions will
+ 		   need to be specified in the precise order they are required
+ 		   to be satisfied."""
+ 		actions = self.m[self.m.active_item]['actions']
+ 		actions = filter(lambda x: not x.has_key('complete'), actions)
+ 		return actions[0]
+ 
  	def go(self):
- 			self.find_supported_games()
  			self.view.go()
  
  import sys
  import gtk
  import gtk.glade
  
+ class FilePicker(gtk.VBox):
+ 	def __init__(self,name):
+ 		gtk.VBox.__init__(self)
+ 		label = gtk.Label("Please locate the file '%s'." % name)
+ 		self.pack_start(label)
+ 		hbox = gtk.HBox()
+ 		self.entry = entry = gtk.Entry()
+ 		entry.connect("changed", lambda e: \
+ 			w.set_page_complete( w.get_nth_page(w.get_current_page()), True))
+ 		hbox.pack_start(gtk.Label("Filename: "), expand=False)
+ 		hbox.pack_start(entry)
+ 		button = gtk.Button("Select File...")
+ 		button.connect("clicked", self.handle_file_button)
+ 		hbox.pack_start(button, expand=False)
+ 		self.pack_start(hbox, expand=False)
+ 
+ 	def handle_file_button(self,button):
+ 		chooser = gtk.FileChooserDialog(title="Select doom2.wad", 
+ 			action=gtk.FILE_CHOOSER_ACTION_OPEN,
+ 			buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,
+ 				gtk.RESPONSE_OK))
+ 		chooser.run()
+ 		self.entry.set_text(chooser.get_filename())
+ 		chooser.destroy()
+ 
  class View:
  	def __init__(self,c):
  		self.controller = c
@@@ -23,26 -74,63 +74,63 @@@
  			gtk.init_check()
  		except RuntimeError, e:
  			sys.exit('E: %s. Exiting.' % e)
- 		gtk.gdk.threads_init()
+ 		self.setup_gtkbuilder()
+ 		self.setup_gamechooser_page()
+ 
+ 	def setup_gtkbuilder(self):
  		self.builder = gtk.Builder()
  		self.builder.add_from_file("gdp.glade")
- 		self.window = self.builder.get_object("window1")
+ 		self.window = self.builder.get_object("assistant1")
  		self.window.connect("destroy", gtk.main_quit)
- 		self.builder.get_object("quitbutton").connect("clicked", gtk.main_quit)
- 
- 		treeview = self.builder.get_object("treeview1")
+ 		self.window.connect("cancel", gtk.main_quit)
  
+ 	def setup_gamechooser_page(self):
  		treeview = self.builder.get_object("treeview1")
  		cell = gtk.CellRendererText()
  		column = gtk.TreeViewColumn('game')
  		treeview.append_column(column)
  		column.pack_start(cell, False)
  		column.add_attribute(cell, "text", 0)
+ 		treeview.connect("cursor-changed", lambda treeview:
+ 			treeview.get_cursor() and \
+ 				self.window.set_page_complete(
+ 					self.window.get_nth_page(self.window.get_current_page()),
+ 					True))
+ 		treeview.connect("row-activated", lambda treeview,path,col:
+ 			self.window.set_current_page(self.window.get_current_page()+1))
+ 		self.window.set_forward_page_func(self.forward_page_func, None)
+ 		self.window.set_page_title(self.window.get_nth_page(0),"Game Data Packager")
+ 		def setup_dummy_page():
+ 			"""unfortunately necessary due to the way we abuse forward_page_func"""
+ 			self.b = gtk.Button("YOU SHOULD NOT SEE THIS")
+ 			self.window.append_page(self.b)
+ 		setup_dummy_page()
+ 
+ 	# XXX: this gets called as soon as a page is marked as completed.
+ 	def forward_page_func(self, current_page, data):
+ 		if 0 == current_page:
+ 			# XXX: bug. active row not reported properly if keyboard nav used
+ 			treeview = self.builder.get_object("treeview1")
+ 			path,col = treeview.get_cursor()
+ 			self.controller.set_game(path[0])
+ 		na = self.controller.get_next_action()
+ 		if na.has_key('type') and "copy" == na['type']:
+ 			# TODO: setup the next page, a file copy page.
+ 			print na
+ 			fp = FilePicker(na['name'])
+ 			fp.show_all()
+ 			self.window.insert_page(fp, self.window.get_n_pages() - 1)
+ 			self.window.set_page_title(
+ 				self.window.get_nth_page(self.window.get_n_pages() - 2),
+ 				"File '%s'" % na['name'])
+ 		else: # XXX: validation should live elsewhere
+ 			print "not a recognised action type :("
+ 		return current_page + 1
  
  	def supported_game_added(self,game):
- 		treeview = self.builder.get_object("treeview1")
  		liststor = self.builder.get_object("liststore1")
- 		liststor.append([game])
+ 		liststor.append([game['longname']])
+ 
  	def go(self):
  		self.window.show()
  		gtk.main()
@@@ -51,4 -139,5 +139,5 @@@ if __name__ == "__main__"
  	c = Controller()
  	v = View(c)
  	c.add_view(v)
+ 	m = c.get_model()
  	c.go()

-- 
Installer for game data files



More information about the Pkg-games-commits mailing list