diff --git a/docs/default.conf b/docs/default.conf index d2e095d8..531f30da 100644 --- a/docs/default.conf +++ b/docs/default.conf @@ -7,4 +7,4 @@ tv-combinedStealFold=True tv-combined2B3B=True tv-combinedPostflop=True bulkImport-defaultPath=default -tv-defaultPath=default +hud-defaultPath=default diff --git a/docs/known-bugs-and-planned-features.txt b/docs/known-bugs-and-planned-features.txt index af68054d..edf1469a 100644 --- a/docs/known-bugs-and-planned-features.txt +++ b/docs/known-bugs-and-planned-features.txt @@ -3,7 +3,8 @@ Everything is subject to change and especially the order will often change. Patc alpha2 (release by 17Aug) ====== -auto-import +implement gametypes.base/hiLo + seperate and improve instructions for update verify link in release notes split install instructions into OS-specific and OS-independent section. expand release creator to concatenate. @@ -16,6 +17,7 @@ ebuild: symlink doesnt work, USE gtk, more automation, update install-in-gentoo. alpha3 ====== +export settings[hud-defaultInterval] to conf fix up bg colours in tv fill the fold to CB/2B/3B cache fields verify the totalProfit cache field @@ -33,7 +35,7 @@ printhand each and the 2/3 relevant printplayerflags respectively on ps-lhe-ring before beta =========== -change most cache fields to bigint to allow extremely big databases in excess of 2 or 4 million hands +?change most cache fields to bigint to allow extremely big databases in excess of 2 or 4 million hands per stake and position? optionally make tv positional gentoo ebuild: USE postgresql skins diff --git a/docs/tabledesign.html b/docs/tabledesign.html index 33030de0..46b905a7 100644 --- a/docs/tabledesign.html +++ b/docs/tabledesign.html @@ -136,6 +136,13 @@ The program itself is licensed under AGPLv3, see agpl-3.0.txt

ring - ringgames aka cash games
tour - tournament incl SnG

+ +

base

+

char(4)

+

The underlying structure. valid entries:
+ hold - Holdem and Omaha
+ stud - Stud and Razz

+

category

varchar(9)

@@ -156,6 +163,14 @@ The program itself is licensed under AGPLv3, see agpl-3.0.txt

cp=Cap Pot Limit
fl=Fixed Limit

+ +

hiLo

+

char(1)

+

Whether the game is hi, lo or both. Valid Entries:
+ h - High only
+ l - Low only
+ s - Hi/Lo Split

+

smallBlind

int

