Seite 1 von 1

ExplorerTreeGadget Verzeichnisauswahl und sortiern

Verfasst: 25.08.2009 21:22
von cbora
1. Wie ist es möglich in ein ExplorerTreeGadget alle Verzeichnisse/Dateien auch versteckte einlesen/anzeigen

2. Kann man die Sortierreihenfolge beeinflussen z.B. unabhängig von Groß- bzw Kleinschreibung

Verfasst: 29.08.2009 17:14
von tmjuk
Hallo,

also ich habe mir das mal kurz angesehen.
Also auf die Schnelle konnte ich nichts entdecken, was sich da mit PB-eigenen Mitteln (z.B. Flags) machen lassen würde.

Informier dich mal über API Möglichkeiten. Oder du bastelst selbst was.
Stichwort: ExamineDirectory

Tja, soweit erst mal

Torsten

Verfasst: 31.08.2009 20:02
von cbora
Mit den API Möglichkeiten fehlt mir als Linux Umsteiger nach der Durchblick.

Stichwort : ExamineDirectory
1. Variante
Habe die Verzeichnisstruktur über eine Linkedlist ausgelesen sortiert.
und in ein Treegadget eingeschrieben (noch ohne Image)
Funktioniert alles entsprechend nur dauert ca. 2-6 sek Verzeichnislesen und sortieren aber bis zu 120 sek die komplette Verzeichnisstruktur ins Treegadget zu schieben. Beim Fensterschließen bzw Treegadget Löschen ca. 10-15 sek.
Es sind ca. 50 000 Verzeichnisse ! --> so nicht machbar.

2. Variante
Nur den Grundpfad und die geöffneten Knoten gelesen und sortiert ins Treegadget eingelesen.
Zeit und damit verbundene Prozeduren sind soweit machbar und ok.

Ein Problem besteht jedoch beim neu einlesen ins Treegadget wie kann ich die
Position in der Anzeige wiederherstellen, so das sich der bearbeitete Path auch wieder unter der Maus befindet ?

Noch eine Frage zu Linux Maus event's Wie kann man den Tastaturstatus dabei abfragen?
hauptsächlich Shift ,STrG Alt

Gruß cbora

Verfasst: 31.08.2009 21:24
von tmjuk
Hej,

zum "Merken": Kannst du den zuletzt angewandten Pfad nicht irgendwo speichern, also in einer Variable oder in einer Preferencedatei o.ä.? Und dann wieder dorthinspringen...

Aus Neugier, wozu die Tasten? Mehrfachselektion?
Dann würde ich einfach die Karos vor den Einträgen einschalten mit
#PB_Tree_CheckBoxes

Torsten

Verfasst: 31.08.2009 21:54
von cbora
Hallo

Das mit dem Merken ist kein Problem
Wenn ich aber das Treegadget bearbeite ändert sich die Position des
Eintrags je nach Füllstand.
z.B. der 3 sichtbare Eintrag mit "Meinem Path" dessen Knoten ich geschlossen/geöffnet habe, ist danach an einer anderen Position.
-> ist nicht schön immer zu suchen

Das mit den Tasten bezieht sich auf Mehrfachselektion/Auswahl...

Ich habe Versucht alles in einem Imagegadget zu machen.
Grundfunktion ist unter Linux und Window
ab PBV4.40 wegen DrawAlphaImage() gegeben.

Gruß cbora

Verfasst: 01.09.2009 00:49
von tmjuk
Ich meinte nicht die Position, sondern den Inhalt merken. Und dadurch dann auf die passende Position springen.

Oder anders: Schau mal in der Hilfe nach SetGadgetItemData.
Da ist ein Beispiel, von dem ich glaube, das es genau dazu passt.
Probier es mal aus.

Und für die Mehrfachselektion würde ich wie schon erwähnt die Checkboxen im Treegadget aktivieren.
Das, was man wählen will, bekommt dann eben einen Haken verpasst.


Edit: Jetzt erst gelesen und begriffen. Du machst was? In einem Imagegadget? Wie, was, warum jetzt Image?


Achso, falls der Code nicht in der Linuxhilfe mit drinsteht hier noch mal das Bespiel zu SetGadgetItemData:
Edit2: Habe statt des ListViewGadget ein TreeGadget genommen

Code: Alles auswählen

If OpenWindow(0, 0, 0, 280, 250, "SetGadgetItemData", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(0,  10, 10, 80, 20, "Add")
    ButtonGadget(1, 100, 10, 80, 20, "Remove")
    ButtonGadget(2, 190, 10, 80, 20, "Test")
    ;ListViewGadget(3, 10, 40, 260, 200)
    TreeGadget(3, 10, 40, 260, 200, #PB_Tree_NoLines | #PB_Tree_CheckBoxes)
    For i = 0 To 10
      AddGadgetItem(3, i, "Old Item "+Str(i))
      SetGadgetItemData(3, i, i)
    Next i

    Repeat
      Event = WaitWindowEvent()
      If Event = #PB_Event_Gadget
        item = GetGadgetState(3)

        Select EventGadget()
          Case 0 ; Add
            AddGadgetItem(3, item, "New Item")
            If item <> -1
              SetGadgetItemData(3, item, -1)
            Else
              SetGadgetItemData(3, CountGadgetItems(3)-1, -1)
            EndIf

          Case 1 ; Remove
            If item <> -1
              RemoveGadgetItem(3, item)
            EndIf

          Case 2 ; Test
            If item <> -1
              value = GetGadgetItemData(3, item)
              If value = -1
                MessageRequester("", "Its a new item.")
              Else
                MessageRequester("", "It was item number "+Str(value))
              EndIf
            EndIf

        EndSelect
      EndIf
    Until Event = #PB_Event_CloseWindow
  EndIf
Denke mal, es wird helfen

Torsten