Reputation: 1
In C Language, how is it possible to pass the values in ComboBox to GtkTreeView? We have tried this code, but we do not know where to write the ids of ComboBox. What signals should be used in ComboBox?
void on_btn_car_order_clicked(GtkButton *button, gpointer *user_data){
GtkTreeIter iter;
GtkTreeView *treeview_payment1 = GTK_TREE_VIEW(user_data);
GtkListStore *liststore1 = GTK_LIST_STORE(gtk_tree_view_get_model(treeview_payment1));
gtk_list_store_append(liststore1, &iter);
gtk_list_store_set(liststore1, &iter, 0, "asdas" , 1, 1.0,2, 10.0, -1);
gtk_widget_hide (GTK_WIDGET(detail_window));
gtk_widget_show(listree_window);
}
GtkTreeView GtkWindow with ComboBox
Thank you, Best regards, Shak
Upvotes: 0
Views: 95
Reputation: 694
#include <gtk/gtk.h>
typedef struct
{
GtkWidget *w_car_choose;
GtkWidget *w_model_choose;
GtkWidget *w_submit_button;
GtkWidget *w_treeview;
} app_widgets;
GtkBuilder *builder;
GtkWidget *main_window;
GtkWidget *listtree_window;
void on_btn_submit_clicked(GtkButton *button, gpointer *user_data);
int main(int argc, char *argv[])
{
app_widgets *widgets = g_slice_new(app_widgets);
gtk_init(&argc, &argv);
builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "test.glade", NULL);
main_window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
listtree_window = GTK_WIDGET(gtk_builder_get_object(builder, "listtree_window"));
// get pointers to widgets
widgets->w_treeview = GTK_WIDGET(gtk_builder_get_object(builder, "treeview"));
widgets->w_car_choose = GTK_WIDGET(gtk_builder_get_object(builder, "car_choose"));
widgets->w_model_choose = GTK_WIDGET(gtk_builder_get_object(builder, "model_choose"));
widgets->w_submit_button = GTK_WIDGET(gtk_builder_get_object(builder, "btn_submit"));
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->w_car_choose), 1);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->w_model_choose), 1);
gtk_builder_connect_signals(builder, widgets);
g_object_unref(builder);
gtk_widget_show(main_window);
g_signal_connect(GTK_WIDGET(widgets->w_submit_button), "clicked", G_CALLBACK(on_btn_submit_clicked), widgets);
gtk_main();
g_slice_free(app_widgets, widgets);
return 0;
}
void on_btn_submit_clicked(GtkButton *button, gpointer *user_data)
{
app_widgets *widgets = user_data;
GtkTreeIter iter;
GtkListStore *liststore = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->w_treeview)));
gtk_list_store_append(liststore, &iter);
gtk_list_store_set(liststore, &iter, 0, gtk_combo_box_text_get_active_text(GTK_COMBO_BOX(widgets->w_model_choose)), 1, gtk_combo_box_text_get_active_text(GTK_COMBO_BOX(widgets->w_car_choose)), -1);
gtk_widget_hide(GTK_WIDGET(main_window));
gtk_widget_show(listtree_window);
}
// called when window is closed
void on_window_main_destroy()
{
gtk_main_quit();
}
if you want to pass customized data during onClick signal then connect using
g_signal_connect
https://developer.gnome.org/gobject/stable/gobject-Signals.html. and generally, for connecting signals, you can manually connect it using g_connect as mostly during your program you might want to modify data's which will be stored in your struct so instead of using glade for it, you can manually connect.
#suggestions(if your actual program is gonna look like this). you could finish the above program in a single main window by adding an Add button to "listtree_window" window and making "main_window" a dialog box.
Upvotes: 0