static void ui_formgrid_init (UiFormGrid *formgrid) { GtkWidget *sw; GtkWidget *hbox, *button; formgrid->priv = g_new0 (UiFormGridPriv, 1); formgrid->priv->raw_grid = NULL; formgrid->priv->info = NULL; formgrid->priv->flags = GDAUI_DATA_PROXY_INFO_CURRENT_ROW | GDAUI_DATA_PROXY_INFO_ROW_MODIFY_BUTTONS; formgrid->priv->tcnc = NULL; formgrid->priv->autoupdate = TRUE; formgrid->priv->autoupdate_possible = FALSE; formgrid->priv->scroll_form = FALSE; formgrid->priv->compute_mod_stmt = FALSE; formgrid->priv->refresh_callback = NULL; formgrid->priv->refresh_user_data = NULL; gtk_orientable_set_orientation (GTK_ORIENTABLE (formgrid), GTK_ORIENTATION_VERTICAL); /* notebook */ formgrid->priv->nb = gtk_notebook_new (); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (formgrid->priv->nb), FALSE); gtk_notebook_set_show_border (GTK_NOTEBOOK (formgrid->priv->nb), FALSE); gtk_box_pack_start (GTK_BOX (formgrid), formgrid->priv->nb, TRUE, TRUE, 0); gtk_widget_show (formgrid->priv->nb); /* grid on 1st page of notebook, not added there */ formgrid->priv->raw_grid = gdaui_raw_grid_new (NULL); gdaui_data_proxy_column_show_actions (GDAUI_DATA_PROXY (formgrid->priv->raw_grid), -1, FALSE); g_signal_connect (formgrid->priv->raw_grid, "populate-popup", G_CALLBACK (form_grid_populate_popup_cb), formgrid); /* form on the 2nd page of the notebook, not added there */ formgrid->priv->raw_form = gdaui_raw_form_new (NULL); gdaui_data_proxy_column_show_actions (GDAUI_DATA_PROXY (formgrid->priv->raw_form), -1, FALSE); g_signal_connect (formgrid->priv->raw_form, "populate-popup", G_CALLBACK (form_grid_populate_popup_cb), formgrid); /* info widget and toggle button at last */ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (formgrid), hbox, FALSE, TRUE, 0); gtk_widget_show (hbox); /* button to toggle between auto update and not */ button = gtk_toggle_button_new (); GtkWidget *img = gtk_image_new_from_icon_name (_("_Execute"), GTK_ICON_SIZE_MENU); gtk_button_set_image (GTK_BUTTON (button), img); formgrid->priv->autoupdate_toggle = button; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), formgrid->priv->autoupdate); gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, TRUE, 0); g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (form_grid_autoupdate_cb), formgrid); gtk_widget_set_tooltip_text (button, _("Enable or disable auto update of data")); /* Proxy info */ formgrid->priv->info = gdaui_data_proxy_info_new (GDAUI_DATA_PROXY (formgrid->priv->raw_grid), formgrid->priv->flags | GDAUI_DATA_PROXY_INFO_CURRENT_ROW | GDAUI_DATA_PROXY_INFO_CHUNCK_CHANGE_BUTTONS); button = GTK_WIDGET (gtk_toggle_tool_button_new ()); gtk_widget_set_tooltip_text (button, _("Toggle between grid and form presentations")); gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (button), TRUE); gtk_toolbar_insert (GTK_TOOLBAR (formgrid->priv->info), GTK_TOOL_ITEM (button), 0); gtk_widget_show (button); g_signal_connect (button, "toggled", G_CALLBACK (form_grid_toggled_cb), formgrid); /* refresh button, don't show it yet */ button = GTK_WIDGET (gtk_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (button), "view-refresh-symbolic"); gtk_widget_set_tooltip_text (button, _("Refresh data")); gtk_toolbar_insert (GTK_TOOLBAR (formgrid->priv->info), GTK_TOOL_ITEM (button), 0); formgrid->priv->refresh_button = button; /* keep data in sync */ g_signal_connect (formgrid->priv->raw_grid, "selection-changed", G_CALLBACK (selection_changed_cb), formgrid); g_signal_connect (formgrid->priv->raw_form, "selection-changed", G_CALLBACK (selection_changed_cb), formgrid); }
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; }