From d01951089b1cf30d13306eeaa29ad22e0d0098c5 Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Sat, 29 Jan 2011 23:41:37 -0500 Subject: [PATCH] New file Aux_Hud. Minor mods to Mucked. Aux_Hud is the prototype of the new HUD that uses the AW interface. This version works as a minimal HUD, but the default HUD from Hud.py is also displayed. --- pyfpdb/Aux_Hud.py | 104 ++++++++++++++++++++++++++++++++++++++++++++++ pyfpdb/Mucked.py | 9 +++- 2 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 pyfpdb/Aux_Hud.py diff --git a/pyfpdb/Aux_Hud.py b/pyfpdb/Aux_Hud.py new file mode 100644 index 00000000..01880708 --- /dev/null +++ b/pyfpdb/Aux_Hud.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""Mucked.py + +Mucked cards display for FreePokerTools HUD. +""" +# Copyright 2008-2010, Ray E. Barker +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +######################################################################## + +# to do + +# Standard Library modules + +# pyGTK modules +import gtk +import gobject + +# FreePokerTools modules +import Mucked +import Stats +class Stat_Window(Mucked.Seat_Window): + """Simple window class for stat windows.""" + + def create_contents(self, i): + self.grid = gtk.Table(rows = self.aw.nrows, columns = self.aw.ncols, homogeneous = False) + self.add(self.grid) + + self.stat_box = [ [None]*self.aw.ncols for i in range(self.aw.nrows) ] + for r in xrange(self.aw.nrows): + for c in xrange(self.aw.ncols): + self.stat_box[r][c] = Simple_stat(self.aw.stats[r][c]) + self.grid.attach(self.stat_box[r][c].widget, c, c+1, r, r+1, xpadding = self.aw.xpad, ypadding = self.aw.ypad) + + def update_contents(self, i): + if i == "common": return + player_id = self.aw.get_id_from_seat(i) + if player_id is None: return + for r in xrange(self.aw.nrows): + for c in xrange(self.aw.ncols): + self.stat_box[r][c].update(player_id, self.aw.hud.stat_dict) + +class Simple_HUD(Mucked.Aux_Seats): + """A simple HUD class based on the Aux_Window interface.""" + + def __init__(self, hud, config, params): + super(Simple_HUD, self).__init__(hud, config, params) +# Save everything you need to know about the hud as attrs. +# That way a subclass doesn't have to grab them. + self.poker_game = self.hud.poker_game + self.game_params = self.hud.config.get_game_parameters(self.hud.poker_game) + self.game = self.hud.config.supported_games[self.hud.poker_game] + self.max = self.hud.max + self.nrows = self.game_params['rows'] + self.ncols = self.game_params['cols'] + self.xpad = self.game_params['xpad'] + self.ypad = self.game_params['ypad'] + self.xshift = self.game_params['xshift'] + self.yshift = self.game_params['yshift'] + + self.aw_window_type = Stat_Window + +# layout is handled by superclass! + self.stats = [ [None]*self.ncols for i in range(self.nrows) ] + for stat in self.game.stats: + self.stats[self.config.supported_games[self.poker_game].stats[stat].row] \ + [self.config.supported_games[self.poker_game].stats[stat].col] = \ + self.config.supported_games[self.poker_game].stats[stat].stat_name + + def create_contents(self, container, i): + container.create_contents(i) + + def update_contents(self, container, i): + container.update_contents(i) + +class Simple_stat(object): + """A simple class for displaying a single stat.""" + def __init__(self, stat): + self.stat = stat + self.eb = Simple_eb(); + self.lab = Simple_label(self.stat) + self.eb.add(self.lab) + self.widget = self.eb + + def update(self, player_id, stat_dict): + self.lab.set_text( str(Stats.do_stat(stat_dict, player_id, self.stat)[1]) ) + +# Override thise methods to customize your eb or label +class Simple_eb(gtk.EventBox): pass +class Simple_label(gtk.Label): pass diff --git a/pyfpdb/Mucked.py b/pyfpdb/Mucked.py index e642c6db..e592a471 100644 --- a/pyfpdb/Mucked.py +++ b/pyfpdb/Mucked.py @@ -335,6 +335,9 @@ class Stud_cards: class Seat_Window(gtk.Window): """Subclass gtk.Window for the seat windows.""" + def __init__(self, aw = None): + super(Seat_Window, self).__init__() + self.aw = aw class Aux_Seats(Aux_Window): """A super class to display an aux_window at each seat.""" @@ -348,6 +351,8 @@ class Aux_Seats(Aux_Window): self.uses_timer = False # the Aux_seats object uses a timer to control hiding self.timer_on = False # bool = Ture if the timeout for removing the cards is on + self.aw_window_type = Seat_Window + # placeholders that should be overridden--so we don't throw errors def create_contents(self): pass def update_contents(self): pass @@ -382,10 +387,10 @@ class Aux_Seats(Aux_Window): (x, y) = self.params['layout'][self.hud.max].common else: (x, y) = loc[self.adj[i]] - self.m_windows[i] = Seat_Window() + self.m_windows[i] = self.aw_window_type(self) self.m_windows[i].set_decorated(False) self.m_windows[i].set_property("skip-taskbar-hint", True) - self.m_windows[i].set_transient_for(self.hud.main_window) + self.m_windows[i].set_transient_for(self.hud.main_window) # FIXME: shouldn't this be the table window?? self.m_windows[i].set_focus_on_map(False) self.m_windows[i].connect("configure_event", self.configure_event_cb, i) self.positions[i] = self.card_positions((x * width) / 1000, self.hud.table.x, (y * height) /1000, self.hud.table.y)