#include <Bass.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <ProgressConstants.au3>
#include <SliderConstants.au3>
#include <ListViewConstants.au3>
#include <BassConstants.au3>
#include <StructureConstants.au3>
#include <_GetFilesFolder_Rekursiv.au3>
#include <JSound.au3>
#NoTrayIcon

#region Wrapper
#AutoIt3Wrapper_icon=Pics\Sonstiges\INRico.ico
#AutoIt3Wrapper_outfile=Kompiliert\INR-Multimediacenter.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Comment=INR-Multimediacenter (C) JuraX 2010 (www.jurax.square7.de)
#AutoIt3Wrapper_Res_Description=INR-Multimediacenter
#AutoIt3Wrapper_Res_LegalCopyright=JuraX
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Add_Constants=n
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
#endregion Wrapper

#region Globals

Opt("GUICloseOnESC", 0)
Opt("TrayMenuMode", 1)
Opt("MouseCoordMode", 0)


Global Const $AC_SRC_ALPHA = 1
Global Const $APPpfad = @AppDataCommonDir & "\INRadio\"
Global Const $INR_INI = $APPpfad & "\INRadio.ini"
Global Const $WM_DROPFILES = 0x0233
Global $Playingstate = -1
Global $titelnummer = 0
Global $oWMP = ObjCreate("WMPLayer.ocx")
Global $hMusic
Global $Arraytoplay[1]
Global $fftstruct = DllStructCreate("float[128]")
Global $gaDropFiles[1]
Global $aItem[2]
Global $Hover

$ShowTray = TrayCreateItem("Anzeigen")
$HideTray = TrayCreateItem("Verstecken")
$Killtray = TrayCreateItem("Schließen")

#region Bass-Startup
_BASS_STARTUP(@ScriptDir & "\sys\BASS.dll")
;_Bass_Tags_Startup(@ScriptDir & "\sys\BassTags.dll")
_BASS_Init(0, -1, 44100, 0, "")
If @error Then
	MsgBox(0, "Error", "Konnte Sound nicht Initialisieren!")
	Exit
EndIf
#endregion Bass-Startup

