#
#   PyGUI - Slider test
#

from GUI import Slider, Window, run
from testing import say

def slid(slider, orient, number):
    name = "%s%s" % (orient.upper(), number)
    def action():
        say("Slider %s value = %s" % (name, slider.value))
    return action

def test(orient, pos, pad):
    win = Window(title = "%s Sliders" % orient.upper(), position = pos,
        auto_position = False)
    sliders = []
    if 1:
        #say("Creating slider 1")
        sl1 = sl2 = sl3 = None
        sl1 = Slider(orient = orient, max_value = 100)
        sl1.action = slid(sl1, orient, 1)
        sliders.append(sl1)
    if 1:
        #say("Creating slider 2")
        sl2 = Slider(orient = orient, max_value = 100, ticks = 6, live = False)
        sl2.value = 50
        sl2.action = slid(sl2, orient, 2)
        sliders.append(sl2)
    if 1:
        #say("Creating slider 3")
        sl3 = Slider(orient = orient, max_value = 100, ticks = 6, discrete = True)
        sl3.value = 100
        sl3.action = slid(sl3, orient, 3)
        sliders.append(sl3)
    #say("Created sliders")
    if orient == 'h':
        win.place_column(sliders, left = 20, top = 20, spacing = 20, sticky = 'ew')
        if sl2:
            sl2.vstretch = True
        if sl3:
            sl3.vmove = True
    else:
        win.place_row(sliders, left = 20, top = 20, spacing = 20, sticky = 'ns')
        if sl2:
            sl2.hstretch = True
        if sl3:
            sl3.hmove = True
    #say("Placed sliders")
    win.shrink_wrap()
    win.show()

instructions = """
There should be two windows, one containing horizontal sliders and
one containing vertical sliders. In each window, there should be
three sliders:

1. No tick marks, continuous range 0 to 100,
   initial value 0, live.

2. 6 tick marks, continuous range 0 to 100,
   initial value 50, non-live.

3. 6 tick marks, discrete range 0 to 100 in steps of 20,
   initial value 100, live.

The 'live' sliders should report their values continuously while
the mouse is dragged; the others should report their values only
when the mouse is released.
"""

say(instructions)
test('h', (20, 60), (30, 30))
test('v', (200, 60), (60, 30))
run()
