Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[GTK+] Podwójna lista rozwijana

Ostatnio zmodyfikowano 2013-10-07 10:17
Autor Wiadomość
MrPoxipol
» 2013-09-30 16:47:08
Normalnie wystarczą comboboxy dla każdej opcji. Możesz to wykonać jak ma AMD na stronie pobrań sterowników. Swoją drogą do wyświetlania możliwych (socketów, płyt, etc) nadał by się SQLite - do wygodnego wyszukiwania po określonych kryteriach.
P-92914
m4tx
» 2013-09-30 17:04:11
Swoją drogą do wyświetlania możliwych (socketów, płyt, etc) nadał by się SQLite - do wygodnego wyszukiwania po określonych kryteriach.
Eeeee? SQLite do pobrania wartości z prostego drzewa? Raczej mało to wygodne...
P-92919
maniek1310
Temat założony przez niniejszego użytkownika
» 2013-09-30 18:49:59
Szkic :
P-92926
Badman
» 2013-10-02 09:27:09
Nie pisałem dalej bo nie byłem pewien czy o to Ci chodzi...

C/C++
#include <gtk/gtk.h>

enum {
    COMBOBOX1,
    COMBOBOX2,
    COMBOBOX3,
    COMBOBOX4,
    COMBOBOX5,
    COMBOBOX6,
    ILOSC_COMOBOX
};


void combo_selected( GtkWidget * widget, gpointer etykieta );


int main( int argc, char * argv[] )
{
    GtkWidget * okno;
    GtkWidget * vbox;
    GtkWidget * tabela;
    GtkWidget * combobox1, * combobox2, * combobox3, * combobox4, * combobox5, * combobox6, * combobox7;
    GtkWidget * etykieta, * etykieta2;
   
    gtk_init( & argc, & argv );
   
    okno = gtk_window_new( GTK_WINDOW_TOPLEVEL );
    gtk_window_set_title( GTK_WINDOW( okno ), "Combo" );
    g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL );
   
    /* Tworzy pionowe pole pakujace z odstepem od potomkow 5 oraz dodaje je do okna*/
    vbox = gtk_vbox_new( TRUE, 5 );
    gtk_container_add( GTK_CONTAINER( okno ), vbox );
   
   
    /* Tworzy tabele 4x6 */
    tabela = gtk_table_new( 4, 6, FALSE );
   
    etykieta = gtk_label_new( "Wybierz producenta :" );
    gtk_table_attach( GTK_TABLE( tabela ), etykieta, 0, 1, 0, 1,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    combobox1 = gtk_combo_box_new_text();
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox1 ), "Na A" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox1 ), "Na B" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox1 ), "Na C" );
    gtk_combo_box_set_active( GTK_COMBO_BOX( combobox1 ), 0 );
    gtk_table_attach( GTK_TABLE( tabela ), combobox1, 1, 2, 0, 1,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    etykieta = gtk_label_new( "Typ socketu :" );
    gtk_table_attach( GTK_TABLE( tabela ), etykieta, 0, 1, 1, 2,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    combobox2 = gtk_combo_box_new_text();
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox2 ), "Typ Socket A" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox2 ), "Typ Socket B" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox2 ), "Typ Socket C" );
    gtk_combo_box_set_active( GTK_COMBO_BOX( combobox2 ), 0 );
    gtk_table_attach( GTK_TABLE( tabela ), combobox2, 1, 2, 1, 2,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    etykieta = gtk_label_new( "Socket :" );
    gtk_table_attach( GTK_TABLE( tabela ), etykieta, 0, 1, 2, 3,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    combobox3 = gtk_combo_box_new_text();
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox3 ), "Socket A" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox3 ), "Socket B" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox3 ), "Socket C" );
    gtk_combo_box_set_active( GTK_COMBO_BOX( combobox3 ), 0 );
    gtk_table_attach( GTK_TABLE( tabela ), combobox3, 1, 2, 2, 3,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    etykieta = gtk_label_new( "Chipset :" );
    gtk_table_attach( GTK_TABLE( tabela ), etykieta, 0, 1, 3, 4,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    combobox4 = gtk_combo_box_new_text();
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox4 ), "Chipset A" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox4 ), "Chipset B" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox4 ), "Chipset C" );
    gtk_combo_box_set_active( GTK_COMBO_BOX( combobox4 ), 0 );
    gtk_table_attach( GTK_TABLE( tabela ), combobox4, 1, 2, 3, 4,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    etykieta = gtk_label_new( "Płyty głowne :" );
    gtk_table_attach( GTK_TABLE( tabela ), etykieta, 0, 1, 4, 5,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    combobox5 = gtk_combo_box_new_text();
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox5 ), "Płyta A" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox5 ), "Płyta B" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox5 ), "Płyta C" );
    gtk_combo_box_set_active( GTK_COMBO_BOX( combobox5 ), 0 );
    gtk_table_attach( GTK_TABLE( tabela ), combobox5, 1, 2, 4, 5,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
   
    etykieta = gtk_label_new( "Nazwa płyty głowne :" );
    gtk_table_attach( GTK_TABLE( tabela ), etykieta, 2, 3, 0, 1,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    combobox6 = gtk_combo_box_new_text();
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox6 ), "Płyta A" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox6 ), "Płyta B" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox6 ), "Płyta C" );
    gtk_combo_box_set_active( GTK_COMBO_BOX( combobox6 ), 0 );
    gtk_table_attach( GTK_TABLE( tabela ), combobox6, 3, 4, 0, 1,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    etykieta = gtk_label_new( "Ilość złączy sata :" );
    gtk_table_attach( GTK_TABLE( tabela ), etykieta, 2, 3, 1, 2,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
    combobox6 = gtk_combo_box_new_text();
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox6 ), "1" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox6 ), "2" );
    gtk_combo_box_append_text( GTK_COMBO_BOX( combobox6 ), "3" );
    gtk_combo_box_set_active( GTK_COMBO_BOX( combobox6 ), 0 );
    gtk_table_attach( GTK_TABLE( tabela ), combobox6, 3, 4, 1, 2,
    GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
   
   
    gtk_box_pack_start( GTK_BOX( vbox ), tabela, FALSE, FALSE, 0 );
   
    etykieta2 = gtk_label_new( "" );
    gtk_container_add( GTK_CONTAINER( vbox ), etykieta2 );
   
    g_signal_connect( G_OBJECT( combobox1 ), "changed", G_CALLBACK( combo_selected ), GINT_TO_POINTER( COMBOBOX1 ) );
    g_signal_connect( G_OBJECT( combobox2 ), "changed", G_CALLBACK( combo_selected ), GINT_TO_POINTER( COMBOBOX2 ) );
    g_signal_connect( G_OBJECT( combobox3 ), "changed", G_CALLBACK( combo_selected ), GINT_TO_POINTER( COMBOBOX3 ) );
    g_signal_connect( G_OBJECT( combobox4 ), "changed", G_CALLBACK( combo_selected ), GINT_TO_POINTER( COMBOBOX4 ) );
    g_signal_connect( G_OBJECT( combobox5 ), "changed", G_CALLBACK( combo_selected ), GINT_TO_POINTER( COMBOBOX5 ) );
    g_signal_connect( G_OBJECT( combobox6 ), "changed", G_CALLBACK( combo_selected ), GINT_TO_POINTER( COMBOBOX6 ) );
   
    gtk_widget_show_all( okno );
    gtk_main();
   
    return 0;
}

