GtkWidget * glade_tool_item_group_editor_new (GladeWidgetAdaptor *adaptor, GladeEditable *embed) { GladeToolItemGroupEditor *group_editor; GladeEditorProperty *eprop; GtkWidget *table, *frame, *label, *hbox; gchar *str; gint row = 0; g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL); g_return_val_if_fail (GLADE_IS_EDITABLE (embed), NULL); group_editor = g_object_new (GLADE_TYPE_TOOL_ITEM_GROUP_EDITOR, NULL); group_editor->embed = GTK_WIDGET (embed); /* Pack the parent on top... */ gtk_box_pack_start (GTK_BOX (group_editor), GTK_WIDGET (embed), FALSE, FALSE, 0); str = g_strdup_printf ("<b>%s</b>", _("Group Header")); label = gtk_label_new (str); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); g_free (str); frame = gtk_frame_new (NULL); gtk_frame_set_label_widget (GTK_FRAME (frame), label); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); gtk_box_pack_start (GTK_BOX (group_editor), frame, FALSE, FALSE, 0); table = gtk_grid_new (); gtk_widget_set_margin_top (table, 6); gtk_widget_set_margin_start (table, 12); gtk_orientable_set_orientation (GTK_ORIENTABLE (table), GTK_ORIENTATION_VERTICAL); gtk_grid_set_row_spacing (GTK_GRID (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); /* label */ eprop = glade_widget_adaptor_create_eprop_by_name (adaptor, "label", FALSE, TRUE); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); group_editor->label_radio = gtk_radio_button_new (NULL); gtk_box_pack_start (GTK_BOX (hbox), group_editor->label_radio, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (hbox), glade_editor_property_get_item_label (eprop), TRUE, TRUE, 2); table_attach (table, hbox, 0, row); table_attach (table, GTK_WIDGET (eprop), 1, row++); group_editor->properties = g_list_prepend (group_editor->properties, eprop); /* label-widget ... */ eprop = glade_widget_adaptor_create_eprop_by_name (adaptor, "label-widget", FALSE, TRUE); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); group_editor->label_widget_radio = gtk_radio_button_new_from_widget (GTK_RADIO_BUTTON (group_editor->label_radio)); gtk_box_pack_start (GTK_BOX (hbox), group_editor->label_widget_radio, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (hbox), glade_editor_property_get_item_label (eprop), TRUE, TRUE, 2); table_attach (table, hbox, 0, row); table_attach (table, GTK_WIDGET (eprop), 1, row++); group_editor->properties = g_list_prepend (group_editor->properties, eprop); g_signal_connect (G_OBJECT (group_editor->label_widget_radio), "toggled", G_CALLBACK (label_widget_toggled), group_editor); g_signal_connect (G_OBJECT (group_editor->label_radio), "toggled", G_CALLBACK (label_toggled), group_editor); gtk_widget_show_all (GTK_WIDGET (group_editor)); return GTK_WIDGET (group_editor); }
bool area_edit_t::run() { GtkWidget *vbox; area_context_t context(*this, gtk_dialog_new_with_buttons(_("Area editor"), GTK_WINDOW(parent), GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, nullptr)); osm2go_platform::dialog_size_hint(context.dialog, osm2go_platform::MISC_DIALOG_HIGH); context.warning = gtk_dialog_add_button(context.dialog, _("Warning"), GTK_RESPONSE_HELP); gtk_button_set_image(GTK_BUTTON(context.warning), gtk_image_new_from_icon_name("dialog-warning", GTK_ICON_SIZE_BUTTON)); g_signal_connect_swapped(context.warning, "clicked", G_CALLBACK(on_area_warning_clicked), &context); /* ------------- fetch from map ------------------------ */ context.map.needs_redraw = false; context.map.widget = OSM_GPS_MAP(g_object_new(OSM_TYPE_GPS_MAP, "map-source", OSM_GPS_MAP_SOURCE_OPENSTREETMAP, "proxy-uri", g_getenv("http_proxy"), "auto-center", FALSE, "tile-cache", nullptr, nullptr)); osm_gps_map_osd_select_init(context.map.widget); g_signal_connect_swapped(context.map.widget, "configure-event", G_CALLBACK(on_map_configure), &context); g_signal_connect(context.map.widget, "button-press-event", G_CALLBACK(on_map_button_press_event), &context); g_signal_connect(context.map.widget, "motion-notify-event", G_CALLBACK(on_map_motion_notify_event), &context); g_signal_connect(context.map.widget, "button-release-event", G_CALLBACK(on_map_button_release_event), &context); /* install handler for timed updates of the gps button */ osm2go_platform::Timer timer; timer.restart(1, map_gps_update, &context); context.map.start.rlon = context.map.start.rlat = NAN; osm2go_platform::notebook_append_page(context.notebook, GTK_WIDGET(context.map.widget), _(TAB_LABEL_MAP)); /* ------------ direct min/max edit --------------- */ vbox = gtk_vbox_new(FALSE, 10); GtkTable *table = GTK_TABLE(gtk_table_new(3, 4, FALSE)); // x, y gtk_table_set_col_spacings(table, 10); gtk_table_set_row_spacings(table, 5); context.direct.minlat = pos_lat_entry_new(bounds.min.lat); table_attach(table, context.direct.minlat, 0, 0); GtkWidget *label = gtk_label_new(_("to")); table_attach(table, label, 1, 0); context.direct.maxlat = pos_lat_entry_new(bounds.max.lat); table_attach(table, context.direct.maxlat, 2, 0); context.direct.minlon = pos_lon_entry_new(bounds.min.lon); table_attach(table, context.direct.minlon, 0, 1); label = gtk_label_new(_("to")); table_attach(table, label, 1, 1); context.direct.maxlon = pos_lon_entry_new(bounds.max.lon); table_attach(table, context.direct.maxlon, 2, 1); /* setup this page */ g_signal_connect_swapped(context.direct.minlat, "changed", G_CALLBACK(callback_modified_direct), &context); g_signal_connect_swapped(context.direct.minlon, "changed", G_CALLBACK(callback_modified_direct), &context); g_signal_connect_swapped(context.direct.maxlat, "changed", G_CALLBACK(callback_modified_direct), &context); g_signal_connect_swapped(context.direct.maxlon, "changed", G_CALLBACK(callback_modified_direct), &context); /* --- hint --- */ label = gtk_label_new(_("(recommended min/max diff <0.03 degrees)")); gtk_table_attach_defaults(table, label, 0, 3, 2, 3); const GdkColor *color = osm2go_platform::invalid_text_color(); /* error label */ context.direct.error = gtk_label_new(nullptr); gtk_widget_modify_fg(context.direct.error, GTK_STATE_NORMAL, color); gtk_table_attach_defaults(table, context.direct.error, 0, 3, 3, 4); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(table), FALSE, FALSE, 0); osm2go_platform::notebook_append_page(context.notebook, vbox, _(TAB_LABEL_DIRECT)); /* ------------- center/extent edit ------------------------ */ vbox = gtk_vbox_new(FALSE, 10); table = GTK_TABLE(gtk_table_new(3, 5, FALSE)); // x, y gtk_table_set_col_spacings(table, 10); gtk_table_set_row_spacings(table, 5); label = gtk_label_new(_("Center:")); gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f); gtk_table_attach_defaults(table, label, 0, 1, 0, 1); context.extent.lat = pos_lat_entry_new(0.0); gtk_table_attach_defaults(table, context.extent.lat, 1, 2, 0, 1); context.extent.lon = pos_lon_entry_new(0.0); gtk_table_attach_defaults(table, context.extent.lon, 2, 3, 0, 1); gtk_table_set_row_spacing(table, 0, 10); label = gtk_label_new(_("Width:")); gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f); gtk_table_attach_defaults(table, label, 0, 1, 1, 2); context.extent.width = osm2go_platform::entry_new(); gtk_table_attach_defaults(table, context.extent.width, 1, 2, 1, 2); label = gtk_label_new(_("Height:")); gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f); gtk_table_attach_defaults(table, label, 0, 1, 2, 3); context.extent.height = osm2go_platform::entry_new(); gtk_table_attach_defaults(table, context.extent.height, 1, 2, 2, 3); std::vector<const char *> units(2); units[0] = _("mi"); units[1] = _("km"); context.extent.mil_km = osm2go_platform::combo_box_new(_("Unit"), units, 1); gtk_table_attach(table, context.extent.mil_km, 2, 3, 1, 3, static_cast<GtkAttachOptions>(0), static_cast<GtkAttachOptions>(0), 0, 0); /* setup this page */ extent_update(&context); /* connect signals after inital update to avoid confusion */ g_signal_connect_swapped(context.extent.lat, "changed", G_CALLBACK(callback_modified_extent), &context); g_signal_connect_swapped(context.extent.lon, "changed", G_CALLBACK(callback_modified_extent), &context); g_signal_connect_swapped(context.extent.width, "changed", G_CALLBACK(callback_modified_extent), &context); g_signal_connect_swapped(context.extent.height, "changed", G_CALLBACK(callback_modified_extent), &context); g_signal_connect_swapped(context.extent.mil_km, "changed", G_CALLBACK(callback_modified_unit), &context); /* --- hint --- */ label = gtk_label_new(_("(recommended width/height < 2km/1.25mi)")); gtk_table_attach_defaults(table, label, 0, 3, 3, 4); /* error label */ context.extent.error = gtk_label_new(nullptr); gtk_widget_modify_fg(context.extent.error, GTK_STATE_NORMAL, color); gtk_table_attach_defaults(table, context.extent.error, 0, 3, 4, 5); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(table), FALSE, FALSE, 0); osm2go_platform::notebook_append_page(context.notebook, vbox, _(TAB_LABEL_EXTENT)); #ifdef HAS_MAEMO_MAPPER /* ------------- fetch from maemo mapper ------------------------ */ vbox = gtk_vbox_new(FALSE, 8); context.mmapper.fetch = osm2go_platform::button_new_with_label(_("Get from Maemo Mapper")); gtk_box_pack_start(GTK_BOX(vbox), context.mmapper.fetch, FALSE, FALSE, 0); g_signal_connect_swapped(context.mmapper.fetch, "clicked", G_CALLBACK(callback_fetch_mm_clicked), &context); /* --- hint --- */ label = gtk_label_new(_("(recommended MM zoom level < 7)")); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); osm2go_platform::notebook_append_page(context.notebook, vbox, _("M.Mapper")); #endif /* ------------------------------------------------------ */ gtk_box_pack_start(context.dialog.vbox(), context.notebook, TRUE, TRUE, 0); g_signal_connect(osm2go_platform::notebook_get_gtk_notebook(context.notebook), "switch-page", G_CALLBACK(on_page_switch), &context); gtk_widget_show_all(context.dialog.get()); area_main_update(&context); bool ok = false; int response; do { response = gtk_dialog_run(context.dialog); if(GTK_RESPONSE_ACCEPT == response) { if(area_warning(&context)) { /* copy modified values back to given storage */ bounds = context.bounds; ok = true; break; } } } while(response == GTK_RESPONSE_HELP || response == GTK_RESPONSE_ACCEPT); return ok; }
SignUp open_sign_up_dialog(GtkWindow *parent) { GtkWidget *dialog = gtk_dialog_new_with_buttons("Inscription", parent, GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); // Insertion des widget dans une table GtkWidget *table = gtk_table_new(3, 2, FALSE); gtk_container_set_border_width (GTK_CONTAINER (table), 10); GtkWidget *cne = gtk_entry_new(); GtkWidget *password = gtk_entry_new(); GtkWidget *confirm = gtk_entry_new(); gtk_entry_set_visibility(GTK_ENTRY(password), FALSE); gtk_entry_set_visibility(GTK_ENTRY(confirm), FALSE); GtkWidget *cneLabel = gtk_label_new("CNE"); GtkWidget *passwordLabel = gtk_label_new("Mot de passe"); GtkWidget *confirmLabel = gtk_label_new("Répéter le mot de passe"); table_attach(table, cne, 1, 2, 0, 1); table_attach(table, password, 1, 2, 1, 2); table_attach(table, confirm, 1, 2, 2, 3); table_attach(table, cneLabel, 0, 1, 0, 1); table_attach(table, passwordLabel, 0, 1, 1, 2); table_attach(table, confirmLabel, 0, 1, 2, 3); // Ajout de la table dans la fenetre dialog gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG (dialog)->vbox), table); // Affichage de la fenetre gtk_widget_show_all (dialog); SignUp result = {"", ""}; gboolean passwordMatchs = FALSE; // password == confirm while(!passwordMatchs) { if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { const char *cneText = gtk_entry_get_text(GTK_ENTRY(cne)); const char *passwordText = gtk_entry_get_text(GTK_ENTRY(password)); const char *confirmText = gtk_entry_get_text(GTK_ENTRY(confirm)); // confirmation de mot de passe invalide if(strcmp(passwordText, confirmText) != 0) { GtkWidget *errorDialog = gtk_message_dialog_new ( GTK_WINDOW(dialog), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Les deux mots de passe doivent être " "identiques"); gtk_dialog_run (GTK_DIALOG (errorDialog)); gtk_widget_destroy (errorDialog); continue; } passwordMatchs = TRUE; strcpy(result.cne, cneText); strcpy(result.password, passwordText); } else { break; } } gtk_widget_destroy(dialog); return result; }