from GUI import Application, Window, Document, View, rgb, application
from testing import say

class TestDoc(Document):

    color = rgb(0.5, 0.5, 0.5)

    def set_color(self, c):
        self.color = c
        self.changed()
        self.notify_views()


class TestDocView(View):

    def draw(self, c, r):
        r = self.viewed_rect()
        #say("TestDocView.draw: viewed_rect =", r)
        m = self.model
        c.forecolor = m.color
        c.fill_rect(self.viewed_rect())

    def mouse_down(self, e):
        l, t, r, b = self.viewed_rect()
        x, y = e.position
        red = float(x - l) / float(r - l)
        green = float(r - x) / float(r - l)
        blue = float(y - b) / float(t - b)
        self.model.set_color(rgb(red, green, blue))


def test():
    doc = TestDoc(title = "Document")
    view = TestDocView(model = doc, size = (200, 200))
    win = Window(resizable = 0, size = (200, 200))
    win.add(view)
    win.document = doc
    #say(view.x, view.y, view.width, view.height)
    win.show()
    application().run()

instructions = """
There should be a window titled 'Document'.

Clicking in the window should cause it to be filled with a colour
that depends on the position of the click. On closing the window
or quitting the application, if the window has been clicked,
you should be asked whether to save changes. Cancelling should
prevent the close or quit.
"""

say(instructions)
test()
