| 
				
					|  | 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, 18: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, 08: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, 21: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, 17: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, 17: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, 07: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.
 
 |  |