Seite 1 von 1

ListIcon + MultiSelect + Drag&Drop

Verfasst: 15.10.2011 16:03
von H.Brill
Ich möchte gerne per Drag&Drop mehrere Einträge vom obigen
Listicon ins untere Listicon kopieren. Mit Einzel-Items gehts ja
wunderbar. Nur wie gehts am besten mit mehreren ?
Wahrscheinlich mit einer Liste. Kann ich dazu SetDragCallback()
und SetDropCallback() benutzen und wie ?
Evtl. hat ja jemand schon sowas gemacht.
Es sollten Einzeleinträge und auch Multiselect gehen.

Code: Alles auswählen

#Window = 0
Enumeration
  #SourceText
  #TargetText
EndEnumeration

Structure Felder
  Name.s{100}
  Ort.s{100}
  Telefon.s{12}
EndStructure
Global NewList Felderliste.Felder()

Global Event.l, i.l, Text.s

If OpenWindow(#Window, 0,0,600,600, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ListIconGadget(#SourceText, 10,10,500,200, "Name", 180,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_MultiSelect) 
  ListIconGadget(#TargetText, 10,300, 500,200, "Name",  180, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
  
  AddGadgetColumn(#SourceText, 1, "Ort", 180)
  AddGadgetColumn(#SourceText, 2, "Telefon", 100)
  AddGadgetColumn(#TargetText, 1, "Ort", 180)
  AddGadgetColumn(#TargetText, 2, "Telefon", 100)
  
  AddGadgetItem(#SourceText, -1, "Maier" + Chr(10) + "Köln" + Chr(10) + "4711")
  AddGadgetItem(#SourceText, -1, "Schmidt" + Chr(10) + "Hamburg" + Chr(10) + "12345")
  AddGadgetItem(#SourceText, -1, "Müller" + Chr(10) + "Bonn" + Chr(10) + "6789")
  
  EnableGadgetDrop(#TargetText, #PB_Drop_Text, #PB_Drag_Copy)
  
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
      Select EventGadget()
        Case #SourceText
          Text = GetGadgetItemText(#SourceText, GetGadgetState(#SourceText),0) + Chr(10) + GetGadgetItemText(#SourceText, GetGadgetState(#SourceText),1) + Chr(10) + GetGadgetItemText(#SourceText, GetGadgetState(#SourceText),2)
          DragText(Text)
      EndSelect
    ElseIf Event = #PB_Event_GadgetDrop
      Select EventGadget()
        Case #TargetText
          AddGadgetItem(#TargetText, -1, EventDropText())
      EndSelect
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf

End


Re: ListIcon + MultiSelect + Drag&Drop

Verfasst: 15.10.2011 16:22
von STARGÅTE
Du kannst (es gibt auch andere Möglichkeiten) das mit einem Privaten Drag&Drop-Typ realisieren.

Zum Beispiel so:

Code: Alles auswählen

#Window = 0
Enumeration
  #SourceText
  #TargetText
  #PrivateType1
EndEnumeration

Structure Felder
  Name.s{100}
  Ort.s{100}
  Telefon.s{12}
EndStructure
Global NewList Felderliste.Felder()

Global Event.l, i.l, Text.s
Define Index.i, TargetIndex.i, Count.i, Column.i

If OpenWindow(#Window, 0,0,600,600, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ListIconGadget(#SourceText, 10,10,500,200, "Name", 180,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_MultiSelect) 
  ListIconGadget(#TargetText, 10,300, 500,200, "Name",  180, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
  
  AddGadgetColumn(#SourceText, 1, "Ort", 180)
  AddGadgetColumn(#SourceText, 2, "Telefon", 100)
  AddGadgetColumn(#TargetText, 1, "Ort", 180)
  AddGadgetColumn(#TargetText, 2, "Telefon", 100)
  
  AddGadgetItem(#SourceText, -1, "Maier" + Chr(10) + "Köln" + Chr(10) + "4711")
  AddGadgetItem(#SourceText, -1, "Schmidt" + Chr(10) + "Hamburg" + Chr(10) + "12345")
  AddGadgetItem(#SourceText, -1, "Müller" + Chr(10) + "Bonn" + Chr(10) + "6789")
  
  EnableGadgetDrop(#TargetText, #PB_Drop_Private, #PB_Drag_Copy, #PrivateType1)
  
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
      Select EventGadget()
        Case #SourceText
          DragPrivate(#PrivateType1)
      EndSelect
    ElseIf Event = #PB_Event_GadgetDrop
      Select EventGadget()
        Case #TargetText
          If EventDropPrivate() = #PrivateType1
            Count = CountGadgetItems(#SourceText)
            For Index = 0 To Count
              If GetGadgetItemState(#SourceText, Index) & #PB_ListIcon_Selected
                AddGadgetItem(#TargetText, -1, "")
                TargetIndex = CountGadgetItems(#TargetText)-1
                For Column = 0 To 2
                  SetGadgetItemText(#TargetText, TargetIndex, GetGadgetItemText(#SourceText, Index, Column), Column)
                Next
              EndIf
            Next
          EndIf
      EndSelect
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf

End
Die Callbacks sind nur für die Aktionen während du die Maus bewegst, also zwischen Drag und Drop

Re: ListIcon + MultiSelect + Drag&Drop

Verfasst: 15.10.2011 16:35
von H.Brill
Wunderbar, klappt bestens.
Damit kann ich mir das Hantieren mit
LinkedList sparen.
Die Callbacks sind nur für die Aktionen während du die Maus bewegst, also zwischen Drag und Drop
Also gut fürs Ändern des Mauszeigersymbols zum Beispiel.

Besten Dank nochmals.