From a20edd43508054b8e2585a04ffa10c752ac652d9 Mon Sep 17 00:00:00 2001 From: Brian Caine Date: Sun, 25 Nov 2007 01:54:14 -0500 Subject: [PATCH] More work. We can have what we had with the phil's gui when Justin does his work. --- game_client.py | 73 +++++++++++++++++++++++++++++++++++++++++++++----- pack_out/run.xml | 6 ++--- pygame_gui/DerGUI.py | 16 +++++------ pygame_gui/widgets.xml | 2 -- 4 files changed, 77 insertions(+), 20 deletions(-) diff --git a/game_client.py b/game_client.py index 6f5bc28..a3a2136 100644 --- a/game_client.py +++ b/game_client.py @@ -307,6 +307,7 @@ class Engine: def run(self): + self.gui_system.draw(self.lamina_screen.surf) self.lamina_screen.refresh() while self.running: @@ -362,6 +363,7 @@ class Engine: def killGame(self): reactor.callFromThread(self.killThreadGame) + self.running = 0 return def killThreadGame(self): @@ -467,6 +469,50 @@ class Engine: return + def getVisisbleMenus(self): + + menus = {} + + for file, contents in self.files.iteritems(): + for name, menu in contents['menu_instances'].iteritems(): + if not menu.hidden: + menus[name] = menu + + return menus + + def hideAllMenus(self): + + for file, contents in self.files.iteritems(): + for name, menu in contents['menu_instances'].iteritems(): + menu.hide() + + return + + def showMenu(self, menu_name): + + for file, contents in self.files.iteritems(): + for name, menu in contents['menu_instances'].iteritems(): + if contents['menu_instances'].has_key(menu_name): + contents['menu_instances'][menu_name].show() + + return + + def hideMenu(self, menu_name): + + for file, contents in self.files: + for name, menu in contents['menu_instances'].iteritems(): + if contents['menu_instances'].has_key(menu_name): + contents['menu_instances'][menu_name].hide() + + return + + def setMenu(self, menu_name): + + self.hideAllMenus() + self.showMenu(menu_name) + + return + def addFile(self, filename, parent=''): dom = None @@ -613,7 +659,7 @@ class Engine: instance_found = 1 if not instance_found: - self.files[filename]['menu_instances'][menuname] = Menu(menuname, the_def['elements'], self.gui_system, self.config, self.event_queue) + self.files[filename]['menu_instances'][menuname] = Menu(menuname, the_def['elements'], self) self.files[filename]['menu_instances'][menuname].show() for objectname in object_instances_d: @@ -640,15 +686,21 @@ class Engine: class Menu: - def __init__(self, name, elements, gui_system, config, event_queue): + def __init__(self, name, elements, engine): # elements is a dictionary with name:{element info} self.widgets = {} self.name = name - self.gui_system = gui_system - self.event_queue = event_queue + self.widget_info = elements + + self.gui_system = engine.gui_system + self.event_queue = engine.event_queue + + self.engine = engine + + config = engine.config for name, element in elements.iteritems(): @@ -666,17 +718,17 @@ class Menu: if element['type'] == 'button': params['text'] = element['text'] self.widgets[name] = self.gui_system.makeWidget('button', params) - self.widgets[name].connect('BUTTON_CLICKED', self.clicked) + self.widgets[name].connect('BUTTON_CLICKED', self.clicked, {'name': name}) if element['type'] == 'image': - print "Widget.__init__(): 'image' widget type not implemented yet." + print "Menu.__init__(): 'image' widget type not implemented yet." if element['type'] == 'label': params['text'] = element['text'] self.widgets[name] = self.gui_system.makeWidget('label', params) if element['type'] == 'listbox': - print "Widget.__init__(): 'listbox' widget type not implemented yet." + print "Menu.__init__(): 'listbox' widget type not implemented yet." if element['type'] == 'textbox': params['type'] == element['text'] @@ -690,6 +742,13 @@ class Menu: if self.widgets.has_key(params['name']): self.event_queue.append(['WIDGET_CLICKED', {'name':params['name']}]) + if self.widget_info[params['name']].has_key('target') and self.widget_info[params['name']]['target'] != '': + #try: + exec(self.widget_info[params['name']]['target']) + + #except: + # print "Menu.clicked(): Error executing widget click callback" + return def key_pressed(self, params, more_params): diff --git a/pack_out/run.xml b/pack_out/run.xml index fe8918c..73b2ec3 100644 --- a/pack_out/run.xml +++ b/pack_out/run.xml @@ -221,7 +221,7 @@ y="10" width="25" height="10" - target="the_engine.setMenu('lan_menu')" + target="self.engine.setMenu('lan_menu')" parent="background_image" text="LAN Match"> @@ -260,7 +260,7 @@ width="25" height="10" parent="background_image" - target="the_engine.setMenu('credits')" + target="self.engine.setMenu('credits')" text="Credits"> diff --git a/pygame_gui/DerGUI.py b/pygame_gui/DerGUI.py index 0219564..c4b2804 100644 --- a/pygame_gui/DerGUI.py +++ b/pygame_gui/DerGUI.py @@ -417,10 +417,10 @@ class Widget: the_value = self.params['behaviors'][the_event['type']] - try: - exec(the_value) - except: - print "Widget.event(): Error running behavior." + #try: + exec(the_value) + #except: + #print "Widget.event(): Error running behavior." return @@ -436,10 +436,10 @@ class Widget: the_function = self.callbacks[the_event]['function'] - try: - the_function(self.callbacks[the_event]['params'], parameters) - except: - print "Widget.raiseEvent(): Error in callback." + #try: + the_function(self.callbacks[the_event]['params'], parameters) + #except: + # print "Widget.raiseEvent(): Error in callback." return diff --git a/pygame_gui/widgets.xml b/pygame_gui/widgets.xml index e2da8d5..8ab0b7b 100644 --- a/pygame_gui/widgets.xml +++ b/pygame_gui/widgets.xml @@ -293,8 +293,6 @@ self.setPart('button_right_bottom', 'button_right_bottom_pressed_png') self.setPart('button_right', 'button_right_pressed_png') self.setPart('button_right_top', 'button_right_top_pressed_png') self.setPart('button_top', 'button_top_pressed_png') - -print "Debug, button down" -- 2.11.4.GIT