Whitespace churn on Graph viewer
This commit is contained in:
parent
a1ed9603f3
commit
fefbcfca65
|
@ -24,289 +24,288 @@ from time import time
|
||||||
#import pokereval
|
#import pokereval
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import matplotlib
|
import matplotlib
|
||||||
matplotlib.use('GTK')
|
matplotlib.use('GTK')
|
||||||
from matplotlib.figure import Figure
|
from matplotlib.figure import Figure
|
||||||
from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas
|
from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas
|
||||||
from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTKAgg as NavigationToolbar
|
from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTKAgg as NavigationToolbar
|
||||||
from numpy import arange, cumsum
|
from numpy import arange, cumsum
|
||||||
from pylab import *
|
from pylab import *
|
||||||
except:
|
except:
|
||||||
print """Failed to load libs for graphing, graphing will not function. Please in
|
print """Failed to load libs for graphing, graphing will not function. Please in
|
||||||
stall numpy and matplotlib if you want to use graphs."""
|
stall numpy and matplotlib if you want to use graphs."""
|
||||||
print """This is of no consequence for other parts of the program, e.g. import
|
print """This is of no consequence for other parts of the program, e.g. import
|
||||||
and HUD are NOT affected by this problem."""
|
and HUD are NOT affected by this problem."""
|
||||||
|
|
||||||
import fpdb_import
|
import fpdb_import
|
||||||
import fpdb_db
|
import fpdb_db
|
||||||
|
|
||||||
class GuiGraphViewer (threading.Thread):
|
class GuiGraphViewer (threading.Thread):
|
||||||
def get_vbox(self):
|
def get_vbox(self):
|
||||||
"""returns the vbox of this thread"""
|
"""returns the vbox of this thread"""
|
||||||
return self.mainHBox
|
return self.mainHBox
|
||||||
#end def get_vbox
|
#end def get_vbox
|
||||||
|
|
||||||
def generateGraph(self, widget, data):
|
def generateGraph(self, widget, data):
|
||||||
try: self.canvas.destroy()
|
try: self.canvas.destroy()
|
||||||
except AttributeError: pass
|
except AttributeError: pass
|
||||||
|
|
||||||
# Whaich sites are selected?
|
# Whaich sites are selected?
|
||||||
# TODO:
|
# TODO:
|
||||||
# What hero names for the selected site?
|
# What hero names for the selected site?
|
||||||
# TODO:
|
# TODO:
|
||||||
|
|
||||||
name = self.heroes[self.sites]
|
name = self.heroes[self.sites]
|
||||||
|
|
||||||
if self.sites == "PokerStars":
|
if self.sites == "PokerStars":
|
||||||
site=2
|
site=2
|
||||||
sitename="PokerStars: "
|
sitename="PokerStars: "
|
||||||
elif self.sites=="Full Tilt":
|
elif self.sites=="Full Tilt":
|
||||||
site=1
|
site=1
|
||||||
sitename="Full Tilt: "
|
sitename="Full Tilt: "
|
||||||
else:
|
else:
|
||||||
print "invalid text in site selection in graph, defaulting to PS"
|
print "invalid text in site selection in graph, defaulting to PS"
|
||||||
site=2
|
site=2
|
||||||
|
|
||||||
self.fig = Figure(figsize=(5,4), dpi=100)
|
self.fig = Figure(figsize=(5,4), dpi=100)
|
||||||
|
|
||||||
#Set graph properties
|
#Set graph properties
|
||||||
self.ax = self.fig.add_subplot(111)
|
self.ax = self.fig.add_subplot(111)
|
||||||
|
|
||||||
#Get graph data from DB
|
#Get graph data from DB
|
||||||
starttime = time()
|
starttime = time()
|
||||||
line = self.getRingProfitGraph(name, site)
|
line = self.getRingProfitGraph(name, site)
|
||||||
print "Graph generated in: %s" %(time() - starttime)
|
print "Graph generated in: %s" %(time() - starttime)
|
||||||
|
|
||||||
self.ax.set_title("Profit graph for ring games")
|
self.ax.set_title("Profit graph for ring games")
|
||||||
|
|
||||||
#Set axis labels and grid overlay properites
|
#Set axis labels and grid overlay properites
|
||||||
self.ax.set_xlabel("Hands", fontsize = 12)
|
self.ax.set_xlabel("Hands", fontsize = 12)
|
||||||
self.ax.set_ylabel("$", fontsize = 12)
|
self.ax.set_ylabel("$", fontsize = 12)
|
||||||
self.ax.grid(color='g', linestyle=':', linewidth=0.2)
|
self.ax.grid(color='g', linestyle=':', linewidth=0.2)
|
||||||
text = "All Hands, " + sitename + str(name) + "\nProfit: $" + str(line[-1]) + "\nTotal Hands: " + str(len(line))
|
text = "All Hands, " + sitename + str(name) + "\nProfit: $" + str(line[-1]) + "\nTotal Hands: " + str(len(line))
|
||||||
|
|
||||||
self.ax.annotate(text, xy=(10, -10),
|
self.ax.annotate(text,
|
||||||
xycoords='axes points',
|
xy=(10, -10),
|
||||||
horizontalalignment='left', verticalalignment='top',
|
xycoords='axes points',
|
||||||
fontsize=10)
|
horizontalalignment='left', verticalalignment='top',
|
||||||
|
fontsize=10)
|
||||||
|
|
||||||
|
|
||||||
#Draw plot
|
#Draw plot
|
||||||
self.ax.plot(line,)
|
self.ax.plot(line,)
|
||||||
|
|
||||||
self.canvas = FigureCanvas(self.fig) # a gtk.DrawingArea
|
self.canvas = FigureCanvas(self.fig) # a gtk.DrawingArea
|
||||||
self.graphBox.add(self.canvas)
|
self.graphBox.add(self.canvas)
|
||||||
self.canvas.show()
|
self.canvas.show()
|
||||||
#end of def showClicked
|
#end of def showClicked
|
||||||
|
|
||||||
def getRingProfitGraph(self, name, site):
|
def getRingProfitGraph(self, name, site):
|
||||||
self.cursor.execute(self.sql.query['getRingProfitAllHandsPlayerIdSite'], (name, site))
|
self.cursor.execute(self.sql.query['getRingProfitAllHandsPlayerIdSite'], (name, site))
|
||||||
# returns (HandId,Winnings,Costs,Profit)
|
#returns (HandId,Winnings,Costs,Profit)
|
||||||
winnings = self.db.cursor.fetchall()
|
winnings = self.db.cursor.fetchall()
|
||||||
|
|
||||||
y=map(lambda x:float(x[3]), winnings)
|
y=map(lambda x:float(x[3]), winnings)
|
||||||
line = cumsum(y)
|
line = cumsum(y)
|
||||||
return line/100
|
return line/100
|
||||||
#end of def getRingProfitGraph
|
#end of def getRingProfitGraph
|
||||||
|
|
||||||
def createPlayerLine(self, hbox, site, player):
|
def createPlayerLine(self, hbox, site, player):
|
||||||
label = gtk.Label(site +" id:")
|
label = gtk.Label(site +" id:")
|
||||||
hbox.pack_start(label, False, False, 0)
|
hbox.pack_start(label, False, False, 0)
|
||||||
label.show()
|
label.show()
|
||||||
|
|
||||||
pname = gtk.Entry()
|
pname = gtk.Entry()
|
||||||
pname.set_text(player)
|
pname.set_text(player)
|
||||||
pname.set_width_chars(20)
|
pname.set_width_chars(20)
|
||||||
hbox.pack_start(pname, False, True, 0)
|
hbox.pack_start(pname, False, True, 0)
|
||||||
#TODO: Need to connect a callback here
|
#TODO: Need to connect a callback here
|
||||||
pname.connect("changed", self.__set_hero_name, site)
|
pname.connect("changed", self.__set_hero_name, site)
|
||||||
#TODO: Look at GtkCompletion - to fill out usernames
|
#TODO: Look at GtkCompletion - to fill out usernames
|
||||||
pname.show()
|
pname.show()
|
||||||
|
|
||||||
self.__set_hero_name(pname, site)
|
self.__set_hero_name(pname, site)
|
||||||
|
|
||||||
def __set_hero_name(self, w, site):
|
def __set_hero_name(self, w, site):
|
||||||
self.heroes[site] = w.get_text()
|
self.heroes[site] = w.get_text()
|
||||||
print "DEBUG: settings heroes[%s]: %s"%(site, self.heroes[site])
|
print "DEBUG: settings heroes[%s]: %s"%(site, self.heroes[site])
|
||||||
|
|
||||||
def createSiteLine(self, hbox, site):
|
def createSiteLine(self, hbox, site):
|
||||||
cb = gtk.CheckButton(site)
|
cb = gtk.CheckButton(site)
|
||||||
cb.connect('clicked', self.__set_site_select, site)
|
cb.connect('clicked', self.__set_site_select, site)
|
||||||
hbox.pack_start(cb, False, False, 0)
|
hbox.pack_start(cb, False, False, 0)
|
||||||
cb.show()
|
cb.show()
|
||||||
|
|
||||||
def __set_site_select(self, w, site):
|
def __set_site_select(self, w, site):
|
||||||
# This doesn't behave as intended - self.site only allows 1 site for the moment.
|
# This doesn't behave as intended - self.site only allows 1 site for the moment.
|
||||||
self.sites = site
|
self.sites = site
|
||||||
print "self.sites set to %s" %(self.sites)
|
print "self.sites set to %s" %(self.sites)
|
||||||
|
|
||||||
def fillPlayerFrame(self, vbox):
|
def fillPlayerFrame(self, vbox):
|
||||||
for site in self.conf.supported_sites.keys():
|
for site in self.conf.supported_sites.keys():
|
||||||
pathHBox = gtk.HBox(False, 0)
|
pathHBox = gtk.HBox(False, 0)
|
||||||
vbox.pack_start(pathHBox, False, True, 0)
|
vbox.pack_start(pathHBox, False, True, 0)
|
||||||
pathHBox.show()
|
pathHBox.show()
|
||||||
|
|
||||||
player = self.conf.supported_sites[site].screen_name
|
player = self.conf.supported_sites[site].screen_name
|
||||||
self.createPlayerLine(pathHBox, site, player)
|
self.createPlayerLine(pathHBox, site, player)
|
||||||
|
|
||||||
def fillSitesFrame(self, vbox):
|
def fillSitesFrame(self, vbox):
|
||||||
for site in self.conf.supported_sites.keys():
|
for site in self.conf.supported_sites.keys():
|
||||||
hbox = gtk.HBox(False, 0)
|
hbox = gtk.HBox(False, 0)
|
||||||
vbox.pack_start(hbox, False, True, 0)
|
vbox.pack_start(hbox, False, True, 0)
|
||||||
hbox.show()
|
hbox.show()
|
||||||
self.createSiteLine(hbox, site)
|
self.createSiteLine(hbox, site)
|
||||||
|
|
||||||
def fillDateFrame(self, vbox):
|
def fillDateFrame(self, vbox):
|
||||||
# Hat tip to Mika Bostrom - calendar code comes from PokerStats
|
# Hat tip to Mika Bostrom - calendar code comes from PokerStats
|
||||||
hbox = gtk.HBox()
|
hbox = gtk.HBox()
|
||||||
vbox.pack_start(hbox, False, True, 0)
|
vbox.pack_start(hbox, False, True, 0)
|
||||||
hbox.show()
|
hbox.show()
|
||||||
|
|
||||||
lbl_start = gtk.Label('From:')
|
lbl_start = gtk.Label('From:')
|
||||||
lbl_start.show()
|
lbl_start.show()
|
||||||
|
|
||||||
btn_start = gtk.Button()
|
btn_start = gtk.Button()
|
||||||
btn_start.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON))
|
btn_start.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON))
|
||||||
btn_start.connect('clicked', self.__calendar_dialog, self.start_date)
|
btn_start.connect('clicked', self.__calendar_dialog, self.start_date)
|
||||||
btn_start.show()
|
btn_start.show()
|
||||||
|
|
||||||
hbox.pack_start(lbl_start, expand=False, padding=3)
|
hbox.pack_start(lbl_start, expand=False, padding=3)
|
||||||
hbox.pack_start(btn_start, expand=False, padding=3)
|
hbox.pack_start(btn_start, expand=False, padding=3)
|
||||||
hbox.pack_start(self.start_date, expand=False, padding=2)
|
hbox.pack_start(self.start_date, expand=False, padding=2)
|
||||||
self.start_date.show()
|
self.start_date.show()
|
||||||
|
|
||||||
#New row for end date
|
#New row for end date
|
||||||
hbox = gtk.HBox()
|
hbox = gtk.HBox()
|
||||||
vbox.pack_start(hbox, False, True, 0)
|
vbox.pack_start(hbox, False, True, 0)
|
||||||
hbox.show()
|
hbox.show()
|
||||||
|
|
||||||
lbl_end = gtk.Label(' To:')
|
lbl_end = gtk.Label(' To:')
|
||||||
lbl_end.show()
|
lbl_end.show()
|
||||||
btn_end = gtk.Button()
|
btn_end = gtk.Button()
|
||||||
btn_end.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON))
|
btn_end.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON))
|
||||||
btn_end.connect('clicked', self.__calendar_dialog, self.end_date)
|
btn_end.connect('clicked', self.__calendar_dialog, self.end_date)
|
||||||
btn_end.show()
|
btn_end.show()
|
||||||
|
|
||||||
btn_clear = gtk.Button(label=' Clear Dates ')
|
btn_clear = gtk.Button(label=' Clear Dates ')
|
||||||
btn_clear.connect('clicked', self.__clear_dates)
|
btn_clear.connect('clicked', self.__clear_dates)
|
||||||
btn_clear.show()
|
btn_clear.show()
|
||||||
|
|
||||||
hbox.pack_start(lbl_end, expand=False, padding=3)
|
hbox.pack_start(lbl_end, expand=False, padding=3)
|
||||||
hbox.pack_start(btn_end, expand=False, padding=3)
|
hbox.pack_start(btn_end, expand=False, padding=3)
|
||||||
hbox.pack_start(self.end_date, expand=False, padding=2)
|
hbox.pack_start(self.end_date, expand=False, padding=2)
|
||||||
self.end_date.show()
|
self.end_date.show()
|
||||||
|
|
||||||
hbox.pack_start(btn_clear, expand=False, padding=15)
|
hbox.pack_start(btn_clear, expand=False, padding=15)
|
||||||
|
|
||||||
def __calendar_dialog(self, widget, entry):
|
def __calendar_dialog(self, widget, entry):
|
||||||
d = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
d = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||||
d.set_title('Pick a date')
|
d.set_title('Pick a date')
|
||||||
|
|
||||||
vb = gtk.VBox()
|
vb = gtk.VBox()
|
||||||
cal = gtk.Calendar()
|
cal = gtk.Calendar()
|
||||||
vb.pack_start(cal, expand=False, padding=0)
|
vb.pack_start(cal, expand=False, padding=0)
|
||||||
|
|
||||||
btn = gtk.Button('Done')
|
btn = gtk.Button('Done')
|
||||||
btn.connect('clicked', self.__get_date, cal, entry, d)
|
btn.connect('clicked', self.__get_date, cal, entry, d)
|
||||||
|
|
||||||
vb.pack_start(btn, expand=False, padding=4)
|
vb.pack_start(btn, expand=False, padding=4)
|
||||||
|
|
||||||
d.add(vb)
|
d.add(vb)
|
||||||
d.set_position(gtk.WIN_POS_MOUSE)
|
d.set_position(gtk.WIN_POS_MOUSE)
|
||||||
d.show_all()
|
d.show_all()
|
||||||
|
|
||||||
def __clear_dates(self, w):
|
def __clear_dates(self, w):
|
||||||
self.start_date.set_text('')
|
self.start_date.set_text('')
|
||||||
self.end_date.set_text('')
|
self.end_date.set_text('')
|
||||||
|
|
||||||
def __get_dates(self):
|
def __get_dates(self):
|
||||||
t1 = self.start_date.get_text()
|
t1 = self.start_date.get_text()
|
||||||
t2 = self.end_date.get_text()
|
t2 = self.end_date.get_text()
|
||||||
return (t1, t2)
|
return (t1, t2)
|
||||||
|
|
||||||
def __get_date(self, widget, calendar, entry, win):
|
def __get_date(self, widget, calendar, entry, win):
|
||||||
# year and day are correct, month is 0..11
|
# year and day are correct, month is 0..11
|
||||||
(year, month, day) = calendar.get_date()
|
(year, month, day) = calendar.get_date()
|
||||||
month += 1
|
month += 1
|
||||||
ds = '%04d-%02d-%02d' % (year, month, day)
|
ds = '%04d-%02d-%02d' % (year, month, day)
|
||||||
entry.set_text(ds)
|
entry.set_text(ds)
|
||||||
win.destroy()
|
win.destroy()
|
||||||
|
|
||||||
def __init__(self, db, settings, querylist, config, debug=True):
|
def __init__(self, db, settings, querylist, config, debug=True):
|
||||||
"""Constructor for GraphViewer"""
|
"""Constructor for GraphViewer"""
|
||||||
self.debug=debug
|
self.debug=debug
|
||||||
#print "start of GraphViewer constructor"
|
#print "start of GraphViewer constructor"
|
||||||
self.db=db
|
self.db=db
|
||||||
self.cursor=db.cursor
|
self.cursor=db.cursor
|
||||||
self.settings=settings
|
self.settings=settings
|
||||||
self.sql=querylist
|
self.sql=querylist
|
||||||
self.conf = config
|
self.conf = config
|
||||||
|
|
||||||
self.sites = "PokerStars"
|
self.sites = "PokerStars"
|
||||||
self.heroes = {}
|
self.heroes = {}
|
||||||
|
|
||||||
# For use in date ranges.
|
# For use in date ranges.
|
||||||
self.start_date = gtk.Entry(max=12)
|
self.start_date = gtk.Entry(max=12)
|
||||||
self.end_date = gtk.Entry(max=12)
|
self.end_date = gtk.Entry(max=12)
|
||||||
self.start_date.set_property('editable', False)
|
self.start_date.set_property('editable', False)
|
||||||
self.end_date.set_property('editable', False)
|
self.end_date.set_property('editable', False)
|
||||||
|
|
||||||
self.mainHBox = gtk.HBox(False, 0)
|
self.mainHBox = gtk.HBox(False, 0)
|
||||||
self.mainHBox.show()
|
self.mainHBox.show()
|
||||||
|
|
||||||
self.leftPanelBox = gtk.VBox(False, 0)
|
self.leftPanelBox = gtk.VBox(False, 0)
|
||||||
self.graphBox = gtk.VBox(False, 0)
|
self.graphBox = gtk.VBox(False, 0)
|
||||||
|
|
||||||
self.hpane = gtk.HPaned()
|
self.hpane = gtk.HPaned()
|
||||||
self.hpane.pack1(self.leftPanelBox)
|
self.hpane.pack1(self.leftPanelBox)
|
||||||
self.hpane.pack2(self.graphBox)
|
self.hpane.pack2(self.graphBox)
|
||||||
self.hpane.show()
|
self.hpane.show()
|
||||||
|
|
||||||
self.mainHBox.add(self.hpane)
|
self.mainHBox.add(self.hpane)
|
||||||
|
|
||||||
playerFrame = gtk.Frame("Hero:")
|
playerFrame = gtk.Frame("Hero:")
|
||||||
playerFrame.set_label_align(0.0, 0.0)
|
playerFrame.set_label_align(0.0, 0.0)
|
||||||
playerFrame.show()
|
playerFrame.show()
|
||||||
vbox = gtk.VBox(False, 0)
|
vbox = gtk.VBox(False, 0)
|
||||||
vbox.show()
|
vbox.show()
|
||||||
|
|
||||||
self.fillPlayerFrame(vbox)
|
self.fillPlayerFrame(vbox)
|
||||||
playerFrame.add(vbox)
|
playerFrame.add(vbox)
|
||||||
|
|
||||||
sitesFrame = gtk.Frame("Sites:")
|
sitesFrame = gtk.Frame("Sites:")
|
||||||
sitesFrame.set_label_align(0.0, 0.0)
|
sitesFrame.set_label_align(0.0, 0.0)
|
||||||
sitesFrame.show()
|
sitesFrame.show()
|
||||||
vbox = gtk.VBox(False, 0)
|
vbox = gtk.VBox(False, 0)
|
||||||
vbox.show()
|
vbox.show()
|
||||||
|
|
||||||
self.fillSitesFrame(vbox)
|
self.fillSitesFrame(vbox)
|
||||||
sitesFrame.add(vbox)
|
sitesFrame.add(vbox)
|
||||||
|
|
||||||
dateFrame = gtk.Frame("Date:")
|
dateFrame = gtk.Frame("Date:")
|
||||||
dateFrame.set_label_align(0.0, 0.0)
|
dateFrame.set_label_align(0.0, 0.0)
|
||||||
dateFrame.show()
|
dateFrame.show()
|
||||||
vbox = gtk.VBox(False, 0)
|
vbox = gtk.VBox(False, 0)
|
||||||
vbox.show()
|
vbox.show()
|
||||||
|
|
||||||
self.fillDateFrame(vbox)
|
self.fillDateFrame(vbox)
|
||||||
dateFrame.add(vbox)
|
dateFrame.add(vbox)
|
||||||
|
|
||||||
graphButton=gtk.Button("Generate Graph")
|
graphButton=gtk.Button("Generate Graph")
|
||||||
graphButton.connect("clicked", self.generateGraph, "cliced data")
|
graphButton.connect("clicked", self.generateGraph, "cliced data")
|
||||||
graphButton.show()
|
graphButton.show()
|
||||||
|
|
||||||
self.exportButton=gtk.Button("Export to File")
|
self.exportButton=gtk.Button("Export to File")
|
||||||
#@ self.exportButton.connect("clicked", self.exportGraph, "show clicked")
|
#@ self.exportButton.connect("clicked", self.exportGraph, "show clicked")
|
||||||
self.exportButton.show()
|
self.exportButton.show()
|
||||||
|
|
||||||
self.leftPanelBox.add(playerFrame)
|
self.leftPanelBox.add(playerFrame)
|
||||||
self.leftPanelBox.add(sitesFrame)
|
self.leftPanelBox.add(sitesFrame)
|
||||||
self.leftPanelBox.add(dateFrame)
|
self.leftPanelBox.add(dateFrame)
|
||||||
self.leftPanelBox.add(graphButton)
|
self.leftPanelBox.add(graphButton)
|
||||||
self.leftPanelBox.add(self.exportButton)
|
self.leftPanelBox.add(self.exportButton)
|
||||||
|
|
||||||
self.leftPanelBox.show()
|
self.leftPanelBox.show()
|
||||||
self.graphBox.show()
|
self.graphBox.show()
|
||||||
|
|
||||||
#Note: Assumes PokerStars is in the config
|
|
||||||
# self.nameEntry.set_text(self.conf.supported_sites["PokerStars"].screen_name)
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user