2 # -*- coding: utf-8 -*-
4 #Copyright 2008-2011 Steffen Schaumburg
5 #This program is free software: you can redistribute it and/or modify
6 #it under the terms of the GNU Affero General Public License as published by
7 #the Free Software Foundation, version 3 of the License.
9 #This program is distributed in the hope that it will be useful,
10 #but WITHOUT ANY WARRANTY; without even the implied warranty of
11 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 #GNU General Public License for more details.
14 #You should have received a copy of the GNU Affero General Public License
15 #along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #In the "official" distribution you can find the license in agpl-3.0.txt.
19 _
= L10n
.get_translation()
34 def __init__(self
, config
, parent
, debug
=True):
35 """Constructor for GuiStove"""
36 self
.stove
= Stove
.Stove()
40 self
.villainrange
= ""
44 self
.mainHBox
= gtk
.HBox(False, 0)
46 # hierarchy: self.mainHBox / self.notebook
48 self
.notebook
= gtk
.Notebook()
49 self
.notebook
.set_tab_pos(gtk
.POS_TOP
)
50 self
.notebook
.set_show_tabs(True)
51 self
.notebook
.set_show_border(True)
58 self
.mainHBox
.add(self
.notebook
)
60 self
.mainHBox
.show_all()
63 warning_string
= _("Stove is a GUI mockup of a EV calculation page, and completely non functional.") + "\n "
64 warning_string
+= _("Unless you are interested in developing this feature, please ignore this page.") + "\n "
65 warning_string
+= _("If you are interested in developing the code further see GuiStove.py and Stove.py.") + "\n "
66 warning_string
+= _("Thank you")
67 self
.warning_box(warning_string
)
70 def warning_box(self
, str, diatitle
=_("FPDB WARNING")):
71 diaWarning
= gtk
.Dialog(title
=diatitle
, parent
=self
.parent
, flags
=gtk
.DIALOG_DESTROY_WITH_PARENT
, buttons
=(gtk
.STOCK_OK
,gtk
.RESPONSE_OK
))
73 label
= gtk
.Label(str)
74 diaWarning
.vbox
.add(label
)
77 response
= diaWarning
.run()
82 def get_active_text(combobox
):
83 model
= combobox
.get_model()
84 active
= combobox
.get_active()
87 return model
[active
][0]
89 def create_combo_box(self
, strings
):
90 combobox
= gtk
.combo_box_new_text()
92 combobox
.append_text(label
)
93 combobox
.set_active(0)
96 def createDrawTab(self
):
98 label
= gtk
.Label(tab_title
)
100 ddbox
= gtk
.VBox(False, 0)
101 self
.notebook
.append_page(ddbox
, label
)
103 def createStudTab(self
):
104 tab_title
= _("Stud")
105 label
= gtk
.Label(tab_title
)
107 ddbox
= gtk
.VBox(False, 0)
108 self
.notebook
.append_page(ddbox
, label
)
110 def createFlopTab(self
):
111 # hierarchy: hbox / ddbox / ddhbox / Label + flop_games_cb | label + players_cb
112 # / gamehbox / in_frame / table /
115 tab_title
= _("Flop")
116 label
= gtk
.Label(tab_title
)
118 ddbox
= gtk
.VBox(False, 0)
119 self
.notebook
.append_page(ddbox
, label
)
121 ddhbox
= gtk
.HBox(False, 0)
122 gamehbox
= gtk
.HBox(False, 0)
127 # Combo boxes in the top row
129 games
= [ "Holdem", "Omaha", "Omaha 8", ]
130 players
= [ "2", "3", "4", "5", "6", "7", "8", "9", "10" ]
131 flop_games_cb
= self
.create_combo_box(games
)
132 players_cb
= self
.create_combo_box(players
)
134 label
= gtk
.Label(_("Gametype")+":")
136 ddhbox
.add(flop_games_cb
)
137 label
= gtk
.Label(_("Players")+":")
139 ddhbox
.add(players_cb
)
141 # Frames for Stove input and output
143 in_frame
= gtk
.Frame(_("Input:"))
144 out_frame
= gtk
.Frame(_("Output:"))
146 gamehbox
.add(in_frame
)
147 gamehbox
.add(out_frame
)
150 No board given. Using Monte-Carlo simulation...
151 Enumerated 2053443 possible plays.
154 AhAd, AhAs, AdAs, KhKd, KhKs,
155 KhKc, KdKs, KdKc, KsKc, QhQd,
156 QhQs, QhQc, QdQs, QdQc, QsQc,
157 JhJd, JhJs, JhJc, JdJs, JdJc,
165 self
.outputlabel
= gtk
.Label(self
.outstring
)
166 out_frame
.add(self
.outputlabel
)
169 table
= gtk
.Table(4, 5, True)
170 label
= gtk
.Label(_("Board:"))
172 board
.connect("changed", self
.set_board_flop
, board
)
175 btn1
.set_image(gtk
.image_new_from_stock(gtk
.STOCK_INDEX
, gtk
.ICON_SIZE_BUTTON
))
176 #btn.connect('clicked', self._some_function, arg)
177 table
.attach(label
, 0, 1, 0, 1, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
178 table
.attach(board
, 1, 2, 0, 1, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
179 table
.attach(btn1
, 2, 3, 0, 1, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
182 label
= gtk
.Label(_("Player1:"))
184 board
.connect("changed", self
.set_hero_cards_flop
, board
)
186 btn2
.set_image(gtk
.image_new_from_stock(gtk
.STOCK_INDEX
, gtk
.ICON_SIZE_BUTTON
))
187 #btn.connect('clicked', self._some_function, arg)
189 btn3
.set_image(gtk
.image_new_from_stock(gtk
.STOCK_INDEX
, gtk
.ICON_SIZE_BUTTON
))
190 #btn.connect('clicked', self._some_function, arg)
191 table
.attach(label
, 0, 1, 1, 2, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
192 table
.attach(board
, 1, 2, 1, 2, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
193 table
.attach(btn2
, 2, 3, 1, 2, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
194 table
.attach(btn3
, 3, 4, 1, 2, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
197 label
= gtk
.Label(_("Player2:"))
199 board
.connect("changed", self
.set_villain_cards_flop
, board
)
201 btn4
.set_image(gtk
.image_new_from_stock(gtk
.STOCK_INDEX
, gtk
.ICON_SIZE_BUTTON
))
202 #btn.connect('clicked', self._some_function, arg)
204 btn5
.set_image(gtk
.image_new_from_stock(gtk
.STOCK_INDEX
, gtk
.ICON_SIZE_BUTTON
))
205 #btn.connect('clicked', self._some_function, arg)
206 table
.attach(label
, 0, 1, 2, 3, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
207 table
.attach(board
, 1, 2, 2, 3, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
208 table
.attach(btn4
, 2, 3, 2, 3, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
209 table
.attach(btn5
, 3, 4, 2, 3, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
211 btn6
= gtk
.Button(_("Results"))
212 btn6
.connect("pressed", self
.update_flop_output_pane
, btn6
)
213 table
.attach(btn6
, 0, 1, 3, 4, xoptions
=gtk
.SHRINK
, yoptions
=gtk
.SHRINK
)
217 def set_output_label(self
, string
):
218 self
.outputlabel
.set_text(string
)
220 def set_board_flop(self
, caller
, widget
):
221 print (_("DEBUG:") + " " + _("called") + " set_board_flop: '%s' '%s'" % (caller
,widget
))
222 self
.boardtext
= widget
.get_text()
224 def set_hero_cards_flop(self
, caller
, widget
):
225 print (_("DEBUG:") + " " + _("called") + " set_hero_cards_flop")
226 self
.herorange
= widget
.get_text()
228 def set_villain_cards_flop(self
, caller
, widget
):
229 print (_("DEBUG:") + " " + _("called") + " set_villain_cards_flop")
230 self
.villainrange
= widget
.get_text()
232 def update_flop_output_pane(self
, caller
, widget
):
233 print (_("DEBUG:") + " " + _("called") + " update_flop_output_pane")
234 self
.stove
.set_board_string(self
.boardtext
)
235 self
.stove
.set_hero_cards_string(self
.herorange
)
236 self
.stove
.set_villain_range_string(self
.villainrange
)
237 print (_("DEBUG:") + ("odds_for_range"))
238 self
.ev
= Stove
.odds_for_range(self
.stove
)
239 print (_("DEBUG:") + " " + ("set_output_label"))
240 self
.set_output_label(self
.ev
.output
)
245 """returns the vbox of this thread"""