#region FirstStart
$FS = IniRead($INR_INI, "BOOT", "Firtsstart", "")
Local $FS
If $FS = "" Then
	ShellExecute("http://creativecommons.org/licenses/by-nc-nd/3.0/de/")
	$iMsgBoxAnswer = MsgBox(262452, "Lizenz", "Mit dem Starten dieses Programmes aktzeptieren sie die Aktuellen Lizenzbedingungen" & @CRLF & @CRLF & "INR jetzt starten?" & @CRLF)
	Select
		Case $iMsgBoxAnswer = 6 ;Yes
		Case $iMsgBoxAnswer = 7 ;No
			FileDelete(@ScriptFullPath)
			Exit
	EndSelect
	DirCreate(@AppDataCommonDir & "\INRadio\")
	DirCreate($APPpfad & "\JSoundextract")
	ShellExecute(@ScriptDir & "\module\Settings.exe")
	IniWrite($INR_INI, "BOOT", "Firtsstart", "False")
EndIf
#endregion FirstStart

_GDIPlus_Startup()
$hNewsImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\INR.png")
$hMusikImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\INRMusik.png")
$hRadioImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\INRRadio.png")
$hCDPlayerImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\INRCDPlayer.png")
$hOptionenImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\INROptionen.png")
$hCreditsImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\INRCredits.png")
$hForwHoverImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\forwardbuttonhover.png")
$hForwNoHoverImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\forwardbuttonnohover.png")
$hPlayHoverImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\Playbuttonhover.png")
$hPlayNoHoverImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\Playbuttonnohover.png")
$hBackHoverImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\backbuttonhover.png")
$hBackNoHoverImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\backbuttonnohover.png")
$hStopHoverImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\Stopbuttonhover.png")
$hStopNoHoverImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\Stopbuttonnohover.png")

$hAktullesImage = $hNewsImage

$width = _GDIPlus_ImageGetWidth($hMusikImage)
$height = _GDIPlus_ImageGetHeight($hMusikImage)


GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES_FUNC')

#endregion Globals
#region GUI
$GUI = GUICreate("INR", $width, $height, -1, -1, BitOR($WS_POPUP, $WS_SYSMENU), $WS_EX_LAYERED)

SetBitmap($GUI, $hAktullesImage, 0)
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
GUISetState()

$WinPos = WinGetPos($GUI)

$ChildGUI = GUICreate("", $width, $height, 0, 0, $WS_POPUP, BitOR($WS_EX_MDICHILD, $WS_EX_LAYERED), $GUI)
$hGraphicButtons = _GDIPlus_GraphicsCreateFromHWND($ChildGUI)
GUICtrlCreatePic(@ScriptDir & "\Pics\grey.gif", 0, 0, $width, $height)
GUICtrlSetState(-1, $GUI_DISABLE)
$topplay = GUICtrlCreateLabel("", 110, 53, 41, 54)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$topvor = GUICtrlCreateLabel("", 152, 53, 37, 27)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$topback = GUICtrlCreateLabel("", 152, 81, 37, 27)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

$Button_ = GUICtrlCreateButton("_", 523, 36, 20, 19)
$ButtonX = GUICtrlCreateButton("X", 543, 36, 20, 19)

$MusikTabLabel = GUICtrlCreateLabel("Musik", 49, 126, 128, 17, $SS_CENTER)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

$RadioTabLabel = GUICtrlCreateLabel("Radio", 49, 126 + 25, 128, 17, $SS_CENTER)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

$CDPlayerTabLabel = GUICtrlCreateLabel("CD-Player", 49, 126 + 50, 128, 17, $SS_CENTER)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

$OptionenTabLabel = GUICtrlCreateLabel("Optionen", 49, 331, 128, 17, $SS_CENTER)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

$CreditsTabLabel = GUICtrlCreateLabel("Credits", 49, 331 + 25, 128, 17, $SS_CENTER)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

GUICtrlCreateTab(0, 0, 10, 10)
GUICtrlSetState(-1, $GUI_HIDE)

$NewsTab = GUICtrlCreateTabItem("News")
GUICtrlCreateLabel("Version 3.0" & @CRLF & "Wie ihr sicher gemerkt habt gibt es nun ein neues Design!" & @CRLF & "Dafür nochmal vielen dank an:" & @CRLF & "Tince, Ludwig und Ubuntu, für das Wunderbare Design !", 200, 60, 300, 500)

$MusikTab = GUICtrlCreateTabItem("Musik")
GUICtrlCreateLabel("", 199, 59, 372, 82)
GUICtrlSetBkColor(-1, 0x666666)
$Graphik = GUICtrlCreateLabel("", 200, 60, 370, 80)
GUICtrlSetBkColor(-1, 0xFFFFFF)

;==========================================Spektrum-Analysator====================================================
$visGraphics = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($Graphik))
$visBitmap = _GDIPlus_BitmapCreateFromGraphics(320, 80, $visGraphics)
$visBuffer = _GDIPlus_ImageGetGraphicsContext($visBitmap)
_GDIPlus_GraphicsClear($visBuffer)
$pen_size = Int(320 / 128)
$pen = _GDIPlus_PenCreate(0, $pen_size)
$hBrush = _GDIPlus_BrushCreateSolid( )
$eq = 1