void combo_selected( GtkWidget * widget, gpointer dane_uzytkownika )
{
    guint ktory_combo;
   
    ktory_combo = GPOINTER_TO_INT( dane_uzytkownika );
   
    g_print( "Wybrano %d\n", ktory_combo );
}
P-93015
maniek1310
Temat założony przez niniejszego użytkownika
» 2013-10-03 20:02:17
Tutaj błąd
C/C++
gtk_table_attach( GTK_TABLE( tabela ), etykieta, 0, 1, 0, 1,
GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
P-93063
MrPoxipol
» 2013-10-03 20:18:56
P-93064
maniek1310
Temat założony przez niniejszego użytkownika
» 2013-10-04 20:50:25
Dobra działa, a teraz jak mam sprawdzać czy dany element został wybrany i wtedy pozostałość comboboxów będzie miała inne rzeczy do wyboru.
P-93113
Badman
» 2013-10-07 10:17:38
Naprzykład tak:
C/C++
void combo_selected( GtkComboBox * widget, gpointer dane_uzytkownika )
{
    guint ktory_combo;
    gchar * tekst;
   
    ktory_combo = GPOINTER_TO_INT( dane_uzytkownika );
   
    g_print( "Wybrano %d\n", ktory_combo );
   
    tekst = gtk_combo_box_get_active_text( widget );
   
    switch( ktory_combo )
    {
    case COMBOBOX1:
        if( g_strcmp0( tekst, "Na A" ) == 0 )
             g_print( " Wybrano Na A\n" );
       
        if( g_strcmp0( tekst, "Na B" ) == 0 )
             g_print( " Wybrano Na B\n" );
       
        if( g_strcmp0( tekst, "Na C" ) == 0 )
             g_print( " Wybrano Na C\n" );
       
        break;
       
    case COMBOBOX2:
        if( g_strcmp0( tekst, "Typ Socket A" ) == 0 )
             g_print( " Wybrano Typ Socket A" );
       
        if( g_strcmp0( tekst, "Typ Socket B" ) == 0 )
             g_print( " Wybrano Typ Socket B" );
       
        if( g_strcmp0( tekst, "Typ Socket C" ) == 0 )
             g_print( " Wybrano Typ Socket C" );
       
        break;
       
    }
   
    g_free( tekst );
}
P-93303
1 « 2 »
Poprzednia strona Strona 2 z 2