142 lines
4.6 KiB
Python
142 lines
4.6 KiB
Python
#!/usr/bin/python
|
|
|
|
#Copyright 2008 Steffen Jobbagy-Felso
|
|
#This program is free software: you can redistribute it and/or modify
|
|
#it under the terms of the GNU Affero General Public License as published by
|
|
#the Free Software Foundation, version 3 of the License.
|
|
#
|
|
#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 Affero General Public License
|
|
#along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#In the "official" distribution you can find the license in
|
|
#agpl-3.0.txt in the docs folder of the package.
|
|
|
|
import threading
|
|
import pygtk
|
|
pygtk.require('2.0')
|
|
import gtk
|
|
import os
|
|
#import pokereval
|
|
|
|
try:
|
|
from matplotlib.figure import Figure
|
|
from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas
|
|
from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTKAgg as NavigationToolbar
|
|
from numpy import arange, cumsum
|
|
from pylab import *
|
|
except:
|
|
print "Failed to load libs for graphing, graphing will not function. Please install numpy and matplotlib."
|
|
|
|
import fpdb_import
|
|
import fpdb_db
|
|
|
|
class GuiGraphViewer (threading.Thread):
|
|
def get_vbox(self):
|
|
"""returns the vbox of this thread"""
|
|
return self.mainVBox
|
|
#end def get_vbox
|
|
|
|
def showClicked(self, widget, data):
|
|
try: self.canvas.destroy()
|
|
except AttributeError: pass
|
|
|
|
name=self.nameTBuffer.get_text(self.nameTBuffer.get_start_iter(), self.nameTBuffer.get_end_iter())
|
|
|
|
site=self.siteTBuffer.get_text(self.siteTBuffer.get_start_iter(), self.siteTBuffer.get_end_iter())
|
|
|
|
if site=="PS":
|
|
site=2
|
|
elif site=="FTP":
|
|
site=1
|
|
else:
|
|
print "invalid text in site selection in graph, defaulting to PS"
|
|
site=2
|
|
|
|
self.fig = Figure(figsize=(5,4), dpi=100)
|
|
|
|
#Set graph properties
|
|
self.ax = self.fig.add_subplot(111)
|
|
|
|
#
|
|
self.ax.set_title("Profit graph for ring games")
|
|
|
|
#Set axis labels and grid overlay properites
|
|
self.ax.set_xlabel("Hands", fontsize = 12)
|
|
self.ax.set_ylabel("$", fontsize = 12)
|
|
self.ax.grid(color='g', linestyle=':', linewidth=0.2)
|
|
|
|
self.cursor.execute("""SELECT handId, winnings FROM HandsPlayers
|
|
INNER JOIN Players ON HandsPlayers.playerId = Players.id
|
|
INNER JOIN Hands ON Hands.id = HandsPlayers.handId
|
|
WHERE Players.name = %s AND Players.siteId = %s AND (tourneysPlayersId IS NULL)
|
|
ORDER BY siteHandNo""", (name, site))
|
|
winnings = self.db.cursor.fetchall()
|
|
|
|
profit=range(len(winnings))
|
|
for i in profit:
|
|
self.cursor.execute("""SELECT SUM(amount) FROM HandsActions
|
|
INNER JOIN HandsPlayers ON HandsActions.handPlayerId = HandsPlayers.id
|
|
INNER JOIN Players ON HandsPlayers.playerId = Players.id
|
|
WHERE Players.name = %s AND HandsPlayers.handId = %s AND Players.siteId = %s AND (tourneysPlayersId IS NULL)""", (name, winnings[i][0], site))
|
|
spent = self.db.cursor.fetchone()
|
|
profit[i]=(i, winnings[i][1]-spent[0])
|
|
|
|
y=map(lambda x:float(x[1]), profit)
|
|
line = cumsum(y)
|
|
line = line/100
|
|
|
|
self.ax.annotate ("All Hands, Site %s", (61,25), xytext =(0.1, 0.9) , textcoords ="axes fraction" ,)
|
|
|
|
#Now draw plot
|
|
self.ax.plot(line,)
|
|
|
|
self.canvas = FigureCanvas(self.fig) # a gtk.DrawingArea
|
|
self.mainVBox.pack_start(self.canvas)
|
|
self.canvas.show()
|
|
#end of def showClicked
|
|
|
|
def __init__(self, db, settings, debug=True):
|
|
"""Constructor for GraphViewer"""
|
|
self.debug=debug
|
|
#print "start of GraphViewer constructor"
|
|
self.db=db
|
|
self.cursor=db.cursor
|
|
self.settings=settings
|
|
|
|
self.mainVBox = gtk.VBox(False, 0)
|
|
self.mainVBox.show()
|
|
|
|
self.settingsHBox = gtk.HBox(False, 0)
|
|
self.mainVBox.pack_start(self.settingsHBox, False, True, 0)
|
|
self.settingsHBox.show()
|
|
|
|
self.nameLabel = gtk.Label("Name of the player to be graphed:")
|
|
self.settingsHBox.pack_start(self.nameLabel)
|
|
self.nameLabel.show()
|
|
|
|
self.nameTBuffer=gtk.TextBuffer()
|
|
self.nameTBuffer.set_text("name")
|
|
self.nameTView=gtk.TextView(self.nameTBuffer)
|
|
self.settingsHBox.pack_start(self.nameTView)
|
|
self.nameTView.show()
|
|
|
|
self.siteLabel = gtk.Label("Site (PS or FTP):")
|
|
self.settingsHBox.pack_start(self.siteLabel)
|
|
self.siteLabel.show()
|
|
|
|
self.siteTBuffer=gtk.TextBuffer()
|
|
self.siteTBuffer.set_text("PS")
|
|
self.siteTView=gtk.TextView(self.siteTBuffer)
|
|
self.settingsHBox.pack_start(self.siteTView)
|
|
self.siteTView.show()
|
|
|
|
self.showButton=gtk.Button("Show/Refresh")
|
|
self.showButton.connect("clicked", self.showClicked, "show clicked")
|
|
self.settingsHBox.pack_start(self.showButton)
|
|
self.showButton.show()
|
|
#end of GuiGraphViewer.__init__
|