GtkWidget * do_grid_data_layout (GtkWidget *do_widget) { if (!window) { GdaStatement *stmt; GtkWidget *vbox; GtkWidget *label; GdaDataModel *model; GtkWidget *grid; GdauiRawGrid *raw_grid; window = gtk_dialog_new_with_buttons ("Grid with custom data layout", GTK_WINDOW (do_widget), 0, "Close", GTK_RESPONSE_NONE, NULL); g_signal_connect (window, "response", G_CALLBACK (gtk_widget_destroy), NULL); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (window))), vbox, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); label = gtk_label_new ("The following GdauiGrid widget displays information about customers,\n" "using a picture of the customer.\n"); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); /* Create the demo widget: select all the customers and computes the total * amount of orders they have spent */ stmt = gda_sql_parser_parse_string (demo_parser, "select c.id, c.name, c.country, c.city, c.photo, c.comments, sum (od.quantity * (1 - od.discount/100) * p.price) as total_orders from customers c left join orders o on (c.id=o.customer) left join order_contents od on (od.order_id=o.id) left join products p on (p.ref = od.product_ref) group by c.id order by total_orders desc", NULL, NULL); model = gda_connection_statement_execute_select (demo_cnc, stmt, NULL, NULL); g_object_unref (stmt); grid = gdaui_grid_new (model); g_object_unref (model); /* request custom layout: <gdaui_grid name="customers"> <gdaui_entry name="name"/> <gdaui_entry name="total_orders" label="Total ordered" plugin="number:NB_DECIMALS=2;CURRENCY=€"/> <gdaui_entry name="photo" plugin="picture"/> </gdaui_grid> */ g_object_get (G_OBJECT (grid), "raw-grid", &raw_grid, NULL); gchar *filename; filename = demo_find_file ("custom_layout.xml", NULL); gdaui_raw_grid_set_layout_from_file (GDAUI_RAW_GRID (raw_grid), filename, "customers"); g_free (filename); gtk_box_pack_start (GTK_BOX (vbox), grid, TRUE, TRUE, 0); gtk_widget_set_size_request (window, 500, 500); } gboolean visible; g_object_get (G_OBJECT (window), "visible", &visible, NULL); if (!visible) gtk_widget_show_all (window); else { gtk_widget_destroy (window); window = NULL; } return window; }
int main (int argc, char *argv[]) { gtk_init (&argc, &argv); gdaui_init (); /* create data model */ GdaDataModel *model; model = data_model_errors_new (); gda_data_model_dump (model, NULL); /* create UI */ GtkWidget *window, *vbox, *button, *form, *grid; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW(window), 400, 200); g_signal_connect_swapped (window, "destroy", G_CALLBACK (destroy), window); gtk_container_set_border_width (GTK_CONTAINER (window), 10); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); gtk_container_add (GTK_CONTAINER (window), vbox); /* main form to list customers */ form = gdaui_form_new (model); gtk_box_pack_start (GTK_BOX (vbox), form, FALSE, FALSE, 0); GtkWidget *raw; g_object_get (form, "raw-form", &raw, NULL); g_timeout_add (80, (GSourceFunc) change_unknow_color, raw); g_object_unref (raw); g_object_set (G_OBJECT (form), "info-flags", GDAUI_DATA_PROXY_INFO_CURRENT_ROW | GDAUI_DATA_PROXY_INFO_ROW_MOVE_BUTTONS | GDAUI_DATA_PROXY_INFO_ROW_MODIFY_BUTTONS, NULL ); /* main grid to list customers */ grid = gdaui_grid_new (model); g_object_unref (model); gtk_box_pack_start (GTK_BOX (vbox), grid, TRUE, TRUE, 0); g_object_set (G_OBJECT (grid), "info-flags", GDAUI_DATA_PROXY_INFO_CURRENT_ROW | GDAUI_DATA_PROXY_INFO_ROW_MODIFY_BUTTONS, NULL ); /* button to quit */ button = gtk_button_new_with_label ("Quit"); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window); gtk_widget_show_all (window); gtk_main (); return 0; }
GtkWidget * do_grid_model_change (GtkWidget *do_widget) { if (!window) { GdaStatement *stmt; GtkWidget *vbox; GtkWidget *label; GdaDataModel *models [3]; window = gtk_dialog_new_with_buttons ("Changing data in a GdauiRawGrid", GTK_WINDOW (do_widget), 0, "Close", GTK_RESPONSE_NONE, NULL); g_signal_connect (window, "response", G_CALLBACK (gtk_widget_destroy), NULL); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (window))), vbox, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); label = gtk_label_new ("The data in the same GdauiRawGrid widget can be change don the fly."); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); /* creating data models */ stmt = gda_sql_parser_parse_string (demo_parser, "SELECT * FROM products ORDER BY ref, category LIMIT 15", NULL, NULL); models[0] = gda_connection_statement_execute_select (demo_cnc, stmt, NULL, NULL); gda_data_select_compute_modification_statements (GDA_DATA_SELECT (models[0]), NULL); g_object_unref (stmt); stmt = gda_sql_parser_parse_string (demo_parser, "SELECT * FROM products WHERE price > 20.2 ORDER BY ref, category LIMIT 10", NULL, NULL); models[1] = gda_connection_statement_execute_select (demo_cnc, stmt, NULL, NULL); gda_data_select_compute_modification_statements (GDA_DATA_SELECT (models[1]), NULL); g_object_unref (stmt); stmt = gda_sql_parser_parse_string (demo_parser, "SELECT name, price, ref, category FROM products WHERE price > 20.2 ORDER BY name LIMIT 30", NULL, NULL); models[2] = gda_connection_statement_execute_select (demo_cnc, stmt, NULL, NULL); gda_data_select_compute_modification_statements (GDA_DATA_SELECT (models[2]), NULL); g_object_unref (stmt); /* allow choosing which data model to display */ label = gtk_label_new (""); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_label_set_markup (GTK_LABEL (label), "<b>Choose which data model to display:</b>"); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); GtkWidget *layout, *rb; GSList *group = NULL; gint i; layout = gtk_grid_new (); gtk_box_pack_start (GTK_BOX (vbox), layout, FALSE, FALSE, 0); for (i = 0; i < 3; i++) { gchar *str; str = g_strdup_printf ("%d columns x %d rows", gda_data_model_get_n_columns (models[i]), gda_data_model_get_n_rows (models[i])); rb = gtk_radio_button_new_with_label (group, str); g_free (str); gtk_grid_attach (GTK_GRID (layout), rb, i, 0, 1, 1); g_signal_connect (rb, "toggled", G_CALLBACK (model_toggled_cb), models[i]); g_object_set_data_full (G_OBJECT (rb), "model", models[i], g_object_unref); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rb)); } /* Create the grid widget */ label = gtk_label_new (""); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_label_set_markup (GTK_LABEL (label), "<b>GdauiRawGrid in a scrolled window:</b>"); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); grid = gdaui_grid_new (models[0]); gtk_widget_set_size_request (grid, 600, 350); gtk_box_pack_start (GTK_BOX (vbox), grid, TRUE, TRUE, 0); GdaDataProxy *proxy; proxy = gdaui_data_proxy_get_proxy (GDAUI_DATA_PROXY (grid)); g_object_set (proxy, "cache-changes", TRUE, NULL); } gboolean visible; g_object_get (G_OBJECT (window), "visible", &visible, NULL); if (!visible) gtk_widget_show_all (window); else { gtk_widget_destroy (window); window = NULL; } return window; }
GtkWidget * do_data_model_dir (GtkWidget *do_widget) { if (!window) { GtkWidget *vbox; GtkWidget *label; GdaDataModel *model; GtkWidget *form, *grid, *nb; GdaSet *data_set; GdaHolder *param; gchar *path; GValue *value; window = gtk_dialog_new_with_buttons ("GdaDataModelDir data model", GTK_WINDOW (do_widget), 0, GTK_STOCK_CLOSE, GTK_RESPONSE_NONE, NULL); g_signal_connect (window, "response", G_CALLBACK (gtk_widget_destroy), NULL); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (window))), vbox, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); label = gtk_label_new ("The following GdauiForm widget displays data from a GdaDataModelDir " "data model which lists the files contained in the selected directory.\n\n" "Each file contents is then displayed using the 'picture' plugin \n" "(right click to open a menu, or double click to load an image)."); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); /* GdaDataModelDir object */ path = get_data_path (); model = gda_data_model_dir_new (path); g_free (path); /* Create the demo widget */ nb = gtk_notebook_new (); gtk_box_pack_start (GTK_BOX (vbox), nb, TRUE, TRUE, 0); form = gdaui_form_new (model); gtk_notebook_append_page (GTK_NOTEBOOK (nb), form, gtk_label_new ("Form")); grid = gdaui_grid_new (model); gtk_notebook_append_page (GTK_NOTEBOOK (nb), grid, gtk_label_new ("Grid")); g_object_unref (model); /* specify that we want to use the 'picture' plugin */ data_set = GDA_SET (gdaui_data_selector_get_data_set (GDAUI_DATA_SELECTOR (grid))); param = gda_set_get_holder (data_set, "data"); value = gda_value_new_from_string ("picture", G_TYPE_STRING); gda_holder_set_attribute_static (param, GDAUI_ATTRIBUTE_PLUGIN, value); gdaui_data_proxy_column_show_actions (GDAUI_DATA_PROXY (grid), -1, TRUE); gda_value_free (value); } gboolean visible; g_object_get (G_OBJECT (window), "visible", &visible, NULL); if (!visible) gtk_widget_show_all (window); else { gtk_widget_destroy (window); window = NULL; } return window; }