it looks like you didn't understand what's happening in my (short) program.
You have to study it.
Because without knowledge, you only make steps in the dark.
Since it is faster I swiched back to a right click popupmenu.
Load, Save and Delete is done.
Code: Select all
EnableExplicit
Enumeration
#ScreenWindow
#ManageWindow
EndEnumeration
Enumeration
#Menu_Add
#Menu_Delete
#Menu_Load
#Menu_Save
#Menu_Pause
#Menu_Down
#Menu_Escape
#Menu_PopUp
EndEnumeration
Structure FileStructure
Filename$
Speed.i
EndStructure
;- Main
Define.i Event, Exit, PauseFlag, PlayFile, PlayFileNo, Help, LastTime, ActualTime, Buffer, Pitch, THeight, TWidth, YPos
Define.i DHeight, DWidth, MaxSprites, ActiveSprite, i, Sprite, Result, PlaylistFile, File
Define Filename$, Line$
Define *Ptr.FileStructure
InitSprite()
ExamineDesktops()
DWidth = DesktopWidth(0)
DHeight = DesktopHeight(0)
;DWidth = 800
;DHeight = 600
OpenWindow(#ScreenWindow, 0, 0, DWidth, DHeight, "", #PB_Window_BorderLess)
;SetWindowState(0, #PB_Window_Maximize)
OpenWindow(#ManageWindow, 0, 0, 250, 600, "Playlist", #PB_Window_SystemMenu|#PB_Window_ScreenCentered);|#PB_Window_Invisible)
CreatePopupMenu(0)
MenuItem(#Menu_Add, "Add")
MenuItem(#Menu_Delete, "Delete")
MenuItem(#Menu_Load, "Load")
MenuItem(#Menu_Save, "Save")
ListIconGadget(0, 0, 0, 250, 600, "Name", 180, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Speed", 50)
AddKeyboardShortcut(#ScreenWindow, #PB_Shortcut_Pause, #Menu_Pause)
AddKeyboardShortcut(#ScreenWindow, #PB_Shortcut_Down, #Menu_Down)
AddKeyboardShortcut(#ScreenWindow, #PB_Shortcut_Escape, #Menu_Escape)
AddKeyboardShortcut(#ScreenWindow, #PB_Shortcut_Space, #Menu_PopUp)
OpenWindowedScreen(WindowID(#ScreenWindow), 0, 0, DWidth, DHeight, 1, 0, 0, #PB_Screen_NoSynchronization)
LoadFont(0, "Arial", 20, #PB_Font_Bold)
StartDrawing(ScreenOutput())
DrawingFont(FontID(0))
THeight = TextHeight(" ")
StopDrawing()
MaxSprites = DHeight / THeight
For i = 0 To MaxSprites
CreateSprite(i, DWidth, THeight)
Next i
ActiveSprite = MaxSprites
PauseFlag = #True
PlayFileNo = -1
Repeat
Repeat
Event = WindowEvent()
Select EventWindow()
Case #ScreenWindow
Select Event
Case #PB_Event_Menu
Select EventMenu()
Case #Menu_PopUp
;- ScreenPopup
PauseFlag = #True
If IsFile(PlayFile)
CloseFile(PlayFile)
EndIf
HideWindow(1, #False, #PB_Window_ScreenCentered)
Case #Menu_Pause
;- ScreenPause
If PauseFlag
PauseFlag = #False
If Not IsFile(PlayFile)
If GetGadgetState(0) = -1
If CountGadgetItems(0)
PlayFileNo = 0
EndIf
Else
If CountGadgetItems(0)
PlayFileNo + 1
If PlayFileNo = CountGadgetItems(0)
PlayFileNo = 0
EndIf
Else
PlayFileNo = - 1
EndIf
EndIf
;Debug PlayFileNo
SetGadgetState(0, PlayFileNo)
*Ptr = GetGadgetItemData(0, PlayFileNo)
PlayFile = ReadFile(#PB_Any, *Ptr\Filename$)
YPos = THeight
EndIf
Else
PauseFlag = #True
EndIf
Case #Menu_Down
;- ScreenDown
;Debug "DOWN"
If CountGadgetItems(0)
If IsFile(PlayFile)
CloseFile(PlayFile)
EndIf
PlayFileNo + 1
If PlayFileNo = CountGadgetItems(0)
PlayFileNo = 0
EndIf
SetGadgetState(0, PlayFileNo)
*Ptr = GetGadgetItemData(0, PlayFileNo)
PlayFile = ReadFile(#PB_Any, *Ptr\Filename$)
EndIf
Case #Menu_Escape
;- ScreenEscape
Exit = #True
EndSelect
Case #PB_Event_CloseWindow
Exit = #True
EndSelect
Case #ManageWindow
Select Event
Case #PB_Event_Menu
Select EventMenu()
Case #Menu_Add
;- ManageAdd
Filename$ = OpenFileRequester("Choose a file", Filename$, "Text|*.txt", 0)
If Len(Filename$)
Help = CountGadgetItems(0)
AddGadgetItem(0, Help, GetFilePart(Filename$, #PB_FileSystem_NoExtension))
*Ptr = AllocateMemory(SizeOf(FileStructure))
SetGadgetItemData(0, Help, *Ptr)
*Ptr\Filename$ = Filename$
*Ptr\Speed = 10
SetGadgetState(0, Help)
EndIf
Case #Menu_Delete
;- ManageDelete
Help = GetGadgetState(0)
If Help <> -1
If MessageRequester("Playlist", "Delete file?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
*Ptr = GetGadgetItemData(0, Help)
If *Ptr
FreeMemory(*Ptr)
EndIf
RemoveGadgetItem(0, Help)
If Help < CountGadgetItems(0)
SetGadgetState(0, Help)
Else
SetGadgetState(0, 0)
EndIf
EndIf
EndIf
Case #Menu_Load
;-ManageLoad
If CountGadgetItems(0)
Result = MessageRequester("Load Playlist", "Clear Current Playlist?", #PB_MessageRequester_YesNo)
EndIf
If Result = #PB_MessageRequester_Yes Or CountGadgetItems(0) = 0
Help = CountGadgetItems(0) - 1
For i = 0 To Help
*Ptr = GetGadgetItemData(0, i)
If *Ptr
FreeMemory(*Ptr)
EndIf
Next i
ClearGadgetItems(0)
Filename$ = OpenFileRequester("Choose a Playlist", "Playlist.ppl", "PrompterPlayList | *.ppl", 0)
If Len(Filename$)
PlaylistFile = ReadFile(#PB_Any, Filename$)
If PlaylistFile
i = 0
While Not Eof(PlaylistFile)
Line$ = ReadString(PlaylistFile)
If Len(Line$)
*Ptr = AllocateMemory(SizeOf(FileStructure))
*Ptr\Filename$ = StringField(Line$, 1, ",")
*Ptr\Speed = Val(StringField(Line$, 2, ","))
AddGadgetItem(0, i, GetFilePart(*Ptr\Filename$, #PB_FileSystem_NoExtension))
SetGadgetItemData(0, i, *Ptr)
i + 1
EndIf
Wend
If CountGadgetItems(0)
SetGadgetState(0, 0)
EndIf
EndIf
EndIf
EndIf
Case #Menu_Save
;- ManageSave
Help = CountGadgetItems(0)
If CountGadgetItems(0)
Filename$ = SaveFileRequester("Choose file to save", "Playlist.ppl", "PrompterPlayList | *.ppl", 0)
If Len(Filename$)
If GetExtensionPart(Filename$) = ""
Filename$ + ".ppl"
EndIf
PlaylistFile = CreateFile(#PB_Any, Filename$)
If PlaylistFile
Help - 1
For i = 0 To Help
*Ptr = GetGadgetItemData(0, i)
If *Ptr
WriteStringN(PlaylistFile, *Ptr\Filename$ + "," + Str(*Ptr\Speed))
EndIf
Next
CloseFile(PlaylistFile)
EndIf
EndIf
EndIf
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case 0
If EventType() = #PB_EventType_RightClick
DisplayPopupMenu(0, WindowID(#ManageWindow))
EndIf
EndSelect
Case #PB_Event_CloseWindow
HideWindow(1, #True)
EndSelect
EndSelect
Until Event = 0
ActualTime = ElapsedMilliseconds()
If Not PauseFlag
If IsFile(PlayFile)
If LastTime + *Ptr\Speed < ActualTime
If YPos = THeight
If Eof(PlayFile)
CloseFile(PlayFile)
PlayFileNo + 1
If PlayFileNo = CountGadgetItems(0)
PlayFileNo = 0
EndIf
SetGadgetState(0, PlayFileNo)
*Ptr = GetGadgetItemData(0, PlayFileNo)
PlayFile = ReadFile(#PB_Any, *Ptr\Filename$)
PauseFlag = #True
EndIf
Line$ = ReadString(PlayFile)
; Debug Line$
StartDrawing(SpriteOutput(ActiveSprite))
DrawingFont(FontID(0))
Box(0, 0, DWidth, THeight, 0)
TWidth = TextWidth(Line$)
DrawText((DWidth >> 1) - (TWidth >> 1), 0, Line$)
StopDrawing()
YPos = 0
ActiveSprite + 1
If ActiveSprite > MaxSprites
ActiveSprite = 0
EndIf
EndIf
If Not PauseFlag
Sprite = ActiveSprite
For i = 0 To MaxSprites
DisplaySprite(Sprite, 0, i * THeight - YPos)
Sprite + 1
If Sprite > MaxSprites
Sprite = 0
EndIf
Next i
YPos + 1
LastTime = ActualTime
EndIf
EndIf
EndIf
EndIf
FlipBuffers()
Until Exit