diff --git a/create-release.sh b/create-release.sh
index 5f30ed25..975cffd3 100755
--- a/create-release.sh
+++ b/create-release.sh
@@ -21,6 +21,7 @@ rm pyfpdb/*.pyc
mkdir fpdb-$1
cp -R docs fpdb-$1/
+cp -R packaging fpdb-$1/
cp -R pyfpdb fpdb-$1/
rm fpdb-$1/pyfpdb/HUD_config.*
cp pyfpdb/HUD_config.xml.example fpdb-$1/pyfpdb/
diff --git a/docs/known-bugs-and-planned-features.txt b/docs/known-bugs-and-planned-features.txt
index 86453039..5e768b49 100644
--- a/docs/known-bugs-and-planned-features.txt
+++ b/docs/known-bugs-and-planned-features.txt
@@ -1,11 +1,11 @@
-todolist (db=database, imp=importer, tv=tableviewer)
Everything is subject to change and the order does not indicate priority. Patches for any of these or other features are very welcome, see readme-overview.txt for contacts.
Please also see db-todo.txt
alpha4 (release 25Sep-2Oct)
======
+graph: fixed player id and using the wrong table fields, update dependencies.txt
newsletter&mailing list
-update requirements to include new pgsql interface lib and rename to dependencies.txt
+update requirements to include new pgsql interface lib
ebuild: support pgsql
fix HUD config location and update release script accordingly
diff --git a/packaging/fpdb-1.0_alpha4_p86.ebuild b/packaging/gentoo/fpdb-1.0_alpha4_p86.ebuild
similarity index 100%
rename from packaging/fpdb-1.0_alpha4_p86.ebuild
rename to packaging/gentoo/fpdb-1.0_alpha4_p86.ebuild
diff --git a/pyfpdb/GuiGraphViewer.py b/pyfpdb/GuiGraphViewer.py
new file mode 100644
index 00000000..ed673c75
--- /dev/null
+++ b/pyfpdb/GuiGraphViewer.py
@@ -0,0 +1,93 @@
+#!/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 os
+
+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, sin, pi
+except:
+ print "Failed to load libs for graphing, graphing will not function. Please install numpy and matplotlib."
+
+try:
+ import MySQLdb
+except:
+ diaSQLLibMissing = gtk.Dialog(title="Fatal Error - SQL interface library missing", parent=None, flags=0, buttons=(gtk.STOCK_QUIT,gtk.RESPONSE_OK))
+
+ label = gtk.Label("Please note that the table viewer only works with MySQL, if you use PostgreSQL this error is expected.")
+ diaSQLLibMissing.vbox.add(label)
+ label.show()
+
+ label = gtk.Label("Since the HUD now runs on all supported plattforms I do not see any point in table viewer anymore, if you disagree please send a message to steffen@sycamoretest.info")
+ diaSQLLibMissing.vbox.add(label)
+ label.show()
+
+ response = diaSQLLibMissing.run()
+ #sys.exit(1)
+
+import fpdb_import
+import fpdb_db
+
+class GuiGraphViewer (threading.Thread):
+ def get_vbox(self):
+ """returns the vbox of this thread"""
+ return self.main_vbox
+ #end def get_vbox
+
+ def __init__(self, db, settings, debug=True):
+ """Constructor for table_viewer"""
+ self.debug=debug
+ #print "start of table_viewer constructor"
+ self.db=db
+ self.cursor=db.cursor
+ self.settings=settings
+
+ self.main_vbox = gtk.VBox(False, 0)
+ self.main_vbox.show()
+
+ self.fig = Figure(figsize=(5,4), dpi=100)
+ self.ax = self.fig.add_subplot(111)
+# x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+# y = [2.7, 2.8, 31.4, 38.1, 58.0, 76.2, 100.5, 130.0, 149.3, 180.0]
+
+ self.db.reconnect()
+ self.cursor=self.db.cursor
+
+ self.db.cursor.execute("SELECT handId, winnings FROM HandsPlayers WHERE playerId=1 ORDER BY handId")
+
+ self.results = self.db.cursor.fetchall()
+
+# x=map(lambda x:float(x[0]),self.results)
+ y=map(lambda x:float(x[1]),self.results)
+ line = range(len(y))
+
+ for i in range(len(y)):
+ line[i] = y[i] + line[i-1]
+
+ self.ax.plot(line,)
+
+ self.canvas = FigureCanvas(self.fig) # a gtk.DrawingArea
+ self.main_vbox.pack_start(self.canvas)
+ self.canvas.show()
+
+ #end of table_viewer.__init__
diff --git a/pyfpdb/fpdb.py b/pyfpdb/fpdb.py
index 94e1165e..307c074d 100755
--- a/pyfpdb/fpdb.py
+++ b/pyfpdb/fpdb.py
@@ -27,6 +27,7 @@ import fpdb_simple
import GuiBulkImport
import GuiTableViewer
import GuiAutoImport
+import GuiGraphViewer
class fpdb:
def tab_clicked(self, widget, tab_name):
@@ -399,6 +400,15 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
self.add_and_display_tab(tv_tab, "Table Viewer")
#end def tab_table_viewer
+ def tabGraphViewer(self, widget, data):
+ """opens a graph viewer tab"""
+ #print "start of tabGraphViewer"
+ new_gv_thread=GuiGraphViewer.GuiGraphViewer(self.db, self.settings)
+ self.threads.append(new_gv_thread)
+ gv_tab=new_gv_thread.get_vbox()
+ self.add_and_display_tab(gv_tab, "Graphs")
+ #end def tabGraphViewer
+
def __init__(self):
self.threads=[]
self.db=None
@@ -407,7 +417,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: alpha4, p86")
+ self.window.set_title("Free Poker DB - version: alpha4+, p87 or higher")
self.window.set_border_width(1)
self.window.set_size_request(1020,400)
self.window.set_resizable(True)
@@ -425,7 +435,7 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
("/Import/Auto _Rating (todo)", "R", self.not_implemented, 0, None ),
("/_Viewers", None, None, 0, "" ),
("/_Viewers/_Auto Import and HUD", "A", self.tab_auto_import, 0, None ),
- ("/Viewers/_Graphs (todo)", None, self.not_implemented, 0, None ),
+ ("/Viewers/_Graphs", None, 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) (todo)", None, self.not_implemented, 0, None ),