Beispiel #1
0
	def makeOddsTab(self):		
		if self.book.GetPageCount() == 5:
			self.book.DeletePage(4)
		
		oddpage, oddsizer = self.create_page('Odds')
		
		oddGrid = wx.FlexGridSizer(cols=1, vgap=5)
		
		weightLabel = wx.StaticText(oddpage, -1, "Symbol Weights")
		weightLabel.SetFont(self.hfont)
		oddsLabel = wx.StaticText(oddpage, -1, "Winning Combos")
		oddsLabel.SetFont(self.hfont)
				
		oddGrid.Add(weightLabel)
		text = wx.StaticText(oddpage, -1, cfg.WEIGHTS_TEXT)
		#text.Wrap(self.GetSize()[0] * .9)
		oddGrid.Add(text)
		
		self.nearMisses = []
		self.nearMissOdds = []
		cflag = wx.SizerFlags().Align(wx.ALIGN_CENTER_HORIZONTAL)
		
		#create top half
		self.weights = []
		weightSizer = wx.GridSizer(cols=self.settings.numReels+2, rows=len(self.settings.visibleSymbols))
		weightSizer.AddF(wx.StaticText(oddpage, -1, "Symbol"), cflag)
		for r in range(self.settings.numReels):
			text = "Reel %s" % (r + 1)
			weightSizer.AddF(wx.StaticText(oddpage, -1, text), cflag)
		weightSizer.AddF(wx.StaticText(oddpage, -1, "Blank Pad"), cflag)

		for s in self.settings.visibleSymbols:
			w = []
			
			weightSizer.AddF(wx.StaticBitmap(oddpage, -1, makeBitmap(s, cfg.SLOT_SIZE)), cflag)
			for r in range(self.settings.numReels):
				ctrl = wx.SpinCtrl(oddpage, -1, min=0, initial=5, size=cfg.CTRL_SIZE)
				w.append(ctrl)
				weightSizer.AddF(ctrl, cflag)
				
			nmctrl = wx.SpinCtrl(oddpage, -1, min=0, initial=0, size=cfg.CTRL_SIZE)
			weightSizer.AddF(nmctrl, cflag)
			self.nearMisses.append(nmctrl)
				
			self.weights.append(w)

		oddGrid.Add(weightSizer)
			
		#oddsizer.Add(wx.Button(oddpage, -1, "Update Reels"))
		
		oddGrid.Add(oddsLabel)
		text = wx.StaticText(oddpage, -1, cfg.COMBOS_TEXT)
		#text.Wrap(self.nbW * .95)
		oddGrid.Add(text)
		#create bottom half
		self.odds = []
		self.allCombos = []
		self.payoffs = []
		
		self.gfBox = wx.CheckBox(oddpage, -1, "Employ Gambler's Fallacy")
		oddGrid.Add(self.gfBox)
		self.overBox = wx.CheckBox(oddpage, -1, "Override True Reel Odds")
		oddGrid.Add(self.overBox)
		
		
		comboSizer = wx.GridSizer(rows=len(self.settings.payouts) + 1, cols=self.settings.numReels+4)
		
		comboSizer.Add(wx.StaticText(oddpage, -1, "Payout"))
		for r in range(self.settings.numReels):
			text = "Reel %s" % (r+1)
			comboSizer.Add(wx.StaticText(oddpage, -1, text))
		comboSizer.AddF(wx.StaticText(oddpage, -1, "Odds (%)"), cflag)
		comboSizer.AddF(wx.StaticText(oddpage, -1, "Odds\n Override"), cflag)
		comboSizer.AddF(wx.StaticText(oddpage, -1, "Miss Override %"), cflag)
		
		self.overrides = []
		
		for p in range(self.settings.numPayouts):
			o = []
			pctrl = wx.SpinCtrl(oddpage, -1, min=0, initial=0, size=cfg.CTRL_SIZE)
			self.payoffs.append(pctrl)
			comboSizer.Add(pctrl)
			#make symbol combo boxes
			combos = []
			for c in range(self.settings.numReels):
				combo = wx.combo.BitmapComboBox(oddpage, size=(45, -1))
				symbols = self.settings.visibleSymbols
				for i in range (0, len(symbols)):
					combo.Append(symbols[i], makeBitmap(symbols[i], scale=cfg.SLOT_SIZE))
				combo.Append(cfg.IM_EMPTY, makeBitmap(cfg.IM_EMPTY, scale=cfg.SLOT_SIZE))
				combo.SetSelection(i)
				combos.append(combo)
				comboSizer.Add(combo)
				
			self.allCombos.append(combos)
			oddsText = wx.TextCtrl(oddpage, -1, "100", style=wx.TE_READONLY, size=cfg.CTRL_SIZE)
			override = wx.SpinCtrl(oddpage, -1, min=0, initial=0, size=cfg.CTRL_SIZE)
			comboSizer.Add(oddsText)
			comboSizer.Add(override)
			nmoctrl = wx.SpinCtrl(oddpage, -1, min=0, initial=0, size=cfg.CTRL_SIZE)
			comboSizer.Add(nmoctrl)
			self.nearMissOdds.append(nmoctrl)

			self.odds.append(oddsText)
			self.overrides.append(override)
		
		#SUMMARY INFORMATION
		summaryGrid = wx.BoxSizer(wx.HORIZONTAL)
		
		#odds
		totalOddsText = wx.StaticText(oddpage, -1, "Total Odds of a Win (%):")
		self.totalOdds = wx.TextCtrl(oddpage, -1, "100", style=wx.TE_READONLY, size=cfg.CTRL_SIZE)
		oddGrid.Add(comboSizer)
		summaryGrid.Add(totalOddsText)
		summaryGrid.Add(self.totalOdds)
		summaryGrid.Add(wx.StaticText(oddpage, -1, "Near Miss Odds:"))
		self.nmOdds = wx.TextCtrl(oddpage, -1, "0", style=wx.TE_READONLY, size=cfg.CTRL_SIZE)
		summaryGrid.Add(self.nmOdds)
		
		#max and min payouts
		summaryGrid.Add(wx.StaticText(oddpage, -1, "Max Payout:"))
		self.maxPay = wx.TextCtrl(oddpage, -1, "0", style=wx.TE_READONLY, size=cfg.CTRL_SIZE)
		summaryGrid.Add(self.maxPay)
		summaryGrid.Add(wx.StaticText(oddpage, -1, "Min Payout:"))
		self.minPay = wx.TextCtrl(oddpage, -1, "0", style=wx.TE_READONLY, size=cfg.CTRL_SIZE)
		summaryGrid.Add(self.minPay)
		
		
		oddGrid.AddF(wx.StaticLine(oddpage), self.eflag)
		oddGrid.Add(summaryGrid)
		
		oddsizer.Add(oddGrid)
		self.Bind(wx.EVT_COMBOBOX, self.onComboSelect)

		self.Bind(wx.EVT_CHECKBOX, self.onSpin)
		self.Bind(wx.EVT_SPINCTRL, self.onSpin)

		
		oddpage.SetSizerAndFit(oddsizer)
		self.SetOdds()
		self.makeReels()
		oddpage.SetupScrolling()
		oddpage.Refresh()
		oddpage.Update()
Beispiel #2
0
	def __init__(self, parent, settings="", subject="", *args, **kwargs):
		# create the parent class
		wx.Frame.__init__(self, parent, *args, **kwargs)

		glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
		
		#self.SetSize((800, 600))
		#bmp = wx.Bitmap('images/background.png')
		#self.background = wx.StaticBitmap(self, -1, bmp, (0,0))
		
		#initialize the game settings
		if settings:
			self.settings = settings
		else:

			dlg = wx.FileDialog(self, "Choose a settings file", os.path.join(os.getcwd(), "settings"), "", "*.set", wx.OPEN)
			if dlg.ShowModal() == wx.ID_OK:
				path = dlg.GetPath()
				f = open(path, "r")
				self.settings = pickle.load(f)
				f.close()
			dlg.Destroy()

		if subject:
			self.subject = subject
		else:
			d = self.settings.subInfo
			getinfo = False
			for k in d.keys():
				if d[k] == True:
					getinfo = True
					
			if getinfo:
				infodialog = subjectinfo.SubjectInfoDialog(self, "Subject Info")
				infodialog.enable_control("Name", d["Name"])
				infodialog.enable_control("Age", d["Age"])
				infodialog.enable_control("Sex", d["Sex"])
				infodialog.enable_control("Handedness", d["Handedness"])
				ans2 = infodialog.ShowModal()
				if ans2 == wx.ID_SAVE:
					#infodialog.save_info()
					infodialog.save_info()
					infodialog.cogsub.expname = self.settings.saveAs
					infodialog.cogsub.session = self.settings.session
					self.subject = infodialog.cogsub
			else:
				self.subject= Subject()
				self.subject.expname = self.settings.saveAs
				self.subject.session = self.settings.session

		fname = "%s_%s_%s_%s" % (self.subject.expname, self.subject.s_id, self.subject.session, self.subject.date)
				
		dlg = wx.FileDialog(self, "Choose a location to save subject data file", os.getcwd(), fname, "*.csv", wx.SAVE)
		if dlg.ShowModal() == wx.ID_OK:
			path = dlg.GetPath()
			self.subject.fpath = path
		dlg.Destroy()

		#create a Slots object
		self.slots = self.settings.slots

		self.round = 1
		self.balance = self.settings.seed
		# the pretty background - not working properly yet
		self.SetOwnBackgroundColour(cfg.STEEL_BLUE)
		
		#print self.settings.combos

		# get the user params from the database
		self.get_user_params()
		
		# create the sizer that everything fits into
		self.sizer = wx.FlexGridSizer(4, 1, 5, 5)
			
		# populate the payout sizer with values from the database
		if self.settings.showPayouts:
			self.payoutpanel = commongui.PayoutTable(self, self.settings, cfg.LIGHT_GREY)
		else:
			self.payoutpanel = wx.Panel(self, wx.ID_ANY)
		
		#self.payoutpanel.Bind(wx.EVT_PAINT, self.on_paint)		

		
		self.payoutpanel.SetBackgroundColour(cfg.STEEL_BLUE)
		self.payoutpanel.SetForegroundColour(cfg.LIGHT_GREY)
		self.payoutpanel.SetWindowStyle(wx.RAISED_BORDER)
		
		# create the first row
		centeredflag = wx.SizerFlags(1).Align(wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER)
		
		self.sizer.AddF(self.payoutpanel, centeredflag)
			
		# create the text boxes
		wagersizer, self.wagertext = self.create_labeled_num_box("Wager")
		self.wagertext.SetValue(str(self.settings.betsizes[0]))
		winsizer, self.wintext = self.create_labeled_num_box("Win")
		balancesizer, self.balancetext = self.create_labeled_num_box("Balance", str(self.balance))
		
		bottomflag = wx.SizerFlags(1).Align(wx.ALIGN_BOTTOM|wx.ALIGN_CENTER).Border(wx.ALL, 5)

		#sizer for the info (wager size, balance, win)
		infosizer = wx.BoxSizer(wx.HORIZONTAL)
		infosizer.AddF(wagersizer, bottomflag)
		infosizer.AddF(winsizer, bottomflag)
		infosizer.AddF(balancesizer, bottomflag)

		# the buttons will have to go in a separate sub-sizer
		buttonsizer = wx.BoxSizer(wx.HORIZONTAL)
		self.increasebtn = wx.BitmapButton(self, wx.ID_ANY, commongui.makeBitmap(cfg.IM_INCREASEWAGER), style = wx.NO_BORDER)
		self.decreasebtn = wx.BitmapButton(self, wx.ID_ANY, commongui.makeBitmap(cfg.IM_DECREASEWAGER), style = wx.NO_BORDER)
		self.spinbtn = wx.BitmapButton(self, wx.ID_ANY, commongui.makeBitmap(cfg.IM_SPIN), style = wx.NO_BORDER)
		self.spinbtn.SetBitmapDisabled(commongui.makeBitmap(cfg.IM_SPIN_DEAC))
		self.increasebtn.SetBitmapDisabled(commongui.makeBitmap(cfg.IM_INCREASEWAGER_DEAC))
		self.decreasebtn.SetBitmapDisabled(commongui.makeBitmap(cfg.IM_DECREASEWAGER_DEAC))
		
		buttonsizer.AddF(self.decreasebtn, bottomflag)
		buttonsizer.AddF(self.spinbtn, bottomflag)
		buttonsizer.AddF(self.increasebtn, bottomflag)
		
		#spinning reel
		self.create_spinning_wheel(self.sizer)
		
		#buttons and info
		self.sizer.AddF(infosizer, bottomflag)
		self.sizer.AddF(buttonsizer, bottomflag)
		self.sizer.AddStretchSpacer()
		
		# create an outer sizer to have a nice border
		outersizer = wx.BoxSizer(wx.VERTICAL)
		outersizer.AddF(self.sizer, wx.SizerFlags(1).Expand().Align(
			wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER).Border(wx.ALL, 20));
		self.SetSizerAndFit(outersizer)
		
		# bindings
		self.decreasebtn.Bind(wx.EVT_BUTTON, lambda event, name='decrease':self.OnChangeWager(event, name))
		self.increasebtn.Bind(wx.EVT_BUTTON, lambda event, name='increase':self.OnChangeWager(event, name))
	
		self.Bind(wx.EVT_BUTTON, self.OnSpin, self.spinbtn)
	
		# these bindings are for the not-quite-functional background
		self.Bind(wx.EVT_SIZE, self.OnSize)
		
		f = open('introtext.html', 'w')
		f.write(self.settings.instructions)
		f.close()
		
		# create the initial instructions dialog
		dialog = commongui.InfoDialog(self, "Welcome to CogSlots", 'introtext.html')
		
		if (dialog.ShowModal() == wx.ID_CANCEL):
			sys.exit(0)
		
		#if gamblersFallacy, need to purge near misses from the combos list
		if self.settings.gamblersFallacy:
			newComs = []
			for c in self.settings.combos:
				if cfg.IM_BLANK not in c:
					newComs.append(c)
				
			self.settings.combos = newComs
			
		# show thyself
		self.Centre()
		self.Show(True)
		self.Refresh()
		self.Update()
		
		#starting vars to monitor subject activity
		self.startTime = time.clock()
		self.wagerIncreases = 0
		self.wagerDecreases = 0
