Seite 1 von 1

Listicon Drag & Drop

Verfasst: 28.10.2015 09:41
von Velindos
Hallo Leute,
wie nimmt der das richtige Image mit in die Zeile bei Drag&Drop im Listicon!

Code: Alles auswählen

Enumeration: #Window: #Work_ListIcon:EndEnumeration
Enumeration: #positiv: #negativ:EndEnumeration
Global Durchlauefer = 0
CreateImage(#positiv, 16,16,24,$8849C7)
CreateImage(#negativ, 16,16,24,$884954)
Procedure ListIconGadgetColumns(GadgetNo)
i = 0
While GetGadgetItemAttribute(GadgetNo, 0, #PB_ListIcon_ColumnWidth, i) > 0
  i + 1
Wend
ProcedureReturn i
EndProcedure

Procedure ListIconGadgetMove(GadgetNo.i, Source.i, Dest.i)
Columns = ListIconGadgetColumns(GadgetNo) - 1
For j = 0 To Columns
  Source$ = GetGadgetItemText(GadgetNo, Source, j)
  If Source < Dest
   For i = Source To Dest - 1
    Help$ = GetGadgetItemText(GadgetNo, i + 1, j)
    SetGadgetItemText(GadgetNo, i, Help$, j)
   Next i
  Else
   For i = Source To Dest + 1 Step - 1
    Help$ = GetGadgetItemText(GadgetNo, i - 1, j)
    SetGadgetItemText(GadgetNo, i, Help$, j)
   Next i
  EndIf
  SetGadgetItemText(GadgetNo, i, Source$, j)
Next j
EndProcedure

OpenWindow(#Window, 0, 0, 600, 400, "Dragn drop test", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)

ListIconGadget(#Work_ListIcon, 10, 10, 580, 380, "Test 1", 150 , #PB_ListIcon_FullRowSelect|#PB_ListIcon_HeaderDragDrop)
AddGadgetColumn(#Work_ListIcon, 1, "Test 2", 150)
AddGadgetColumn(#Work_ListIcon, 2, "Test 3", 120)
AddGadgetColumn(#Work_ListIcon, 3, "Test 4", 120)

For i = 1 To 10
  If Durchlauefer = 0
    AddGadgetItem(#Work_ListIcon, -1, "Line " + Str(i) + " Col 1" + Chr(10) + "Line " + Str(i) + " Col 2"+  Chr(10) + "Line " + Str(i) + " Col 3" + Chr(10) + "Line " + Str(i) + " Col 4",ImageID(#positiv))
    Durchlauefer = 1
  Else
    AddGadgetItem(#Work_ListIcon, -1, "Line " + Str(i) + " Col 1" + Chr(10) + "Line " + Str(i) + " Col 2"+  Chr(10) + "Line " + Str(i) + " Col 3" + Chr(10) + "Line " + Str(i) + " Col 4",ImageID(#negativ))
    Durchlauefer = 0
  EndIf
Next i

EnableGadgetDrop(#Work_ListIcon, #PB_Drop_Private, #PB_Drag_Move, 1)

Exit = #False
DragItem = -1

Repeat
WindowWaitEvent = WaitWindowEvent()

Select WindowWaitEvent
  Case #PB_Event_Gadget
    Select EventType()
      Case #PB_EventType_DragStart
        DragItem = GetGadgetState(#Work_ListIcon)
        DragPrivate(1, #PB_Drag_Move)
    EndSelect
    
  Case #PB_Event_GadgetDrop
    If EventDropPrivate() = 1
      TargetItem = GetGadgetState(#Work_ListIcon)
      ListIconGadgetMove(#Work_ListIcon, DragItem, TargetItem)
    EndIf
    
  Case #PB_Event_CloseWindow
    Exit = #True
    
EndSelect

Until Exit

Gruss ... Velindos

Re: Listicon Drag & Drop

Verfasst: 28.10.2015 11:49
von Andesdaf
Du suchst SetGadgetItemImage().

Da es kein GetGadgetItemImage() gibt (wieso eigentlich nicht?), würde ich die Image-Nummer per
SetGadgetItemData() mit dem Eintrag speichern und bei Bedarf (= Drop-Aktion) zusammen mit dem Text aktualisieren.

Re: Listicon Drag & Drop

Verfasst: 28.10.2015 12:36
von RSBasic
Andesdaf hat geschrieben:Da es kein GetGadgetItemImage() gibt (wieso eigentlich nicht?)
Gute Frage, normalerweise hat man bei allen Anderen immer eine Get- und Set-Funktion.

Falls jemand diesen Feature-Wunsch im englischen Forum posten möchte, dann ist das nicht notwendig, weil so ein Thread bereits existiert: http://www.purebasic.fr/english/viewtop ... =3&t=54573