$AktuellePositionSlider = GUICtrlCreateSlider(200, 145, 370, 20, $TBS_NOTICKS)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$SchonGespieltZeit = GUICtrlCreateLabel("0:00", 200, 165, 100, 20)
$GesamtOderBeiKlickNochVerbleibendeZeit = GUICtrlCreateLabel("3:40", 470, 165, 100, 20, $SS_RIGHT)
$PlaylistListView = GUICtrlCreateListView("Dateiname|Pfad", 200, 185, 350, 165, BitOR($LVS_NOCOLUMNHEADER, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
$PlaylistAddMP3 = GUICtrlCreateButton("+", 550, 185, 20, 20)
GUICtrlSetTip(-1, "MP3 zur Playlist hinzufügen")
$PlaylistAddJSound = GUICtrlCreateButton("+J", 550, 205, 20, 20)
GUICtrlSetTip(-1, "JSound zur Playlist hinzufügen")
$PlaylistDelFile = GUICtrlCreateButton("-", 550, 225, 20, 20)
GUICtrlSetTip(-1, "Datei aus Playlist löschen")
$PlaylistCreateFromFolder = GUICtrlCreateButton("Playlist aus Ordner einlesen", 200, 352, 150, 20)
$PlaylistSpeichern = GUICtrlCreateButton("Playlist speichern", 350, 352, 100, 20)
$PlaylistLaden = GUICtrlCreateButton("Playlist laden", 450, 352, 100, 20)

$RadioTab = GUICtrlCreateTabItem("Radio")

$SenderListView = GUICtrlCreateListView("Sender", 200, 60, 350, 310, BitOR($LVS_NOCOLUMNHEADER, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
GUICtrlSendMsg($SenderListView, $LVM_SETCOLUMNWIDTH, 0, 350 - 25)

GUICtrlCreateListViewItem("Antenne Bayern", $SenderListView)
GUICtrlCreateListViewItem("Rock Antenne", $SenderListView)
GUICtrlCreateListViewItem("Bayern 3", $SenderListView)
GUICtrlCreateListViewItem("TechnoBase.FM", $SenderListView)

$SenderAdd = GUICtrlCreateButton("+", 550, 60, 20, 20)
GUICtrlSetTip(-1, "Sender zur Liste hinzufügen")
$SenderDel = GUICtrlCreateButton("-", 550, 80, 20, 20)
GUICtrlSetTip(-1, "Sender aus Liste löschen")

$CDPlayerTab = GUICtrlCreateTabItem("CD-Player")
GUICtrlCreateButton("BLABLA CD-Player", 200, 60, 100, 20)

$OptionenTab = GUICtrlCreateTabItem("Optionen")
GUICtrlCreateButton("BLABLA Optionen", 200, 60, 100, 20)

$CreditsTab = GUICtrlCreateTabItem("Credits")
GUICtrlCreateLabel("Credits:", 224, 92, 114, 28)
GUICtrlSetFont(-1, 20, 400, 0, "Nasalization")
GUICtrlCreateLabel("JuraX 2010", 256, 132, 124, 22)
GUICtrlSetFont(-1, 15, 400, 0, "Nasalization")
GUICtrlCreateLabel("Alle Rechte Vorbehalten", 256, 164, 283, 22)
GUICtrlSetFont(-1, 15, 400, 0, "Nasalization")
$LizenzZeigen = GUICtrlCreateButton("Lizenz", 228, 212, 129, 41, $WS_GROUP)
GUICtrlSetFont(-1, 20, 400, 0, "Nasalization")

GUICtrlCreateTabItem("")

_WinAPI_SetLayeredWindowAttributes($ChildGUI, 0x999999, 0)

GUISetState()

For $i = 0 To 255 Step 30
	Sleep(5)
	SetBitmap($GUI, $hAktullesImage, $i)
	_WinAPI_SetLayeredWindowAttributes($ChildGUI, 0x999999, $i)
Next
$i = 255
SetBitmap($GUI, $hAktullesImage, $i)
_WinAPI_SetLayeredWindowAttributes($ChildGUI, 0x999999, $i)
#endregion GUI


While (True)
	_GUICtrlListView_SetItemSelected($PlaylistListView, 0)
	_GUICtrlListView_SetColumnWidth($PlaylistListView, 0, $LVSCW_AUTOSIZE)
	_GUICtrlListView_SetColumnWidth($PlaylistListView, 1, 0)
	If $Playingstate = 1 Then
		$song_length = _BASS_ChannelGetLength($hMusic, $BASS_POS_BYTE)
		$current = _BASS_ChannelGetPosition($hMusic, $BASS_POS_BYTE)
		$percent = Round(($current / $song_length) * 100, 0)
		GUICtrlSetData($AktuellePositionSlider, $percent)
		DISPLAY_VIS( )
		If $current = $song_length Then
			GUICtrlSetData($AktuellePositionSlider, 0)
			_BASS_ChannelPlay($hMusic, True)
		EndIf
	EndIf
	Switch GUIGetMsg($ChildGUI)
		Case $Button_
			WinSetState($GUI, "", @SW_MINIMIZE)
		Case $GUI_EVENT_CLOSE, $ButtonX
			ExitLoop
		Case $PlaylistAddMP3
			$MusikFileHinzufuegen = FileOpenDialog("Öffnen...", "", 'MP3-Dateien (*.mp3)')
			$dateiname = StringSplit($MusikFileHinzufuegen, "\")
			$dateinameOhneMP3 = StringSplit($dateiname[$dateiname[0]], ".")
			GUICtrlCreateListViewItem($dateinameOhneMP3[1] & "|" & $MusikFileHinzufuegen, $PlaylistListView)
		Case $PlaylistDelFile
			_GUICtrlListView_DeleteItemsSelected($PlaylistListView)
		Case $PlaylistAddJSound
			$filepath = FileOpenDialog("Öffnen...", "", 'JSound-Dateien (*.JSound)')
			$Filedestination = $APPpfad & "\JSoundextract"
			_JSound_GetFiles($filepath, $Filedestination, @ScriptDir & "\sys\JHelper.dll")
			$JSREK = _GetFilesFolder_Rekursiv($Filedestination & "\", "mp3", 0)
			For $i = 1 To $JSREK[0]
				$dateiname = StringSplit($JSREK[$i], "\")
				$dateinameOhneMP3 = StringSplit($dateiname[$dateiname[0]], ".")
				GUICtrlCreateListViewItem($dateiname[$dateiname[0]] & "|" & $JSREK[$i], $PlaylistListView)
			Next
		Case $LizenzZeigen
			ShellExecute("http://creativecommons.org/licenses/by-nc-nd/3.0/de/")
		Case $PlaylistCreateFromFolder
			$selectedbib = FileSelectFolder("Ordner Einlesen...", "")
			$returnputin = _GetFilesFolder_Rekursiv($selectedbib, "mp3", 0)
			For $i = 1 To $returnputin[0]
				$dateiname = StringSplit($returnputin[$i], "\")
				$dateinameOhneMP3 = StringSplit($dateiname[$dateiname[0]], ".")
				GUICtrlCreateListViewItem($dateiname[$dateiname[0]] & "|" & $returnputin[$i], $PlaylistListView)
			Next
		Case $topplay
			_Playfromtop()
		Case $topvor
			_Playnext()
		Case $topback
			_Playback()
	EndSwitch

	_CheckHover()
WEnd

For $i = 255 To 0 Step -30
	Sleep(5)
	SetBitmap($GUI, $hAktullesImage, $i)
	_WinAPI_SetLayeredWindowAttributes($ChildGUI, 0x999999, $i)
Next

_WinAPI_DeleteObject($hNewsImage)
_WinAPI_DeleteObject($hMusikImage)
_WinAPI_DeleteObject($hRadioImage)
_WinAPI_DeleteObject($hCDPlayerImage)
_WinAPI_DeleteObject($hOptionenImage)
_WinAPI_DeleteObject($hCreditsImage)
_GDIPlus_Shutdown()
$returnputin = _GetFilesFolder_Rekursiv($APPpfad & "\JSoundextract", "mp3", 0)
For $i = 1 To $returnputin[0]
	$dateinamedel = FileDelete($returnputin[$i])
Next
Exit

Func DISPLAY_VIS($eq = 1)
	_GDIPlus_GraphicsClear($visBuffer, 0x77FFFFFF)
	If $eq > 0 Then
		$levels = _BASS_ChannelGetLevel($hMusic)
		$LeftChannel = Round((_LoWord($levels) / 32768) * 80, 0)
		$RightChannel = Round((_HiWord($levels) / 32768) * 80, 0)

		_GDIPlus_BrushSetSolidColor($hBrush, _CalcColor($LeftChannel))
		_GDIPlus_GraphicsFillRect($visBuffer, 0, 80 - $LeftChannel, 20, $LeftChannel, $hBrush)

		_GDIPlus_BrushSetSolidColor($hBrush, _CalcColor($RightChannel))
		_GDIPlus_GraphicsFillRect($visBuffer, 25, 80 - $RightChannel, 20, $RightChannel, $hBrush)

		_BASS_CHANNELGETDATA($hMusic, DllStructGetPtr($fftstruct), $BASS_DATA_FFT256)
		For $i = 1 To 127 Step 1
			$FFT = Round(DllStructGetData($fftstruct, 1, $i + 1) * 700)
			_GDIPlus_PenSetColor($pen, _CalcColor($FFT))
			_GDIPlus_GraphicsDrawLine($visBuffer, 50 + $i * $pen_size, 80, 50 + $i * $pen_size, 80 - $FFT, $pen)
		Next
	EndIf
	_GDIPlus_GraphicsDrawImageRect($visGraphics, $visBitmap, 0, 0, 320, 80)
EndFunc   ;==>DISPLAY_VIS

Func _CalcColor($iPercent)
	$R = $iPercent * 3.5
	$G = 171
	$B = 255
	Return "0x77" & Hex($R, 2) & Hex($G, 2) & Hex($B, 2)
EndFunc

#region Funcs :2:
Func _CheckHover()
	$CurInf = GUIGetCursorInfo($ChildGUI)
	If @error Then Return

	If $Hover Then
		If $CurInf[2] Then
			Switch $Hover
				Case $MusikTabLabel
					If $hAktullesImage <> $hMusikImage Then
						$hAktullesImage = $hMusikImage
						GUICtrlSetState($MusikTab, $GUI_SHOW)
						SetBitmap($GUI, $hAktullesImage, 255)
					EndIf
				Case $RadioTabLabel
					If $hAktullesImage <> $hRadioImage Then
						$hAktullesImage = $hRadioImage
						GUICtrlSetState($RadioTab, $GUI_SHOW)
						SetBitmap($GUI, $hAktullesImage, 255)
					EndIf
				Case $CDPlayerTabLabel
					If $hAktullesImage <> $hCDPlayerImage Then
						$hAktullesImage = $hCDPlayerImage
						GUICtrlSetState($CDPlayerTab, $GUI_SHOW)
						SetBitmap($GUI, $hAktullesImage, 255)
					EndIf
				Case $OptionenTabLabel
					If $hAktullesImage <> $hOptionenImage Then
						$hAktullesImage = $hOptionenImage
						GUICtrlSetState($OptionenTab, $GUI_SHOW)
						SetBitmap($GUI, $hAktullesImage, 255)
					EndIf
				Case $CreditsTabLabel
					If $hAktullesImage <> $hCreditsImage Then
						$hAktullesImage = $hCreditsImage
						GUICtrlSetState($CreditsTab, $GUI_SHOW)
						SetBitmap($GUI, $hAktullesImage, 255)
					EndIf
			EndSwitch
		EndIf
	EndIf

	If $Hover = $CurInf[4] Then Return

	Switch $Hover
		Case $MusikTabLabel, $RadioTabLabel, $CDPlayerTabLabel, $OptionenTabLabel, $CreditsTabLabel
			GUICtrlSetColor($Hover, 0xFFFFFF)
		Case $topplay
			If ($Playingstate = 1) Or ($Playingstate = 2) Then _GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hStopNoHoverImage, 108, 53, 43, 55)
			If $Playingstate = -1 Then _GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hPlayNoHoverImage, 108, 53, 43, 55)
		Case $topvor
			_GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hForwNoHoverImage, 152, 53, 37, 27)
		Case $topback
			_GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hBackNoHoverImage, 152, 80, 37, 28)
	EndSwitch

	$Hover = $CurInf[4]
	Switch $Hover
		Case $MusikTabLabel, $RadioTabLabel, $CDPlayerTabLabel, $OptionenTabLabel, $CreditsTabLabel
			GUICtrlSetColor($Hover, 0xCCCCCC)
		Case $topplay
			If ($Playingstate = 1) Or ($Playingstate = 2) Then _GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hStopHoverImage, 108, 53, 43, 55)
			If $Playingstate = -1 Then _GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hPlayHoverImage, 108, 53, 43, 55)
		Case $topvor
			_GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hForwHoverImage, 152, 53, 37, 27)
		Case $topback
			_GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hBackHoverImage, 152, 80, 37, 28)
	EndSwitch