diff --git a/pyfpdb/GuiAutoImport.py b/pyfpdb/GuiAutoImport.py new file mode 100644 index 00000000..e0bf4e98 --- /dev/null +++ b/pyfpdb/GuiAutoImport.py @@ -0,0 +1,102 @@ +#!/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 . +#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 fpdb_import + +class GuiAutoImport (threading.Thread): + def browseClicked(self, widget, data): + """runs when user clicks browse on auto import tab""" + #print "start of GuiAutoImport.browseClicked" + current_path=self.pathTBuffer.get_text(self.pathTBuffer.get_start_iter(), self.pathTBuffer.get_end_iter()) + + dia_chooser = gtk.FileChooserDialog(title="Please choose the path that you want to auto import", + action=gtk.FILE_CHOOSER_ACTION_OPEN, + buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)) + #dia_chooser.set_current_folder(pathname) + dia_chooser.set_filename(current_path) + #dia_chooser.set_select_multiple(select_multiple) #not in tv, but want this in bulk import + + response = dia_chooser.run() + if response == gtk.RESPONSE_OK: + #print dia_chooser.get_filename(), 'selected' + self.pathTBuffer.set_text(dia_chooser.get_filename()) + elif response == gtk.RESPONSE_CANCEL: + print 'Closed, no files selected' + dia_chooser.destroy() + #end def GuiAutoImport.browseClicked + + def startClicked(self, widget, data): + """runs when user clicks start on auto import tab""" + print "implement GuiAutoImport.startClicked" + #end def GuiAutoImport.browseClicked + + def get_vbox(self): + """returns the vbox of this thread""" + return self.mainVBox + #end def get_vbox + + def __init__(self, settings, debug=True): + """Constructor for GuiAutoImport""" + self.settings=settings + + self.mainVBox=gtk.VBox(False,1) + self.mainVBox.show() + + self.settingsHBox = gtk.HBox(False, 0) + self.mainVBox.pack_start(self.settingsHBox, False, True, 0) + self.settingsHBox.show() + + self.intervalLabel = gtk.Label("Interval (ie. break) between imports in seconds:") + self.settingsHBox.pack_start(self.intervalLabel) + self.intervalLabel.show() + + self.intervalTBuffer=gtk.TextBuffer() + self.intervalTBuffer.set_text(str(self.settings['hud-defaultInterval'])) + self.intervalTView=gtk.TextView(self.intervalTBuffer) + self.settingsHBox.pack_start(self.intervalTView) + self.intervalTView.show() + + + self.pathHBox = gtk.HBox(False, 0) + self.mainVBox.pack_start(self.pathHBox, False, True, 0) + self.pathHBox.show() + + self.pathLabel = gtk.Label("Path to auto-import:") + self.pathHBox.pack_start(self.pathLabel, False, False, 0) + self.pathLabel.show() + + self.pathTBuffer=gtk.TextBuffer() + self.pathTBuffer.set_text(self.settings['hud-defaultPath']) + self.pathTView=gtk.TextView(self.pathTBuffer) + self.pathHBox.pack_start(self.pathTView, False, True, 0) + self.pathTView.show() + + self.browseButton=gtk.Button("Browse...") + self.browseButton.connect("clicked", self.browseClicked, "Browse clicked") + self.pathHBox.pack_end(self.browseButton, False, False, 0) + self.browseButton.show() + + + self.startButton=gtk.Button("Start Autoimport") + self.startButton.connect("clicked", self.startClicked, "start clicked") + self.mainVBox.add(self.startButton) + self.startButton.show() + #end of GuiAutoImport.__init__ diff --git a/pyfpdb/import_threaded.py b/pyfpdb/GuiBulkImport.py similarity index 99% rename from pyfpdb/import_threaded.py rename to pyfpdb/GuiBulkImport.py index 74bb5878..279337c8 100644 --- a/pyfpdb/import_threaded.py +++ b/pyfpdb/GuiBulkImport.py @@ -23,7 +23,7 @@ pygtk.require('2.0') import gtk import os #todo: remove this once import_dir is in fpdb_import -class import_threaded (threading.Thread): +class GuiBulkImport (threading.Thread): def import_dir(self): """imports a directory, non-recursive. todo: move this to fpdb_import so CLI can use it""" self.path=self.inputFile diff --git a/pyfpdb/table_viewer.py b/pyfpdb/GuiTableViewer.py similarity index 99% rename from pyfpdb/table_viewer.py rename to pyfpdb/GuiTableViewer.py index 164e47b6..345333a0 100644 --- a/pyfpdb/table_viewer.py +++ b/pyfpdb/GuiTableViewer.py @@ -24,7 +24,7 @@ import MySQLdb import fpdb_import import fpdb_db -class table_viewer (threading.Thread): +class GuiTableViewer (threading.Thread): def hudDivide (self, a, b): if b==0: return "n/a" @@ -279,7 +279,7 @@ class table_viewer (threading.Thread): self.filename_label.show() self.filename_tbuffer=gtk.TextBuffer() - self.filename_tbuffer.set_text(self.settings['tv-defaultPath']) + self.filename_tbuffer.set_text(self.settings['hud-defaultPath']) self.filename_tview=gtk.TextView(self.filename_tbuffer) self.settings_hbox.pack_start(self.filename_tview, True, True, padding=5) self.filename_tview.show() diff --git a/pyfpdb/fpdb.py b/pyfpdb/fpdb.py index 65dd7c64..2bb9fa42 100755 --- a/pyfpdb/fpdb.py +++ b/pyfpdb/fpdb.py @@ -24,8 +24,9 @@ import gtk import fpdb_db import fpdb_simple -import import_threaded -import table_viewer +import GuiBulkImport +import GuiTableViewer +import GuiAutoImport class fpdb: def tab_clicked(self, widget, tab_name): @@ -250,10 +251,12 @@ class fpdb: if self.settings['os']=="windows": self.settings['bulkImport-defaultPath']="C:\\Program Files\\PokerStars\\HandHistory\\filename.txt" - self.settings['tv-defaultPath']="C:\\Program Files\\PokerStars\\HandHistory\\filename.txt" + self.settings['hud-defaultPath']="C:\\Program Files\\PokerStars\\HandHistory\\" else: self.settings['bulkImport-defaultPath'] = os.path.expanduser("~") + "/.wine/drive_c/Program Files/PokerStars/HandHistory/filename.txt" - self.settings['tv-defaultPath'] = os.path.expanduser("~")+"/.wine/drive_c/Program Files/PokerStars/HandHistory/filename.txt" + self.settings['hud-defaultPath'] = os.path.expanduser("~")+"/.wine/drive_c/Program Files/PokerStars/HandHistory/" + + self.settings['hud-defaultInterval']=30 for i in range(len(lines)): if lines[i].startswith("db-backend="): @@ -284,9 +287,9 @@ class fpdb: elif lines[i].startswith("bulkImport-defaultPath="): if lines[i][23:-1]!="default": self.settings['bulkImport-defaultPath']=lines[i][23:-1] - elif lines[i].startswith("tv-defaultPath="): + elif lines[i].startswith("hud-defaultPath="): if lines[i][15:-1]!="default": - self.settings['tv-defaultPath']=lines[i][15:-1] + self.settings['hud-defaultPath']=lines[i][16:-1] elif lines[i].startswith("#"): pass #comment - dont parse else: @@ -324,16 +327,20 @@ class fpdb: #end def tab_abbreviations def tab_auto_import(self, widget, data): - print "todo: implement tab_auto_import" + """opens the auto import tab""" + new_aimp_thread=GuiAutoImport.GuiAutoImport(self.settings) + 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=import_threaded.import_threaded(self.db, self.settings['bulkImport-defaultPath']) + new_import_thread=GuiBulkImport.GuiBulkImport(self.db, self.settings['bulkImport-defaultPath']) self.threads.append(new_import_thread) bulk_tab=new_import_thread.get_vbox() - self.add_and_display_tab(bulk_tab, "bulk import") + self.add_and_display_tab(bulk_tab, "Bulk Import") #end def tab_bulk_import def tab_main_help(self, widget, data): @@ -349,7 +356,7 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt") def tab_table_viewer(self, widget, data): """opens a table viewer tab""" #print "start of tab_table_viewer" - new_tv_thread=table_viewer.table_viewer(self.db, self.settings) + 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") @@ -363,7 +370,7 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt") 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 - version: alpha1+, git41") + self.window.set_title("Free Poker DB - version: alpha1+, p42") self.window.set_border_width(1) self.window.set_size_request(1020,400) self.window.set_resizable(True) @@ -376,7 +383,7 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt") ( "/Main/sep1", None, None, 0, "" ), ( "/Main/_Quit", "Q", self.quit, 0, None ), ( "/_Import", None, None, 0, "" ), - ( "/Import/_Import Files and Directories", "I", self.tab_bulk_import, 0, None ), + ( "/Import/_Bulk Import", "B", self.tab_bulk_import, 0, None ), ( "/Import/_Auto Import (todo)", "A", self.tab_auto_import, 0, None ), ( "/Import/Auto _Rating (todo)", "R", self.not_implemented, 0, None ), ( "/_Viewers", None, None, 0, "" ),