Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
NTUI: Listview multiselect
#1
Hallo,

Ist beim Listview das multiselect schon funktionstüchtig ?

Ich hab in Copacabana ein Listview in das der Status ausgegeben wird. Nun will ich das Listview dazu gebrauchen
das ich per multiselect auch gleich einen Commit machen kann. multiselect ist auf true gesetzt und onselect ist auc h vergeben im xml.file...

Trotzdem ist mir aufgefallen das nicht jeder Klick im Listview eine Ausgabe erzeugt

Wie gehe ich da am besten vor ?

Ich bekomme Textausgaben ala:

M /Entwicklung/AmiBlitz3-SVN/Sourcecodes/Amiblitz3/PED/PED.ab2

wobei ich den Text dann natürlich erst noch bearbeiten muß. Das M am Anfang steht für Modify, daran kann man erkennen
was man geändert hat....
Zitieren
#2
Multiselect geht schon.
Benutze entweder einen externen Button für die Aktion, oder reagiere auf "ontouch". Wobei du bei ontouch jedesmal ein Notify bekommst, wenn sich was an der selection ändert.
OnSelect geht nicht, da es bei multiselect kein direktes Event gibt bei dem man loslegen möchte.

Den Text holt man sich mit ntui_GetListCell oder so ähnlich. Muss ich nach schauen. Du kannst die Informationen aber auch selbst verwelten und als user data einfach deine ID angeben. Dann sind die Daten von der Anzeige entkoppelt.
Zitieren
#3
Ok, Das mit onSelect habe ich auch schon bemerkt und auf onTouch umgestellt...

Ich hatte mit einer Kombi aus ntui_GetNextSelectedListItem und ntui_GetListItemText versucht den Text zu holen,
weil ich/man doch die privaten Befehle wie _ntui_GetListCellP nicht verwenden darf :?

und da halt ich mich doch dran, weil ich nicht wieder einen Rüffler bekommen will :twisted: Big Grin
Zitieren
#4
GetListCellP gibt dir einen Pointer auf das ListItem Struct. Und das ist private, deshalb ist auch die Funktion private. Du möchtest sicher nicht jedesmal deinen Source ändern, wenn ich ein Code-Refactoring mache.

Die richtige Vorgehensweise ist, GetFirstSelectedListItem() aufzurufen, und dann per GetListItemXZY() auszuwerten. (könnte man auch ein GetListItemAttr draus machen, fällt mir da auf...). Bei einem Multiselect kann man dann weiter machen mit GetNextSelectedListItem() bis man NULL bekommt.
Zitieren
#5
So in der Art ?

[ab3]itemx.l = ntui_GetFirstSelectedListItem{*WcList}
If Multiselect = True
Repeat
If itemx >= 0
SelectedText.s = ntui_GetListItemText{*WcList,itemx,0}
multiselect.s+"~"+SelectedText
EndIf
SelectedText = multiselect
itemx.l = ntui_GetNextSelectedListItem{*WcList}
Until itemx < 0
endif[/ab3]

Dann bekomme ich zwar die Liste die ich ausgewählt habe, aber wenn ich davon was deselektiere bekomme ich das nicht mit.
Noch ein komisches Verhalten habe ich beim selektieren festgestellt.

Wenn ich z.B vier Einträge im Listview habe, und ich selektiere das 4 und dann das erste, sind gleich alle 4 ausgewählt ?
Warum ?
Ich selektiere mit Shift und dann Mausklick.... Eigentlich sollte ich doch jeden Eintrag einzeln anwählen können oder ?
Zitieren
#6
Das geht auch kürzer (ohne Multiselect bekommst ein Item, die Abfrage funktioniert aber gleich):
[ab3]itemx.l = ntui_GetFirstSelectedListItem{*WcList}
SelectedText.s = ""
While itemx >= 0
SelectedText + ntui_GetListItemText{*WcList,itemx,0} + "~"
itemx = ntui_GetNextSelectedListItem{*WcList}
Wend[/ab3]
Ich würde nur nicht ~ als Seperator nehmen. Warum baust du einen String? Du könntest das, was du auf dem String machst, auch direkt mit dem Listview machen, das erstpart dir den Code den String wieder zu parsen.

SHIFT+click markiert einen Bereich. Einzelne Items gehen mit ALT+click. Das kann man sicher aber auch noch konfigurierbar machen per NTUI Prefs, die überfällig sind.

Aber wie gesagt, wenn nicht alles 100% funktioniert, dann liegt das daran dass der LV noch nicht fertig ist. Es fehlt auch noch sortieren etc.
Zitieren
#7
Danke !

Ja, das war nur zum probieren, danke für den Codeschnipsel..

Zitat:Ich würde nur nicht ~ als Seperator nehmen. Warum baust du einen String? Du könntest das, was du auf dem String machst, auch direkt mit dem Listview machen, das erstpart dir den Code den String wieder zu parsen.

Wie meinst du das ? ich bekomme doch per Lister das ganze gleich ins Listview ausgegeben...

Gleich in meinem ersten Beitrag habe ich ja gepostet was ich als einzelne ZelleninHalte zurückbekomme.
Jeder Buchstabe wie z.B: M = Modify oder A = Add C = Conflict usw steht am Anfang vom Text, und da kommt dann
noch dazu das es acht verschiedene Stellen gibt die alle eine andere Bedeutung haben. Dann erst kommt der Pfad (im Unixstil)

Mir schwebt da so eine Auswertung vor ala:
Eingangsformat aus dem Lister -> M /MeinPfad/MeineDatei
Ausgangsformat dann das Ersetzen der ganzen verschiedenen Buchstaben also
Modify /MeinPfad/MeineDatei.

dann noch eine farbliche Unterscheidung von geänderten Dateien zu nicht geänderten und natürlich auch nicht versionierte Dateien die
dann alle ein Fragezeichen vorangestellt haben. Dabei ist mir gerade aufgefallen das ich ~ gar nicht nehmen könnte weil das Zeichen
auch eine Bedeutung hat ('~' versioned item obstructed by some item of a different kind)

Zusätzlich brauche ich ja dann für den Commitloop nur die Pfadangabe. Und das könnte ich dann alles im Listview erledigen ???
Kann ich kaum glauben, aber schön wäre es....

Ah ok, dann macht das Sinn wenn Shift+Click einen ganzen Bereich markiert. Das ist aber nicht Amigakonform oder ?
Alt+Click probiere ich gleich mal aus !

Zitat:Aber wie gesagt, wenn nicht alles 100% funktioniert, dann liegt das daran dass der LV noch nicht fertig ist. Es fehlt auch noch sortieren etc.

Kein Problem ! Sollte aber bald funktionieren Big Grin
Zitieren
#8
Ok, habe Alt+Click ausprobiert, funktioniert natürlich

Nur das mit dem deselektieren klappt nicht !

Wenn ich drei Einträge selektiert habe, und einen oder mehrere davon wieder deselektiere, dann bekomme ich keine Änderungen der Liste
Zitieren
#9
Kann das jemand nachstellen ?
Zitieren
#10
Ja, ich. Bin noch am ListView dran, wie gesagt der ist noch nicht fertig.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste