#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=artifacter.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include<GuiTreeView.au3>
#include<EditConstants.au3>
#include<GUIConstantsEx.au3>
#include<TreeViewConstants.au3>
#include<WindowsConstants.au3>

Global $sPath = 'M:\Agents\#CT Profis\Artifacts\'
Global $width = 800, $height = 600
Global $hGui = GUICreate('Artifacter', $width, $height, -1, 0)

Dim $input_infos[4]

GUICtrlSetFont(-1, 9, 600, 0, 'Verdana')
Global $bFiles = True
GUICtrlCreateGroup("Artifacts", 5, 20, 275, 505)
GUICtrlSetFont(-1, 8, 600, 0, "Verdana")
Global $hTreeView = GUICtrlCreateTreeView(10, 35, $width - 540, $height - 120, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES), $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
GUICtrlSetBkColor(-1, 0xF8F8F8)
$input_createfile = GUICtrlCreateInput("FILENAME", 15, 540, 150, 18)
$button_createfile = GUICtrlCreateButton("Create Artifact", 170, 540, 75, 18)
GUICtrlCreateGroup("Artifact Infos", 290, 20, 500, 80)
GUICtrlSetFont(-1, 8, 600, 0, "Verdana")
GUICtrlCreateLabel("Account#:", 300, 40)
$input_infos[0] = GUICtrlCreateInput("", 360, 38, 150, 18)
GUICtrlCreateLabel("Contact:", 540, 40)
$input_infos[1] = GUICtrlCreateInput("", 600, 38, 150, 18)
GUICtrlCreateLabel("Company:", 300, 70)
$input_infos[2] = GUICtrlCreateInput("", 360, 68, 150, 18)
GUICtrlCreateLabel("Phone:", 540, 70)
$input_infos[3] = GUICtrlCreateInput("", 600, 68, 150, 18)
GUICtrlCreateGroup("Notes", 290, 100, 500, 395)
GUICtrlSetFont(-1, 8, 600, 0, "Verdana")
$notizen = GUICtrlCreateEdit("", 300, 115, 480, 370, BitOR ($WS_VSCROLL, $ES_MULTILINE, $ES_READONLY))
;~ GUICtrlSetBkColor(-1, 0xF8F8F8)
GUICtrlCreateGroup("Updates", 290, 495, 400, 80)
GUICtrlSetFont(-1, 8, 600, 0, "Verdana")
$input_update = GUICtrlCreateEdit("", 300, 510, 380, 55, BitOR ($WS_VSCROLL, $ES_MULTILINE, $ES_AUTOVSCROLL, $ES_WANTRETURN))
$button_update = GUICtrlCreateButton("Update Artifact", 700, 530, 75, 20)
Global $hStatus1 = GUICtrlCreateLabel('', 0, $height - 16, $width / 2, 16, -1, $WS_EX_STATICEDGE)
Global $hStatus2 = GUICtrlCreateLabel('', $width / 2 + 1, $height - 16, $width / 2, 16, -1, $WS_EX_STATICEDGE)

$winuser = @UserName
If @Username = "751076" then
	$winuser = "Mirko Hässelbarth"
ElseIf 	$winuser = "748169" Then
	$winuser = "Patrick Berg"
ElseIf 	$winuser = "828487" Then
	$winuser = "Florian Plischkowsky"
ElseIf 	$winuser = "759732" Then
	$winuser = "Dennis Lorenz"
ElseIf 	$winuser = "828520" Then
	$winuser = "David Budach"
EndIf

GUISetState()

_TreeViewUpdate()

