|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 06.04.2011, 19:44 Titel: GtkTreeView Eintrag löschen |
|
|
Hallo Leute,
ich habe mit hilfe von GTK eine Liste (GtkTreeView) erstellt, bei der man mehrere Zeilen auswählen kann. (GTK_SELECTION_MULTIPLE)
Nun habe ich eine Sub geschrieben, die auf Knopfdruck, alle gewählten Einträge der Liste löschen soll:
Code: | 'list_playlist ist per DIM SHARED im Hauptprogramm als GtkTreeView deklariert.
sub gtk_playlist_remove
dim as GtkTreeSelection ptr selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_playlist))
if gtk_tree_selection_count_selected_rows(selection) = 0 then exit sub
dim as GtkTreeModel ptr model
dim as GtkListStore ptr store
dim as GtkTreeIter iter
dim as GList ptr list = gtk_tree_selection_get_selected_rows (selection, @model)
store = GTK_LIST_STORE (model)
do until list = NULL
gtk_tree_model_get_iter ( model, @iter, list->data)
gtk_list_store_remove ( store, @iter )
list = list->next
loop
end sub
|
Ist nur eine Zeile markiert, wird sie ohne Probleme gelöscht. Sind mehrere markiert, wird eine gelöscht und folgende Fehlermeldung erscheint:
Zitat: | (gtk.exe:12876): Gtk-CRITICAL **: gtk_list_store_remove: assertation 'VALID_ITER (iter, list_store)' failed |
Muss ich iter noch irgendwie zurücksetzen? Wenn ja, wie?
Kann mir da wer helfen?
MfG Type |
|
Nach oben |
|
|
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 07.04.2011, 09:23 Titel: |
|
|
Hallo Leute,
ich habe mich mal weiter schlau gemacht und herausgefunden, dass mein Ansatz (aus welchen Gründen auch immer) nicht funktioniert.
Ich habe jetzt eine Lösung gefunden, indem ich einfach das GtkTreeModel immer aktualisiere:
Code: | sub gtk_playlist_remove
dim as GtkTreeSelection ptr selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_playlist))
if gtk_tree_selection_count_selected_rows(selection) = 0 then exit sub
dim as GtkTreeModel ptr model
dim as GtkTreeIter iter
dim as GList ptr list = gtk_tree_selection_get_selected_rows (selection, @model)
do until list = NULL
gtk_tree_model_get_iter ( model, @iter, list->data)
gtk_list_store_remove (GTK_LIST_STORE(model), @iter)
list = gtk_tree_selection_get_selected_rows (selection, @model)
loop
end sub |
Allerdings bin ich damit nicht ganz zufrieden. Jetz klappt zwar alles, so wie es soll, aber die DO...LOOP-Schleife ist ja mal mehr als unelegant...
Ich denke auch nicht, dass das Sinn der Sache ist, jedesmal eine komplett neue GList zu erstellen...
Der Beispielcode auf oben genannter Seite hat mir nicht sehr weitergeholfen, da FreeBasic anscheinend kein GtkTreeRowReference bzw. GTK_TREE_ROW_REFERENCE kennt. Ich weiß auch nicht, wie man das selbst deklarieren könnte...
Hat vielleicht sonst noch jemand eine Idee?
MfG Type |
|
Nach oben |
|
|
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 07.04.2011, 22:43 Titel: |
|
|
Zitat: | Der Beispielcode auf oben genannter Seite hat mir nicht sehr weitergeholfen, da FreeBasic anscheinend kein GtkTreeRowReference bzw. GTK_TREE_ROW_REFERENCE kennt. Ich weiß auch nicht, wie man das selbst deklarieren könnte... |
ich habe im ordner inc\gtk\gtk\gtktreemodel.bi folgendes gefunden:
Code: | type GtkTreeRowReference as _GtkTreeRowReference |
und GTK_TREE_ROW_REFERENCE gibt es in dem "schlau gemacht" code nicht nur gtk_tree_row_reference_get_path
Code: | declare function gtk_tree_row_reference_get_path (byval reference as GtkTreeRowReference ptr) as GtkTreePath ptr |
und in gtk.bi steht folgendes drinnen
Code: | #include once "gtk/gtktreemodel.bi" |
ich weiss also nicht was das problem sein sollte. |
|
Nach oben |
|
|
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 08.04.2011, 18:15 Titel: |
|
|
Das ist bei mir genauso, trotzdem erhalte ich bei folgendem Code:
Code: | sub gtk_playlist_remove
dim as GtkTreeSelection ptr selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_playlist))
if gtk_tree_selection_count_selected_rows(selection) = 0 then exit sub
dim as GtkTreeModel ptr model
dim as GList ptr list = gtk_tree_selection_get_selected_rows (selection, @model)
do until list = NULL
dim as GtkTreePath ptr path
path = gtk_tree_row_reference_get_path(GtkTreeRowReference(list->data))
if path then
dim as GtkTreeIter iter
if gtk_tree_model_get_iter(model, @iter, path) then gtk_list_store_remove(GTK_LIST_STORE(model), @iter)
end if
list = list->next
loop
end sub |
folgende Fehlermeldung:
fbc.exe hat Folgendes geschrieben: | gtk.bas(395) error 41: Variable not declared, GtkTreeRowReference in 'path = gtk_tree_row_reference_get_path(GtkTreeRowReference(list->data))'
gtk.bas(395) warning 1(1): Passing scalar as pointer, at parameter 1 of GTK_TREE_ROW_REFERENCE_GET_PATH()
Kompilierung fehlgeschlagen.
|
|
|
Nach oben |
|
|
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 08.04.2011, 18:51 Titel: |
|
|
weisst du wie du
Code: | path = gtk_tree_row_reference_get_path((GtkTreeRowReference*)node->data); |
nach FB uebersetzt?
Nicht so
Code: | path = gtk_tree_row_reference_get_path(GtkTreeRowReference(list->data)) |
sondern SO
Code: | path = gtk_tree_row_reference_get_path(cast(GtkTreeRowReference ptr, list->data)) |
|
|
Nach oben |
|
|
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 10.04.2011, 08:34 Titel: |
|
|
Oha, ich dachte bei den anderen Beispielen hätte es auch so geklappt, wie ich es erst gepostet habe.
Naja danke für die Antwort!
Allerdings bricht jetzt, beim Löschen der Einträge das Programm einfach ab.
Ist mein Ansatz falsch, oder was?
MfG Type |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|