some code and comment cleanups and clarifications, mo betta fasta.

This commit is contained in:
Eric Blade 2010-08-31 04:56:28 -04:00
parent 80b98da6fc
commit 2ab01fa9d9

View File

@ -78,6 +78,7 @@ class Hud:
# cannot touch the gui # cannot touch the gui
if parent is None: # running from cli .. if parent is None: # running from cli ..
self.parent = self self.parent = self
else:
self.parent = parent self.parent = parent
self.table = table self.table = table
self.config = config self.config = config
@ -95,6 +96,7 @@ class Hud:
self.popup_windows = {} self.popup_windows = {}
self.aux_windows = [] self.aux_windows = []
# configure default font and colors from the configuration
(font, font_size) = config.get_default_font(self.table.site) (font, font_size) = config.get_default_font(self.table.site)
self.colors = config.get_default_colors(self.table.site) self.colors = config.get_default_colors(self.table.site)
self.hud_ui = config.get_hud_ui_parameters() self.hud_ui = config.get_hud_ui_parameters()
@ -107,6 +109,7 @@ class Hud:
# do we need to add some sort of condition here for dealing with a request for a font that doesn't exist? # do we need to add some sort of condition here for dealing with a request for a font that doesn't exist?
game_params = config.get_game_parameters(self.poker_game) game_params = config.get_game_parameters(self.poker_game)
# if there are AUX windows configured, set them up (Ray knows how this works, if anyone needs info)
if not game_params['aux'] == [""]: if not game_params['aux'] == [""]:
for aux in game_params['aux']: for aux in game_params['aux']:
aux_params = config.get_aux_parameters(aux) aux_params = config.get_aux_parameters(aux)
@ -118,14 +121,16 @@ class Hud:
self.creation_attrs = None self.creation_attrs = None
def create_mw(self): def create_mw(self):
# Set up a main window for this this instance of the HUD # Set up a main window for this this instance of the HUD
win = gtk.Window() win = gtk.Window()
win.set_skip_taskbar_hint(True) # invisible to taskbar
win.set_gravity(gtk.gdk.GRAVITY_STATIC) win.set_gravity(gtk.gdk.GRAVITY_STATIC)
win.set_title("%s FPDBHUD" % (self.table.name)) win.set_title("%s FPDBHUD" % (self.table.name)) # give it a title that we can easily filter out in the window list when Table search code is looking
win.set_skip_taskbar_hint(True) win.set_decorated(False) # kill titlebars
win.set_decorated(False) win.set_opacity(self.colors["hudopacity"]) # set it to configured hud opacity
win.set_opacity(self.colors["hudopacity"]) win.set_focus(None)
win.set_focus_on_map(False)
win.set_accept_focus(False)
eventbox = gtk.EventBox() eventbox = gtk.EventBox()
label = gtk.Label(self.hud_ui['label']) label = gtk.Label(self.hud_ui['label'])
@ -133,6 +138,7 @@ class Hud:
win.add(eventbox) win.add(eventbox)
eventbox.add(label) eventbox.add(label)
# set it to the desired color of the HUD for this site
label.modify_bg(gtk.STATE_NORMAL, self.backgroundcolor) label.modify_bg(gtk.STATE_NORMAL, self.backgroundcolor)
label.modify_fg(gtk.STATE_NORMAL, self.foregroundcolor) label.modify_fg(gtk.STATE_NORMAL, self.foregroundcolor)
@ -140,9 +146,11 @@ class Hud:
eventbox.modify_fg(gtk.STATE_NORMAL, self.foregroundcolor) eventbox.modify_fg(gtk.STATE_NORMAL, self.foregroundcolor)
self.main_window = win self.main_window = win
# move it to the table window's X/Y position (0,0 on the table window usually)
self.main_window.move(self.table.x, self.table.y) self.main_window.move(self.table.x, self.table.y)
# A popup menu for the main window # A popup menu for the main window
# This menu code has become extremely long - is there a better way to do this?
menu = gtk.Menu() menu = gtk.Menu()
killitem = gtk.MenuItem(_('Kill This HUD')) killitem = gtk.MenuItem(_('Kill This HUD'))
@ -457,6 +465,13 @@ class Hud:
log.debug("setting self.hud_params[%s] = %s" % (param, style)) log.debug("setting self.hud_params[%s] = %s" % (param, style))
def update_table_position(self): def update_table_position(self):
# get table's X/Y position on the desktop, and relocate all of our child windows to accomodate
# In Windows, we can verify the existence of a Window, with win32gui.IsWindow(). In Linux, there doesn't seem to be a
# way to verify the existence of a Window, without trying to access it, which if it doesn't exist anymore, results in a
# big giant X trap and crash.
# People tell me this is a bad idea, because theoretically, IsWindow() could return true now, but not be true when we actually
# use it, but accessing a dead window doesn't result in a complete windowing system shutdown in Windows, whereas it does
# in X. - Eric
if os.name == 'nt': if os.name == 'nt':
if not win32gui.IsWindow(self.table.number): if not win32gui.IsWindow(self.table.number):
self.parent.kill_hud(self, self.table.name) self.parent.kill_hud(self, self.table.name)
@ -465,8 +480,8 @@ class Hud:
return False return False
# anyone know how to do this in unix, or better yet, trap the X11 error that is triggered when executing the get_origin() for a closed window? # anyone know how to do this in unix, or better yet, trap the X11 error that is triggered when executing the get_origin() for a closed window?
if self.table.gdkhandle is not None: if self.table.gdkhandle is not None:
(x, y) = self.table.gdkhandle.get_origin() (x, y) = self.table.gdkhandle.get_origin() # In Windows, this call returns (0,0) if it's an invalid window. In X, the X server is immediately killed.
if self.table.x != x or self.table.y != y: if self.table.x != x or self.table.y != y: # If the current position does not equal the stored position, save the new position, and then move all the sub windows.
self.table.x = x self.table.x = x
self.table.y = y self.table.y = y
self.main_window.move(x + self.site_params['xshift'], y + self.site_params['yshift']) self.main_window.move(x + self.site_params['xshift'], y + self.site_params['yshift'])
@ -487,10 +502,10 @@ class Hud:
return True return True
def on_button_press(self, widget, event): def on_button_press(self, widget, event):
if event.button == 1: if event.button == 1: # if primary button, start movement
self.main_window.begin_move_drag(event.button, int(event.x_root), int(event.y_root), event.time) self.main_window.begin_move_drag(event.button, int(event.x_root), int(event.y_root), event.time)
return True return True
if event.button == 3: if event.button == 3: # if secondary button, popup our main popup window
widget.popup(None, None, None, event.button, event.time) widget.popup(None, None, None, event.button, event.time)
return True return True
return False return False
@ -543,7 +558,7 @@ class Hud:
self.config.save() self.config.save()
def adj_seats(self, hand, config): def adj_seats(self, hand, config):
# determine how to adjust seating arrangements, if a "preferred seat" is set in the hud layout configuration
# Need range here, not xrange -> need the actual list # Need range here, not xrange -> need the actual list
adj = range(0, self.max + 1) # default seat adjustments = no adjustment adj = range(0, self.max + 1) # default seat adjustments = no adjustment
# does the user have a fav_seat? # does the user have a fav_seat?
@ -621,7 +636,7 @@ class Hud:
[config.supported_games[self.poker_game].stats[stat].col] = \ [config.supported_games[self.poker_game].stats[stat].col] = \
config.supported_games[self.poker_game].stats[stat].stat_name config.supported_games[self.poker_game].stats[stat].stat_name
if os.name == "nt": if os.name == "nt": # we call update_table_position() regularly in Windows to see if we're moving around. See comments on that function for why this isn't done in X.
gobject.timeout_add(500, self.update_table_position) gobject.timeout_add(500, self.update_table_position)
def update(self, hand, config): def update(self, hand, config):
@ -668,9 +683,12 @@ class Hud:
window.label[r][c].set_text(statstring) window.label[r][c].set_text(statstring)
if statstring != "xxx": # is there a way to tell if this particular stat window is visible already, or no? if statstring != "xxx": # is there a way to tell if this particular stat window is visible already, or no?
window.window.show_all() unhidewindow = True
tip = "%s\n%s\n%s, %s" % (statd['screen_name'], number[5], number[3], number[4]) tip = "%s\n%s\n%s, %s" % (statd['screen_name'], number[5], number[3], number[4])
Stats.do_tip(window.e_box[r][c], tip) Stats.do_tip(window.e_box[r][c], tip)
if unhidewindow: #and not window.window.visible: # there is no "visible" attribute in gtk.Window, although the docs seem to indicate there should be
window.window.show_all()
unhidewindow = False
def topify_window(self, window): def topify_window(self, window):
window.set_focus_on_map(False) window.set_focus_on_map(False)
@ -686,7 +704,7 @@ class Stat_Window:
# This handles all callbacks from button presses on the event boxes in # This handles all callbacks from button presses on the event boxes in
# the stat windows. There is a bit of an ugly kludge to separate single- # the stat windows. There is a bit of an ugly kludge to separate single-
# and double-clicks. # and double-clicks.
self.window.show_all() self.window.show() #_all()
if event.button == 3: # right button event if event.button == 3: # right button event
newpopup = Popup_window(self.window, self) newpopup = Popup_window(self.window, self)
@ -745,11 +763,13 @@ class Stat_Window:
self.window = gtk.Window() self.window = gtk.Window()
self.window.set_decorated(0) self.window.set_decorated(0)
self.window.set_property("skip-taskbar-hint", True)
self.window.set_gravity(gtk.gdk.GRAVITY_STATIC) self.window.set_gravity(gtk.gdk.GRAVITY_STATIC)
self.window.set_title("%s" % seat) self.window.set_title("%s" % seat)
self.window.set_property("skip-taskbar-hint", True) self.window.set_focus(None) # set gtk default focus widget for this window to None
self.window.set_focus_on_map(False) self.window.set_focus_on_map(False)
self.window.set_accept_focus(False)
grid = gtk.Table(rows = game.rows, columns = game.cols, homogeneous = False) grid = gtk.Table(rows = game.rows, columns = game.cols, homogeneous = False)
self.grid = grid self.grid = grid