/* from http://www.gtk.org/tutorial1.2/gtk_tut-31.html http://scentric.net/tutorial/sec-treemodel-data-retrieval.html#sec-treemodel-retrieved-data-disposal */ //#include "config.h" #include #include #include #include #include #include #include #include #include // This is our data identification string to store // data in list items // const gchar *list_item_data_key="list_item_data"; // prototypes for signal handler that we are going to connect // to the List widget // GtkBuilder *builder; GError *error = NULL; GtkWidget *window = NULL; GtkWidget *vbox = NULL; GtkWidget *scrolled_window = NULL; GtkWidget *treeview = NULL; GtkWidget *gtklist = NULL; GtkListStore *liststore; GtkWidget *button = NULL; GtkWidget *list_item; gchar logval[4096]; void jcblog(){ FILE * jcblog_handle; int length, errno; char fullprint[256]; char log_path[] = "/home/user/jcb/jcblog.txt"; list_item = gtk_list_item_new_with_label (logval); gtk_container_add (GTK_CONTAINER (gtklist), list_item); //gtk_container_add (GTK_CONTAINER (liststore), list_item); gtk_widget_show (list_item); if (!(jcblog_handle = fopen(log_path, "a")) ){ fprintf(stderr, "%s\n", log_path); fprintf(stderr, "\njcbip - log file can't be opened 'a'. error: %d: ", errno); perror(""); //return -1 ; } else { fprintf( jcblog_handle, "%s\n", logval); printf("%s", logval); fseek( jcblog_handle, 0L, SEEK_END); length = ftell(jcblog_handle); fclose(jcblog_handle); if (length > 100000){ if (!(jcblog_handle = fopen(log_path, "w")) ){ fprintf(stderr, "%s\n", log_path); fprintf(stderr, "\nlog file can't be opened 'w'. error: %d: ", errno); perror(""); } else { fclose(jcblog_handle); } } } } void on_button1_clicked (GtkWidget *widget, gpointer data) { //g_print ("Hello again - %s was pressed\n", (gchar *) data); strcpy(logval, "bouton connect !"); jcblog(); } //----------------------- main ------------------------------ // Main function to set up the user interface gint main( int argc, gchar *argv[] ) { int c; // Initialize GTK (and subsequently GDK) gtk_init( &argc, &argv ); printf("utiliser Glade (o/n) ? : "); c = toupper(getc(stdin)); if(c == 'O') { // Create new GtkBuilder object builder = gtk_builder_new(); // Load UI from file. If error occurs, report it and quit application. // Replace "tut.glade" with your saved project. if( ! gtk_builder_add_from_file( builder, "glade.txt", &error ) ) { g_warning( "%s", error->message ); g_free( error ); return( 1 ); } // Get main window pointer from UI window = GTK_WIDGET( gtk_builder_get_object( builder, "window1" ) ); if( ! window) g_print ("erreur window\n"); gtk_window_set_title (GTK_WINDOW (window), "jcb"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); // get vbox pointer from UI vbox = GTK_WIDGET( gtk_builder_get_object( builder, "vbox1" ) ); if( ! vbox) g_print ("erreur vbox\n"); // get scrolled_window pointer from UI scrolled_window = GTK_WIDGET( gtk_builder_get_object( builder, "scrolledwindow1" ) ); if( ! scrolled_window) g_print ("erreur scrolled_window\n"); gtk_widget_set_size_request (scrolled_window, 500, 500); // get treeview pointer from UI treeview = GTK_WIDGET( gtk_builder_get_object( builder, "treeview1" ) ); if( ! treeview) g_print ("erreur treeview\n"); gtk_widget_set_size_request (treeview, 500, 500); // get liststore pointer from UI liststore = GTK_LIST_STORE( gtk_builder_get_object( builder, "liststore1" ) ); if( ! liststore) g_print ("erreur liststore\n"); //gtk_widget_set_size_request (liststore, 500, 500); // get button pointer from UI button = GTK_WIDGET( gtk_builder_get_object( builder, "button1" ) ); if( ! button) g_print ("erreur button\n"); // Connect signals gtk_builder_connect_signals( builder, NULL ); // Destroy builder, we don't need it anymore g_object_unref( G_OBJECT( builder ) ); // Show window. All other widgets are automatically shown by GtkBuilder gtk_widget_show( window ); } else //---------------------------------------------- { // Create a window to put all the widgets in // connect gtk_main_quit() to the "destroy" event of // the window to handle window manager close-window-events // window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "jcb"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); // Inside the window we need a box to arrange the widgets // vertically vbox = gtk_vbox_new (FALSE, 5); gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show (vbox); // // This is the scrolled window to put the List widget inside scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_size_request (scrolled_window, 500, 250); gtk_container_add (GTK_CONTAINER (vbox), scrolled_window); gtk_widget_show (scrolled_window); // Create the gtkList widget. gtklist = gtk_list_new (); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), gtklist); gtk_widget_show (gtklist); // Create a button and connect its "clicked" signal to connect button = gtk_button_new_with_label ("Connect"); gtk_container_add (GTK_CONTAINER (vbox), button); gtk_widget_show (button); // Now when the button is clicked, we call the "callback" function // with a pointer to "button 1" as its argument g_signal_connect (button, "clicked", G_CALLBACK (on_button1_clicked), "button 1"); // Finally we want to see the window, don't we? ;) gtk_widget_show (window); } strcpy(logval, "here we go !"); jcblog(); // Fire up the main event loop of gtk gtk_main (); // We get here after gtk_main_quit() has been called which // happens if the main window gets destroyed // g_print("bye\n"); return 0; }