Bueno...lo he logrado !!
Me faltaba describir el CellLayout...en donde se indica cual sera el campo a
mostrar...
(fuente:
https://stage.maemo.org/svn/maemo/projects/haf/trunk/gtk+/tests/testcombo.c)
Ahora lo q me faltaria para cerrar el tema es COMO DEMONIOS hago para
obtener la data asociada a la fila seleccionada cada vez que cambia el valor
del Combo...
A quien tenga ganas de ayudarme, mas que agradecido....=)
Aca paso el codigo que tengo hasta ahora:
#include <gtk/gtk.h>
#include <glib/gprintf.h>
enum {
COLUMN_STRING,
COLUMN_INT,
N_COLUMNS
};
void combo_selected_item(GtkWidget *widget) {
/*
*************************************************************************
COMO HAGO PARA OBTENER LA DATA ASOCIADA AL ITEM SELECCIONADO ???????????
*************************************************************************
*/
g_printf("Item Changed...\n");
fflush(stdout);
}
int combobox_maxx(int argc, char **argv) {
GtkWidget * ventana;
GtkWidget * combo;
GtkListStore *list_store;
GtkTreeIter iter;
GtkCellRenderer *renderer;
gtk_init(&argc, &argv);
/*
* Creamos la lista para el ComboBox con los nombres de Meses
* y un entero asociado que indica los dias que tiene cada mes
*
* */
list_store = gtk_list_store_new (N_COLUMNS,
G_TYPE_STRING,
G_TYPE_INT);
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter,
COLUMN_STRING, "Enero",
COLUMN_INT, 31,
-1);
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter,
COLUMN_STRING, "Febrero",
COLUMN_INT, 28,
-1);
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter,
COLUMN_STRING, "Marzo",
COLUMN_INT, 31,
-1);
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter,
COLUMN_STRING, "Abril",
COLUMN_INT, 30,
-1);
/* Creamos el ComboBox a partir de la lista de arriba */
combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(list_store));
/* Atributos visuales de la lista desplegable del Combo */
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
/* ESTE INDICA CUAL SERA EL CAMPO DE LA LISTA QUE SE MUESTRA
(COLUMN_STRING en nuestro caso) */
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
"text", COLUMN_STRING, NULL);
/* setea el item activo default (el primero) */
gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
/* callback para el ItemChanged del ComboBox */
g_signal_connect(G_OBJECT(combo), "changed",
G_CALLBACK(combo_selected_item), NULL );
/* Creamos la ventana */
ventana = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width(GTK_CONTAINER(ventana), 10);
/* Callbacks para que al cerrarse la ventana se termine la aplicacion */
g_signal_connect(G_OBJECT(ventana), "delete_event",
G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(ventana), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
/* Agregamos el ComboBox directamente en la ventana */
gtk_container_add(GTK_CONTAINER(ventana), combo);
/* LISTO !! */
gtk_widget_show_all(ventana);
gtk_main();
return 0;
}
Muchas gracias !
Saludos
MA_Xx
PS: que complicado que es este GTK !!!!!!!!!!!! =(
On Sat, Dec 13, 2008 at 10:34 PM, Maximiliano Milicich <
[email protected]> wrote:
> Ricardo:
> Muchas gracias...pero estos ejemplos de combo que me pasas tienen solo
> entradas de texto, sin valor asociado...
>
> Yo queria saber como se hace para construir un combo con una lista de
> opciones, en la q cada una tenga un valor asociado...de forma de al elegir
> una yo pueda tener el valor asociado (un ID)
>
> Mi duda surge a partir de un ejercicio de final de Taller 1 Veiga, en la
> que se pide hacer un combo con los meses del año y cada mes tenga como valor
> asociado la cantidad de dias en el mes (enero (31), febrero (28), marzo
> (31), abril (30), ....)
>
> Juro que no puedo encontrar la forma de hacerlo...
> Tengo este codigo, lo unico que pude construir en base al tutorial oficial
> de GTK: me aparece la ventana con el combo, me aparecen hasta las 4 lineas
> en la lista desplegable, pero no me aparecen las opciones como texto
> (aparecen vacias)
>
>
> #include <gtk/gtk.h>
>
> enum {
> COLUMN_STRING,
> COLUMN_INT,
> COLUMN_BOOLEAN,
> N_COLUMNS
> };
>
> int combobox(int argc, char **argv) {
>
> GtkWidget * ventana;
> GtkWidget * combo;
>
> GtkListStore *list_store;
> GtkTreeIter iter;
>
> gtk_init(&argc, &argv);
>
> list_store = gtk_list_store_new (N_COLUMNS,
> G_TYPE_STRING,
> G_TYPE_INT,
> G_TYPE_BOOLEAN);
>
> gtk_list_store_append (list_store, &iter);
> gtk_list_store_set (list_store, &iter,
> COLUMN_STRING, "some_data1",
> COLUMN_INT, 1,
> COLUMN_BOOLEAN, FALSE,
> -1);
> gtk_list_store_append (list_store, &iter);
> gtk_list_store_set (list_store, &iter,
> COLUMN_STRING, "some_data2",
> COLUMN_INT, 2,
> COLUMN_BOOLEAN, FALSE,
> -1);
> gtk_list_store_append (list_store, &iter);
> gtk_list_store_set (list_store, &iter,
> COLUMN_STRING, "some_data3",
> COLUMN_INT, 3,
> COLUMN_BOOLEAN, FALSE,
> -1);
> gtk_list_store_append (list_store, &iter);
> gtk_list_store_set (list_store, &iter,
> COLUMN_STRING, "some_data4",
> COLUMN_INT, 4,
> COLUMN_BOOLEAN, FALSE,
> -1);
>
> combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(list_store));
>
> ventana = gtk_window_new(GTK_WINDOW_TOPLEVEL);
>
> g_signal_connect(G_OBJECT(ventana), "delete_event",
> G_CALLBACK(gtk_main_quit), NULL);
> g_signal_connect(G_OBJECT(ventana), "destroy",
> G_CALLBACK(gtk_main_quit), NULL);
> gtk_container_set_border_width(GTK_CONTAINER(ventana), 10);
>
> gtk_container_add(GTK_CONTAINER(ventana), combo);
>
> gtk_widget_show(combo);
>
> gtk_widget_show(ventana);
>
> gtk_main();
>
> return 0;
> }
>
>
> A quien me pueda ayudar, muchas gracias !!!!!!!
> MA_Xx
>
>
>
> On Fri, Dec 5, 2008 at 12:58 AM, Ricardo Markiewicz <[email protected]>wrote:
>
>> 2008/12/5 Ricardo Markiewicz <[email protected]>:
>> > 2008/12/5 Maximiliano Milicich <[email protected]>:
>> >> Hola:
>> >> Alguien q sepa de GTK+2.0 (en C) me podra pasar un ejemplo de como
>> construir
>> >> un combo box con entradas y valores asociados ?
>> >> Puedo lograr un Combo Box con solo entradas de texto, pero me estoy
>> >> volviendo loco intentando encontrar la manera de que el Combo tenga
>> cada
>> >> elemento con un valor asociado (digamos, un numero para cada entrada
>> de
>> >> texto)...
>> >>
>> >> Ejemplo
>> >> Juan (valor asociado 1)
>> >> Pepe (valor asociado 2)
>> >> Jose (valor asociado 3)
>> >>
>> >> Me lei el tutorial oficial de GTK de punta a punta y no hay un ejemplo
>> de
>> >> eso...
>> >> Y en el GTK Reference Manual no dan ejemplos...solo explican que hace
>> cada
>> >> funcion y no puedo llegar a entender como hacerlo... =(
>> >
>> > http://library.gnome.org/devel/gtk-tutorial/stable/x1065.html
>>
>> Y http://zetcode.com/tutorials/gtktutorial/gtkwidgetsII/ también te
>> puede servir.
>>
>> Saludos
>>
>> --
>> --
>> Ricardo Markiewicz
>> http://www.gazer.com.ar/
>>
>> _______________________________________________
>> Lista de correo Programacion.
>> [email protected]
>> http://listas.fi.uba.ar/mailman/listinfo/programacion
>>
>
>
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion