from wxPython.wx import *
from wxPython.xrc import *
import string
import metakit
from globals import *
import identifiers

ID=identifiers
mk = metakit


###############################################################################
# Edit checklist dialog
class xrcEditChecklistDlg( object ):
	''
	def __init__( self, parent, checklist ):	

		self.Parent = parent
		self.User = parent.User
		self.Resources = parent.Resources
		self.Checklist = checklist
		self.TableObj = self.User.ChecklistTableObj

		self.dlg = self.Resources.LoadDialog( self.Parent, 'Dlg_EditChecklist' )
		self.dlg.CenterOnScreen()
		
		#--- get controls
		self.titleCtrl = XRCCTRL(self.dlg,'Txt_Title')
		self.taxonomicTreeCtrl = XRCCTRL(self.dlg,'TC_TaxonomicTreeControl')
#		self.checklistViewCtrl = XRCCTRL(self.dlg,'LC_ChecklistViewCtrl')
		self.pnlChecklistView = XRCCTRL(self.dlg,'Pnl_ChecklistView')
		addBtn = XRCCTRL(self.dlg,'Btn_Add')
		removeBtn = XRCCTRL(self.dlg,'Btn_Remove')
		self.okBtn = XRCCTRL(self.dlg,'Btn_OK')

		#--- add the checklist view control
		self.checklistView = ChecklistView(  
							self.pnlChecklistView, wxNewId(), self.Checklist,
							pos=wxPoint(0,0), size=self.pnlChecklistView.GetSize(), 
							style=wxSIMPLE_BORDER|wxWANTS_CHARS,
							parent=self )
		self.checklistView.SetReturnKeyHandler( self.OnOK, 0 )
		self.checklistView.SetNextWindowForTabbing( self.okBtn )
		self.checklistView.SetBackgroundColour( wxWHITE )
		self.checklistView.SetGeometry( )	
		self.checklistView.SetListDisplaySize( self.pnlChecklistView.GetSize() )
		self.checklistView.InvertFocusRect()

		#--- fill out controls
		vw = self.TableObj.Table.select( ChecklistId=self.Checklist.Id )
		if len(vw) == 0:
			msg = 'should never happen: error - id not found: ' + str( self.Checklist.Id )
			wxMessageBox( msg )
			return
			
		self.titleCtrl.SetValue( vw[0].Title )
	
		vwList = self.TableObj.ChecklistTable.select( ChecklistId=self.Checklist.Id )
		if len( vwList ) > 0:
			for taxonId in vwList:
				pass
		
		#--- connect events
		EVT_BUTTON( self.okBtn, self.okBtn.GetId(), self.OnOK )
		EVT_BUTTON( addBtn, addBtn.GetId(), self.OnAdd )
		EVT_UPDATE_UI( addBtn, addBtn.GetId(), self.OnUpdateAdd )
		EVT_BUTTON( removeBtn, removeBtn.GetId(), self.OnRemove )
		EVT_UPDATE_UI( removeBtn, removeBtn.GetId(), self.OnUpdateRemove )
		return
	
	####################### events ###############################
	def OnUpdateAdd( self, evt ):
		treeSel = self.taxonomicTreeCtrl.GetSelection()
		evt.Enable( self.taxonomicTreeCtrl.IsBold( treeSel ) == False )
	def OnUpdateRemove( self, evt ):
		evt.Enable( self.checklistView.GetSelectedRow( ) != None )
			
	def OnAdd( self, evt ):
		row = self.taxonomicTreeCtrl.SetSelectedItemHierarchyBold(  )
		if row == None:
			wxMessageBox( 'invalid or no selection in taxonomy' )
			return
		self.checklistView.AddRow( row )
		self.taxonomicTreeCtrl.SetFocus(  )
		pass
		
	def OnRemove( self, evt ):
		row = self.checklistView.RemoveSelectedEntry()
		if row == None:
			wxMessageBox( 'no selection in checklist' )
			return
		treeItem = self.taxonomicTreeCtrl.FindItemWithPyData( \
							self.taxonomicTreeCtrl.GetRootItem(), row, False )
		self.taxonomicTreeCtrl.SetItemAndChildrenBold( treeItem, False )
		self.taxonomicTreeCtrl.SetParentNormal( treeItem )
		self.checklistView.SetFocus(  )
		pass

	def OnOK( self, evt ):
		title = self.titleCtrl.GetValue()
		if title == '':
			wxMessageBox( 'Please enter a unique title for this checklist.')
			return
		self.dlg.EndModal( wxID_OK )
		pass
