Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

GtkTreeView Eintrag löschen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 06.04.2011, 18:44    Titel: GtkTreeView Eintrag löschen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 07.04.2011, 08:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 07.04.2011, 21:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 08.04.2011, 17:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 08.04.2011, 17:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 10.04.2011, 07:34    Titel: Antworten mit Zitat

Oha, ich dachte bei den anderen Beispielen hätte es auch so geklappt, wie ich es erst gepostet habe. grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz