; ----------------------------------------------------------------------------
;
; Script:			Tristate TreeView
; Version:			0.2
; AutoIt Version:	3.1.1.128 Beta min.needed!
; Author:			Holger Kotsch
; 
; Script Function:
;	Demonstrates a tristate treeview control -> just more like a fifthstate treeview ;)
;
;	5 item checkbox! states are usable:
;	(can only used with TreeView with TVS_CHECKBOXES-style)
;		- $GUI_CHECKED
;		- $GUI_UNCHECKED
;		- $GUI_INDETERMINATE
;		- $GUI_DISABLE + $GUI_CHECKED
;		- $GUI_DISABLE + $GUI_UNCHECKED
;
; ----------------------------------------------------------------------------

#include <GUIConstants.au3>
#include "TristateTreeViewLib.au3"
#include <GuiTreeView.au3>
Opt("GUIOnEventMode", 1)
; You could also use a integrated bmw (with ResourceHacker)
; Please see TristateTreeViewLib.au3 in line 257 (LoadStateImage)
; !!! You must not compiled it full with UPX, just use after compiling: upx.exe --best --compress-resources=0 xyz.exe !!!
; If you choose another reource number then 170 you have to change the LoadStateImage() function
;
; Userfunction My-WM_Notify() is registered in TristateTreeViewLib.au3 !
;
; You can get other check bitmaps also together with freeware install programs like i.e. NSIS
; it must have 5 image states in it:
; 1.empty, 2.unchecked, 3.checked, 4.disabled and unchecked, 5.disabled and checked

Global $sStateIconFile = @ScriptDir & "\simple.bmp"
;~ Global $sStateIconFile = @ScriptDir & "\modern.bmp"

$gui = GUICreate("Treeview - Install Script", 400, 400, -1, -1, Default, $WS_EX_TOPMOST)
GUISetOnEvent($GUI_EVENT_CLOSE, "guiClose")
GUISetBkColor(0xFFD700, $gui)
GUISetIcon(@WindowsDir & "\system32\shell32.dll", 205)
$nTV	= GUICtrlCreateTreeView(10, 10, 380, 360, BitOr($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
LoadStateImage($nTV, $sStateIconFile)
_GUICtrlTreeViewSetBkColor ($nTV, 0x191970)
_GUICtrlTreeViewSetTextColor($nTV, 0xFFFAF0)
_GUICtrlTreeViewSetLineColor ($nTV, 0xFFD700)
$nItem1 = GUICtrlCreateTreeViewItem("Messenger", $nTV)
GUICtrlSetColor(-1, 0xFF0000)
$nItem2 = GUICtrlCreateTreeViewItem("Internet", $nTV)
GUICtrlSetColor(-1, 0xFF00FF)
$nItem3 = GUICtrlCreateTreeViewItem("Tools", $nTV)
GUICtrlSetColor(-1, 0xFF8C00)
$nItem4 = GUICtrlCreateTreeViewItem("Mediaplayer", $nTV)
GUICtrlSetColor(-1, 0x00BFFF)
$nSubItem1 = GUICtrlCreateTreeViewItem("InterCafe Client", $nItem1)
$nSubItem2 = GUICtrlCreateTreeViewItem("ICQ 5.1", $nItem1)
$nSubItem3 = GUICtrlCreateTreeViewItem("AOL Messenger", $nItem1)
$nSubItem4 = GUICtrlCreateTreeViewItem("YAHOO Messenger", $nItem1)
$nSubItem5 = GUICtrlCreateTreeViewItem("WinLive Messenger", $nItem1)
$nSubItem6 = GUICtrlCreateTreeViewItem("Trillian 3.1", $nItem1)
$nSubItem7 = GUICtrlCreateTreeViewItem("Skype", $nItem1)
$nSubItem8 = GUICtrlCreateTreeViewItem("TeamSpeak", $nItem1)
$nSubItem9 = GUICtrlCreateTreeViewItem("TS Overlay", $nItem1)
$nSubItem10 = GUICtrlCreateTreeViewItem("Opera", $nItem2)
$nSubItem11 = GUICtrlCreateTreeViewItem("Mozilla Firefox 2", $nItem2)
$nSubItem12 = GUICtrlCreateTreeViewItem("NetFramework 2.0", $nItem2)
$nSubItem13 = GUICtrlCreateTreeViewItem("LimeWire 4.12.0", $nItem2)
$nSubItem14 = GUICtrlCreateTreeViewItem("Usenext", $nItem2)
$nSubItem15 = GUICtrlCreateTreeViewItem("Adobe Reader", $nItem3)
$nSubItem16 = GUICtrlCreateTreeViewItem("WinRar", $nItem3)
$nSubItem17 = GUICtrlCreateTreeViewItem("GoBack", $nItem3)
$nSubItem18 = GUICtrlCreateTreeViewItem("Ahead Nero 7.5", $nItem3)
$nSubItem19 = GUICtrlCreateTreeViewItem("OpenOffice 2.0", $nItem3)
$nSubItem20 = GUICtrlCreateTreeViewItem("VLC Player", $nItem4)
$nSubItem21 = GUICtrlCreateTreeViewItem("QuickTime Player", $nItem4)
$nSubItem22 = GUICtrlCreateTreeViewItem("RealPlayer", $nItem4)
$nSubItem23 = GUICtrlCreateTreeViewItem("Windows Media Player 11", $nItem4)
$nSubItem24 = GUICtrlCreateTreeViewItem("FlashPlayer", $nItem4)
$text1 = "Ausklappen"
$text2 = "Einklappen"
$Btn_expand = GUICtrlCreateButton($text1, 30, 375, 90, 20) 
GUICtrlSetOnEvent(-1, "_expand")
$text3 = "Alle wählen"
$text4 = "Wahl aufheben"
$Btn_all = GUICtrlCreateButton($text3, 280, 375, 90, 20)
GUICtrlSetOnEvent(-1, "_all")
$Btn_Info = GUICtrlCreateButton("Info zum Programm", 150, 375, 100, 20)
GUICtrlSetOnEvent(-1, "_info")

; GUI Info
$InfoGUI = GUICreate("", 333, 174, -1, -1, $WS_POPUP, $WS_EX_TOPMOST)
GUISetBkColor(0xFFD700, $InfoGUI)
$Edit1 = GUICtrlCreateLabel("", 5, 5, 320, 161, $ES_CENTER)
GUICtrlSetBkColor(-1, 0xFFD700)

GUISetState(@SW_SHOW, $gui)
$expand = 0
$switch = 0

While 1
	Sleep(100)
WEnd

Func _all()		
	If $switch = 0 Then
		SelectFull()
		$switch = 1
		GUICtrlSetData($Btn_all, $text4)
	Else
		ReSelect()
		$switch = 0
		GUICtrlSetData($Btn_all, $text3)
	EndIf
EndFunc				

Func _expand()
	If $expand = 0 Then
		Ausklappen()
		$expand = 1
		GUICtrlSetData($Btn_expand, $text2)
	Else
		Einklappen()
		$expand = 0
		GUICtrlSetData($Btn_expand, $text1)
	EndIf
EndFunc
		
Func _info()
	$h_item = GUICtrlSendMsg($nTV, $TVM_GETNEXTITEM, $TVGN_CARET, 0)
	$val = _GUICtrlTreeViewGetText($nTV, $h_item)
	Switch $val
		Case "InterCafe Client"
			GUICtrlSetData($Edit1, $val & @LF & "xhcjvkblnk oüwpqem+vc+" & @LF & " üewq+mvc +w	p,mc +wpoidülöe" & @LF & "klfrsdzfghkjl")
			GUISetState(@SW_SHOW, $InfoGUI)
			Sleep(4000)
			GUISetState(@SW_HIDE, $InfoGUI)
			GUICtrlSetData($Edit1, "")
		Case "ICQ 5.1"
			GUICtrlSetData($Edit1, $val & @LF & "5551111" & @LF & " üewq+mvc +w	p,mc +wpoidülöe" & @LF & "klfrsdzfghkjl")
			GUISetState(@SW_SHOW, $InfoGUI)
			Sleep(4000)
			GUISetState(@SW_HIDE, $InfoGUI)
			GUICtrlSetData($Edit1, "")
	EndSwitch
EndFunc			

Func guiClose()
	Exit
EndFunc

Func SelectFull()
	For $i = $nItem1 To $nItem4
		MyCtrlSetItemState($nTV, $i, $GUI_CHECKED)
	Next
	For $i = $nsubItem1 To $nsubItem24
		MyCtrlSetItemState($nTV, $i, $GUI_CHECKED)
	Next
EndFunc

Func ReSelect()
	For $i = $nItem1 To $nItem4
		MyCtrlSetItemState($nTV, $i, $GUI_UNCHECKED)
	Next
	For $i = $nsubItem1 To $nsubItem24
		MyCtrlSetItemState($nTV, $i, $GUI_UNCHECKED)
	Next
EndFunc

Func Ausklappen()
	_GUICtrlTreeViewExpand($nTV)
EndFunc

Func Einklappen()
	_GUICtrlTreeViewExpand($nTV, 0)
EndFunc