EndFunc   ;==>_CheckHover

Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
	If ($hWnd = $GUI) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION
EndFunc   ;==>WM_NCHITTEST

Func SetBitmap($hgui, $hImage, $iOpacity)
	Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend

	$hScrDC = _WinAPI_GetDC(0)
	$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
	$tSize = DllStructCreate($tagSIZE)
	$pSize = DllStructGetPtr($tSize)
	DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
	DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
	$tSource = DllStructCreate($tagPOINT)
	$pSource = DllStructGetPtr($tSource)
	$tBlend = DllStructCreate($tagBLENDFUNCTION)
	$pBlend = DllStructGetPtr($tBlend)
	DllStructSetData($tBlend, "Alpha", $iOpacity)
	DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
	_WinAPI_UpdateLayeredWindow($hgui, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
	_WinAPI_ReleaseDC(0, $hScrDC)
	_WinAPI_SelectObject($hMemDC, $hOld)
	_WinAPI_DeleteObject($hBitmap)
	_WinAPI_DeleteDC($hMemDC)
EndFunc   ;==>SetBitmap

Func WM_DROPFILES_FUNC($hWnd, $MSGID, $WPARAM, $LPARAM)
	Local $NSIZE, $PFILENAME
	Local $NAMT = DllCall("shell32.dll", "int", "DragQueryFileW", "hwnd", $WPARAM, "int", -1, "ptr", 0, "int", 255)
	For $i = 0 To $NAMT[0]
		$NSIZE = DllCall("shell32.dll", "int", "DragQueryFileW", "hwnd", $WPARAM, "int", $i, "ptr", 0, "int", 0)
		$NSIZE = $NSIZE[0] + 1
		$PFILENAME = DllStructCreate("wchar[" & $NSIZE & "]")
		DllCall("shell32.dll", "int", "DragQueryFileW", "hwnd", $WPARAM, "int", $i, "ptr", DllStructGetPtr($PFILENAME), "int", $NSIZE)
		$FILENAME = DllStructGetData($PFILENAME, 1)
		ConsoleWrite($FILENAME & @CRLF)
		ReDim $gaDropFiles[$i + 1]
		$gaDropFiles[$i] = DllStructGetData($PFILENAME, 1)
		$PFILENAME = 0
	Next
	For $i = 0 To UBound($gaDropFiles) - 2
		GUICtrlCreateListViewItem(StringRegExpReplace($gaDropFiles[$i], ".*\\(.*)\..*", "$1") & "|" & $gaDropFiles[$i], $PlaylistListView)
	Next
	_GUICtrlListView_SetColumnWidth($PlaylistListView, 0, $LVSCW_AUTOSIZE)
EndFunc   ;==>WM_DROPFILES_FUNC

Func WM_NOTIFY($hWnd, $MSGID, $WPARAM, $LPARAM)
	Local $TAGNMHDR, $EVENT, $HWNDFROM, $CODE
	$TAGNMHDR = DllStructCreate("int;int;int", $LPARAM)
	If @error Then Return 0
	$CODE = DllStructGetData($TAGNMHDR, 3)
	If $WPARAM = $PlaylistListView And $CODE = -3 And _GUICtrlListView_GetSelectedCount($PlaylistListView) > 0 Then
		For $i = 0 To _GUICtrlListView_GetItemCount($PlaylistListView)
			If _GUICtrlListView_GetItemSelected($PlaylistListView, $i) Then
				$aItem = _GUICtrlListView_GetItemTextArray($PlaylistListView, $i)
				_LEFTDBLCLICK($aItem[2], $i)
			EndIf
		Next
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _LEFTDBLCLICK($file, $num)
	$titelnummer = 0
	If $Playingstate = 1 Or 2 Then
		_BASS_CHANNELSTOP($hMusic)
	EndIf
	$Playingstate = -1

	$hMusic = _BASS_STREAMCREATEFILE(False, $file, 0, 0, 0)
	_BASS_CHANNELPLAY($hMusic, 0)
	_GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hStopNoHoverImage, 108, 53, 43, 55)
	$Playingstate = 1
	$titelnummer = $num
