; Multi-selection and context-menu sample.
; Right-click the list or use the button to open the same native popup menu.

window=CreateWindow("Selection and context menus",120,100,560,430,0,15)
SetMinWindowSize window,460,330

CreateLabel "Assets",12,12,240,22,window
assets=CreateListBox(12,38,520,280,window,1)
SetGadgetLayout assets,1,1,1,1
SetGadgetToolTip assets,"Ctrl-click or Shift-click to select several assets."

For index=1 To 10
    AddGadgetItem assets,"Environment asset "+index
Next
SetGadgetItemSelected assets,0
SetGadgetItemSelected assets,2

menu=CreatePopupMenu(window)
selectAllItem=CreateMenu("Select &all",101,menu)
duplicateItem=CreateMenu("&Duplicate selected",102,menu)
CreateMenu "",0,menu
deleteItem=CreateMenu("&Delete selected",103,menu)

showMenu=CreateButton("Selection actions...",12,330,160,32,window)
SetGadgetLayout showMenu,1,0,0,1
selectionStatus=CreateLabel("",184,336,348,22,window,1)
SetGadgetLayout selectionStatus,1,1,0,1

UpdateSelectionStatus assets,selectionStatus

running=True
While running
    event=WaitEvent()
    Select event
    Case $803
        running=False
    Case $401
        source=EventSource()
        If source=assets Then UpdateSelectionStatus assets,selectionStatus
        If source=showMenu Then ShowPopupMenu menu,assets
    Case $201
        If EventSource()=assets And EventData()=2 Then
            ShowPopupMenu menu,assets,EventX(),EventY()
        EndIf
    Case $1001
        Select EventData()
        Case 101
            For index=0 To CountGadgetItems(assets)-1
                If Not GadgetItemSelected(assets,index) Then
                    SetGadgetItemSelected assets,index
                EndIf
            Next
        Case 102
            originalCount=CountGadgetItems(assets)
            If CountSelectedGadgetItems(assets)>0 Then
                For index=0 To originalCount-1
                    If GadgetItemSelected(assets,index) Then
                        AddGadgetItem assets,GadgetItemText(assets,index)+" copy"
                    EndIf
                Next
                For index=0 To originalCount-1
                    SetGadgetItemSelected assets,index,False
                Next
                For index=originalCount To CountGadgetItems(assets)-1
                    SetGadgetItemSelected assets,index
                Next
            EndIf
        Case 103
            If CountSelectedGadgetItems(assets)>0 Then
                For index=CountGadgetItems(assets)-1 To 0 Step -1
                    If GadgetItemSelected(assets,index) Then
                        RemoveGadgetItem assets,index
                    EndIf
                Next
            EndIf
        End Select
        UpdateSelectionStatus assets,selectionStatus
    End Select
Wend

FreeGadget window
End

Function UpdateSelectionStatus(listBox,statusLabel)
    count=CountSelectedGadgetItems(listBox)
    If count=0 Then
        SetGadgetText statusLabel,"No assets selected"
    Else If count=1 Then
        index=NextSelectedGadgetItem(listBox)
        SetGadgetText statusLabel,"Selected: "+GadgetItemText(listBox,index)
    Else
        SetGadgetText statusLabel,count+" assets selected"
    EndIf
End Function
