Re: ListIconGadget() with private drag and drop
Posted: Wed Dec 30, 2009 7:23 pm
Yes, very nice example of how to use the drag functions. It works fine on my Mac.
Thanks for the example.
Thanks for the example.
http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
#VERSION = 2
Procedure ListIconGadgetColumns(GadgetNo)
i = 0
; While GetGadgetItemAttribute(GadgetNo, 0, #PB_ListIcon_ColumnWidth, i) > 0
; i + 1
; Wend
Repeat
width = GetGadgetItemAttribute(GadgetNo, 0, #PB_ListIcon_ColumnWidth, i)
i + 1
Until width <= 0 Or width > GadgetWidth(GadgetNo)
i - 1
ProcedureReturn i
EndProcedure
Procedure ListIconGadgetMove(GadgetNo.i, Source.i, Dest.i)
;Debug "Source: " + Str(Source) + " Dest: " + Str(Dest)
If Dest >= 0
Columns = ListIconGadgetColumns(GadgetNo) - 1
CompilerIf #VERSION = 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
CompilerElse
Source$ = ""
For i = 0 To Columns
Source$ + GetGadgetItemText(GadgetNo, Source, i) + Chr(10)
Next i
Source$ = Left(Source$, Len(Source$) - 1)
RemoveGadgetItem(GadgetNo, Source)
AddGadgetItem(GadgetNo, Dest, Source$)
SetGadgetState(GadgetNo, Dest)
CompilerEndIf
EndIf
EndProcedure
OpenWindow(0, 0, 0, 330, 220, "Drag'n drop test", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ListIconGadget(0, 10, 10, 310, 200, "Test 1", 150 , #PB_ListIcon_FullRowSelect|#PB_ListIcon_HeaderDragDrop)
AddGadgetColumn(0, 1, "Test 2", 150)
For i = 1 To 20
; AddGadgetItem(0, -1, "Line " + Str(i))
AddGadgetItem(0, -1, "Line " + Str(i) + " Col 1" + Chr(10) + "Line " + Str(i) + " Col 2")
Next i
EnableGadgetDrop(0, #PB_Drop_Private, #PB_Drag_Move, 1)
StartTime = ElapsedMilliseconds()
For i = 0 To 1000
ListIconGadgetMove(0, 18, 1)
Next i
Debug ElapsedMilliseconds() - StartTime
Exit = #False
DragItem = -1
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventType()
Case #PB_EventType_DragStart
DragItem = GetGadgetState(0)
DragPrivate(1, #PB_Drag_Move)
EndSelect
Case #PB_Event_GadgetDrop
If EventDropPrivate() = 1
TargetItem = GetGadgetState(0)
ListIconGadgetMove(0, DragItem, TargetItem)
EndIf
Case #PB_Event_CloseWindow
Exit = #True
EndSelect
Until Exit