/ / gtk_tree_store comment ajouter des éléments non restitués sous forme de colonnes - c, gtk

gtk_tree_store comment ajouter des éléments non restitués sous forme de colonnes - c, gtk

Je modifie un programme C / Gtk + doté d'une interface graphique avec une interface de liste présentant une série de lignes et de colonnes sauvegardées par un gtk_tree_store et un gtk_tree_view.

Basé sur l'interaction avec ce programme, je veuxpour stocker des valeurs supplémentaires dans le modèle / magasin aux côtés des lignes / entrées existantes, mais je ne souhaite pas que ces valeurs soient affichées dans une colonne. Aucune autre structure de données existante contenant ces entrées ne peut être utilisée.

Comment puis-je ajouter une "colonne" à un gtk_tree_view que je peux définir avec gtk_tree_store_set mais qui ne soit pas restituée ou présentée sous forme de colonne? Des colonnes sont actuellement ajoutées avec un code qui ressemble à ceci:

renderer = gtk_cell_renderer_text_new();

g_object_set(
renderer,
"foreground",
"white",
NULL);


column = gtk_tree_view_column_new_with_attributes (
"ColX",
renderer,
"text",
COLUMN_ID_X,
"foreground",
SOME_COLOR,
"foreground-set",
COLOR_SET_COLUMN,
NULL);

gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);

Réponses:

0 pour la réponse № 1

Pour ne stocker que des données sans les afficher dans un GtkTreeView il suffit d'utiliser le modèle (GtkTreeStore, GtkListStore, etc.), c’est-à-dire, n’ajoutez pas de colonne pour cet attribut particulier dans le modèle.

Voici une version légèrement modifiée de gtk3-demo montrer comment stocker 2 "colonnes" dans un GtkListStore, mais en montrant un seul dans le GtkTreeView (la gravité colonne). Faites attention aux fonctions create_model et add_columns.

#include <gtk/gtk.h>

enum
{
COLUMN_NUMBER,
COLUMN_SEVERITY,
NUM_COLUMNS
};

static GtkTreeModel *
create_model (void)
{
GtkListStore *store;
GtkTreeIter iter;

store = gtk_list_store_new (NUM_COLUMNS,
G_TYPE_UINT,
G_TYPE_STRING);

gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
COLUMN_NUMBER, 1,
COLUMN_SEVERITY, "Normal", -1);

gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
COLUMN_NUMBER, 2,
COLUMN_SEVERITY, "Critical", -1);

return GTK_TREE_MODEL (store);
}

static void
add_columns (GtkTreeView *treeview)
{
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
GtkTreeModel *model = gtk_tree_view_get_model (treeview);

renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Severity", renderer,
"text", COLUMN_SEVERITY,
NULL);
gtk_tree_view_append_column (treeview, column);
}

int
main (int argc, char **argv)
{
GtkWidget *window = NULL;
GtkTreeModel *model = NULL;
GtkWidget *treeview;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (window), 280, 250);
g_signal_connect (window, "delete-event", G_CALLBACK (gtk_main_quit), NULL);

model = create_model ();
treeview = gtk_tree_view_new_with_model (model);
g_object_unref (model);

add_columns (GTK_TREE_VIEW (treeview));

gtk_container_add (GTK_CONTAINER (window), treeview);
gtk_widget_show_all (window);

gtk_main ();

return 0;
}