Anzeige:
Ergebnis 1 bis 4 von 4

Thema: GTK Tree-Model-View

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    So, meine erste GTK Model-View Ansicht ist fertig:
    Code:
    #include <gtk/gtk.h>
    
    enum
    {
       TITLE_COLUMN,
       AUTHOR_COLUMN,
       CHECKED_COLUMN,
       N_COLUMNS
    };
      
    int
    main (int argc, char **argv)
    {
    
    	GtkWidget *window;
    
    	gtk_init(&argc, &argv);
    
    	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    	g_signal_connect(window, "delete_event", gtk_main_quit, NULL);
    
    	
    	GtkTreeStore *store = gtk_tree_store_new (N_COLUMNS,       /* Total number of columns */
    						  G_TYPE_STRING,   /* Book title              */
    						  G_TYPE_STRING,   /* Author                  */
    						  G_TYPE_BOOLEAN); /* Is checked out?         */
    	
    	
    	GtkTreeIter iter1;  /* Parent iter */
    	GtkTreeIter iter2;  /* Child iter  */
    
    	gtk_tree_store_append (store, &iter1, NULL);  /* Acquire a top-level iterator */
    	gtk_tree_store_set (store, &iter1,
    			    TITLE_COLUMN, "The Art of Computer Programming",
    			    AUTHOR_COLUMN, "Donald E. Knuth",
    			    CHECKED_COLUMN, TRUE,
    			    -1);
    
    	gtk_tree_store_append (store, &iter2, &iter1);  /* Acquire a child iterator */
    	gtk_tree_store_set (store, &iter2,
    			    TITLE_COLUMN, "Volume 1: Fundamental Algorithms",
    			    -1);
    
    	gtk_tree_store_append (store, &iter2, &iter1);
    	gtk_tree_store_set (store, &iter2,
    			    TITLE_COLUMN, "Volume 2: Seminumerical Algorithms",
    			    -1);
    
    	gtk_tree_store_append (store, &iter2, &iter1);
    	gtk_tree_store_set (store, &iter2,
    			    TITLE_COLUMN, "Volume 3: Sorting and Searching",
    			    -1);
    	
    	////////////////////////////////////////////////////////////////////////////////////////////
    	
    	
    	GtkWidget *tree;
    
    	tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
    
    	g_object_unref(store); /* destroy model automatically with view */
    
    	gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)),
    				    GTK_SELECTION_NONE);
    	
    	g_signal_connect(tree, "row-activated", G_CALLBACK(onRowActivated), NULL);
    	
    	////////////////////////////////////////////////////////////////////////////////////////////
    	
    	
    	GtkTreeViewColumn *column;
    	GtkCellRenderer *renderer;
    	
    	/* Create a cell render and arbitrarily make it red for demonstration
    	 * purposes */
    	renderer = gtk_cell_renderer_text_new ();
    	g_object_set (G_OBJECT (renderer),
    			"foreground", "red",
    			NULL);
    
    	/* Create a column, associating the "text" attribute of the
    	 * cell_renderer to the first column of the model */
    	column = gtk_tree_view_column_new_with_attributes ("Author", renderer,
    							   "text", AUTHOR_COLUMN,
    							    NULL);
    
    	/* Add the column to the view. */
    	gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
    	
    	/* Second column.. title of the book. */
    	renderer = gtk_cell_renderer_text_new ();
    	column = gtk_tree_view_column_new_with_attributes ("Title",
    							      renderer,
    							      "text", TITLE_COLUMN,
    							      NULL);
    	gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
    
    	/* Last column.. whether a book is checked out. */
    	renderer = gtk_cell_renderer_toggle_new ();
    	column = gtk_tree_view_column_new_with_attributes ("Checked out",
    							      renderer,
    							      "active", CHECKED_COLUMN,
    							      NULL);
    	gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
    	
    	
    	////////////////////////////////////////////////////////////////////////////////////////////
    	
    	
    	gtk_container_add(GTK_CONTAINER(window), tree);
    
    	gtk_widget_show_all(window);
    
    	gtk_main();
    
    	return 0;
    }
    }
    "Note that the model is never populated with data — that is left as an exercise for the reader" hatte mich durcheinander gebracht, Englisch ist halt nicht meine Muttersprache. Auch das GtkTreeViewColumn angewandt werden muss.
    Nur das Editieren der Daten macht noch ein paar Probleme.


    check kann initialisiert werden:
    Code:
    void check (GtkCellRendererToggle * cell, gchar * path, GtkListStore * model)
    g_signal_connect (cell, "toggled", G_CALLBACK (check), store);
    siehe: www.stackoverflow.com/ questions/...
    Geändert von dml (25-09-2013 um 09:58 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •