Use GtkCellRendererCombo (#169607, Mark McLoughlin)

2005-03-08  Matthias Clasen  <mclasen@redhat.com>

	* demos/gtk-demo/editable_cells.c: Use GtkCellRendererCombo
	(#169607, Mark McLoughlin)
This commit is contained in:
Matthias Clasen 2005-03-08 16:10:28 +00:00 committed by Matthias Clasen
parent b6804b7219
commit b81da13000
4 changed files with 89 additions and 42 deletions

View File

@ -1,5 +1,8 @@
2005-03-08 Matthias Clasen <mclasen@redhat.com>
* demos/gtk-demo/editable_cells.c: Use GtkCellRendererCombo
(#169607, Mark McLoughlin)
* gtk/gtk.symbols: Add the new attributes here, too.
* gtk/gtkwidget.h:

View File

@ -1,5 +1,8 @@
2005-03-08 Matthias Clasen <mclasen@redhat.com>
* demos/gtk-demo/editable_cells.c: Use GtkCellRendererCombo
(#169607, Mark McLoughlin)
* gtk/gtk.symbols: Add the new attributes here, too.
* gtk/gtkwidget.h:

View File

@ -1,5 +1,8 @@
2005-03-08 Matthias Clasen <mclasen@redhat.com>
* demos/gtk-demo/editable_cells.c: Use GtkCellRendererCombo
(#169607, Mark McLoughlin)
* gtk/gtk.symbols: Add the new attributes here, too.
* gtk/gtkwidget.h:

View File

@ -4,6 +4,8 @@
* you're new to the GtkTreeView widgets and associates, look into
* the GtkListStore example first.
*
* The cell renderers used in this demo are GtkCellRendererText and
* GtkCellRendererCombo.
*/
#include <gtk/gtk.h>
@ -16,16 +18,20 @@ typedef struct
{
gint number;
gchar *product;
gboolean editable;
}
Item;
enum
{
COLUMN_NUMBER,
COLUMN_PRODUCT,
COLUMN_EDITABLE,
NUM_COLUMNS
COLUMN_ITEM_NUMBER,
COLUMN_ITEM_PRODUCT,
NUM_ITEM_COLUMNS
};
enum
{
COLUMN_NUMBER_TEXT,
NUM_NUMBER_COLUMNS
};
static GArray *articles = NULL;
@ -39,32 +45,27 @@ add_items (void)
foo.number = 3;
foo.product = g_strdup ("bottles of coke");
foo.editable = TRUE;
g_array_append_vals (articles, &foo, 1);
foo.number = 5;
foo.product = g_strdup ("packages of noodles");
foo.editable = TRUE;
g_array_append_vals (articles, &foo, 1);
foo.number = 2;
foo.product = g_strdup ("packages of chocolate chip cookies");
foo.editable = TRUE;
g_array_append_vals (articles, &foo, 1);
foo.number = 1;
foo.product = g_strdup ("can vanilla ice cream");
foo.editable = TRUE;
g_array_append_vals (articles, &foo, 1);
foo.number = 6;
foo.product = g_strdup ("eggs");
foo.editable = TRUE;
g_array_append_vals (articles, &foo, 1);
}
static GtkTreeModel *
create_model (void)
create_items_model (void)
{
gint i = 0;
GtkListStore *model;
@ -76,7 +77,7 @@ create_model (void)
add_items ();
/* create list store */
model = gtk_list_store_new (NUM_COLUMNS, G_TYPE_INT, G_TYPE_STRING,
model = gtk_list_store_new (NUM_ITEM_COLUMNS, G_TYPE_INT, G_TYPE_STRING,
G_TYPE_BOOLEAN);
/* add items */
@ -85,18 +86,45 @@ create_model (void)
gtk_list_store_append (model, &iter);
gtk_list_store_set (model, &iter,
COLUMN_NUMBER,
COLUMN_ITEM_NUMBER,
g_array_index (articles, Item, i).number,
COLUMN_PRODUCT,
COLUMN_ITEM_PRODUCT,
g_array_index (articles, Item, i).product,
COLUMN_EDITABLE,
g_array_index (articles, Item, i).editable,
-1);
}
return GTK_TREE_MODEL (model);
}
static GtkTreeModel *
create_numbers_model (void)
{
#define N_NUMBERS 10
gint i = 0;
GtkListStore *model;
GtkTreeIter iter;
/* create list store */
model = gtk_list_store_new (NUM_NUMBER_COLUMNS, G_TYPE_STRING, G_TYPE_INT);
/* add numbers */
for (i = 0; i < N_NUMBERS; i++)
{
char str[2] = { '0' + i, '\0' };
gtk_list_store_append (model, &iter);
gtk_list_store_set (model, &iter,
COLUMN_NUMBER_TEXT, str,
-1);
}
return GTK_TREE_MODEL (model);
#undef N_NUMBERS
}
static void
add_item (GtkWidget *button, gpointer data)
{
@ -108,14 +136,12 @@ add_item (GtkWidget *button, gpointer data)
foo.number = 0;
foo.product = g_strdup ("Description here");
foo.editable = TRUE;
g_array_append_vals (articles, &foo, 1);
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
COLUMN_NUMBER, foo.number,
COLUMN_PRODUCT, foo.product,
COLUMN_EDITABLE, foo.editable,
COLUMN_ITEM_NUMBER, foo.number,
COLUMN_ITEM_PRODUCT, foo.product,
-1);
}
@ -158,7 +184,7 @@ cell_edited (GtkCellRendererText *cell,
switch (column)
{
case COLUMN_NUMBER:
case COLUMN_ITEM_NUMBER:
{
gint i;
@ -170,7 +196,7 @@ cell_edited (GtkCellRendererText *cell,
}
break;
case COLUMN_PRODUCT:
case COLUMN_ITEM_PRODUCT:
{
gint i;
gchar *old_text;
@ -192,33 +218,41 @@ cell_edited (GtkCellRendererText *cell,
}
static void
add_columns (GtkTreeView *treeview)
add_columns (GtkTreeView *treeview,
GtkTreeModel *items_model,
GtkTreeModel *numbers_model)
{
GtkCellRenderer *renderer;
GtkTreeModel *model = gtk_tree_view_get_model (treeview);
/* number column */
renderer = gtk_cell_renderer_text_new ();
renderer = gtk_cell_renderer_combo_new ();
g_object_set (renderer,
"model", numbers_model,
"text-column", COLUMN_NUMBER_TEXT,
"has-entry", FALSE,
"editable", TRUE,
NULL);
g_signal_connect (renderer, "edited",
G_CALLBACK (cell_edited), model);
g_object_set_data (G_OBJECT (renderer), "column", (gint *)COLUMN_NUMBER);
G_CALLBACK (cell_edited), items_model);
g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_ITEM_NUMBER));
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
-1, "Number", renderer,
"text", COLUMN_NUMBER,
"editable", COLUMN_EDITABLE,
"text", COLUMN_ITEM_NUMBER,
NULL);
/* product column */
renderer = gtk_cell_renderer_text_new ();
g_object_set (renderer,
"editable", TRUE,
NULL);
g_signal_connect (renderer, "edited",
G_CALLBACK (cell_edited), model);
g_object_set_data (G_OBJECT (renderer), "column", (gint *)COLUMN_PRODUCT);
G_CALLBACK (cell_edited), items_model);
g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_ITEM_PRODUCT));
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
-1, "Product", renderer,
"text", COLUMN_PRODUCT,
"editable", COLUMN_EDITABLE,
"text", COLUMN_ITEM_PRODUCT,
NULL);
}
@ -232,7 +266,8 @@ do_editable_cells (GtkWidget *do_widget)
GtkWidget *sw;
GtkWidget *treeview;
GtkWidget *button;
GtkTreeModel *model;
GtkTreeModel *items_model;
GtkTreeModel *numbers_model;
/* create window, etc */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
@ -258,17 +293,20 @@ do_editable_cells (GtkWidget *do_widget)
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
/* create model */
model = create_model ();
/* create models */
items_model = create_items_model ();
numbers_model = create_numbers_model ();
/* create tree view */
treeview = gtk_tree_view_new_with_model (model);
g_object_unref (model);
treeview = gtk_tree_view_new_with_model (items_model);
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)),
GTK_SELECTION_SINGLE);
add_columns (GTK_TREE_VIEW (treeview));
add_columns (GTK_TREE_VIEW (treeview), items_model, numbers_model);
g_object_unref (numbers_model);
g_object_unref (items_model);
gtk_container_add (GTK_CONTAINER (sw), treeview);
@ -278,7 +316,7 @@ do_editable_cells (GtkWidget *do_widget)
button = gtk_button_new_with_label ("Add item");
g_signal_connect (button, "clicked",
G_CALLBACK (add_item), model);
G_CALLBACK (add_item), items_model);
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
button = gtk_button_new_with_label ("Remove item");