# "$Id: subwindow.py 105 2005-06-24 14:38:43Z andreasheld $"
#
# Subwindows test program for pyFLTK the Python bindings
# for the Fast Light Tool Kit (FLTK).
# Test to make sure nested windows work.
# Events should be reported for enter/exit and all mouse operations
# Buttons and pop-up menu should work, indicating that mouse positions
# are being correctly translated.
#
# FLTK copyright 1998-1999 by Bill Spitzak and others.
# pyFLTK copyright 2003 by Andreas Held and others.
#
# This library is free software you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this library if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA.
#
# Please report all bugs and problems to "pyfltk-user@lists.sourceforge.net".
#


from fltk import *
import sys, math


class EnterExit(Fl_Box):
	def __init__(self, x, y, w, h, l):
		Fl_Box.__init__(self,FL_BORDER_BOX,x,y,w,h,l)
		print self

#	def draw(self):
#		#Fl_Box.draw(self)
#		pass

	def handle(self, e):
		print "event = ", e
		if e == FL_ENTER:
			try:
				print "FL_ENTER"
				self.color(FL_RED)
				self.redraw()
			except:
				print 'uncaught!', sys.exc_type, sys.exc_value
			return 1
		elif e == FL_LEAVE:
			try:
				print "FL_LEAVE"
				self.color(FL_GRAY)
				self.redraw()
			except:
				print 'uncaught!', sys.exc_type, sys.exc_value
			return 1
		else:
			return 0



class testwindow(Fl_Window):
	cx = 0
	cy = 0
	key = '0'
	def __init__(self, b, x, y, w, h, l):
		Fl_Window.__init__(self,x,y,w, h,l)
		self.box(b)
		key = 0

	def draw(self):
		print self.label(), " :draw"
		Fl_Window.draw(self)
		if self.key:
			fl_draw(self.key, 1, self.cx, self.cy)

	def handle(self, e):
		if e != FL_MOVE:
			#print self.label(), " : ", self.eventnames[e]
			print self.label()
		if Fl_Window.handle(self, e):
			return 1;
		if e == FL_FOCUS:
			return 1
		if e == FL_PUSH:
			Fl.focus(self.this)
			return 1
		if e == FL_KEYDOWN and Fl.event_text()[0]:
			self.key = Fl.event_text()[0]
			self.cx = Fl.event_x()
			self.y = Fl.event_y()
			self.redraw()
			return 1
		return 0



popup = None

bigmess = "this|is|only|a test"

window = testwindow(FL_UP_BOX,0,0,400,400,"outer")

tn1 = Fl_Toggle_Button(310,310,80,80,"&outer")

ee1 = EnterExit(10,310,80,80,"enterexit")

fi1 = Fl_Input(150,310,150,25,"input:")

mb1 = Fl_Menu_Button(5,150,80,25,"menu&1")
#setMenu(mb1, ( ("this",), ("is",), ("only",), ("a test",), (None,)))
mb1.menu(( ("this",), ("is",), ("only",), ("a test",), (None,)))
#mb1.add(bigmess)
subwindow = testwindow(FL_DOWN_BOX,100,100,200,200,"inner")
#subwindow = Fl_Window(FL_DOWN_BOX,100,100,200,200,"inner")
tn2 = Fl_Toggle_Button(310,310,80,80,"&outer")
subwindow.add(tn2)

ee2 = EnterExit(10,310,80,80,"enterexit")
subwindow.add(ee2)

fi2 = Fl_Input(150,310,150,25,"input:")
subwindow.add(fi2)

mb2 = Fl_Menu_Button(5,150,80,25,"menu&2")
#mb2.add(bigmess)
#setMenu(mb2, ( ("this",), ("is",), ("only",), ("a test",), (None,)))
mb2.menu(( ("this",), ("is",), ("only",), ("a test",), (None,)))
subwindow.end()
subwindow.resizable(subwindow)
window.resizable(subwindow)
window.add(subwindow)

fb = Fl_Box(FL_NO_BOX,0,0,400,100,
	     "A child Fl_Window with children of it's own may "
	     "be useful for imbedding controls into a GL or display "
	     "that needs a different visual.  There are bugs with the "
	     "origins being different between drawing and events, "
	     "which I hope I have solved."
	     )
fb.align(FL_ALIGN_WRAP)

popup = Fl_Menu_Button(0,0,400,400)
popup.type(Fl_Menu_Button.POPUP3)
#setMenu(popup, ( ("This",), ("is",), ("a popup",), ("menu",), ("this",), ("is",), ("only",), ("a test",), (None,)))
popup.menu(( ("This",), ("is",), ("a popup",), ("menu",), ("this",), ("is",), ("only",), ("a test",), (None,)))
#popup.add("This|is|a popup|menu")
#popup.add(bigmess)
window.add(fb)
window.add(popup)
window.end()

#window.show(len(sys.argv), sys.argv)
window.show()

print "rec = ", sys.getrecursionlimit()
#sys.setrecursionlimit(2000)
#print "rec = ", sys.getrecursionlimit()

Fl.run()