While True
    Switch GUIGetMsg()
        Case $GUI_EVENT_PRIMARYDOWN
            $aInfo = GUIGetCursorInfo($hGui)
            If $aInfo[4] = $hTreeView Then
                $oldGUIDataSeparatorChar = Opt('GUIDataSeparatorChar', '\')
                GUICtrlSetData($hStatus1, ' ' & StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'))
				$readini = FileRead(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'))
				GUICtrlSetData($notizen,$readini)
				$read_info1 = FileReadLine(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'),1)
				GUICtrlSetData($input_infos[0],$read_info1)
				$read_info2 = FileReadLine(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'),2)
				GUICtrlSetData($input_infos[1],$read_info2)
				$read_info3 = FileReadLine(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'),3)
				GUICtrlSetData($input_infos[2],$read_info3)
				$read_info4 = FileReadLine(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'),4)
				GUICtrlSetData($input_infos[3],$read_info4)
                Opt('GUIDataSeparatorChar', $oldGUIDataSeparatorChar)
                If BitAND(_GUICtrlTreeView_HitTest($hTreeView, $aInfo[0] - 11, $aInfo[1] - 41), 64) Then
                    $checked = _GUICtrlTreeView_GetChecked($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView))
                    _GUICtrlTreeView_SetBold($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView), $checked)
                    $hItem = _GUICtrlTreeView_GetFirstChild($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView))
                    If $hItem Then _MarkChildItems($hTreeView, $hItem, $checked)
				EndIf
            EndIf
		Case $button_update
            $oldGUIDataSeparatorChar = Opt('GUIDataSeparatorChar', '\')
			$read_update = GUICtrlRead($input_update)
			FileWrite(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'), @CRLF & @MDAY&"."&@MON&" "&@YEAR&", "&@HOUR&":"&@MIN&" by " & $winuser&":" & @CRLF & $read_update & @CRLF & "--------------------------------------------------------------------------------------------------------------------------------------------------------")
			$readini = FileRead(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'))
			GUICtrlSetData($notizen,$readini)
			GUICtrlSetData($input_update,"")
		Case $button_createfile
			_checkInputs()
		Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _checkInputs()
	Local $test = 0
    for $i = 0 to UBound($input_infos)-1
            if GUICtrlRead($input_infos[$i]) = "" then
                $test = 1
                ExitLoop
            EndIf
	next
		If $test = 1 then
			MsgBox(0,"Achtung!", 'Bitte alle Felder unter "Artifact Infos" ausfüllen.')
		Else
			$oldGUIDataSeparatorChar = Opt('GUIDataSeparatorChar', '\')
			$read_createfile = GUICtrlRead($input_createfile)
			$read_input_infos1 = GUICtrlRead($input_infos[0])
			$read_input_infos2 = GUICtrlRead($input_infos[1])
			$read_input_infos3 = GUICtrlRead($input_infos[2])
			$read_input_infos4 = GUICtrlRead($input_infos[3])
			FileWrite($sPath & $read_createfile & ".txt", $read_input_infos1 & @CRLF & $read_input_infos2 & @CRLF & $read_input_infos3 & @CRLF & $read_input_infos4 & @CRLF & "Created " &@MDAY&"."&@MON&" "&@YEAR&", "&@HOUR&":"&@MIN&" by " & $winuser & @CRLF)
			_TreeViewUpdate()
			GUICtrlSetData($input_infos[0],"")
			GUICtrlSetData($input_infos[1],"")
			GUICtrlSetData($input_infos[2],"")
			GUICtrlSetData($input_infos[3],"")
			MsgBox(0,"", 'Artifact created')
		EndIf
	Return
EndFunc

Func _MarkChildItems(ByRef $hTreeView, $hItem, $checked)
    Do
        $hNewItem = _GUICtrlTreeView_GetFirstChild($hTreeView, $hItem)
        If $hNewItem Then _MarkChildItems($hTreeView, $hNewItem, $checked)
        _GUICtrlTreeView_SetChecked($hTreeView, $hItem, $checked)
        _GUICtrlTreeView_SetBold($hTreeView, $hItem, $checked)
        $hItem = _GUICtrlTreeView_GetNextChild($hTreeView, $hItem)
    Until $hItem = 0
EndFunc   ;==>_MarkChildItems

Func _TreeViewUpdate()
    GUICtrlSetData($hStatus1, ' Bitte warten! Verzeichnis wird eingelesen...')
    GUICtrlSetData($hStatus2, '')
    $Timer = TimerInit()
    Local $aCount = _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles)
    If Not @error Then
        $msg = ' Benötigte Zeit: ' & Round(TimerDiff($Timer) / 1000, 3) & ' sek.'
        $msg &= '  |   ' & $aCount[1] & ' Datei(en) und ' & $aCount[0] & ' Verzeichniss(e)'
        GUICtrlSetData($hStatus1, ' Fertig.')
        GUICtrlSetData($hStatus2, $msg)
    EndIf
EndFunc   ;==>_TreeViewUpdate


;===============================================================================
; Function Name:   _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles)
; Description::    erstellt ein TreeView mit Verzeichnissen (+Dateien)
; Parameter(s):    $hTreeView = ControlID/Handle des TreeViews
;                  $sPath     = Verzeichnispfad, der dargestellt werden soll
;                  $bFiles    = True = auch Dateien anzeigen, False = nur Verzeichnisse
; Requirement(s):  #include<GuiTreeView.au3>
; Return Value(s): Array mit Anzahl der Verzeichnisse=[0] und Dateien=[1]
;                  0 und @error = 1, wenn der Pfad nicht existiert bzw. kein Verzeichnis ist
;                  0 und @error = 2, wenn das FileSystemObject nicht erstellt werden konnte
; Author(s):       Oscar (www.autoit.de)
;===============================================================================
Func _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles = False)
    Local $hFileItem, $FolderColor = 0x0000FF, $Folder, $aCount[2] = [0, 0]
    If Not StringInStr(FileGetAttrib($sPath), 'D') Then Return SetError(1, 0, 0)
    $sPath = FileGetLongName($sPath)
    Local $oFSO = ObjCreate('Scripting.FileSystemObject')
    If @error Then Return SetError(2, 0, 0)
    _GUICtrlTreeView_BeginUpdate($hTreeView)
    _GUICtrlTreeView_DeleteAll(GUICtrlGetHandle($hTreeView))
    Local $hTreeViewItem = GUICtrlCreateTreeViewItem($sPath, $hTreeView)
    GUICtrlSetColor(-1, $FolderColor)
    _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 111)
    $Folder = $oFSO.GetFolder($sPath)
    _CreateDirectoryRecursive($hTreeView, $Folder, $hTreeViewItem, $bFiles, $aCount)
    If $bFiles Then
        For $Files In $Folder.Files
            $hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hTreeViewItem)
            $aCount[1] += 1
        Next
    EndIf
    _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 3, 2)
    _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 110, 4)
    _GUICtrlTreeView_EndUpdate($hTreeView)
    GUICtrlSetState($hTreeViewItem, $GUI_EXPAND)
    $oFSO = ''
    Return $aCount
EndFunc   ;==>_GUICtrlTreeView_CreateDirectory

Func _CreateDirectoryRecursive($hTreeView, $Folder, $ItemOld, $bFiles, ByRef $aCount)
    Local $hFolderItem, $hFileItem, $FolderColor = 0x0000FF
    For $Subfolder In $Folder.SubFolders
        $hFolderItem = GUICtrlCreateTreeViewItem($Subfolder.Name, $ItemOld)
        GUICtrlSetColor(-1, $FolderColor)
        _GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 3, 2)
        _GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 110, 4)
        $aCount[0] += 1
        _CreateDirectoryRecursive($hTreeView, $Subfolder, $hFolderItem, $bFiles, $aCount)
        If $bFiles Then
            For $Files In $Subfolder.Files
                $hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hFolderItem)
                $aCount[1] += 1
            Next
        EndIf
    Next
EndFunc   ;==>_CreateDirectoryRecursive