amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > MUI List, InsertSingle Problem [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

09.10.2006, 22:46 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Hallo,

ich habe ein kleines Problem mit dem Listview von Aros ZUNE.

Ich kann mit diesem Code, Strings der Liste hinzufügen:
c++ code:
DoMethod(projectfiles,MUIM_List_InsertSingle,(long unsigned int)TXT.sfilename.c_str(),(IPTR)MUIV_List_Insert_Bottom);


Dummerweise werden die bereits eingefügten strings immer durch den neuen string überschrieben:

Bild: http://img163.imageshack.us/img163/9483/listyc5.jpg

Mache ich einen Fehler, oder ist das ein Bug ?
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

09.10.2006, 23:05 Uhr

thomas
Posts: 7716
Nutzer

Ich vermute mal, daß MUI den Text nicht kopiert, sondern einfach den Zeiger benutzt, den du mitgibst. Und wenn deine Funktion (bzw. Methode) immer den gleichen Speicherbereich benutzt, um den Text zu erstellen, dann zeigen alle Listeneinträge auf den gleichen Text.

Du mußt entweder dafür sorgen, daß du für jeden Knoten einen eigenen Textspeicher anlegst, oder MUI anweisen, den Text zu kopieren. Allerdings weiß ich nicht, ob das geht, ich kenne mich mit MUI nicht so aus. Bei ReAction kann man auswählen, ob der Text kopiert werden soll oder nicht.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

09.10.2006, 23:11 Uhr

Georg
Posts: 107
Nutzer
@Kaesebroetchen:

Müßte es erst testen aber kann schon ein Zune Bug sein. Die Zune List Klasse ist außerdem nur halb fertig. Etliche Dinge wie Drag&Drop, Sortieren sind noch gar nicht implementiert. Deshalb am besten (bei Problemen) mal versuchen NListview + NList anstelle von Listview + List zu benutzen (#include von <MUI/NList_mcc.h>, <MUI/NListview_mcc.h>, usw. nicht vergessen).








[ - Antworten - Zitieren - Direktlink - ]

09.10.2006, 23:35 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@Georg:
Danke das werde ich dann mal versuchen.

@Thomas
Danke für den Hinweis.
Wenn das mit dem Zeiger so wäre, dann würde das das mysteriöse Verhalten der Listen schon ganz gut erklären.
(Darauf wäre ich im Leben nicht gekommen)
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

10.10.2006, 00:45 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Die Strings werden nicht kopiert, sondern nur der Zeiger genommen, das liegt daran, daß du auch andere Sachen als Strings nehmen kannst, die du dann mit einem DisplayHook bearbeiten kannst, z.B. wenn du mehrere Spalten darstellen willst.

@Georg

zufälligerweise war bei mir der falsche Bug, den Ich auf aros-exec beschrieb, aber das war ja dann doch nur ein fehler meinerseits.

Ich weiß auch nicht inwieweit NList kompatibel zu List ist, aber ggf. sollte man List ganz durch NList ersetzen, ggf sogar wrappen?

[ Dieser Beitrag wurde von DariusBrewka am 10.10.2006 um 00:56 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

10.10.2006, 21:06 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Zitat:
Original von Georg:
@Kaesebroetchen:

#include von <MUI/NList_mcc.h>, <MUI/NListview_mcc.h>, usw. nicht vergessen).


Die sind beim Aros SDK scheinbar nicht dabei, gibt es die überhaupt für Aros ?
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

10.10.2006, 21:48 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Doch die gibt's auch für AROS, nutze Ich auch.

Befindet sich in Sys:extras/mcc_nlist, am besten folgendes

"SYS:Extras/MCC_NList" im File MCC_NList ins Verzeichnis
"Sys:Prefs/Env-Archive/SYS/Packages/" packen, dann wird immer die neuste Version genommen.

[ - Antworten - Zitieren - Direktlink - ]

10.10.2006, 22:04 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@DariusBrewka:
Ja Danke, habe es inzwischen auch gefunden.
Dabei ist mir aufgefallen, daß auf der Live CD im verzeichnis Development erheblich mehr drin ist als im SDK das man einzeln herunterladen kann.
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

10.10.2006, 22:13 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Ich krieg hier noch einen Anfall X( :dance3: :dance3:

Ich habe jetzt NListView und NList eingebaut.
Zunächst funktioniert alles wie erhofft und es wird jedesmal ein neuer string eingetragen und die alten strings dabei nicht überschrieben.
Wenn ich jetzt aber auf einen der Einträge klicke dann wird der angewählte string mit dem Text des letzten Strings überschrieben !
Das kann ich sooft wiederholen bis die List nur noch Einträge mit dem Text des zuletzt hinzugefügten Strings enthält.

Das kann doch jetzt eigentlich nicht mehr diese Zeiger Geschichte sein, oder ? Schließlich standen da ja zunächst die korrekten strings.
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

10.10.2006, 22:21 Uhr

Georg
Posts: 107
Nutzer
Hab' nochmal in Sourcse und MUI docs reingeschaut. Es gibt da MUIV_List_ConstructHook_String das man bei MUIA_List_ConstructHook und MUIA_List_DestructHook als Param angeben kann. Damit werden Strings kopiert und später wieder freigegeben. Also nicht nur Zeiger gespeichert.

Müßte auch mit Zune List Klasse gehen, nicht nur mit MUI List, oder NList.



[ - Antworten - Zitieren - Direktlink - ]

10.10.2006, 22:28 Uhr

Georg
Posts: 107
Nutzer
Zitat:
Original von Kaesebroetchen:
.
Zunächst funktioniert alles wie erhofft und es wird jedesmal ein neuer string eingetragen und die alten strings dabei nicht überschrieben.
Wenn ich jetzt aber auf einen der Einträge klicke dann wird der angewählte string mit dem Text des letzten Strings überschrieben !
Das kann ich sooft wiederholen bis die List nur noch Einträge mit dem Text des zuletzt hinzugefügten Strings enthält.


Das sieht auch nach beschriebenem "Strings nicht kopiert, sondern nur Zeiger gespeichert" Ding an. Genau wie bei Zune List Klasse. Nur das eben NList optimierter ist und und bei best. Aktionen (Einträge dazufügen) alte Einträge nicht neu rendert, wenn nicht notwendig. Deshalb bemerkst du das Zeiger-statt-Stringkopie Problem erst wenn du draufklickst, was zum Neurendern des Eintrags führt.




[ - Antworten - Zitieren - Direktlink - ]

11.10.2006, 18:42 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Zitat:
Original von Georg:
Hab' nochmal in Sourcse und MUI docs reingeschaut. Es gibt da MUIV_List_ConstructHook_String das man bei MUIA_List_ConstructHook und MUIA_List_DestructHook als Param angeben kann. Damit werden Strings kopiert und später wieder freigegeben. Also nicht nur Zeiger gespeichert.

Müßte auch mit Zune List Klasse gehen, nicht nur mit MUI List, oder NList.


Danke !
Dein Tip war, wie eigentlich immer, der richtige. :rolleyes: :)
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

11.10.2006, 20:16 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Ich bin ein bisschen weiter gekommen, habe aber wieder ein neues Problem:

Ich möchte die Information auswerten wenn ein Eintrag in der NList angeklickt wird.
c++ code:
DoMethod(projectfiles, MUIM_Notify, MUIA_NList_EntryClick, FALSE,
        (IPTR)app,2,MUIM_Application_ReturnID, 
                 (ULONG)IDL_SELECTFILE);


Das funktioniert zwar aber komischerweise nur mit dem obersten Eintrag ?!

Das MUIA_List_Active Attribut wird aber korrekt gesetzt wenn ich einen Eintrag anklicken, es kommt nur keine Nachricht. (Ausser beim obersten)
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

11.10.2006, 20:59 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Damit habe ich es hinbekommen:

DoMethod(projectfiles, MUIM_Notify, MUIA_NList_SelectChange, TRUE,
(IPTR)app,2,MUIM_Application_ReturnID,
(ULONG)IDL_SELECTFILE);
--
http://amidevcpp.amiga-world.de/

[ Dieser Beitrag wurde von Kaesebroetchen am 11.10.2006 um 21:21 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

12.10.2006, 13:47 Uhr

Gazelle
Posts: 151
Nutzer
Zitat:
Original von Kaesebroetchen:
c code:
DoMethod(projectfiles, MUIM_Notify, MUIA_NList_EntryClick, FALSE,
        (IPTR)app,2,MUIM_Application_ReturnID, 
                 (ULONG)IDL_SELECTFILE);

Das funktioniert zwar aber komischerweise nur mit dem obersten Eintrag?!

Kein Wunder, weil MUIA_NList_EntryClick liefert dir die Position des Eintrages und du läßt dich benachrichtigen, wenn der Wert "0" (= FALSE) wird.

Du musst auf den Spezialwert MUIV_EveryTime lauschen, wenn du jede Änderung mitbekommen willst:
c code:
DoMethod(projectfiles, MUIM_Notify, MUIA_NList_EntryClick, MUIV_EveryTime,
        (IPTR)app,2,MUIM_Application_ReturnID, 
                 (ULONG)IDL_SELECTFILE);

das sollte funktionieren.

[ - Antworten - Zitieren - Direktlink - ]

12.10.2006, 17:25 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@Gazelle:
Danke, diese Information kann ich sicher noch irgendwo in meinem Programm gebrauchen. Für die Datei Liste ist aber die obige Methode die praktischte (funktioniert super).
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > MUI List, InsertSingle Problem [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.