from GUI import Window, Button, CheckBox, application
from TestScrollableViews import TestScrollableView
from testing import say

class TestWindow(Window):

    def __init__(self, **kwds):
        Window.__init__(self, **kwds)
        self.view = TestScrollableView(container = self,
            x = 20, y = 20,
            width = 300, height = 300)#, scrolling = 'hv')
        self.view.report_update_rect = True
        if 1: ###
            self.h_scrolling_ctrl = CheckBox("Horizontal Scrolling",
                value = 'h' in self.view.scrolling, 
                action = 'horz_scrolling')
            self.v_scrolling_ctrl = CheckBox("Vertical Scrolling",
                value = 'v' in self.view.scrolling,
                action = 'vert_scrolling')
            self.border_ctrl = CheckBox("Border", value = 1, action = 'change_border')
            CheckBox("Vertical Scrolling", value = 1, action = 'vert_scrolling'),
            buttons = self.create_buttons()
            x = self.view.right + 5
            y = self.view.top
            for b in buttons:
                b.position = (x, y)
                self.add(b)
                y = b.bottom + 5
            #self.shrink_wrap()
            self.view.become_target()
    
    def create_buttons(self):
        return [
            Button("Scroll Left", action = ('scroll', -16, 0)),
            Button("Scroll Right", action = ('scroll', 16, 0)),
            Button("Scroll Up", action = ('scroll', 0, -16)),
            Button("Scroll Down", action = ('scroll', 0, 16)),
            Button("Small Extent", action = ('extent', 100, 100)),
            Button("Medium Extent", action = ('extent', 500, 500)),
            Button("Large Extent", action = ('extent', 1000, 1000)),
            self.h_scrolling_ctrl,
            self.v_scrolling_ctrl,
            self.border_ctrl,
        ]
    
    def scroll(self, dx, dy):
        self.view.scroll_by(dx, dy)
    
    def extent(self, w, h):
        self.view.extent = (w, h)
        self.view.invalidate()
        say("Extent =", self.view.extent)
    
    def horz_scrolling(self):
        self.view.hscrolling = self.h_scrolling_ctrl.value

    def vert_scrolling(self):
        self.view.vscrolling = self.v_scrolling_ctrl.value
    
    def change_border(self):
        self.view.border = self.border_ctrl.value

win = TestWindow(size = (500, 500))
win.show()

instructions = """
There should be a scrolling view containing a diagonal row of red
triangles on a white background. All scrolling controls should work
properly.

The extent of the view is marked with a black border. Ensure that the
scrolling range extends exactly to the outer edge of this border in
all directions for Medium and Large extents. For Small extent, the
scroll bars should be disabled.

Buttons down the right side can be used to simulate clicking on the
scroll arrows and to change the extent. Ensure that the scroll bars
are updated accordingly when these buttons are used.
"""

say(instructions)
application().run()
