matiko101 Temat założony przez niniejszego użytkownika |
Gtk, g_signal_connect i funkcja z referencjami » 2014-01-22 20:13:34 Witam ponownie ... Już sobie nie radzę i mam prośbę. Mógłby ktoś wskazać mi co jest źle w moim kodzie ? Domyślam się, że w miejscach komentarzowych w kodzie. Jak w takim razie przekazać referencje do funkcji wlaczenie_programu ? Czytałem jeden z tematów tu na forum o g_signal_connect i gpointer, ale dalej nie rozumiem. KOD: #include <gtk/gtk.h> #include<fstream> #include <string> #include<windows.h> #include <iostream>
int wlaczanie_programu( GtkButton * button, std::string sciezki_programy[ 6 ], std::string nazwy_programy[ 6 ] ) { gchar * tekst; tekst = g_strdup( gtk_button_get_label( button ) ); std::cout << nazwy_programy[ 0 ] << "\n"; if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ) ) ) { if( tekst == nazwy_programy[ 0 ] ) system( std::string( "\"" + sciezki_programy[ 0 ] + "\"" ).c_str() ); if( tekst == nazwy_programy[ 2 ] ) system( std::string( "\"" + sciezki_programy[ 2 ] + "\"" ).c_str() ); } }
int wartosci_buttonow( GtkWidget * button[ 8 ], std::string nazwy_programy[ 6 ] ) { button[ 0 ] = gtk_toggle_button_new_with_label( nazwy_programy[ 0 ].c_str() ); button[ 1 ] = gtk_toggle_button_new_with_label( nazwy_programy[ 1 ].c_str() ); button[ 2 ] = gtk_toggle_button_new_with_label( nazwy_programy[ 2 ].c_str() ); button[ 3 ] = gtk_toggle_button_new_with_label( nazwy_programy[ 3 ].c_str() ); button[ 4 ] = gtk_toggle_button_new_with_label( nazwy_programy[ 4 ].c_str() ); button[ 5 ] = gtk_toggle_button_new_with_label( nazwy_programy[ 5 ].c_str() ); button[ 6 ] = gtk_toggle_button_new_with_label( "Zamknij" ); button[ 7 ] = gtk_toggle_button_new_with_label( "Wlacz" ); } int nazwy_buttonow( std::string nazwy_programy[ 6 ], std::string sciezki_programy[ 6 ] ) { std::fstream programy_plik; programy_plik.open( "programy.txt", std::ios::in ); for( int i = 0; i != 6; i++ ) { getline( programy_plik, nazwy_programy[ i ] ); } std::fstream sciezki_plik; sciezki_plik.open( "sciezki.txt", std::ios::in ); for( int i = 0; i != 6; i++ ) { getline( sciezki_plik, sciezki_programy[ i ] ); } } int zmien_wlacznik( GtkWidget * button ) { if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ) ) ) gtk_button_set_label( GTK_BUTTON( button ), "Wylacz" ); else gtk_button_set_label( GTK_BUTTON( button ), "Wlacz" ); }
int polozenie_buttonow( GtkWidget * button[ 7 ], GtkWidget * kontener ) { for( int i = 0, j = 0; i != 8; i++ ) { if( i < 3 ) { gtk_widget_set_size_request( button[ i ], 99, 29 ); gtk_fixed_put( GTK_FIXED( kontener ), button[ i ], 5, 55 + i * 30 ); } else if( i == 6 ) { gtk_widget_set_size_request( button[ i ], 200, 30 ); gtk_fixed_put( GTK_FIXED( kontener ), button[ i ], 5, 145 ); } else if( i == 7 ) { gtk_widget_set_size_request( button[ i ], 50, 20 ); gtk_fixed_put( GTK_FIXED( kontener ), button[ i ], 205, 5 ); } else { gtk_widget_set_size_request( button[ i ], 99, 29 ); gtk_fixed_put( GTK_FIXED( kontener ), button[ i ], 105, 55 + j * 30 ); j++; } } }
int main( int argc, char * argv[] ) { GtkWidget * okno; GtkWidget * kontener; GtkWidget * button[ 8 ]; GtkWidget * tlo; std::string nazwy_programy[ 6 ]; std::string sciezki_programy[ 6 ]; gtk_init( & argc, & argv ); okno = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER ); gtk_window_set_default_size( GTK_WINDOW( okno ), 260, 180 ); gtk_window_set_title( GTK_WINDOW( okno ), "MENADZER" ); kontener = gtk_fixed_new(); gtk_container_add( GTK_CONTAINER( okno ), kontener ); tlo = gtk_image_new_from_file( "tlo.bmp" ); gtk_fixed_put( GTK_FIXED( kontener ), tlo, 0, 0 ); nazwy_buttonow( nazwy_programy, sciezki_programy ); wartosci_buttonow( button, nazwy_programy ); polozenie_buttonow( button, kontener ); g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL ); g_signal_connect( button[ 7 ], "clicked", G_CALLBACK( zmien_wlacznik ), NULL ); for( int i = 0; i != 6; i++ ) { g_signal_connect( button[ i ], "clicked", G_CALLBACK( wlaczanie_programu ),( & i, sciezki_programy, nazwy_programy ) ); } gtk_widget_show_all( okno ); gtk_main(); return 0; }
|