Merge branch 'master' of git://git.assembla.com/fpdboz.git
This commit is contained in:
commit
1c79ecf82c
|
@ -62,6 +62,7 @@ class Everleaf(HandHistoryConverter):
|
||||||
def readSupportedGames(self):
|
def readSupportedGames(self):
|
||||||
return [["ring", "hold", "nl"],
|
return [["ring", "hold", "nl"],
|
||||||
["ring", "hold", "pl"],
|
["ring", "hold", "pl"],
|
||||||
|
["ring", "hold", "fl"],
|
||||||
["ring", "omahahi", "pl"]
|
["ring", "omahahi", "pl"]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -181,7 +181,7 @@ class FullTilt(HandHistoryConverter):
|
||||||
# "2c, qh" -> set(["2c","qc"])
|
# "2c, qh" -> set(["2c","qc"])
|
||||||
# Also works with Omaha hands.
|
# Also works with Omaha hands.
|
||||||
cards = m.group('CARDS')
|
cards = m.group('CARDS')
|
||||||
cards = set(cards.split(' '))
|
cards = cards.split(' ')
|
||||||
hand.addHoleCards(cards, m.group('PNAME'))
|
hand.addHoleCards(cards, m.group('PNAME'))
|
||||||
|
|
||||||
def readPlayerCards(self, hand, street):
|
def readPlayerCards(self, hand, street):
|
||||||
|
@ -195,7 +195,7 @@ class FullTilt(HandHistoryConverter):
|
||||||
if player.group('NEWCARD') != None:
|
if player.group('NEWCARD') != None:
|
||||||
print cards
|
print cards
|
||||||
cards = cards + " " + player.group('NEWCARD')
|
cards = cards + " " + player.group('NEWCARD')
|
||||||
cards = set(cards.split(' '))
|
cards = cards.split(' ')
|
||||||
hand.addPlayerCards(cards, player.group('PNAME'))
|
hand.addPlayerCards(cards, player.group('PNAME'))
|
||||||
|
|
||||||
def readAction(self, hand, street):
|
def readAction(self, hand, street):
|
||||||
|
@ -218,7 +218,7 @@ class FullTilt(HandHistoryConverter):
|
||||||
def readShowdownActions(self, hand):
|
def readShowdownActions(self, hand):
|
||||||
for shows in self.re_ShowdownAction.finditer(hand.string):
|
for shows in self.re_ShowdownAction.finditer(hand.string):
|
||||||
cards = shows.group('CARDS')
|
cards = shows.group('CARDS')
|
||||||
cards = set(cards.split(' '))
|
cards = cards.split(' ')
|
||||||
hand.addShownCards(cards, shows.group('PNAME'))
|
hand.addShownCards(cards, shows.group('PNAME'))
|
||||||
|
|
||||||
def readCollectPot(self,hand):
|
def readCollectPot(self,hand):
|
||||||
|
@ -229,7 +229,7 @@ class FullTilt(HandHistoryConverter):
|
||||||
for m in self.re_ShownCards.finditer(hand.string):
|
for m in self.re_ShownCards.finditer(hand.string):
|
||||||
if m.group('CARDS') is not None:
|
if m.group('CARDS') is not None:
|
||||||
cards = m.group('CARDS')
|
cards = m.group('CARDS')
|
||||||
cards = set(cards.split(' '))
|
cards = cards.split(' ')
|
||||||
hand.addShownCards(cards=cards, player=m.group('PNAME'))
|
hand.addShownCards(cards=cards, player=m.group('PNAME'))
|
||||||
|
|
||||||
|
|
||||||
|
|
178
pyfpdb/GuiPositionalStats.py
Normal file
178
pyfpdb/GuiPositionalStats.py
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
#!/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 fpdb_import
|
||||||
|
import fpdb_db
|
||||||
|
import FpdbSQLQueries
|
||||||
|
|
||||||
|
class GuiPositionalStats (threading.Thread):
|
||||||
|
def get_vbox(self):
|
||||||
|
"""returns the vbox of this thread"""
|
||||||
|
return self.main_hbox
|
||||||
|
|
||||||
|
def toggleCallback(self, widget, data=None):
|
||||||
|
# print "%s was toggled %s" % (data, ("OFF", "ON")[widget.get_active()])
|
||||||
|
self.activesite = data
|
||||||
|
print "DEBUG: activesite set to %s" %(self.activesite)
|
||||||
|
|
||||||
|
def refreshStats(self, widget, data):
|
||||||
|
try: self.stats_table.destroy()
|
||||||
|
except AttributeError: pass
|
||||||
|
self.fillStatsFrame(self.stats_frame)
|
||||||
|
|
||||||
|
def fillStatsFrame(self, vbox):
|
||||||
|
# Get currently active site and grab playerid
|
||||||
|
print "DEBUG: attempting to fill stats frame"
|
||||||
|
tmp = self.sql.query['playerStatsByPosition']
|
||||||
|
|
||||||
|
result = self.cursor.execute(self.sql.query['getPlayerId'], (self.heroes[self.activesite],))
|
||||||
|
result = self.cursor.fetchall()
|
||||||
|
if not result == ():
|
||||||
|
pid = result[0][0]
|
||||||
|
pid = result[0][0]
|
||||||
|
tmp = tmp.replace("<player_test>", "(" + str(pid) + ")")
|
||||||
|
self.cursor.execute(tmp)
|
||||||
|
result = self.cursor.fetchall()
|
||||||
|
cols = 16
|
||||||
|
rows = len(result)+1 # +1 for title row
|
||||||
|
self.stats_table = gtk.Table(rows, cols, False)
|
||||||
|
self.stats_table.set_col_spacings(4)
|
||||||
|
self.stats_table.show()
|
||||||
|
vbox.add(self.stats_table)
|
||||||
|
|
||||||
|
# Create header row
|
||||||
|
titles = ("Game", "Hands", "VPIP", "PFR", "Saw_F", "SawSD", "WtSDwsF", "W$SD", "FlAFq", "TuAFq", "RvAFq", "PoFAFq", "Net($)", "BB/100", "$/hand", "Variance")
|
||||||
|
|
||||||
|
col = 0
|
||||||
|
row = 0
|
||||||
|
for t in titles:
|
||||||
|
l = gtk.Label(titles[col])
|
||||||
|
l.show()
|
||||||
|
self.stats_table.attach(l, col, col+1, row, row+1, yoptions=gtk.SHRINK)
|
||||||
|
col +=1
|
||||||
|
|
||||||
|
for row in range(rows-1):
|
||||||
|
if(row%2 == 0):
|
||||||
|
bgcolor = "white"
|
||||||
|
else:
|
||||||
|
bgcolor = "lightgrey"
|
||||||
|
for col in range(cols):
|
||||||
|
eb = gtk.EventBox()
|
||||||
|
eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(bgcolor))
|
||||||
|
if result[row][col]:
|
||||||
|
l = gtk.Label(result[row][col])
|
||||||
|
else:
|
||||||
|
l = gtk.Label(' ')
|
||||||
|
if col == 0:
|
||||||
|
l.set_alignment(xalign=0.0, yalign=0.5)
|
||||||
|
else:
|
||||||
|
l.set_alignment(xalign=1.0, yalign=0.5)
|
||||||
|
eb.add(l)
|
||||||
|
self.stats_table.attach(eb, col, col+1, row+1, row+2, yoptions=gtk.SHRINK)
|
||||||
|
l.show()
|
||||||
|
eb.show()
|
||||||
|
self.fdb.db.commit()
|
||||||
|
#end def fillStatsFrame(self, vbox):
|
||||||
|
|
||||||
|
def fillPlayerFrame(self, vbox):
|
||||||
|
for site in self.conf.supported_sites.keys():
|
||||||
|
hbox = gtk.HBox(False, 0)
|
||||||
|
vbox.pack_start(hbox, False, True, 0)
|
||||||
|
hbox.show()
|
||||||
|
|
||||||
|
player = self.conf.supported_sites[site].screen_name
|
||||||
|
self.createPlayerLine(hbox, site, player)
|
||||||
|
hbox = gtk.HBox(False, 0)
|
||||||
|
button = gtk.Button("Refresh")
|
||||||
|
button.connect("clicked", self.refreshStats, False)
|
||||||
|
button.show()
|
||||||
|
hbox.add(button)
|
||||||
|
vbox.pack_start(hbox, False, True, 0)
|
||||||
|
hbox.show()
|
||||||
|
|
||||||
|
def createPlayerLine(self, hbox, site, player):
|
||||||
|
if(self.buttongroup == None):
|
||||||
|
button = gtk.RadioButton(None, site + " id:")
|
||||||
|
button.set_active(True)
|
||||||
|
self.buttongroup = button
|
||||||
|
self.activesite = site
|
||||||
|
else:
|
||||||
|
button = gtk.RadioButton(self.buttongroup, site + " id:")
|
||||||
|
hbox.pack_start(button, True, True, 0)
|
||||||
|
button.connect("toggled", self.toggleCallback, site)
|
||||||
|
button.show()
|
||||||
|
|
||||||
|
pname = gtk.Entry()
|
||||||
|
pname.set_text(player)
|
||||||
|
pname.set_width_chars(20)
|
||||||
|
hbox.pack_start(pname, False, True, 0)
|
||||||
|
pname.connect("changed", self.__set_hero_name, site)
|
||||||
|
#TODO: Look at GtkCompletion - to fill out usernames
|
||||||
|
pname.show()
|
||||||
|
self.__set_hero_name(pname, site)
|
||||||
|
|
||||||
|
def __set_hero_name(self, w, site):
|
||||||
|
self.heroes[site] = w.get_text()
|
||||||
|
|
||||||
|
def __init__(self, db, config, querylist, debug=True):
|
||||||
|
self.debug=debug
|
||||||
|
self.conf=config
|
||||||
|
|
||||||
|
# create new db connection to avoid conflicts with other threads
|
||||||
|
self.fdb = fpdb_db.fpdb_db()
|
||||||
|
self.fdb.do_connect(self.conf)
|
||||||
|
self.cursor=self.fdb.cursor
|
||||||
|
|
||||||
|
self.sql = querylist
|
||||||
|
|
||||||
|
self.activesite = None
|
||||||
|
self.buttongroup = None
|
||||||
|
|
||||||
|
self.heroes = {}
|
||||||
|
self.stat_table = None
|
||||||
|
self.stats_frame = None
|
||||||
|
|
||||||
|
self.main_hbox = gtk.HBox(False, 0)
|
||||||
|
self.main_hbox.show()
|
||||||
|
|
||||||
|
playerFrame = gtk.Frame("Hero:")
|
||||||
|
playerFrame.set_label_align(0.0, 0.0)
|
||||||
|
playerFrame.show()
|
||||||
|
vbox = gtk.VBox(False, 0)
|
||||||
|
vbox.show()
|
||||||
|
|
||||||
|
self.fillPlayerFrame(vbox)
|
||||||
|
playerFrame.add(vbox)
|
||||||
|
|
||||||
|
statsFrame = gtk.Frame("Stats:")
|
||||||
|
statsFrame.set_label_align(0.0, 0.0)
|
||||||
|
statsFrame.show()
|
||||||
|
self.stats_frame = gtk.VBox(False, 0)
|
||||||
|
self.stats_frame.show()
|
||||||
|
|
||||||
|
self.fillStatsFrame(self.stats_frame)
|
||||||
|
statsFrame.add(self.stats_frame)
|
||||||
|
|
||||||
|
self.main_hbox.pack_start(playerFrame)
|
||||||
|
self.main_hbox.pack_start(statsFrame)
|
||||||
|
|
|
@ -409,7 +409,12 @@ Map the tuple self.gametype onto the pokerstars string describing it
|
||||||
"0.20" : ("0.05", "0.10"),
|
"0.20" : ("0.05", "0.10"),
|
||||||
"0.50" : ("0.10", "0.25"),
|
"0.50" : ("0.10", "0.25"),
|
||||||
"1.00" : ("0.25", "0.50")
|
"1.00" : ("0.25", "0.50")
|
||||||
|
},
|
||||||
|
"FullTilt" : { "0.10" : ("0.02", "0.05"),
|
||||||
|
"0.20" : ("0.05", "0.10"),
|
||||||
|
"1" : ("0.25", "0.50"),
|
||||||
|
"2" : ("0.50", "1"),
|
||||||
|
"4" : ("1", "2")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return betlist[self.sitename][self.bb]
|
return betlist[self.sitename][self.bb]
|
||||||
|
|
798
pyfpdb/fpdb.py
798
pyfpdb/fpdb.py
|
@ -22,13 +22,13 @@ from optparse import OptionParser
|
||||||
|
|
||||||
parser = OptionParser()
|
parser = OptionParser()
|
||||||
parser.add_option("-x", "--errorsToConsole", action="store_true",
|
parser.add_option("-x", "--errorsToConsole", action="store_true",
|
||||||
help="If passed error output will go to the console rather than .")
|
help="If passed error output will go to the console rather than .")
|
||||||
(options, sys.argv) = parser.parse_args()
|
(options, sys.argv) = parser.parse_args()
|
||||||
|
|
||||||
if not options.errorsToConsole:
|
if not options.errorsToConsole:
|
||||||
print "Note: error output is being diverted to fpdb-error-log.txt and HUD-error.txt. Any major error will be reported there _only_."
|
print "Note: error output is being diverted to fpdb-error-log.txt and HUD-error.txt. Any major error will be reported there _only_."
|
||||||
errorFile = open('fpdb-error-log.txt', 'w', 0)
|
errorFile = open('fpdb-error-log.txt', 'w', 0)
|
||||||
sys.stderr = errorFile
|
sys.stderr = errorFile
|
||||||
|
|
||||||
import pygtk
|
import pygtk
|
||||||
pygtk.require('2.0')
|
pygtk.require('2.0')
|
||||||
|
@ -38,6 +38,7 @@ import fpdb_db
|
||||||
import fpdb_simple
|
import fpdb_simple
|
||||||
import GuiBulkImport
|
import GuiBulkImport
|
||||||
import GuiPlayerStats
|
import GuiPlayerStats
|
||||||
|
import GuiPositionalStats
|
||||||
import GuiTableViewer
|
import GuiTableViewer
|
||||||
import GuiAutoImport
|
import GuiAutoImport
|
||||||
import GuiGraphViewer
|
import GuiGraphViewer
|
||||||
|
@ -47,419 +48,426 @@ import Configuration
|
||||||
VERSION = "0.10"
|
VERSION = "0.10"
|
||||||
|
|
||||||
class fpdb:
|
class fpdb:
|
||||||
def tab_clicked(self, widget, tab_name):
|
def tab_clicked(self, widget, tab_name):
|
||||||
"""called when a tab button is clicked to activate that tab"""
|
"""called when a tab button is clicked to activate that tab"""
|
||||||
#print "start of tab_clicked"
|
#print "start of tab_clicked"
|
||||||
self.display_tab(tab_name)
|
self.display_tab(tab_name)
|
||||||
#end def tab_clicked
|
#end def tab_clicked
|
||||||
|
|
||||||
def add_and_display_tab(self, new_tab, new_tab_name):
|
|
||||||
"""just calls the component methods"""
|
|
||||||
self.add_tab(new_tab, new_tab_name)
|
|
||||||
self.display_tab(new_tab_name)
|
|
||||||
#end def add_and_display_tab
|
|
||||||
|
|
||||||
def add_tab(self, new_tab, new_tab_name):
|
|
||||||
"""adds a tab, namely creates the button and displays it and appends all the relevant arrays"""
|
|
||||||
#print "start of add_tab"
|
|
||||||
for i in self.tab_names: #todo: check this is valid
|
|
||||||
if i==new_tab_name:
|
|
||||||
return # we depend on this to not create duplicate tabs, there's no reason to raise an error here?
|
|
||||||
# raise fpdb_simple.FpdbError("duplicate tab_name not permitted")
|
|
||||||
|
|
||||||
self.tabs.append(new_tab)
|
|
||||||
self.tab_names.append(new_tab_name)
|
|
||||||
|
|
||||||
new_tab_sel_button=gtk.ToggleButton(new_tab_name)
|
|
||||||
new_tab_sel_button.connect("clicked", self.tab_clicked, new_tab_name)
|
|
||||||
self.tab_box.add(new_tab_sel_button)
|
|
||||||
new_tab_sel_button.show()
|
|
||||||
self.tab_buttons.append(new_tab_sel_button)
|
|
||||||
#end def add_tab
|
|
||||||
|
|
||||||
def display_tab(self, new_tab_name):
|
|
||||||
"""displays the indicated tab"""
|
|
||||||
#print "start of display_tab, len(self.tab_names):",len(self.tab_names)
|
|
||||||
tab_no=-1
|
|
||||||
#if len(self.tab_names)>1:
|
|
||||||
for i in range(len(self.tab_names)):
|
|
||||||
#print "display_tab, new_tab_name:",new_tab_name," self.tab_names[i]:", self.tab_names[i]
|
|
||||||
if (new_tab_name==self.tab_names[i]):
|
|
||||||
tab_no=i
|
|
||||||
#self.tab_buttons[i].set_active(False)
|
|
||||||
#else:
|
|
||||||
# tab_no=0
|
|
||||||
|
|
||||||
#current_tab_no=-1
|
|
||||||
for i in range(len(self.tab_names)):
|
|
||||||
if self.current_tab==self.tabs[i]:
|
|
||||||
#self.tab_buttons[i].set_active(False)
|
|
||||||
pass
|
|
||||||
|
|
||||||
if tab_no==-1:
|
|
||||||
raise fpdb_simple.FpdbError("invalid tab_no")
|
|
||||||
else:
|
|
||||||
self.main_vbox.remove(self.current_tab)
|
|
||||||
#self.current_tab.destroy()
|
|
||||||
self.current_tab=self.tabs[tab_no]
|
|
||||||
self.main_vbox.add(self.current_tab)
|
|
||||||
self.tab_buttons[tab_no].set_active(True)
|
|
||||||
self.current_tab.show()
|
|
||||||
#end def display_tab
|
|
||||||
|
|
||||||
def delete_event(self, widget, event, data=None):
|
|
||||||
return False
|
|
||||||
#end def delete_event
|
|
||||||
|
|
||||||
def destroy(self, widget, data=None):
|
def add_and_display_tab(self, new_tab, new_tab_name):
|
||||||
self.quit(widget, data)
|
"""just calls the component methods"""
|
||||||
#end def destroy
|
self.add_tab(new_tab, new_tab_name)
|
||||||
|
self.display_tab(new_tab_name)
|
||||||
def dia_about(self, widget, data):
|
#end def add_and_display_tab
|
||||||
print "todo: implement dia_about",
|
|
||||||
print " version = %s, requires database version %s" % (VERSION, "118")
|
|
||||||
#end def dia_about
|
|
||||||
|
|
||||||
def dia_create_del_database(self, widget, data):
|
|
||||||
print "todo: implement dia_create_del_database"
|
|
||||||
self.obtain_global_lock()
|
|
||||||
#end def dia_create_del_database
|
|
||||||
|
|
||||||
def dia_create_del_user(self, widget, data):
|
|
||||||
print "todo: implement dia_create_del_user"
|
|
||||||
self.obtain_global_lock()
|
|
||||||
#end def dia_create_del_user
|
|
||||||
|
|
||||||
def dia_database_stats(self, widget, data):
|
|
||||||
print "todo: implement dia_database_stats"
|
|
||||||
#string=fpdb_db.getDbStats(db, cursor)
|
|
||||||
#end def dia_database_stats
|
|
||||||
|
|
||||||
def dia_delete_db_parts(self, widget, data):
|
|
||||||
print "todo: implement dia_delete_db_parts"
|
|
||||||
self.obtain_global_lock()
|
|
||||||
#end def dia_delete_db_parts
|
|
||||||
|
|
||||||
def dia_edit_profile(self, widget=None, data=None, create_default=False, path=None):
|
|
||||||
print "todo: implement dia_edit_profile"
|
|
||||||
self.obtain_global_lock()
|
|
||||||
#end def dia_edit_profile
|
|
||||||
|
|
||||||
def dia_export_db(self, widget, data):
|
def add_tab(self, new_tab, new_tab_name):
|
||||||
print "todo: implement dia_export_db"
|
"""adds a tab, namely creates the button and displays it and appends all the relevant arrays"""
|
||||||
self.obtain_global_lock()
|
#print "start of add_tab"
|
||||||
#end def dia_export_db
|
for i in self.tab_names: #todo: check this is valid
|
||||||
|
if i==new_tab_name:
|
||||||
def dia_get_db_root_credentials(self):
|
return # we depend on this to not create duplicate tabs, there's no reason to raise an error here?
|
||||||
"""obtains db root credentials from user"""
|
# raise fpdb_simple.FpdbError("duplicate tab_name not permitted")
|
||||||
print "todo: implement dia_get_db_root_credentials"
|
|
||||||
# user, pw=None, None
|
|
||||||
#
|
|
||||||
# dialog=gtk.Dialog(title="DB Credentials needed", parent=None, flags=0,
|
|
||||||
# buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,"Connect and recreate",gtk.RESPONSE_OK))
|
|
||||||
#
|
|
||||||
# label_warning1=gtk.Label("Please enter credentials for a database user for "+self.host+" that has permissions to create a database.")
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# label_user=gtk.Label("Username")
|
|
||||||
# dialog.vbox.add(label_user)
|
|
||||||
# label_user.show()
|
|
||||||
#
|
|
||||||
# response=dialog.run()
|
|
||||||
# dialog.destroy()
|
|
||||||
# return (user, pw, response)
|
|
||||||
#end def dia_get_db_root_credentials
|
|
||||||
|
|
||||||
def dia_import_db(self, widget, data):
|
|
||||||
print "todo: implement dia_import_db"
|
|
||||||
self.obtain_global_lock()
|
|
||||||
#end def dia_import_db
|
|
||||||
|
|
||||||
def dia_licensing(self, widget, data):
|
|
||||||
print "todo: implement dia_licensing"
|
|
||||||
#end def dia_licensing
|
|
||||||
|
|
||||||
def dia_load_profile(self, widget, data):
|
|
||||||
"""Dialogue to select a file to load a profile from"""
|
|
||||||
self.obtain_global_lock()
|
|
||||||
chooser = gtk.FileChooserDialog(title="Please select a profile file to load",
|
|
||||||
action=gtk.FILE_CHOOSER_ACTION_OPEN,
|
|
||||||
buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
|
|
||||||
chooser.set_filename(self.profile)
|
|
||||||
|
|
||||||
response = chooser.run()
|
|
||||||
chooser.destroy()
|
|
||||||
if response == gtk.RESPONSE_OK:
|
|
||||||
self.load_profile(chooser.get_filename())
|
|
||||||
elif response == gtk.RESPONSE_CANCEL:
|
|
||||||
print 'User cancelled loading profile'
|
|
||||||
#end def dia_load_profile
|
|
||||||
|
|
||||||
def dia_recreate_tables(self, widget, data):
|
|
||||||
"""Dialogue that asks user to confirm that he wants to delete and recreate the tables"""
|
|
||||||
self.obtain_global_lock()
|
|
||||||
dia_confirm=gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_WARNING,
|
|
||||||
buttons=(gtk.BUTTONS_YES_NO), message_format="Confirm deleting and recreating tables")
|
|
||||||
diastring=("Please confirm that you want to (re-)create the tables. If there already are tables in the database "+self.db.database+" on "+self.db.host+" they will be deleted.")
|
|
||||||
dia_confirm.format_secondary_text(diastring)#todo: make above string with bold for db, host and deleted
|
|
||||||
|
|
||||||
response=dia_confirm.run()
|
self.tabs.append(new_tab)
|
||||||
dia_confirm.destroy()
|
self.tab_names.append(new_tab_name)
|
||||||
if response == gtk.RESPONSE_YES:
|
|
||||||
self.db.recreate_tables()
|
|
||||||
elif response == gtk.RESPONSE_NO:
|
|
||||||
print 'User cancelled recreating tables'
|
|
||||||
#end def dia_recreate_tables
|
|
||||||
|
|
||||||
def dia_regression_test(self, widget, data):
|
|
||||||
print "todo: implement dia_regression_test"
|
|
||||||
self.obtain_global_lock()
|
|
||||||
#end def dia_regression_test
|
|
||||||
|
|
||||||
def dia_save_profile(self, widget, data):
|
|
||||||
print "todo: implement dia_save_profile"
|
|
||||||
#end def dia_save_profile
|
|
||||||
|
|
||||||
def diaSetupWizard(self, path):
|
|
||||||
print "todo: implement setup wizard"
|
|
||||||
print "setup wizard not implemented - please create the default configuration file:", path
|
|
||||||
diaSetupWizard = gtk.Dialog(title="Fatal Error - Config File Missing", parent=None, flags=0, buttons=(gtk.STOCK_QUIT,gtk.RESPONSE_OK))
|
|
||||||
|
|
||||||
label = gtk.Label("Please copy the config file from the docs folder to:")
|
new_tab_sel_button=gtk.ToggleButton(new_tab_name)
|
||||||
diaSetupWizard.vbox.add(label)
|
new_tab_sel_button.connect("clicked", self.tab_clicked, new_tab_name)
|
||||||
label.show()
|
self.tab_box.add(new_tab_sel_button)
|
||||||
|
new_tab_sel_button.show()
|
||||||
label = gtk.Label(path)
|
self.tab_buttons.append(new_tab_sel_button)
|
||||||
diaSetupWizard.vbox.add(label)
|
#end def add_tab
|
||||||
label.show()
|
|
||||||
|
|
||||||
label = gtk.Label("and edit it according to the install documentation at http://fpdb.sourceforge.net")
|
|
||||||
diaSetupWizard.vbox.add(label)
|
|
||||||
label.show()
|
|
||||||
|
|
||||||
response = diaSetupWizard.run()
|
def display_tab(self, new_tab_name):
|
||||||
sys.exit(1)
|
"""displays the indicated tab"""
|
||||||
#end def diaSetupWizard
|
#print "start of display_tab, len(self.tab_names):",len(self.tab_names)
|
||||||
|
tab_no=-1
|
||||||
def get_menu(self, window):
|
#if len(self.tab_names)>1:
|
||||||
"""returns the menu for this program"""
|
for i in range(len(self.tab_names)):
|
||||||
accel_group = gtk.AccelGroup()
|
#print "display_tab, new_tab_name:",new_tab_name," self.tab_names[i]:", self.tab_names[i]
|
||||||
self.item_factory = gtk.ItemFactory(gtk.MenuBar, "<main>", accel_group)
|
if (new_tab_name==self.tab_names[i]):
|
||||||
self.item_factory.create_items(self.menu_items)
|
tab_no=i
|
||||||
window.add_accel_group(accel_group)
|
#self.tab_buttons[i].set_active(False)
|
||||||
return self.item_factory.get_widget("<main>")
|
#else:
|
||||||
#end def get_menu
|
# tab_no=0
|
||||||
|
|
||||||
def load_profile(self):
|
|
||||||
"""Loads profile from the provided path name."""
|
|
||||||
self.settings = {}
|
|
||||||
if (os.sep=="/"):
|
|
||||||
self.settings['os']="linuxmac"
|
|
||||||
else:
|
|
||||||
self.settings['os']="windows"
|
|
||||||
|
|
||||||
self.settings.update(self.config.get_db_parameters())
|
#current_tab_no=-1
|
||||||
self.settings.update(self.config.get_tv_parameters())
|
for i in range(len(self.tab_names)):
|
||||||
self.settings.update(self.config.get_import_parameters())
|
if self.current_tab==self.tabs[i]:
|
||||||
self.settings.update(self.config.get_default_paths())
|
#self.tab_buttons[i].set_active(False)
|
||||||
|
pass
|
||||||
if self.db!=None:
|
|
||||||
self.db.disconnect()
|
if tab_no==-1:
|
||||||
|
raise fpdb_simple.FpdbError("invalid tab_no")
|
||||||
self.db = fpdb_db.fpdb_db()
|
else:
|
||||||
#print "end of fpdb.load_profile, databaseName:",self.settings['db-databaseName']
|
self.main_vbox.remove(self.current_tab)
|
||||||
self.db.connect(self.settings['db-backend'],
|
#self.current_tab.destroy()
|
||||||
|
self.current_tab=self.tabs[tab_no]
|
||||||
|
self.main_vbox.add(self.current_tab)
|
||||||
|
self.tab_buttons[tab_no].set_active(True)
|
||||||
|
self.current_tab.show()
|
||||||
|
#end def display_tab
|
||||||
|
|
||||||
|
def delete_event(self, widget, event, data=None):
|
||||||
|
return False
|
||||||
|
#end def delete_event
|
||||||
|
|
||||||
|
def destroy(self, widget, data=None):
|
||||||
|
self.quit(widget, data)
|
||||||
|
#end def destroy
|
||||||
|
|
||||||
|
def dia_about(self, widget, data):
|
||||||
|
print "todo: implement dia_about",
|
||||||
|
print " version = %s, requires database version %s" % (VERSION, "118")
|
||||||
|
#end def dia_about
|
||||||
|
|
||||||
|
def dia_create_del_database(self, widget, data):
|
||||||
|
print "todo: implement dia_create_del_database"
|
||||||
|
self.obtain_global_lock()
|
||||||
|
#end def dia_create_del_database
|
||||||
|
|
||||||
|
def dia_create_del_user(self, widget, data):
|
||||||
|
print "todo: implement dia_create_del_user"
|
||||||
|
self.obtain_global_lock()
|
||||||
|
#end def dia_create_del_user
|
||||||
|
|
||||||
|
def dia_database_stats(self, widget, data):
|
||||||
|
print "todo: implement dia_database_stats"
|
||||||
|
#string=fpdb_db.getDbStats(db, cursor)
|
||||||
|
#end def dia_database_stats
|
||||||
|
|
||||||
|
def dia_delete_db_parts(self, widget, data):
|
||||||
|
print "todo: implement dia_delete_db_parts"
|
||||||
|
self.obtain_global_lock()
|
||||||
|
#end def dia_delete_db_parts
|
||||||
|
|
||||||
|
def dia_edit_profile(self, widget=None, data=None, create_default=False, path=None):
|
||||||
|
print "todo: implement dia_edit_profile"
|
||||||
|
self.obtain_global_lock()
|
||||||
|
#end def dia_edit_profile
|
||||||
|
|
||||||
|
def dia_export_db(self, widget, data):
|
||||||
|
print "todo: implement dia_export_db"
|
||||||
|
self.obtain_global_lock()
|
||||||
|
#end def dia_export_db
|
||||||
|
|
||||||
|
def dia_get_db_root_credentials(self):
|
||||||
|
"""obtains db root credentials from user"""
|
||||||
|
print "todo: implement dia_get_db_root_credentials"
|
||||||
|
# user, pw=None, None
|
||||||
|
#
|
||||||
|
# dialog=gtk.Dialog(title="DB Credentials needed", parent=None, flags=0,
|
||||||
|
# buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,"Connect and recreate",gtk.RESPONSE_OK))
|
||||||
|
#
|
||||||
|
# label_warning1=gtk.Label("Please enter credentials for a database user for "+self.host+" that has permissions to create a database.")
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# label_user=gtk.Label("Username")
|
||||||
|
# dialog.vbox.add(label_user)
|
||||||
|
# label_user.show()
|
||||||
|
#
|
||||||
|
# response=dialog.run()
|
||||||
|
# dialog.destroy()
|
||||||
|
# return (user, pw, response)
|
||||||
|
#end def dia_get_db_root_credentials
|
||||||
|
|
||||||
|
def dia_import_db(self, widget, data):
|
||||||
|
print "todo: implement dia_import_db"
|
||||||
|
self.obtain_global_lock()
|
||||||
|
#end def dia_import_db
|
||||||
|
|
||||||
|
def dia_licensing(self, widget, data):
|
||||||
|
print "todo: implement dia_licensing"
|
||||||
|
#end def dia_licensing
|
||||||
|
|
||||||
|
def dia_load_profile(self, widget, data):
|
||||||
|
"""Dialogue to select a file to load a profile from"""
|
||||||
|
self.obtain_global_lock()
|
||||||
|
chooser = gtk.FileChooserDialog(title="Please select a profile file to load",
|
||||||
|
action=gtk.FILE_CHOOSER_ACTION_OPEN,
|
||||||
|
buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
|
||||||
|
chooser.set_filename(self.profile)
|
||||||
|
|
||||||
|
response = chooser.run()
|
||||||
|
chooser.destroy()
|
||||||
|
if response == gtk.RESPONSE_OK:
|
||||||
|
self.load_profile(chooser.get_filename())
|
||||||
|
elif response == gtk.RESPONSE_CANCEL:
|
||||||
|
print 'User cancelled loading profile'
|
||||||
|
#end def dia_load_profile
|
||||||
|
|
||||||
|
def dia_recreate_tables(self, widget, data):
|
||||||
|
"""Dialogue that asks user to confirm that he wants to delete and recreate the tables"""
|
||||||
|
self.obtain_global_lock()
|
||||||
|
dia_confirm=gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_WARNING,
|
||||||
|
buttons=(gtk.BUTTONS_YES_NO), message_format="Confirm deleting and recreating tables")
|
||||||
|
diastring=("Please confirm that you want to (re-)create the tables. If there already are tables in the database "+self.db.database+" on "+self.db.host+" they will be deleted.")
|
||||||
|
dia_confirm.format_secondary_text(diastring)#todo: make above string with bold for db, host and deleted
|
||||||
|
|
||||||
|
response=dia_confirm.run()
|
||||||
|
dia_confirm.destroy()
|
||||||
|
if response == gtk.RESPONSE_YES:
|
||||||
|
self.db.recreate_tables()
|
||||||
|
elif response == gtk.RESPONSE_NO:
|
||||||
|
print 'User cancelled recreating tables'
|
||||||
|
#end def dia_recreate_tables
|
||||||
|
|
||||||
|
def dia_regression_test(self, widget, data):
|
||||||
|
print "todo: implement dia_regression_test"
|
||||||
|
self.obtain_global_lock()
|
||||||
|
#end def dia_regression_test
|
||||||
|
|
||||||
|
def dia_save_profile(self, widget, data):
|
||||||
|
print "todo: implement dia_save_profile"
|
||||||
|
#end def dia_save_profile
|
||||||
|
|
||||||
|
def diaSetupWizard(self, path):
|
||||||
|
print "todo: implement setup wizard"
|
||||||
|
print "setup wizard not implemented - please create the default configuration file:", path
|
||||||
|
diaSetupWizard = gtk.Dialog(title="Fatal Error - Config File Missing", parent=None, flags=0, buttons=(gtk.STOCK_QUIT,gtk.RESPONSE_OK))
|
||||||
|
|
||||||
|
label = gtk.Label("Please copy the config file from the docs folder to:")
|
||||||
|
diaSetupWizard.vbox.add(label)
|
||||||
|
label.show()
|
||||||
|
|
||||||
|
label = gtk.Label(path)
|
||||||
|
diaSetupWizard.vbox.add(label)
|
||||||
|
label.show()
|
||||||
|
|
||||||
|
label = gtk.Label("and edit it according to the install documentation at http://fpdb.sourceforge.net")
|
||||||
|
diaSetupWizard.vbox.add(label)
|
||||||
|
label.show()
|
||||||
|
|
||||||
|
response = diaSetupWizard.run()
|
||||||
|
sys.exit(1)
|
||||||
|
#end def diaSetupWizard
|
||||||
|
|
||||||
|
def get_menu(self, window):
|
||||||
|
"""returns the menu for this program"""
|
||||||
|
accel_group = gtk.AccelGroup()
|
||||||
|
self.item_factory = gtk.ItemFactory(gtk.MenuBar, "<main>", accel_group)
|
||||||
|
self.item_factory.create_items(self.menu_items)
|
||||||
|
window.add_accel_group(accel_group)
|
||||||
|
return self.item_factory.get_widget("<main>")
|
||||||
|
#end def get_menu
|
||||||
|
|
||||||
|
def load_profile(self):
|
||||||
|
"""Loads profile from the provided path name."""
|
||||||
|
self.settings = {}
|
||||||
|
if (os.sep=="/"):
|
||||||
|
self.settings['os']="linuxmac"
|
||||||
|
else:
|
||||||
|
self.settings['os']="windows"
|
||||||
|
|
||||||
|
self.settings.update(self.config.get_db_parameters())
|
||||||
|
self.settings.update(self.config.get_tv_parameters())
|
||||||
|
self.settings.update(self.config.get_import_parameters())
|
||||||
|
self.settings.update(self.config.get_default_paths())
|
||||||
|
|
||||||
|
if self.db!=None:
|
||||||
|
self.db.disconnect()
|
||||||
|
|
||||||
|
self.db = fpdb_db.fpdb_db()
|
||||||
|
#print "end of fpdb.load_profile, databaseName:",self.settings['db-databaseName']
|
||||||
|
self.db.connect(self.settings['db-backend'],
|
||||||
self.settings['db-host'],
|
self.settings['db-host'],
|
||||||
self.settings['db-databaseName'],
|
self.settings['db-databaseName'],
|
||||||
self.settings['db-user'],
|
self.settings['db-user'],
|
||||||
self.settings['db-password'])
|
self.settings['db-password'])
|
||||||
if self.db.wrongDbVersion:
|
if self.db.wrongDbVersion:
|
||||||
diaDbVersionWarning = gtk.Dialog(title="Strong Warning - Invalid database version", parent=None, flags=0, buttons=(gtk.STOCK_OK,gtk.RESPONSE_OK))
|
diaDbVersionWarning = gtk.Dialog(title="Strong Warning - Invalid database version", parent=None, flags=0, buttons=(gtk.STOCK_OK,gtk.RESPONSE_OK))
|
||||||
|
|
||||||
label = gtk.Label("An invalid DB version or missing tables have been detected.")
|
label = gtk.Label("An invalid DB version or missing tables have been detected.")
|
||||||
diaDbVersionWarning.vbox.add(label)
|
diaDbVersionWarning.vbox.add(label)
|
||||||
label.show()
|
label.show()
|
||||||
|
|
||||||
label = gtk.Label("This error is not necessarily fatal but it is strongly recommended that you recreate the tables by using the Database menu.")
|
|
||||||
diaDbVersionWarning.vbox.add(label)
|
|
||||||
label.show()
|
|
||||||
|
|
||||||
label = gtk.Label("Not doing this will likely lead to misbehaviour including fpdb crashes, corrupt data etc.")
|
|
||||||
diaDbVersionWarning.vbox.add(label)
|
|
||||||
label.show()
|
|
||||||
|
|
||||||
response = diaDbVersionWarning.run()
|
label = gtk.Label("This error is not necessarily fatal but it is strongly recommended that you recreate the tables by using the Database menu.")
|
||||||
diaDbVersionWarning.destroy()
|
diaDbVersionWarning.vbox.add(label)
|
||||||
|
label.show()
|
||||||
|
|
||||||
# Database connected to successfully, load queries to pass on to other classes
|
label = gtk.Label("Not doing this will likely lead to misbehaviour including fpdb crashes, corrupt data etc.")
|
||||||
self.querydict = FpdbSQLQueries.FpdbSQLQueries(self.db.get_backend_name())
|
diaDbVersionWarning.vbox.add(label)
|
||||||
#end def load_profile
|
label.show()
|
||||||
|
|
||||||
def not_implemented(self):
|
|
||||||
print "todo: called unimplemented menu entry (users: pls ignore this)"#remove this once more entries are implemented
|
|
||||||
#end def not_implemented
|
|
||||||
|
|
||||||
def obtain_global_lock(self):
|
|
||||||
print "todo: implement obtain_global_lock (users: pls ignore this)"
|
|
||||||
#end def obtain_global_lock
|
|
||||||
|
|
||||||
def quit(self, widget, data):
|
|
||||||
print "Quitting normally"
|
|
||||||
#check if current settings differ from profile, if so offer to save or abort
|
|
||||||
self.db.disconnect()
|
|
||||||
gtk.main_quit()
|
|
||||||
#end def quit_cliecked
|
|
||||||
|
|
||||||
def release_global_lock(self):
|
|
||||||
print "todo: implement release_global_lock"
|
|
||||||
#end def release_global_lock
|
|
||||||
|
|
||||||
def tab_abbreviations(self, widget, data):
|
|
||||||
print "todo: implement tab_abbreviations"
|
|
||||||
#end def tab_abbreviations
|
|
||||||
|
|
||||||
def tab_auto_import(self, widget, data):
|
|
||||||
"""opens the auto import tab"""
|
|
||||||
new_aimp_thread=GuiAutoImport.GuiAutoImport(self.settings, self.config)
|
|
||||||
self.threads.append(new_aimp_thread)
|
|
||||||
aimp_tab=new_aimp_thread.get_vbox()
|
|
||||||
self.add_and_display_tab(aimp_tab, "Auto Import")
|
|
||||||
#end def tab_auto_import
|
|
||||||
|
|
||||||
def tab_bulk_import(self, widget, data):
|
response = diaDbVersionWarning.run()
|
||||||
"""opens a tab for bulk importing"""
|
diaDbVersionWarning.destroy()
|
||||||
#print "start of tab_bulk_import"
|
|
||||||
new_import_thread=GuiBulkImport.GuiBulkImport(self.db, self.settings, self.config)
|
|
||||||
self.threads.append(new_import_thread)
|
|
||||||
bulk_tab=new_import_thread.get_vbox()
|
|
||||||
self.add_and_display_tab(bulk_tab, "Bulk Import")
|
|
||||||
#end def tab_bulk_import
|
|
||||||
|
|
||||||
def tab_player_stats(self, widget, data):
|
# Database connected to successfully, load queries to pass on to other classes
|
||||||
new_ps_thread=GuiPlayerStats.GuiPlayerStats(self.db, self.config, self.querydict)
|
self.querydict = FpdbSQLQueries.FpdbSQLQueries(self.db.get_backend_name())
|
||||||
self.threads.append(new_ps_thread)
|
#end def load_profile
|
||||||
ps_tab=new_ps_thread.get_vbox()
|
|
||||||
self.add_and_display_tab(ps_tab, "Player Stats")
|
def not_implemented(self):
|
||||||
|
print "todo: called unimplemented menu entry (users: pls ignore this)"#remove this once more entries are implemented
|
||||||
|
#end def not_implemented
|
||||||
|
|
||||||
|
def obtain_global_lock(self):
|
||||||
|
print "todo: implement obtain_global_lock (users: pls ignore this)"
|
||||||
|
#end def obtain_global_lock
|
||||||
|
|
||||||
|
def quit(self, widget, data):
|
||||||
|
print "Quitting normally"
|
||||||
|
#check if current settings differ from profile, if so offer to save or abort
|
||||||
|
self.db.disconnect()
|
||||||
|
gtk.main_quit()
|
||||||
|
#end def quit_cliecked
|
||||||
|
|
||||||
|
def release_global_lock(self):
|
||||||
|
print "todo: implement release_global_lock"
|
||||||
|
#end def release_global_lock
|
||||||
|
|
||||||
|
def tab_abbreviations(self, widget, data):
|
||||||
|
print "todo: implement tab_abbreviations"
|
||||||
|
#end def tab_abbreviations
|
||||||
|
|
||||||
|
def tab_auto_import(self, widget, data):
|
||||||
|
"""opens the auto import tab"""
|
||||||
|
new_aimp_thread=GuiAutoImport.GuiAutoImport(self.settings, self.config)
|
||||||
|
self.threads.append(new_aimp_thread)
|
||||||
|
aimp_tab=new_aimp_thread.get_vbox()
|
||||||
|
self.add_and_display_tab(aimp_tab, "Auto Import")
|
||||||
|
#end def tab_auto_import
|
||||||
|
|
||||||
|
def tab_bulk_import(self, widget, data):
|
||||||
|
"""opens a tab for bulk importing"""
|
||||||
|
#print "start of tab_bulk_import"
|
||||||
|
new_import_thread=GuiBulkImport.GuiBulkImport(self.db, self.settings, self.config)
|
||||||
|
self.threads.append(new_import_thread)
|
||||||
|
bulk_tab=new_import_thread.get_vbox()
|
||||||
|
self.add_and_display_tab(bulk_tab, "Bulk Import")
|
||||||
|
#end def tab_bulk_import
|
||||||
|
|
||||||
|
def tab_player_stats(self, widget, data):
|
||||||
|
new_ps_thread=GuiPlayerStats.GuiPlayerStats(self.db, self.config, self.querydict)
|
||||||
|
self.threads.append(new_ps_thread)
|
||||||
|
ps_tab=new_ps_thread.get_vbox()
|
||||||
|
self.add_and_display_tab(ps_tab, "Player Stats")
|
||||||
|
|
||||||
|
def tab_positional_stats(self, widget, data):
|
||||||
|
new_ps_thread=GuiPositionalStats.GuiPositionalStats(self.db, self.config, self.querydict)
|
||||||
|
self.threads.append(new_ps_thread)
|
||||||
|
ps_tab=new_ps_thread.get_vbox()
|
||||||
|
self.add_and_display_tab(ps_tab, "Ppositional Stats")
|
||||||
|
|
||||||
|
|
||||||
def tab_main_help(self, widget, data):
|
def tab_main_help(self, widget, data):
|
||||||
"""Displays a tab with the main fpdb help screen"""
|
"""Displays a tab with the main fpdb help screen"""
|
||||||
#print "start of tab_main_help"
|
#print "start of tab_main_help"
|
||||||
mh_tab=gtk.Label("""Welcome to Fpdb!
|
mh_tab=gtk.Label("""Welcome to Fpdb!
|
||||||
For documentation please visit our website at http://fpdb.sourceforge.net/ or check the docs directory in the fpdb folder.
|
For documentation please visit our website at http://fpdb.sourceforge.net/ or check the docs directory in the fpdb folder.
|
||||||
Please note that default.conf is no longer needed nor used, all configuration now happens in HUD_config.xml
|
Please note that default.conf is no longer needed nor used, all configuration now happens in HUD_config.xml
|
||||||
This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
|
This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
|
||||||
self.add_and_display_tab(mh_tab, "Help")
|
self.add_and_display_tab(mh_tab, "Help")
|
||||||
#end def tab_main_help
|
#end def tab_main_help
|
||||||
|
|
||||||
def tab_table_viewer(self, widget, data):
|
|
||||||
"""opens a table viewer tab"""
|
|
||||||
#print "start of tab_table_viewer"
|
|
||||||
new_tv_thread=GuiTableViewer.GuiTableViewer(self.db, self.settings)
|
|
||||||
self.threads.append(new_tv_thread)
|
|
||||||
tv_tab=new_tv_thread.get_vbox()
|
|
||||||
self.add_and_display_tab(tv_tab, "Table Viewer")
|
|
||||||
#end def tab_table_viewer
|
|
||||||
|
|
||||||
def tabGraphViewer(self, widget, data):
|
def tab_table_viewer(self, widget, data):
|
||||||
"""opens a graph viewer tab"""
|
"""opens a table viewer tab"""
|
||||||
#print "start of tabGraphViewer"
|
#print "start of tab_table_viewer"
|
||||||
new_gv_thread=GuiGraphViewer.GuiGraphViewer(self.db, self.settings, self.querydict, self.config)
|
new_tv_thread=GuiTableViewer.GuiTableViewer(self.db, self.settings)
|
||||||
self.threads.append(new_gv_thread)
|
self.threads.append(new_tv_thread)
|
||||||
gv_tab=new_gv_thread.get_vbox()
|
tv_tab=new_tv_thread.get_vbox()
|
||||||
self.add_and_display_tab(gv_tab, "Graphs")
|
self.add_and_display_tab(tv_tab, "Table Viewer")
|
||||||
#end def tabGraphViewer
|
#end def tab_table_viewer
|
||||||
|
|
||||||
def __init__(self):
|
def tabGraphViewer(self, widget, data):
|
||||||
self.threads=[]
|
"""opens a graph viewer tab"""
|
||||||
self.db=None
|
#print "start of tabGraphViewer"
|
||||||
self.config = Configuration.Config()
|
new_gv_thread=GuiGraphViewer.GuiGraphViewer(self.db, self.settings, self.querydict, self.config)
|
||||||
self.load_profile()
|
self.threads.append(new_gv_thread)
|
||||||
|
gv_tab=new_gv_thread.get_vbox()
|
||||||
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
self.add_and_display_tab(gv_tab, "Graphs")
|
||||||
self.window.connect("delete_event", self.delete_event)
|
#end def tabGraphViewer
|
||||||
self.window.connect("destroy", self.destroy)
|
|
||||||
self.window.set_title("Free Poker DB - v%s or higher" % (VERSION, ))
|
|
||||||
self.window.set_border_width(1)
|
|
||||||
self.window.set_size_request(1020,400)
|
|
||||||
self.window.set_resizable(True)
|
|
||||||
|
|
||||||
self.menu_items = (
|
|
||||||
( "/_Main", None, None, 0, "<Branch>" ),
|
|
||||||
( "/Main/_Load Profile (broken)", "<control>L", self.dia_load_profile, 0, None ),
|
|
||||||
( "/Main/_Edit Profile (todo)", "<control>E", self.dia_edit_profile, 0, None ),
|
|
||||||
( "/Main/_Save Profile (todo)", None, self.dia_save_profile, 0, None ),
|
|
||||||
("/Main/sep1", None, None, 0, "<Separator>" ),
|
|
||||||
("/Main/_Quit", "<control>Q", self.quit, 0, None ),
|
|
||||||
("/_Import", None, None, 0, "<Branch>" ),
|
|
||||||
("/Import/_Bulk Import", "<control>B", self.tab_bulk_import, 0, None ),
|
|
||||||
("/Import/_Auto Import and HUD", "<control>A", self.tab_auto_import, 0, None ),
|
|
||||||
("/Import/Auto _Rating (todo)", "<control>R", self.not_implemented, 0, None ),
|
|
||||||
("/_Viewers", None, None, 0, "<Branch>" ),
|
|
||||||
("/_Viewers/_Auto Import and HUD", "<control>A", self.tab_auto_import, 0, None ),
|
|
||||||
("/Viewers/_Graphs", "<control>G", self.tabGraphViewer, 0, None ),
|
|
||||||
("/Viewers/Hand _Replayer (todo)", None, self.not_implemented, 0, None ),
|
|
||||||
("/Viewers/Player _Details (todo)", None, self.not_implemented, 0, None ),
|
|
||||||
("/Viewers/_Player Stats (tabulated view)", None, self.tab_player_stats, 0, None ),
|
|
||||||
("/Viewers/Starting _Hands (todo)", None, self.not_implemented, 0, None ),
|
|
||||||
("/Viewers/_Session Replayer (todo)", None, self.not_implemented, 0, None ),
|
|
||||||
("/Viewers/Poker_table Viewer (mostly obselete)", "<control>T", self.tab_table_viewer, 0, None ),
|
|
||||||
#( "/Viewers/Tourney Replayer
|
|
||||||
( "/_Database", None, None, 0, "<Branch>" ),
|
|
||||||
( "/Database/Create or Delete _Database (todo)", None, self.dia_create_del_database, 0, None ),
|
|
||||||
( "/Database/Create or Delete _User (todo)", None, self.dia_create_del_user, 0, None ),
|
|
||||||
( "/Database/Create or Recreate _Tables", None, self.dia_recreate_tables, 0, None ),
|
|
||||||
( "/Database/_Statistics (todo)", None, self.dia_database_stats, 0, None ),
|
|
||||||
( "/D_ebugging", None, None, 0, "<Branch>" ),
|
|
||||||
( "/Debugging/_Delete Parts of Database (todo)", None, self.dia_delete_db_parts, 0, None ),
|
|
||||||
( "/Debugging/_Export DB (todo)", None, self.dia_export_db, 0, None ),
|
|
||||||
( "/Debugging/_Import DB (todo)", None, self.dia_import_db, 0, None ),
|
|
||||||
( "/Debugging/_Regression test (todo)", None, self.dia_regression_test, 0, None ),
|
|
||||||
( "/_Help", None, None, 0, "<LastBranch>" ),
|
|
||||||
( "/Help/_Main Help", "<control>H", self.tab_main_help, 0, None ),
|
|
||||||
( "/Help/_Abbrevations (todo)", None, self.tab_abbreviations, 0, None ),
|
|
||||||
( "/Help/sep1", None, None, 0, "<Separator>" ),
|
|
||||||
( "/Help/A_bout (todo)", None, self.dia_about, 0, None ),
|
|
||||||
( "/Help/_License and Copying (todo)", None, self.dia_licensing, 0, None )
|
|
||||||
)
|
|
||||||
|
|
||||||
self.main_vbox = gtk.VBox(False, 1)
|
|
||||||
self.main_vbox.set_border_width(1)
|
|
||||||
self.window.add(self.main_vbox)
|
|
||||||
self.main_vbox.show()
|
|
||||||
|
|
||||||
menubar = self.get_menu(self.window)
|
|
||||||
self.main_vbox.pack_start(menubar, False, True, 0)
|
|
||||||
menubar.show()
|
|
||||||
#done menubar
|
|
||||||
|
|
||||||
self.tabs=[]
|
|
||||||
self.tab_names=[]
|
|
||||||
self.tab_buttons=[]
|
|
||||||
self.tab_box = gtk.HBox(False,1)
|
|
||||||
self.main_vbox.pack_start(self.tab_box, False, True, 0)
|
|
||||||
self.tab_box.show()
|
|
||||||
#done tab bar
|
|
||||||
|
|
||||||
self.current_tab = gtk.VBox(False,1)
|
|
||||||
self.current_tab.set_border_width(1)
|
|
||||||
self.main_vbox.add(self.current_tab)
|
|
||||||
self.current_tab.show()
|
|
||||||
|
|
||||||
self.tab_main_help(None, None)
|
|
||||||
|
|
||||||
self.status_bar = gtk.Label("Status: Connected to "+self.db.get_backend_name()+" database named "+self.db.database+" on host "+self.db.host)
|
|
||||||
self.main_vbox.pack_end(self.status_bar, False, True, 0)
|
|
||||||
self.status_bar.show()
|
|
||||||
|
|
||||||
self.window.show()
|
|
||||||
#end def __init__
|
|
||||||
|
|
||||||
def main(self):
|
def __init__(self):
|
||||||
gtk.main()
|
self.threads=[]
|
||||||
return 0
|
self.db=None
|
||||||
#end def main
|
self.config = Configuration.Config()
|
||||||
|
self.load_profile()
|
||||||
|
|
||||||
|
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||||
|
self.window.connect("delete_event", self.delete_event)
|
||||||
|
self.window.connect("destroy", self.destroy)
|
||||||
|
self.window.set_title("Free Poker DB - v%s or higher" % (VERSION, ))
|
||||||
|
self.window.set_border_width(1)
|
||||||
|
self.window.set_size_request(1020,400)
|
||||||
|
self.window.set_resizable(True)
|
||||||
|
|
||||||
|
self.menu_items = (
|
||||||
|
( "/_Main", None, None, 0, "<Branch>" ),
|
||||||
|
( "/Main/_Load Profile (broken)", "<control>L", self.dia_load_profile, 0, None ),
|
||||||
|
( "/Main/_Edit Profile (todo)", "<control>E", self.dia_edit_profile, 0, None ),
|
||||||
|
( "/Main/_Save Profile (todo)", None, self.dia_save_profile, 0, None ),
|
||||||
|
("/Main/sep1", None, None, 0, "<Separator>" ),
|
||||||
|
("/Main/_Quit", "<control>Q", self.quit, 0, None ),
|
||||||
|
("/_Import", None, None, 0, "<Branch>" ),
|
||||||
|
("/Import/_Bulk Import", "<control>B", self.tab_bulk_import, 0, None ),
|
||||||
|
("/Import/_Auto Import and HUD", "<control>A", self.tab_auto_import, 0, None ),
|
||||||
|
("/Import/Auto _Rating (todo)", "<control>R", self.not_implemented, 0, None ),
|
||||||
|
("/_Viewers", None, None, 0, "<Branch>" ),
|
||||||
|
("/_Viewers/_Auto Import and HUD", "<control>A", self.tab_auto_import, 0, None ),
|
||||||
|
("/Viewers/_Graphs", "<control>G", self.tabGraphViewer, 0, None ),
|
||||||
|
("/Viewers/Hand _Replayer (todo)", None, self.not_implemented, 0, None ),
|
||||||
|
("/Viewers/Player _Details (todo)", None, self.not_implemented, 0, None ),
|
||||||
|
("/Viewers/_Player Stats (tabulated view)", None, self.tab_player_stats, 0, None ),
|
||||||
|
("/Viewers/Positional Stats (tabulated view)", None, self.tab_positional_stats, 0, None ),
|
||||||
|
("/Viewers/Starting _Hands (todo)", None, self.not_implemented, 0, None ),
|
||||||
|
("/Viewers/_Session Replayer (todo)", None, self.not_implemented, 0, None ),
|
||||||
|
("/Viewers/Poker_table Viewer (mostly obselete)", "<control>T", self.tab_table_viewer, 0, None ),
|
||||||
|
#( "/Viewers/Tourney Replayer
|
||||||
|
( "/_Database", None, None, 0, "<Branch>" ),
|
||||||
|
( "/Database/Create or Delete _Database (todo)", None, self.dia_create_del_database, 0, None ),
|
||||||
|
( "/Database/Create or Delete _User (todo)", None, self.dia_create_del_user, 0, None ),
|
||||||
|
( "/Database/Create or Recreate _Tables", None, self.dia_recreate_tables, 0, None ),
|
||||||
|
( "/Database/_Statistics (todo)", None, self.dia_database_stats, 0, None ),
|
||||||
|
( "/D_ebugging", None, None, 0, "<Branch>" ),
|
||||||
|
( "/Debugging/_Delete Parts of Database (todo)", None, self.dia_delete_db_parts, 0, None ),
|
||||||
|
( "/Debugging/_Export DB (todo)", None, self.dia_export_db, 0, None ),
|
||||||
|
( "/Debugging/_Import DB (todo)", None, self.dia_import_db, 0, None ),
|
||||||
|
( "/Debugging/_Regression test (todo)", None, self.dia_regression_test, 0, None ),
|
||||||
|
( "/_Help", None, None, 0, "<LastBranch>" ),
|
||||||
|
( "/Help/_Main Help", "<control>H", self.tab_main_help, 0, None ),
|
||||||
|
( "/Help/_Abbrevations (todo)", None, self.tab_abbreviations, 0, None ),
|
||||||
|
( "/Help/sep1", None, None, 0, "<Separator>" ),
|
||||||
|
( "/Help/A_bout (todo)", None, self.dia_about, 0, None ),
|
||||||
|
( "/Help/_License and Copying (todo)", None, self.dia_licensing, 0, None )
|
||||||
|
)
|
||||||
|
|
||||||
|
self.main_vbox = gtk.VBox(False, 1)
|
||||||
|
self.main_vbox.set_border_width(1)
|
||||||
|
self.window.add(self.main_vbox)
|
||||||
|
self.main_vbox.show()
|
||||||
|
|
||||||
|
menubar = self.get_menu(self.window)
|
||||||
|
self.main_vbox.pack_start(menubar, False, True, 0)
|
||||||
|
menubar.show()
|
||||||
|
#done menubar
|
||||||
|
|
||||||
|
self.tabs=[]
|
||||||
|
self.tab_names=[]
|
||||||
|
self.tab_buttons=[]
|
||||||
|
self.tab_box = gtk.HBox(False,1)
|
||||||
|
self.main_vbox.pack_start(self.tab_box, False, True, 0)
|
||||||
|
self.tab_box.show()
|
||||||
|
#done tab bar
|
||||||
|
|
||||||
|
self.current_tab = gtk.VBox(False,1)
|
||||||
|
self.current_tab.set_border_width(1)
|
||||||
|
self.main_vbox.add(self.current_tab)
|
||||||
|
self.current_tab.show()
|
||||||
|
|
||||||
|
self.tab_main_help(None, None)
|
||||||
|
|
||||||
|
self.status_bar = gtk.Label("Status: Connected to "+self.db.get_backend_name()+" database named "+self.db.database+" on host "+self.db.host)
|
||||||
|
self.main_vbox.pack_end(self.status_bar, False, True, 0)
|
||||||
|
self.status_bar.show()
|
||||||
|
|
||||||
|
self.window.show()
|
||||||
|
#end def __init__
|
||||||
|
|
||||||
|
def main(self):
|
||||||
|
gtk.main()
|
||||||
|
return 0
|
||||||
|
#end def main
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
me = fpdb()
|
me = fpdb()
|
||||||
me.main()
|
me.main()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user