Listo !!
Ya pude lograrlo !!

Les dejo (a quien le pueda servir, o le interese) el codigo completo.

Vuelvo a insistir: que complicado que es GTK !!!!!!

Saludos
MA_Xx

/*
 * Taller de Programación I (Veiga)
 * Fecha: 7 / 08 / 2007 Cuatrimestre: 1º / 2007 Tema: 4
 *
 * 7) Escriba una rutina que cargue un combo con 12 elementos.
 * Cada uno de ellos deberá tener el nombre de un mes como nombre visible
 * y la cantidad de días de ese mes como valor asociado.
 *
 * */

#include <gtk/gtk.h>
#include <glib/gprintf.h>
#include <string.h>

/* DEFINICION DE LA ESTRUCTURA DE LOS ITEMS DE LA LISTA DEL COMBOBOX */
enum {
  COLUMN_STRING,
  COLUMN_INT,
  N_COLUMNS
};

/*
 * Callback para el ItemChanged del ComboBox
 * */
void combo_selected_item(GtkWidget *widget) {

  /*
*************************************************************************
   MOSTRAMOS EL ITEM SELECCIONADO: El texto y el valor asociado
  *************************************************************************
*/

  g_printf("Item Changed...\n");

  GtkTreeModel *model;
  GtkTreeIter iter;
  GValue val;

  gtk_combo_box_get_active_iter (GTK_COMBO_BOX(widget), &iter);
  model = gtk_combo_box_get_model (GTK_COMBO_BOX(widget));

  memset (&val, 0, sizeof (val));
  gtk_tree_model_get_value (model, &iter, COLUMN_STRING, &val);

  g_printf("New Item: %s \n", g_value_get_string (&val));

  g_value_unset(&val);

  memset (&val, 0, sizeof (val));
  gtk_tree_model_get_value (model, &iter, COLUMN_INT, &val);

  g_printf("New Data: %d \n", g_value_get_int (&val));

  g_value_unset(&val);

  fflush(stdout);

}


/*
 * Creamos la lista para el ComboBox con los nombres de Meses
 * y un entero asociado que indica los dias que tiene cada mes
 *
 * */
GtkListStore * create_lista_meses() {

    GtkListStore * list_store;
    GtkTreeIter iter;


    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);

    gtk_list_store_append (list_store, &iter);
    gtk_list_store_set (list_store, &iter,
                        COLUMN_STRING, "Mayo",
                        COLUMN_INT, 31,
                        -1);

    gtk_list_store_append (list_store, &iter);
    gtk_list_store_set (list_store, &iter,
                        COLUMN_STRING, "Junio",
                        COLUMN_INT, 30,
                        -1);

    gtk_list_store_append (list_store, &iter);
    gtk_list_store_set (list_store, &iter,
                        COLUMN_STRING, "Julio",
                        COLUMN_INT, 31,
                        -1);

    gtk_list_store_append (list_store, &iter);
    gtk_list_store_set (list_store, &iter,
                        COLUMN_STRING, "Agosto",
                        COLUMN_INT, 31,
                        -1);

    gtk_list_store_append (list_store, &iter);
    gtk_list_store_set (list_store, &iter,
                        COLUMN_STRING, "Septiembre",
                        COLUMN_INT, 30,
                        -1);

    gtk_list_store_append (list_store, &iter);
    gtk_list_store_set (list_store, &iter,
                        COLUMN_STRING, "Octubre",
                        COLUMN_INT, 31,
                        -1);

    gtk_list_store_append (list_store, &iter);
    gtk_list_store_set (list_store, &iter,
                        COLUMN_STRING, "Noviembre",
                        COLUMN_INT, 30,
                        -1);

    gtk_list_store_append (list_store, &iter);
    gtk_list_store_set (list_store, &iter,
                        COLUMN_STRING, "Diciembre",
                        COLUMN_INT, 31,
                        -1);

    return list_store;
}



/*
 * GTK MAIN:
 * ComboBox con los meses del año
 * y la cantidad de dias de cada mes como valor asociado
 *
 * */
int combobox_maxx(int argc, char **argv) {

    GtkWidget * ventana;
    GtkWidget * combo;

    GtkListStore * list_store;
    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 = create_lista_meses();

    /* 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;
}


On Sun, Dec 14, 2008 at 2:07 AM, Maximiliano Milicich <
[email protected]> wrote:

> 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

Responder a