; Version 1.0.0.1. von Musashi - 16.08.2019 10:20

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx = N
#AutoIt3Wrapper_Res_Description = shakoon - Listview
#AutoIt3Wrapper_Res_Fileversion = 1.0.0.1
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 6 -w 7
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <File.au3>
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <ButtonConstants.au3>
#include <WinAPIShPath.au3>
#include <GuiListView.au3>
#include <ListviewConstants.au3>
#include <StringConstants.au3>
#include <Array.au3>  ; *** nur zur Anzeige

Global $sFilename     = @ScriptDir & '\ListData.txt' , $hListView
Global Const $fAppDPI = RegRead('HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics', 'AppliedDPI') ? Round(120 / RegRead('HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics', 'AppliedDPI'), 2) : 1
Global $iMaxRow       = 9 ; Anzahl der Spalten
Global $sHeadline     = " Pos | ArtikelNr | Beschreibung | Menge |  Projekt  | Lieferdatum | Top-PA-Status | PA-Nr.| PA-Beschreibung"
Global $aSelection [0]

; Datei öffnen :
Global $hFileOpen = FileOpen($sFilename, $FO_READ)
If $hFileOpen = -1 Then
	MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONERROR), "Fehler : ", "Datei " & $sFilename & " nicht gefunden" & @CRLF)
	Exit
EndIf

; Zeilen mit dem gewünschten Pattern in ein Array auslesen
Global $sPattern  = '\d+;AN\d+;\d+\.[^\n]+'      ; alle Einträge
;~ Global $sPattern  = '\d+;AN\d+;\d+\.99\.[^\n]+'   ; Einträge mit xx.99.xx.xx

Global $sFileRead = FileRead($hFileOpen)
Global $aLines    = StringRegExp($sFileRead, $sPattern, $STR_REGEXPARRAYGLOBALMATCH)
If IsArray($aLines) Then
    Global $aDetail[UBound($aLines)][$iMaxRow]
    Global $aSplit
    For $i = 0 To UBound($aLines) -1
        $aSplit = StringSplit($aLines[$i], ';', $STR_NOCOUNT)
        For $j = 0 To UBound($aSplit) -1
            $aDetail[$i][$j] = $aSplit[$j]
        Next
    Next
EndIf

; GUI anzeigen :
_MainGUI()

FileClose($hFileOpen)

Func _MainGUI()
	Local $iGuiMsg, $hGUI, $idBtnFinish, $idBtnWriteSelection
	Local $hFont = _WinAPI_CreateFont(18 * $fAppDPI, 8 * $fAppDPI, 0, 0, $FW_NORMAL)
    $hGUI = GUICreate(" shakoon - Datenliste", 1260, 980)
	GUISetFont(12 * $fAppDPI, $FW_NORMAL, 1, "Arial")  ; Standardfont setzen

	$hListView = _GUICtrlListView_Create($hGUI, $sHeadline, 20 , 100, 1200, 800)
;~ 	_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
	_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))


	_WinAPI_SetFont($hListView, $hFont, True)
	For $i = 0 To ($iMaxRow - 1)
		_GUICtrlListView_SetColumnWidth($hListView, $i, $LVSCW_AUTOSIZE_USEHEADER)
	Next

	_GUICtrlListView_SetItemCount($hListView, 4500)
	; ListViewItems befüllen, falls Daten vorhanden sind :
	_GUICtrlListView_BeginUpdate($hListView)
	For $i = 0 To UBound($aLines) - 1
		_GUICtrlListView_AddItem($hListView, $aDetail[$i][0])
		For $j = 1 To UBound($aSplit) - 1
			_GUICtrlListView_AddSubItem($hListView, $i, $aDetail[$i][$j], $j)
		Next
	Next
	_GUICtrlListView_EndUpdate($hListView)

	$idBtnFinish         = GUICtrlCreateButton("&Beenden", 20, 930, 200, 30, $BS_DEFPUSHBUTTON)
	$idBtnWriteSelection = GUICtrlCreateButton("&Selektion anzeigen", 240, 930, 350, 30)


	GUISetState(@SW_SHOW, $hGUI)

	While 1
		$iGuiMsg = GUIGetMsg()
		Select
			Case $iGuiMsg = $GUI_EVENT_CLOSE
				ExitLoop


			Case $iGuiMsg = $idBtnFinish
				ExitLoop

			Case $iGuiMsg = $idBtnWriteSelection
				Redim $aSelection [0]
				For $i = 0 To _GUICtrlListView_GetItemCount($hListView)-1
					If _GUICtrlListView_GetItemChecked($hListView, $i) Then
						_ArrayAdd($aSelection, _GUICtrlListView_GetItemTextString($hListView, $i), Default, Default, Default, $ARRAYFILL_FORCE_SINGLEITEM)
					EndIf
				Next
				_ArrayDisplay($aSelection, 'Selektierte Zeile(n) : ')

		EndSelect
	WEnd
	_WinAPI_DeleteObject($hFont)
    GUIDelete($hGUI)
EndFunc   ;_MainGUI