EndFunc   ;==>_LEFTDBLCLICK

Func _Playfromtop()
	If $Playingstate = 1 Or $Playingstate = 2 Then
		_BASS_CHANNELSTOP($hMusic)
		$Playingstate = -1
		_GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hPlayNoHoverImage, 108, 53, 43, 55)
		Return
	EndIf
	If _GUICtrlListView_GetItemCount($PlaylistListView) = 0 Then Return
	For $i = 0 To _GUICtrlListView_GetItemCount($PlaylistListView)
			If _GUICtrlListView_GetItemSelected($PlaylistListView, $i) Then
				_PlayMusic($i)
				Return
			EndIf
		Next
		_PlayMusic(0)
EndFunc


Func _PlayMusic($listviewline)
		$file = _GUICtrlListView_GetItemTextArray($PlaylistListView, $listviewline)
			$hMusic = _BASS_STREAMCREATEFILE(False, $file[2], 0, 0, 0)
				_BASS_CHANNELPLAY($hMusic, 0)
				_GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hStopNoHoverImage, 108, 53, 43, 55)
				$Playingstate = 1
				$titelnummer = $listviewline
EndFunc


Func _Playnext()
	Local $wasplaying = 0
	If $Playingstate = 1 Or $Playingstate = 2 Then
		_BASS_CHANNELSTOP($hMusic)
		$Playingstate = -1
		$wasplaying = 1
		_GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hPlayNoHoverImage, 108, 53, 43, 55)
		Sleep(500)
	EndIf
	If $titelnummer = _GUICtrlListView_GetItemCount($PlaylistListView)-1 Then $titelnummer = -1
	If _GUICtrlListView_GetItemCount($PlaylistListView) = 0 Then Return
	If $wasplaying = 1 Then _PlayMusic($titelnummer+1)
EndFunc

Func _Playback()
	Local $wasplaying = 0
	If $Playingstate = 1 Or $Playingstate = 2 Then
		_BASS_CHANNELSTOP($hMusic)
		$Playingstate = -1
		$wasplaying = 1
		_GDIPlus_GraphicsDrawImageRect($hGraphicButtons, $hPlayNoHoverImage, 108, 53, 43, 55)
		Sleep(500)
	EndIf
	If $titelnummer = 0 Then $titelnummer = _GUICtrlListView_GetItemCount($PlaylistListView)
	If _GUICtrlListView_GetItemCount($PlaylistListView) = 0 Then Return
	If $wasplaying = 1 Then	_PlayMusic($titelnummer-1)
EndFunc
#endregion Funcs :2: