#Region - TimeStamp
; 2012-06-13 11:54:52
#EndRegion - TimeStamp
#include <Array.au3>
#Include <GUIConstantsEx.au3>
#Include <WindowsConstants.au3>
#include 'TreeViewEx.au3'
Opt('MustDeclareVars', 1)

_Main_1()
_Main_2()
Exit

Func _Main_1()
	Local $aChecked, $aNormalCheck[2], $hGui, $nTV1, $nTV2, $nTV3, $hItem

	$hGui = GUICreate('Treeview - Alle Checkbox als Radio', 885, 430)
	$nTV1 = GUICtrlCreateTreeView(15, 15, 275, 370, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
	GUICtrlCreateLabel('In Root und Childs von SubItem_1_2 normal, andere SubLevel als Radio', 15, 395, 275, 24)
	$nTV2 = GUICtrlCreateTreeView(305, 15, 275, 370, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
	GUICtrlCreateLabel('Checkboxen im Root und SubLeveln als Radio, je Level nur eine Checkbox aktivierbar', 305, 395, 275, 24)
	$nTV3 = GUICtrlCreateTreeView(595, 15, 275, 370, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
	GUICtrlCreateLabel('Checkboxen im ges. Treeview als eine Radio-Group, nur eine einzige Checkbox aktivierbar', 595, 395, 275, 24)

	_AddItem($nTV1, 3, 1)
	_AddItem($nTV2)
	_AddItem($nTV3)

	$hItem = _GUICtrlTreeView_ExpandOneLevel($nTV1)                            ; == erstes Root-Item ein Level ausklappen
	; == 2.tes Child von erstem Root-Item und dessen 1.tes Child ein Level ausklappen
	_GUICtrlTreeView_Expand($nTV1, _GUICtrlTreeView_GetItemByIndex($nTV1, _GUICtrlTreeView_ExpandOneLevel($nTV1, _GUICtrlTreeView_GetItemByIndex($nTV1, $hItem, 1)), 0))
	For $i = 1 To 2                                                            ; == restliche Root-Item ein Level ausklappen
		$hItem = _GUICtrlTreeView_GetNextSibling($nTV1, $hItem)
		_GUICtrlTreeView_ExpandOneLevel($nTV1, $hItem)
	Next

	; == alle Item der anderen Treeview ausklappen
	_GUICtrlTreeView_Expand($nTV2)
	_GUICtrlTreeView_Expand($nTV3)

	GUISetState()

	While True
		Switch GUIGetMsg()
			Case -3
				ExitLoop
			Case $GUI_EVENT_PRIMARYUP
				$aNormalCheck[0] = _GUICtrlTreeView_GetFirstItem($nTV1)        ; == Root
				$aNormalCheck[1] = _GUICtrlTreeView_GetItemByIndex($nTV1, _GUICtrlTreeView_GetItemByIndex($nTV1, $aNormalCheck[0], 1), 0)  ; == unterhalb SubItem_1_2
				_GUICtrlTreeView_CheckBoxAsRadioInLevel($nTV1, $aNormalCheck)  ; == Root u. Childs von SubItem_1_2 Mehrfachauswahl, andere Sublevel als Radio
				_GUICtrlTreeView_CheckBoxAsRadioInLevel($nTV2)                 ; == alle Siblings eines Parent im selben Level als Radio-Gruppe
				_GUICtrlTreeView_CheckBoxAsRadio($nTV3)                        ; == alle Item als eine Radio-Gruppe
		EndSwitch
	WEnd

	GUIDelete($hGui)
EndFunc


Func _Main_2()
	Local $aChecked, $hGui, $nTV1, $bt_GetChecked

	$hGui = GUICreate('Checkbox im Selektions-Level', 310, 470)
	GUICtrlCreateLabel('Item mit aktiv. Checkbox im Selektions-Level ermitteln', 15, 15, 275)
	$nTV1 = GUICtrlCreateTreeView(15, 35, 275, 370, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
	$bt_GetChecked = GUICtrlCreateButton('Get Checked Item', 15, 415, 100, 22)
	GUICtrlCreateLabel('An Pos[0] im Rückgabe-Array ist das selektierte Item', 15, 445, 275)

	_AddItem($nTV1, 5, 0, True)
	_GUICtrlTreeView_Expand($nTV1)

	GUISetState()

	While True
		Switch GUIGetMsg()
			Case -3
				ExitLoop
			Case $bt_GetChecked
				$aChecked = _GUICtrlTreeView_GetCheckedInSelectionLevel($nTV1, True)
				_ArrayDisplay($aChecked)
		EndSwitch
	WEnd

	GUIDelete($hGui)
EndFunc


Func _AddItem($_hWnd, $_iLvl=5, $_fSub=0, $_fCheck=False)
	If Not IsHWnd($_hWnd) Then $_hWnd = GUICtrlGetHandle($_hWnd)
	Local $hItem, $hSubItem, $hTmp, $hTmpSub
	For $i = 1 To $_iLvl
		$hItem = _GUICtrlTreeView_Add($_hWnd, $_hWnd, 'Item_' & $i)
		If $_fCheck Then _GUICtrlTreeView_SetChecked($_hWnd, $hItem, Random(0,1,1))
		For $j = 1 To 3
			$hSubItem = _GUICtrlTreeView_AddChild($_hWnd, $hItem, 'SubItem_' & $i & '_' & $j)
			If $_fCheck Then _GUICtrlTreeView_SetChecked($_hWnd, $hSubItem, Random(0,1,1))
			If $_fSub Then
				For $n = 1 To 3
					$hTmp = _GUICtrlTreeView_AddChild($_hWnd, $hSubItem, 'SubItem_' & $i & '_' & $j & '_' & $n)
					If $_fCheck Then _GUICtrlTreeView_SetChecked($_hWnd, $hTmp, Random(0,1,1))
					For $m = 1 To 2
						$hTmpSub = _GUICtrlTreeView_AddChild($_hWnd, $hTmp, 'SubItem_' & $i & '_' & $j & '_' & $n & '_' & $m)
						If $_fCheck Then _GUICtrlTreeView_SetChecked($_hWnd, $hTmpSub, Random(0,1,1))
					Next
				Next
			EndIf
		Next
	Next
EndFunc
