Stove: Mockup interface for a Stovelike EV calculator page
This commit is contained in:
parent
aa31a4d67b
commit
d3f07aae45
205
pyfpdb/GuiStove.py
Normal file
205
pyfpdb/GuiStove.py
Normal file
|
@ -0,0 +1,205 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#Copyright 2008-2010 Steffen Schaumburg
|
||||
#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.
|
||||
|
||||
import L10n
|
||||
_ = L10n.get_translation()
|
||||
|
||||
import pygtk
|
||||
pygtk.require('2.0')
|
||||
import gtk
|
||||
import os
|
||||
import sys
|
||||
|
||||
import Charset
|
||||
|
||||
DEBUG = False
|
||||
|
||||
class GuiStove():
|
||||
|
||||
def __init__(self, config, parent, debug=True):
|
||||
"""Constructor for GraphViewer"""
|
||||
self.conf = config
|
||||
self.parent = parent
|
||||
|
||||
self.mainHBox = gtk.HBox(False, 0)
|
||||
|
||||
# hierarchy: self.mainHBox / self.notebook
|
||||
|
||||
self.notebook = gtk.Notebook()
|
||||
self.notebook.set_tab_pos(gtk.POS_TOP)
|
||||
self.notebook.set_show_tabs(True)
|
||||
self.notebook.set_show_border(True)
|
||||
|
||||
self.createFlopTab()
|
||||
#self.createStudTab()
|
||||
#self.createDrawTab()
|
||||
|
||||
|
||||
self.mainHBox.add(self.notebook)
|
||||
|
||||
self.mainHBox.show_all()
|
||||
|
||||
if DEBUG == False:
|
||||
warning_string = """
|
||||
Stove is a GUI mockup of a EV calculation page, and completely non functional.
|
||||
|
||||
Unless you are interested in developing this feature, please ignore this page.
|
||||
|
||||
If you are interested in developing the code further see GuiStove.py and Stove.py
|
||||
|
||||
Thankyou
|
||||
"""
|
||||
self.warning_box(warning_string)
|
||||
|
||||
|
||||
def warning_box(self, str, diatitle=_("FPDB WARNING")):
|
||||
diaWarning = gtk.Dialog(title=diatitle, parent=self.parent, flags=gtk.DIALOG_DESTROY_WITH_PARENT, buttons=(gtk.STOCK_OK,gtk.RESPONSE_OK))
|
||||
|
||||
label = gtk.Label(str)
|
||||
diaWarning.vbox.add(label)
|
||||
label.show()
|
||||
|
||||
response = diaWarning.run()
|
||||
diaWarning.destroy()
|
||||
return response
|
||||
|
||||
|
||||
def get_active_text(combobox):
|
||||
model = combobox.get_model()
|
||||
active = combobox.get_active()
|
||||
if active < 0:
|
||||
return None
|
||||
return model[active][0]
|
||||
|
||||
def create_combo_box(self, strings):
|
||||
combobox = gtk.combo_box_new_text()
|
||||
for label in strings:
|
||||
combobox.append_text(label)
|
||||
combobox.set_active(0)
|
||||
return combobox
|
||||
|
||||
|
||||
def createFlopTab(self):
|
||||
# hierarchy: hbox / ddbox / ddhbox / Label + flop_games_cb | label + players_cb
|
||||
# / gamehbox / in_frame / table /
|
||||
# / out_frame
|
||||
|
||||
tab_title = "Flop"
|
||||
label = gtk.Label(tab_title)
|
||||
|
||||
ddbox = gtk.VBox(False, 0)
|
||||
self.notebook.append_page(ddbox, label)
|
||||
|
||||
ddhbox = gtk.HBox(False, 0)
|
||||
gamehbox = gtk.HBox(False, 0)
|
||||
|
||||
ddbox.add(ddhbox)
|
||||
ddbox.add(gamehbox)
|
||||
|
||||
# Combo boxes in the top row
|
||||
|
||||
games = [ "Holdem", "Omaha", "Omaha 8", ]
|
||||
players = [ "2", "3", "4", "5", "6", "7", "8", "9", "10" ]
|
||||
flop_games_cb = self.create_combo_box(games)
|
||||
players_cb = self.create_combo_box(players)
|
||||
|
||||
label = gtk.Label("Gametype:")
|
||||
ddhbox.add(label)
|
||||
ddhbox.add(flop_games_cb)
|
||||
label = gtk.Label("Players:")
|
||||
ddhbox.add(label)
|
||||
ddhbox.add(players_cb)
|
||||
|
||||
# Frames for Stove input and output
|
||||
|
||||
in_frame = gtk.Frame("Input:")
|
||||
out_frame = gtk.Frame("Output:")
|
||||
|
||||
gamehbox.add(in_frame)
|
||||
gamehbox.add(out_frame)
|
||||
|
||||
outstring = """
|
||||
No board given. Using Monte-Carlo simulation...
|
||||
Enumerated 2053443 possible plays.
|
||||
Your hand: (Ad Ac)
|
||||
Against the range: {
|
||||
AhAd, AhAs, AdAs, KhKd, KhKs,
|
||||
KhKc, KdKs, KdKc, KsKc, QhQd,
|
||||
QhQs, QhQc, QdQs, QdQc, QsQc,
|
||||
JhJd, JhJs, JhJc, JdJs, JdJc,
|
||||
JsJc
|
||||
}
|
||||
|
||||
Win Lose Tie
|
||||
69.91% 15.83% 14.26%
|
||||
|
||||
"""
|
||||
label = gtk.Label(outstring)
|
||||
out_frame.add(label)
|
||||
|
||||
# Input Frame
|
||||
table = gtk.Table(4, 4, True)
|
||||
label = gtk.Label("Board:")
|
||||
board = gtk.Entry()
|
||||
#board.connect("changed", self._some_function, arg)
|
||||
|
||||
btn1 = gtk.Button()
|
||||
btn1.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON))
|
||||
#btn.connect('clicked', self._some_function, arg)
|
||||
table.attach(label, 0, 1, 0, 1, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
|
||||
table.attach(board, 1, 2, 0, 1, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
|
||||
table.attach(btn1, 2, 3, 0, 1, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
|
||||
|
||||
|
||||
label = gtk.Label("Player1:")
|
||||
board = gtk.Entry()
|
||||
#board.connect("changed", self._some_function, arg)
|
||||
btn2 = gtk.Button()
|
||||
btn2.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON))
|
||||
#btn.connect('clicked', self._some_function, arg)
|
||||
btn3 = gtk.Button()
|
||||
btn3.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON))
|
||||
#btn.connect('clicked', self._some_function, arg)
|
||||
table.attach(label, 0, 1, 1, 2, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
|
||||
table.attach(board, 1, 2, 1, 2, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
|
||||
table.attach(btn2, 2, 3, 1, 2, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
|
||||
table.attach(btn3, 3, 4, 1, 2, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
|
||||
|
||||
|
||||
label = gtk.Label("Player2:")
|
||||
board = gtk.Entry()
|
||||
#board.connect("changed", self._some_function, arg)
|
||||
btn4 = gtk.Button()
|
||||
btn4.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON))
|
||||
#btn.connect('clicked', self._some_function, arg)
|
||||
btn5 = gtk.Button()
|
||||
btn5.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON))
|
||||
#btn.connect('clicked', self._some_function, arg)
|
||||
table.attach(label, 0, 1, 2, 3, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
|
||||
table.attach(board, 1, 2, 2, 3, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
|
||||
table.attach(btn4, 2, 3, 2, 3, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
|
||||
table.attach(btn5, 3, 4, 2, 3, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK)
|
||||
|
||||
#table.attach(label, i, i+1, j, j+1,)
|
||||
in_frame.add(table)
|
||||
|
||||
|
||||
|
||||
def get_vbox(self):
|
||||
"""returns the vbox of this thread"""
|
||||
return self.mainHBox
|
||||
#end def get_vbox
|
|
@ -116,6 +116,7 @@ import GuiAutoImport
|
|||
import GuiGraphViewer
|
||||
import GuiTourneyGraphViewer
|
||||
import GuiSessionViewer
|
||||
import GuiStove
|
||||
import SQL
|
||||
import Database
|
||||
import Configuration
|
||||
|
@ -778,6 +779,7 @@ class fpdb:
|
|||
<menuitem action="tourneyviewer"/>
|
||||
<menuitem action="posnstats"/>
|
||||
<menuitem action="sessionstats"/>
|
||||
<menuitem action="stove"/>
|
||||
</menu>
|
||||
<menu action="database">
|
||||
<menuitem action="maintaindbs"/>
|
||||
|
@ -814,6 +816,7 @@ class fpdb:
|
|||
('hudConfigurator', None, _('_HUD Configurator'), _('<control>H'), 'HUD Configurator', self.diaHudConfigurator),
|
||||
('graphs', None, _('_Graphs'), _('<control>G'), 'Graphs', self.tabGraphViewer),
|
||||
('tourneygraphs', None, _('Tourney Graphs'), None, 'TourneyGraphs', self.tabTourneyGraphViewer),
|
||||
('stove', None, _('Stove'), None, 'Stove', self.tabStove),
|
||||
('ringplayerstats', None, _('Ring _Player Stats (tabulated view, not on pgsql)'), _('<control>P'), 'Ring Player Stats (tabulated view, not on pgsql)', self.tab_ring_player_stats),
|
||||
('tourneyplayerstats', None, _('_Tourney Stats (tabulated view, not on pgsql)'), _('<control>T'), 'Tourney Stats (tabulated view, not on pgsql)', self.tab_tourney_player_stats),
|
||||
('tourneyviewer', None, _('Tourney _Viewer'), None, 'Tourney Viewer)', self.tab_tourney_viewer_stats),
|
||||
|
@ -1078,6 +1081,13 @@ You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt an
|
|||
gv_tab = new_gv_thread.get_vbox()
|
||||
self.add_and_display_tab(gv_tab, _("Tourney Graphs"))
|
||||
|
||||
def tabStove(self, widget, data=None):
|
||||
"""opens a tab for bulk importing tournament summaries"""
|
||||
thread = GuiStove.GuiStove(self.config, self.window)
|
||||
self.threads.append(thread)
|
||||
tab = thread.get_vbox()
|
||||
self.add_and_display_tab(tab, _("Stove"))
|
||||
|
||||
def __init__(self):
|
||||
# no more than 1 process can this lock at a time:
|
||||
self.lock = interlocks.InterProcessLock(name="fpdb_global_lock")
|
||||
|
|
Loading…
Reference in New Issue
Block a user