From 7d7bf800242014e3ca25608551bb8bf4c89fa4cd Mon Sep 17 00:00:00 2001 From: Ray Date: Mon, 9 Mar 2009 10:21:40 -0400 Subject: [PATCH 1/3] Export button is not sensitive until graph is created. --- pyfpdb/GuiGraphViewer.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyfpdb/GuiGraphViewer.py b/pyfpdb/GuiGraphViewer.py index 82f6d4fa..9671c1ce 100644 --- a/pyfpdb/GuiGraphViewer.py +++ b/pyfpdb/GuiGraphViewer.py @@ -107,6 +107,7 @@ class GuiGraphViewer (threading.Thread): self.canvas = FigureCanvas(self.fig) # a gtk.DrawingArea self.graphBox.add(self.canvas) self.canvas.show() + self.exportButton.set_sensitive(True) #end of def showClicked def getRingProfitGraph(self, names, sites): @@ -361,6 +362,7 @@ class GuiGraphViewer (threading.Thread): self.exportButton=gtk.Button("Export to File") self.exportButton.connect("clicked", self.exportGraph, "show clicked") + self.exportButton.set_sensitive(False) self.exportButton.show() self.leftPanelBox.add(playerFrame) From 3d6bd0eb46fbc8c319fa798521d937dffd9266f0 Mon Sep 17 00:00:00 2001 From: Ray Date: Mon, 9 Mar 2009 11:37:34 -0400 Subject: [PATCH 2/3] New query: get common cards for mucked card display. --- pyfpdb/Database.py | 19 +++++++++++++++++-- pyfpdb/SQL.py | 11 +++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/pyfpdb/Database.py b/pyfpdb/Database.py index 7b376944..ae011576 100755 --- a/pyfpdb/Database.py +++ b/pyfpdb/Database.py @@ -129,13 +129,28 @@ class Database: cards[s_dict['seat_number']] = (self.convert_cards(s_dict)) return cards + def get_common_cards(self, hand): + """Get and return the community cards for the specified hand.""" + cards = {} + c = self.connection.cursor() + c.execute(self.sql.query['get_common_cards'], hand) + colnames = [desc[0] for desc in c.description] + for row in c.fetchall(): + s_dict = {} + for name, val in zip(colnames, row): + s_dict[name] = val + cards['common'] = (self.convert_cards(s_dict)) + return cards + def convert_cards(self, d): ranks = ('', '', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A') cards = "" for i in range(1, 8): - if d['card' + str(i) + 'Value'] == None: + key = 'card' + str(i) + 'Value' + if not d.has_key(key): continue + if d[key] == None: break - elif d['card' + str(i) + 'Value'] == 0: + elif d[key] == 0: cards += "xx" else: cards += ranks[d['card' + str(i) + 'Value']] + d['card' +str(i) + 'Suit'] diff --git a/pyfpdb/SQL.py b/pyfpdb/SQL.py index 162e68f0..2c67cb0a 100644 --- a/pyfpdb/SQL.py +++ b/pyfpdb/SQL.py @@ -361,6 +361,17 @@ class Sql: order by seatNo """ + self.query['get_common_cards'] = """ + select + card1Value, card1Suit, + card2Value, card2Suit, + card3Value, card3Suit, + card4Value, card4Suit, + card5Value, card5Suit + from BoardCards + where handId = %s + """ + self.query['get_action_from_hand'] = """ SELECT street, Players.name, HandsActions.action, HandsActions.amount, actionno FROM Players, HandsActions, HandsPlayers From 6314c5a7cc49a64b0252c6c3fd24e09abb08a5b5 Mon Sep 17 00:00:00 2001 From: Ray Date: Mon, 9 Mar 2009 11:41:58 -0400 Subject: [PATCH 3/3] Display community cards. --- pyfpdb/Mucked.py | 52 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/pyfpdb/Mucked.py b/pyfpdb/Mucked.py index 1598776c..8f00880b 100755 --- a/pyfpdb/Mucked.py +++ b/pyfpdb/Mucked.py @@ -320,22 +320,22 @@ class Flop_Mucked(Aux_Window): adj = self.hud.adj_seats(0, self.config) loc = self.config.get_aux_locations(self.params['name'], int(self.hud.max)) -# make a scratch pixbuf 7 cards wide for creating our images - self.scratch = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, - 7* int(self.params['card_wd']), int(self.params['card_ht'])) - -# create the stat windows - self.m_windows = {} # windows to put the card images + self.m_windows = {} # windows to put the card images in self.eb = {} # event boxes so we can interact with the mucked cards - self.seen_cards = {} # pixbufs to stash the cards in + self.seen_cards = {} # image objects to stash the cards in - for i in range(1, self.hud.max + 1): - (x, y) = loc[adj[i]] + for i in (range(1, self.hud.max + 1) + ['common']): + if i == 'common': + (x, y) = self.params['layout'][self.hud.max].common + else: + (x, y) = loc[adj[i]] self.m_windows[i] = gtk.Window() - self.m_windows[i].set_decorated(0) + 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_focus_on_map(False) self.eb[i] = gtk.EventBox() + self.eb[i].connect("button_press_event", self.button_press_cb) self.m_windows[i].add(self.eb[i]) self.seen_cards[i] = gtk.image_new_from_pixbuf(self.card_images[('B', 'H')]) self.eb[i].add(self.seen_cards[i]) @@ -345,12 +345,17 @@ class Flop_Mucked(Aux_Window): self.m_windows[i].hide() def update_data(self, new_hand_id, db_connection): - pass + cards = db_connection.get_common_cards(new_hand_id) + self.hud.cards['common'] = cards['common'] def update_gui(self, new_hand_id): """Prepare and show the mucked cards.""" + pos = {} + for i, w in self.m_windows.iteritems(): + pos[i] = w.get_position() # I hate this. I don't know why I have to save position and then move back + self.hide_mucked_cards() + displayed_cards = False for (i, cards) in self.hud.cards.iteritems(): - pos = self.m_windows[i].get_position() # need this to reposition later if self.has_cards(cards): # scratch is a working pixbuf, used to assemble the image scratch = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, @@ -364,16 +369,19 @@ class Flop_Mucked(Aux_Window): scratch, x, 0) x = x + int(self.params['card_wd']) self.seen_cards[i].set_from_pixbuf(scratch) - self.m_windows[i].move(pos[0], pos[1]) # I don't know why I need this - self.m_windows[i].show_all() - gobject.timeout_add(int(1000*float(self.params['timeout'])), self.hide_mucked_cards) +# self.m_windows[i].show_all() + self.m_windows[i].move(pos[i][0], pos[i][1]) # here is where I move back + self.m_windows[i].present() + displayed_cards = True + + if displayed_cards and float(self.params['timeout']) > 0: + gobject.timeout_add(int(1000*float(self.params['timeout'])), self.hide_mucked_cards) def destroy(self): """Destroy all of the mucked windows.""" for w in self.m_windows.values(): w.destroy() - def hide_mucked_cards(self): """Hide the mucked card windows.""" # this is the callback from the timeout @@ -381,6 +389,18 @@ class Flop_Mucked(Aux_Window): w.hide() return False # this tells the system to NOT run this timeout again + def button_press_cb(self, widget, event, *args): + """Handle button clicks in the event boxes.""" + if event.button == 3: # right button event + pass + + elif event.button == 2: # middle button event + self.hide_mucked_cards() + + elif event.button == 1: # left button event + window = widget.get_parent() + window.begin_move_drag(event.button, int(event.x_root), int(event.y_root), event.time) + if __name__== "__main__": def destroy(*args): # call back for terminating the main eventloop