from GUI import Window, View, CheckBox, Button, Label, \
         RadioButton, RadioGroup, TextField
from TestViews import TestDrawing
from TestScrollableViews import TestScrollableDrawing
from testing import say

def pushed_it():
    say("Button pushed.")

def checked_it():
    say("Check boxes changed to:", cb1.on, cb2.on)

def option_chosen():
    say("Hoopy option %d chosen" % rg.value)

def main():
    global cb1, cb2, rg
    
    win = Window(title = "Place Me By Your Side", width = 720, height = 500)

    view1 = TestDrawing(width = 320, height = 200)

    cb1 = CheckBox(title = "Check Me!", action = checked_it)

    cb2 = CheckBox(title = "Check Me Too!", action = checked_it)

    rbs = []
    for i in range(1, 4):	
        rb = RadioButton(title = "Hoopy Option %d" % i, value = i)
        rbs.append(rb)

    rg = RadioGroup(rbs, action = option_chosen)

    pb = Button(title = "Push Me!", action = pushed_it)

    view2 = TestScrollableDrawing(width = 300, height = 300)

    label = Label(text = "Flavour:")

    entry = TextField(width = 200)

    win.place(view1, left = 10, top = 10, border = 1)

    win.place_row([cb1, cb2], left = 10, top = (view1, 20), spacing = 20)
    
    win.place_column(rbs, left = view1 + 20, top = 10)

    win.place(pb, right = -20, bottom = -10, anchor = 'rb')

    win.place(view2, 
        left = rbs[0] + 20, top = 10, 
        right = -20,
        bottom = pb - 10,
        scrolling = 'hv',
        anchor = 'ltrb',
        border = 1)
    
    win.place(label, left = 10, top = (cb1, 20))

    win.place(entry, left = 10, top = (label, 10), 
        #border = 1
    )
    entry.become_target()

    win.show()

    import GUI
    GUI.run()

instructions = """
There should be a window containing:

1. A 320x200 view, 10 pixels from the left and top, containing some drawing.

2. Below the view, aligned with its left edge:

   2a. A row of two check boxes

   2b. A label
   
   2c. A text field
 
3. To the right of the view, aligned with its top edge, a column
   of three radio buttons.

4. To the right of the radio buttons, a scrolling view, 10 pixels from the
   top of the window and 20 from the right edge.

5. In the bottom right corner of the window, a button, 10 pixels from the
   scrolling view and from the bottom of the window, and 20 pixels from the
   right edge.

When the window is resized, the scrolling view should resize with it,
and the button should remain the same distance from the bottom right
corner.

Check that the layout remains correct when the window is obscured and
then revealed again.

Check that the layout remains correct when the window is made too small
to display all of the items and then enlarged again.
"""

say(instructions)
main()
