import sys,os
from wxPython.wx import *
from wxPython.xrc import *
from globals import *
from PlacesView import *
from TaxonomicTreeView import *
from ChecklistView import *


########################################################################
#
class xmlResourceMgr( object ):
	'Manages access to XML resources'
	def __init__( self, parent ):

		self.Parent = parent

		resourceFile = opj("res/dialogs.xrc")
		resourceText = open( resourceFile ).read()
		self.dlgResources = wxEmptyXmlResource()
		self.dlgResources.InsertHandler(unknown( self.Parent ))
		self.dlgResources.LoadFromString(resourceText)

	def LoadDialog( self, parent, name ):
		return self.dlgResources.LoadDialog( parent, name )

	def LoadOnDialog( self, parent, parent2, name ):
		return self.dlgResources.LoadOnDialog( parent, parent2, name )

	def LoadPanel( self, parent, name ):	
		return self.dlgResources.LoadPanel( parent, name )

	def LoadOnPanel( self, parent, panel, name ):
		return self.dlgResources.LoadOnPanel( parent, panel, name )

	def LoadMenu( self, name ):
		return self.mnuResources.LoadMenu( name )

	def LoadMenuBar( self, name ):
		return self.mnuResources.LoadMenuBar( name )

class unknown(wxXmlResourceHandler):
	def __init__( self, parent ):
		wxXmlResourceHandler.__init__(self)
		self.AddStyle("wxTAB_TRAVERSAL", wxTAB_TRAVERSAL)
		self.AddWindowStyles()
		
		self.Parent = parent

	# This method and the next one are required for XmlResourceHandlers
	def CanHandle(self, node):
		return self.IsOfClass(node, "unknown")

	def DoCreateResource(self):
		assert self.GetInstance() is None
		
		# Now create the object
		if self.GetName() == 'TC_TaxonomicTreeControl':
			style = 0
			style |= wxTR_HIDE_ROOT|wxTR_HAS_BUTTONS|wxTR_LINES_AT_ROOT|wxSIMPLE_BORDER
			
			ctrl = TaxonomicTree( self.GetParentAsWindow(), 
						self.GetID(), 
						self.GetPosition(),
						self.GetSize(),
						style = style,
						parent=self.Parent )
			pass
			
		else:
			wxMessageBox( 'Unknown XML class is REALLY unknown!' )
			return
 					
		# These two things should be done in either case:
		# Set standard window attributes
		self.SetupWindow( ctrl )
		# Create any child windows of this node
		self.CreateChildren( ctrl )

		return ctrl
