Page 1 of 1

Change LinkedListIndex and GadgetState at the same time??

Posted: Thu Sep 22, 2005 7:43 pm
by Blackskyliner
Hi, i have here a LinkList:

Code: Select all

Structure Lieder
  MP3NAME.s ;Name
  MP3FILE.s ;Path
EndStructure
NewList MP3Lied.Lieder()
This List save the Name of the MP3 and the Path.

I have a WCB, whit this WCB i can move Items in a ListIconGadget:

Code: Select all

Global IsDraging, DragImageList, SourceGadget, SourceItem, TargetGadget, TargetItem 
TargetGadget = -1 
Procedure WCB(wnd, message, wParam, lParam) 
  ; Window = #Window_Player 
  If message = #WM_NOTIFY 
    *nmhdr.NMHDR = lParam 
    If *nmhdr\hwndFrom = GadgetID(#Playlist); Or *nmhdr\hwndfrom = GadgetID(#ListIcon2) 
      If *nmhdr\code = #LVN_BEGINDRAG 
        If *nmhdr\hwndFrom = GadgetID(#Playlist) 
          SourceGadget = #Playlist 
          ; Else 
          ;   SourceGadget = #ListIcon2 
        EndIf 
        *nmv.NMLISTVIEW = lParam 
        SourceItem = *nmv\iItem        
        DragImageList = SendMessage_(GadgetID(SourceGadget), #LVM_CREATEDRAGIMAGE, SourceItem, @UpperLeft.POINT) 
        If DragImageList 
          If ImageList_BeginDrag_(DragImageList , 0, 0, 0) 
            ImageList_DragShowNolock_(#True) 
            SetCapture_(GetParent_(GadgetID(SourceGadget))) 
            ShowCursor_(#True) 
            IsDraging = #True 
          EndIf    
        EndIf 
      EndIf 
    EndIf 
  ElseIf message = #WM_MOUSEMOVE And IsDraging 
    ImageList_DragMove_(WindowMouseX()+WindowX(), WindowMouseY()+WindowY())  
    ImageList_DragShowNolock_(#False) 
    MouseX = lParam & $FFFF 
    MouseY = lParam >> 16 
    If TargetGadget <> -1 
      pitem.LV_ITEM 
      pitem\Mask = #LVIF_STATE 
      pitem\iItem = TargetItem 
      pitem\State = 0 
      pitem\stateMask = #LVIS_DROPHILITED 
      SendMessage_(GadgetID(TargetGadget), #LVM_SETITEM, 0, @pitem) 
      RedrawWindow_(GadgetID(TargetGadget), 0, 0, #RDW_UPDATENOW) 
    EndIf 
    TargetGadgetID = ChildWindowFromPoint_(WindowID(#Window_Player), MouseX, MouseY) 
    If TargetGadgetID = GadgetID(#Playlist) 
      TargetGadget = #Playlist 
    ElseIf TargetGadgetID = GadgetID(#ListIcon2) 
      TargetGadget = #ListIcon2 
    Else 
      TargetGadget = -1 
    EndIf 
    If TargetGadget <> -1 
      hittestinfo.LV_HITTESTINFO 
      hittestinfo\pt\x = MouseX - GadgetX(TargetGadget) 
      hittestinfo\pt\y = MouseY - GadgetY(TargetGadget) 
      TargetItem = SendMessage_(GadgetID(TargetGadget), #LVM_HITTEST, 0, @hittestinfo)            
      pitem.LV_ITEM 
      pitem\Mask = #LVIF_STATE 
      pitem\iItem = TargetItem 
      pitem\State = #LVIS_DROPHILITED 
      pitem\stateMask = #LVIS_DROPHILITED 
      SendMessage_(GadgetID(TargetGadget), #LVM_SETITEM, 0, @pitem)  
      RedrawWindow_(GadgetID(TargetGadget), 0, 0, #RDW_UPDATENOW) ; again a redraw 
    EndIf 
    ImageList_DragShowNolock_(#True) 
  ElseIf message = #WM_LBUTTONUP And IsDraging 
    ReleaseCapture_() 
    ImageList_EndDrag_() 
    ImageList_Destroy_(DragImageList) 
    ShowCursor_(#True) 
    IsDraging = #False 
    If TargetGadget <> -1 
      pitem.LV_ITEM 
      pitem\Mask = #LVIF_STATE 
      pitem\iItem = TargetItem 
      pitem\State = 0 
      pitem\stateMask = #LVIS_DROPHILITED 
      SendMessage_(GadgetID(TargetGadget), #LVM_SETITEM, 0, @pitem) 
      RedrawWindow_(GadgetID(TargetGadget), 0, 0, #RDW_UPDATENOW) 
    EndIf  
    If TargetGadget <> -1 
      ItemText$ = GetGadgetItemText(SourceGadget, SourceItem, 0)      
      RemoveGadgetItem(SourceGadget, SourceItem)            
      AddGadgetItem(TargetGadget, TargetItem, ItemText$) 
    EndIf 
  ElseIf message = #WM_GETMINMAXINFO And wnd = WindowID(#Window_Player) 
    GetWindowRect_(wnd,r.RECT) 
    *pMinMax.MINMAXINFO = lParam 
    *pMinMax\ptMinTrackSize\x=370
    *pMinMax\ptMinTrackSize\y=252 
    *pMinMax\ptMaxTrackSize\x=GetSystemMetrics_(#SM_CXSCREEN) 
    *pMinMax\ptMaxTrackSize\y=GetSystemMetrics_(#SM_CYSCREEN) 
  EndIf 
  ProcedureReturn #PB_ProcessPureBasicEvents 
  
EndProcedure     
When i move a MP3 in the list must be change the MP3Index of the LinkedListItem and the ID of the ListIconGadget, because i Play the MP3 with the Id´s and Index´s. Here the PlayProcedure

Code: Select all

Procedure Play()
  DisableGadget(#PLAY,1)
  DisableGadget(#RESUME,1)
  DisableGadget(#STOP,0)
  DisableGadget(#PAUSE,0)
  DisableMenuItem(2,1)
  DisableMenuItem(3,1)
  
  If IsAudioZPlaying(#AUDIO_ID)
    MessageRequester("Fehler","Es wird zuzeit noch ein Lied gespielt.")
  Else 
    
    SelectElement(MP3Lied(), GetGadgetState(#Playlist))
    OpenAudioZ(#AUDIO_ID,MP3Lied()\MP3FILE)
    PlayAudioZ(#AUDIO_ID)
    Total = GetAudioZLength(#AUDIO_ID)
    SetGadgetText(#TIME_Total, PositionAudioZTime(Total))
  EndIf 
  SetAudioZVolume(#AUDIO_ID,Volume)
  Play.l = 1
  Presskey.l = 1
EndProcedure
Who can i change the moved Item by the GadgetState and Linked List ID? Need Help. Thanks for answers.

Sorry for bad english.... SchoolEnglish Grade 10.... :rolleyes:

With frindly Greets
Blackskyliner