#! /usr/local/bin/python

# radiogroups.py
#
# Demonstrate multiple groups of radio buttons

import stdwin
from Buttons import *
from WindowParent import WindowParent, MainLoop
from HVSplit import HSplit, VSplit

def main():
	#
	# Create the widget hierarchy, top-down
	#
	# 1. Create the window
	#
	window = WindowParent().create('Radio Groups', (0, 0))
	#
	# 2. Create a horizontal split to contain the groups
	#
	topsplit = HSplit().create(window)
	#
	# 3. Create vertical splits, one for each group
	#
	group1 = VSplit().create(topsplit)
	group2 = VSplit().create(topsplit)
	group3 = VSplit().create(topsplit)
	#
	# 4. Create individual radio buttons, each in their own split
	#
	b11 = RadioButton().definetext(group1, 'Group 1 button 1')
	b12 = RadioButton().definetext(group1, 'Group 1 button 2')
	b13 = RadioButton().definetext(group1, 'Group 1 button 3')
	#
	b21 = RadioButton().definetext(group2, 'Group 2 button 1')
	b22 = RadioButton().definetext(group2, 'Group 2 button 2')
	b23 = RadioButton().definetext(group2, 'Group 2 button 3')
	#
	b31 = RadioButton().definetext(group3, 'Group 3 button 1')
	b32 = RadioButton().definetext(group3, 'Group 3 button 2')
	b33 = RadioButton().definetext(group3, 'Group 3 button 3')
	#
	# 5. Define the grouping for the radio buttons.
	#    Note: this doesn't have to be the same as the
	#    grouping is splits (although it usually is).
	#    Also set the 'hook' procedure for each button
	#
	list1 = [b11, b12, b13]
	list2 = [b21, b22, b23]
	list3 = [b31, b32, b33]
	#
	for b in list1:
		b.group = list1
		b.on_hook = myhook
	for b in list2:
		b.group = list2
		b.on_hook = myhook
	for b in list3:
		b.group = list3
		b.on_hook = myhook
	#
	# 6. Select a default button in each group
	#
	b11.select(1)
	b22.select(1)
	b33.select(1)
	#
	# 6. Realize the window
	#
	window.realize()
	#
	# 7. Dispatch events until the window is closed
	#
	MainLoop()
	#
	# 8. Report final selections
	#
	print 'You selected the following choices:'
	if b11.selected: print '1.1'
	if b12.selected: print '1.2'
	if b13.selected: print '1.3'
	if b21.selected: print '2.1'
	if b22.selected: print '2.2'
	if b23.selected: print '2.3'
	if b31.selected: print '3.1'
	if b32.selected: print '3.2'
	if b33.selected: print '3.3'


# My 'hook' procedure
# This is placed as 'hook' attribute on each button.
# The example just prints the title of the selected button.
#
def myhook(self):
	print 'Selected:', self.text

main()
