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()

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()

#say("TestDocView.draw: viewed_rect =", r) #say(view.x, view.y, view.width, view.height) 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.