﻿#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include 'GuiCtrlStars.au3'

Global Const $iAppliedDPI = RegRead('HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics', 'AppliedDPI')
Global Const $sInifile = @ScriptDir & '\GuiCtrlStars_Example.ini'

Global $aDataBase = IniReadSection($sInifile, 'Filme') ; die Filme und Bewertungen aus der Inidatei lesen
If @error Then ; falls die Inidatei noch nicht existiert, wird hier ein Beispiel-Array erstellt
	Global $aDataBase[][2] = [[30, 0], _
			['Pulp Fiction', 0], ['Apocalypse Now', 0], ['Der Herr der Ringe – Trilogie', 0], ['Psycho', 0], ['Vom Winde verweht', 0], _
			['Casablanca', 0], ['2001 Odyssee im Weltraum', 0], ['E.T. – Der Außerirdische', 0], ['Fluch der Karibik', 0], ['Das Schweigen der Lämmer', 0], _
			['Der Club der toten Dichter', 0], ['Ben Hur', 0], ['Das Leben des Brian', 0], ['Gladiator', 0], ['Spiel mir das Lied vom Tod', 0], _
			['Jagd auf Roter Oktober', 0], ['Titanic (1997)', 0], ['Die Feuerzangenbowle', 0], ['Heat', 0], ['Das Boot', 0], _
			['Der König der Löwen', 0], ['Forrest Gump', 0], ['The Day After Tomorrow', 0], ['Jenseits von Afrika', 0], ['Der Pate – Trilogie', 0], _
			['Star Wars I–VI', 0], ['The Big Lebowski', 0], ['Django', 0], ['Fantomas', 0], ['Die Simpsons - Der Film', 0]]
EndIf

Global $iPage = 1, $iMaxPage = $aDataBase[0][0] / 10

; das Beispiel-Fenster erstellen
Global $hGui = GUICreate('Film-Bewertung (Beispiel-Script)', 640, 540)
GUISetBkColor(0xFFFFFF)
GUISetFont(18 / $iAppliedDPI * 96)

; hier werden die Label und Sterne fuer eine Seite erstellt (je 10 Stueck)
Global $aidLabel[10], $aidStars[10]
For $i = 0 To UBound($aidLabel) - 1
	$aidLabel[$i] = GUICtrlCreateLabel('', 30, 20 + $i * 45, 400, 28)
	$aidStars[$i] = _GuiCtrlStars_Create(460, 20 + $i * 45, 24) ; Parameter: Left, Top, Height (die Breite wird berechnet: 5 * Hoehe + 4 * 5 Pixel Zwischenraum)
	; GUICtrlSetTip funktioniert auch mit dem Control-Element aus der UDF, weil dort intern ein Label-Control (GUICtrlCreateLabel) verwendet wird.
	GUICtrlSetTip(-1, 'Die Bewertung kann mit der linken Maustaste geändert werden.' & @CRLF & 'Mit der rechten Maustaste wird die Bewertung auf Null gesetzt.')
Next

; die Navigations-Buttons und die Seitenanzeige
Global $idPrev = GUICtrlCreateButton('Seite zurück', 30, 490, 150, 30)
GUICtrlSetFont(-1, 14 / $iAppliedDPI * 96)
GUICtrlSetState(-1, $GUI_DISABLE)
Global $idPage = GUICtrlCreateLabel(StringFormat('Seite %i von %i', $iPage, $iMaxPage), 200, 490, 240, 30, $SS_CENTER)
GUICtrlSetFont(-1, 16 / $iAppliedDPI * 96, 600, 0, 'Verdana')
Global $idNext = GUICtrlCreateButton('Seite vor', 460, 490, 150, 30)
GUICtrlSetFont(-1, 14 / $iAppliedDPI * 96)

_Example_ShowPage($iPage) ; die erste Seite mit Daten aus dem Array fuellen

GUISetState(@SW_SHOW, $hGui) ; das Fenster anzeigen

While True
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE ; wenn das Fenster geschlossen wird
			_Example_ChangeDatabase($iPage) ; die aktuelle Bewertung in die Datenbank eintragen
			IniWriteSection($sInifile, 'Filme', $aDataBase) ; und in der Inidatei speichern
			Exit
		Case $idPrev ; wenn auf "Seite zurueck" geklickt wurde
			_Example_ChangeDatabase($iPage) ; die aktuelle Bewertung in die Datenbank eintragen
			$iPage -= 1 ; eine Seite zurueck
			_Example_ShowPage($iPage) ; die Anzeige mit den Daten der vorherigen Seite fuellen
			If $iPage = 1 Then GUICtrlSetState($idPrev, $GUI_DISABLE) ; wenn die erste Seite erreicht wurde, dann den Zurueck-Button deaktivieren
			If BitAND(GUICtrlGetState($idNext), $GUI_DISABLE) Then GUICtrlSetState($idNext, $GUI_ENABLE) ; den Vor-Button aktivieren
		Case $idNext ; wenn auf "Seite vor" geklickt wurde
			_Example_ChangeDatabase($iPage) ; die aktuelle Bewertung in die Datenbank eintragen
			$iPage += 1 ; eine Seite vor
			_Example_ShowPage($iPage) ; die Anzeige mit den Daten der naechsten Seite fuellen
			If $iPage = $iMaxPage Then GUICtrlSetState($idNext, $GUI_DISABLE)
			If BitAND(GUICtrlGetState($idPrev), $GUI_DISABLE) Then GUICtrlSetState($idPrev, $GUI_ENABLE) ; den Zurueck-Button aktivieren
	EndSwitch
WEnd

Func _Example_ShowPage($iPage) ; diese Funktion fuellt das Anzeige-Fenster mit den Daten aus dem Array (je nach uebergebener Seite)
	GUICtrlSetData($idPage, StringFormat('Seite %i von %i', $iPage, $iMaxPage))
	$iPage -= 1
	For $i = 0 To UBound($aidLabel) - 1
		GUICtrlSetData($aidLabel[$i], $aDataBase[1 + $iPage * 10 + $i][0])
		GUICtrlSetData($aidStars[$i], $aDataBase[1 + $iPage * 10 + $i][1])
	Next
EndFunc   ;==>_Example_ShowPage

Func _Example_ChangeDatabase($iPage) ; diese Funktion liest die Anzahl der Sterne aus den Control-Elementen und speichert sie im Array
	$iPage -= 1
	For $i = 0 To UBound($aidLabel) - 1
		$aDataBase[1 + $iPage * 10 + $i][1] = GUICtrlRead($aidStars[$i])
	Next
EndFunc   ;==>_Example_ChangeDatabase