Beispiel #3
0
	def __init__(self, parent, *args, **kwargs):
		# create the parent class
		wx.Frame.__init__(self, parent, *args, **kwargs)

		#self.FRAME_SIZE = (750, 600)

		self.settings = Settings()

		# the notebook
		#nbW = self.FRAME_SIZE[0]
		#nbH = self.FRAME_SIZE[1] * 0.9
		#self.nbH = nbH
		#self.nbW = nbW
		self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW))
		self.book = wx.Notebook(self, wx.ID_ANY)

		betspage, betssizer = self.create_page('Bets')
		self.betspage = betspage
		self.betssizer = betssizer
		symbolpage, symbolsizer = self.create_page('Symbols')
		#self.oddpage, self.oddsizer = self.create_page('Odds')
		infopage, infosizer = self.create_page('Info')
		instructionPage, instructionSizer = self.create_page('Instructions')
		self.infopage = infopage

		self.iCtrl = wx.TextCtrl(instructionPage, -1, self.settings.instructions, style = wx.TE_MULTILINE)
		flagsExpand = wx.SizerFlags(1)
		flagsExpand.Expand()
		instructionSizer.AddF(self.iCtrl, flagsExpand)
		
		# same font for all the headers
		self.hfont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
		self.hfont.SetWeight(wx.FONTWEIGHT_BOLD)
		self.hfont.SetPointSize(self.hfont.GetPointSize()*1.3)

		# and the same border flag/label flag
		self.bflag = wx.SizerFlags().Border(wx.ALL, 5)
		self.eflag = self.bflag.Expand()
		self.hflag = wx.SizerFlags().Border(wx.LEFT, 10)

		#*******************************************
		# 				The bets page
		#*******************************************
		# Number of rounds
		self.roundsentry = wx.TextCtrl(betspage, wx.ID_ANY, style=wx.TE_RIGHT)
		self.seedentry = wx.TextCtrl(betspage, wx.ID_ANY, style=wx.TE_RIGHT)
		self.debtallowed = wx.CheckBox(betspage, wx.ID_ANY, "Allow subject debt")

		# Wagers
		self.wagernum = wx.Choice(betspage, wx.ID_ANY, choices=["New"])
		self.amountentry = wx.TextCtrl(betspage, wx.ID_ANY, style=wx.TE_RIGHT)
		self.addbtn = wx.Button(betspage, wx.ID_ANY, "Add")
		self.wagertable = wx.StaticBoxSizer(wx.StaticBox(betspage), wx.VERTICAL)
		self.wagerrows = []

		# number of rounds stuff
		roundslabel = wx.StaticText(betspage, wx.ID_ANY, "Number of Rounds:")
		roundslabel.SetFont(self.hfont)
		betssizer.AddF(roundslabel, self.hflag)
		numroundsbox = wx.BoxSizer(wx.HORIZONTAL)
		numroundsbox.AddF(self.roundsentry, self.bflag)
		debtlabel = wx.StaticText(betspage, wx.ID_ANY, "Subject Debt:")
		debtlabel.SetFont(self.hfont)
		betssizer.AddF(numroundsbox, self.bflag)
		
		#numroundsbox.AddF(debtlabel, self.bflag)
		#numroundsbox.AddF(self.debtallowed, self.bflag)
		betssizer.AddF(debtlabel, self.bflag)
		betssizer.AddF(self.debtallowed, self.bflag)
		betssizer.AddF(wx.StaticLine(betspage), self.eflag)

		# the currency stuff
		currencylabel = wx.StaticText(betspage, wx.ID_ANY, "Currency:")
		currencylabel.SetFont(self.hfont)
		betssizer.AddF(currencylabel, self.hflag)
		self.currencytype = wx.Choice(betspage, wx.ID_ANY, choices=["Credits", "$"])
		currencybox = wx.BoxSizer(wx.HORIZONTAL)
		currencybox.AddF(wx.StaticText(betspage, wx.ID_ANY, "Seed Amount:"), self.bflag)
		currencybox.AddF(self.seedentry, self.bflag)
		currencybox.AddF(self.currencytype, self.bflag)
		betssizer.AddF(currencybox, self.bflag)
		betssizer.AddF(wx.StaticLine(betspage), self.eflag)

		# the wager stuff
		wagerlabel = wx.StaticText(betspage, wx.ID_ANY, "Wagers:")
		wagerlabel.SetFont(self.hfont)
		betssizer.AddF(wagerlabel, self.hflag)
		wagerbox = wx.BoxSizer(wx.HORIZONTAL)
		wagerbox.AddF(self.wagernum, self.bflag)
		wagerbox.AddF(wx.StaticText(betspage, wx.ID_ANY, "Amount:"), self.bflag)
		wagerbox.AddF(self.amountentry, self.bflag)
		wagerbox.AddF(self.addbtn, self.bflag)
		betssizer.AddF(wagerbox, self.bflag)
		betssizer.AddF(self.wagertable, self.eflag)

		# Bindings, woot
		self.Bind(wx.EVT_BUTTON, self.OnAddWager, self.addbtn)
		self.Bind(wx.EVT_CHOICE, self.OnChooseWager, self.wagernum)

		self.SetBets()

		#*******************************************
		# 				The Symbols page
		#*******************************************
		# Visible types of symbols
		choices = []
		for i in range(1,11):
			choices.append(str(i))
		
		pbox = wx.BoxSizer(wx.HORIZONTAL)
		pbox.AddF(wx.StaticText(symbolpage, wx.ID_ANY, "Number of Winning Combinations:"), self.bflag)
		self.pCtrl = wx.Choice(symbolpage, wx.ID_ANY, choices=choices)
		pbox.AddF(self.pCtrl, self.bflag)
		symbolsizer.AddF(pbox, self.bflag)
		
		rbox = wx.BoxSizer(wx.HORIZONTAL)
		rbox.AddF(wx.StaticText(symbolpage, wx.ID_ANY, "Number of Reels:"), self.bflag)
		self.rCtrl = wx.Choice(symbolpage, wx.ID_ANY, choices=choices)
		rbox.AddF(self.rCtrl, self.bflag)
		symbolsizer.AddF(rbox, self.bflag)
		symbolsizer.AddF(wx.StaticLine(symbolpage), self.eflag)
		
		symbolslabel = wx.StaticText(symbolpage, wx.ID_ANY, "Select Symbols:")
		symbolslabel.SetFont(self.hfont)
		symbolsizer.AddF(symbolslabel, self.hflag)
		
		symsizer = wx.BoxSizer(wx.HORIZONTAL)

		self.symboxes = []
		
		for s in self.settings.symbols:
			if s != cfg.IM_EMPTY:
				checkbox = wx.CheckBox(symbolpage, wx.ID_ANY, "")
				#checkbox.SetValue(True)
				checkbox.cbname = s
				self.symboxes.append(checkbox)
				checkSizer = wx.BoxSizer(wx.VERTICAL)
				checkSizer.Add(wx.StaticBitmap(symbolpage, -1, makeBitmap(s, [16, 16])), 1)
				checkSizer.Add(checkbox, 1)
				symsizer.AddF(checkSizer, self.bflag)
		
		symbolsizer.AddF(symsizer, self.bflag)
		self.SetSymbols()
		symbolpage.SetSizerAndFit(symbolsizer)
				
		#*******************************************
		# 				The Info page
		#*******************************************
		
		# Payout table
		self.payoutframe = commongui.PayoutTable(infopage, self.settings)
		self.payoutSizer = wx.BoxSizer(wx.VERTICAL)
		self.payoutSizer.Add(self.payoutframe)
		infosizer.Add(self.payoutSizer)

		# subject info		
		self.collectname = wx.CheckBox(infopage, wx.ID_ANY, "Name")
		self.collectage = wx.CheckBox(infopage, wx.ID_ANY, "Age")
		self.collectsex = wx.CheckBox(infopage, wx.ID_ANY, "Sex")
		self.collecthandedness = wx.CheckBox(infopage, wx.ID_ANY, "Handedness")
		
		self.showpayouts = wx.CheckBox(infopage, wx.ID_ANY, "Show Payouts Table During Gameplay?")
		
		# subjective probability estimate
		self.getprobestimate = wx.CheckBox(infopage, wx.ID_ANY, "Obtain Subject Probability Estimate")
		self.getprobestimate.SetFont(self.hfont)
		self.estimatetiming = wx.Choice(infopage, wx.ID_ANY, choices=["beginning", "end"])
		self.estimateinterval = wx.TextCtrl(infopage, wx.ID_ANY, style=wx.TE_RIGHT)
		
		# save as
		self.filenamebox = wx.TextCtrl(infopage, wx.ID_ANY)
		self.sessionnumbox = wx.TextCtrl(infopage, wx.ID_ANY, style=wx.TE_RIGHT)
		
		# info collection package
		infolabel = wx.StaticText(infopage, wx.ID_ANY, "Collect Subject Information")
		infolabel.SetFont(self.hfont)
		infosizer.AddF(infolabel, self.hflag)
		infosizer.AddF(self.collectname, self.bflag)
		infosizer.AddF(self.collectage, self.bflag)
		infosizer.AddF(self.collectsex, self.bflag)
		infosizer.AddF(self.collecthandedness, self.bflag)
		infosizer.AddF(wx.StaticLine(self), self.eflag)
		infosizer.AddF(self.showpayouts, self.eflag)
		infosizer.AddF(wx.StaticLine(self), self.eflag)
		
		# probability estimate stuff
		infosizer.AddF(self.getprobestimate, self.hflag)
		self.pBox = wx.BoxSizer(wx.VERTICAL)
		self.probrow = wx.BoxSizer(wx.HORIZONTAL)
		self.probrow.AddF(self.estimatetiming, self.bflag)
		self.probrow.AddF(wx.StaticText(infopage, wx.ID_ANY, "of every"), self.bflag)
		self.probrow.AddF(self.estimateinterval, self.bflag)
		self.probrow.AddF(wx.StaticText(infopage, wx.ID_ANY, "rounds"), self.bflag)
		self.pBox.AddF(self.probrow, self.bflag)
		self.mrow = wx.BoxSizer(wx.HORIZONTAL)
		self.mrow.AddF(wx.StaticText(infopage, wx.ID_ANY, "Message:"), self.bflag)
		self.probText = wx.TextCtrl(infopage, wx.ID_ANY, "")
		self.mrow.AddF(self.probText, self.bflag)
		self.pBox.AddF(self.mrow, self.bflag)
		infosizer.AddF(self.pBox, self.eflag)
		infosizer.AddF(wx.StaticLine(infopage), self.eflag)
		
		# Save as
		saveaslabel = wx.StaticText(infopage, wx.ID_ANY, "Save As:")
		saveaslabel.SetFont(self.hfont)
		infosizer.AddF(saveaslabel, self.hflag)
		savegrid = wx.FlexGridSizer(2,2)
		savegrid.AddF(wx.StaticText(infopage, wx.ID_ANY, "Filename:"), self.bflag)
		savegrid.AddF(self.filenamebox, self.eflag)
		savegrid.AddF(wx.StaticText(infopage, wx.ID_ANY, "Session Number:"), self.bflag)
		savegrid.AddF(self.sessionnumbox, self.eflag)
		infosizer.AddF(savegrid, self.eflag)
		
		infopage.SetSizerAndFit(infosizer)
		
		self.SetInfo()
		

		#*******************************************
		# 				The Odds page
		#*******************************************		
		
		self.makeOddsTab()
		
		#*******************************************
		# 				Common Elements
		#*******************************************
				
		# Buttons
		buttonsizer = wx.BoxSizer(wx.HORIZONTAL)
		updatebtn = wx.Button(self, wx.ID_ANY, 'Update')
		resetbtn = wx.Button(self, wx.ID_ANY, 'Reset')
		loadbtn = wx.Button(self, wx.ID_OPEN)
		savebtn = wx.Button(self, wx.ID_SAVE)
		#cancelbtn = wx.Button(self, wx.ID_CANCEL)
		okaybtn = wx.Button(self, wx.ID_OK)
		buttonsizer.AddF(updatebtn, self.bflag)
		buttonsizer.AddF(resetbtn, self.bflag)
		buttonsizer.AddF(loadbtn, self.bflag)
		buttonsizer.AddF(savebtn, self.bflag)
		#buttonsizer.AddF(cancelbtn, self.bflag)
		buttonsizer.AddF(okaybtn, self.bflag)
		
		# button bindings
		self.Bind(wx.EVT_BUTTON, self.OnLoad, loadbtn)
		self.Bind(wx.EVT_BUTTON, self.OnSave, savebtn)
		self.Bind(wx.EVT_BUTTON, self.OnOkay, okaybtn)
		self.Bind(wx.EVT_BUTTON, self.OnUpdate, updatebtn)
		self.Bind(wx.EVT_BUTTON, self.OnReset, resetbtn)


		# the outer sizer to pack everything into
		bottomflag = wx.SizerFlags().Align(wx.ALIGN_RIGHT|wx.ALIGN_BOTTOM).Border(wx.ALL, 10).Expand()
		outersizer = wx.FlexGridSizer(3, 1)
		middleSizer = wx.BoxSizer(wx.HORIZONTAL)

		middleSizer.AddF(self.book, wx.SizerFlags(1).Expand())
		
		#midSize = (self.FRAME_SIZE[0] * 0.9, self.FRAME_SIZE[1] * 0.9)
		#middleSizer.SetMinSize(midSize)

		outersizer.AddF(middleSizer, bottomflag)
		outersizer.AddF(buttonsizer, bottomflag)

		self.SetSizerAndFit(outersizer)
		#self.SetSize(self.FRAME_SIZE)
		self.Show(True)