static void psdflp(GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *lpsdf; PSDFLPArgs args; gboolean ok; gint id, newid; g_return_if_fail(run & PSDFLP_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield); psdflp_load_args(gwy_app_settings_get(), &args); if (run == GWY_RUN_INTERACTIVE) { ok = psdflp_dialog(&args); psdflp_save_args(gwy_app_settings_get(), &args); if (!ok) return; } lpsdf = gwy_data_field_new(1, 1, 1.0, 1.0, FALSE); psdflp_do(&args, dfield, lpsdf); newid = gwy_app_data_browser_add_data_field(lpsdf, data, TRUE); g_object_unref(lpsdf); gwy_app_set_data_field_title(data, newid, "Log-phi PSDF"); gwy_app_channel_log_add_proc(data, id, newid); }
static void facets_analyse(GwyContainer *data, GwyRunType run) { FacetsArgs args; GwyContainer *fdata; GwyDataField *dfield, *mfield; GQuark mquark; gint id; g_return_if_fail(run & FACETS_RUN_MODES); g_return_if_fail(g_type_from_name("GwyLayerPoint")); facets_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD_KEY, &mquark, GWY_APP_MASK_FIELD, &mfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield && mquark); fdata = gwy_container_new(); gwy_data_field_facet_distribution(dfield, 2*args.kernel_size + 1, fdata); args.theta0 = gwy_container_get_double_by_name(fdata, "/theta0"); args.phi0 = gwy_container_get_double_by_name(fdata, "/phi0"); if (run == GWY_RUN_IMMEDIATE) run_noninteractive(&args, data, fdata, dfield, mfield, mquark); else { facets_dialog(&args, data, fdata, dfield, mfield, id, mquark); facets_save_args(gwy_app_settings_get(), &args); } g_object_unref(fdata); }
static void noise_synth(GwyContainer *data, GwyRunType run) { NoiseSynthArgs args; GwyDimensionArgs dimsargs; GwyDataField *dfield; GQuark quark; gint id; g_return_if_fail(run & NOISE_SYNTH_RUN_MODES); noise_synth_load_args(gwy_app_settings_get(), &args, &dimsargs); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, GWY_APP_DATA_FIELD_KEY, &quark, 0); if (run == GWY_RUN_IMMEDIATE || noise_synth_dialog(&args, &dimsargs, data, dfield, id)) run_noninteractive(&args, &dimsargs, data, dfield, id, quark); if (run == GWY_RUN_INTERACTIVE) noise_synth_save_args(gwy_app_settings_get(), &args, &dimsargs); gwy_dimensions_free_args(&dimsargs); }
static void poly_level(GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *mfield; GQuark quark; PolyLevelArgs args; gboolean ok; gint id; g_return_if_fail(run & POLYLEVEL_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_KEY, &quark, GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield && quark); load_args(gwy_app_settings_get(), &args); if (run == GWY_RUN_INTERACTIVE) { ok = poly_level_dialog(&args, data, dfield, mfield, id); save_args(gwy_app_settings_get(), &args); if (!ok) return; } poly_level_do(data, dfield, mfield, quark, id, &args); }
static void extract_path(GwyContainer *data, GwyRunType run) { ExtrPathArgs args; GwySelection *selection = NULL; GwyDataField *dfield; gboolean realsquare; gchar key[48]; gint id; gboolean ok; g_return_if_fail(run & EXTR_PATH_RUN_MODES); g_return_if_fail(g_type_from_name("GwyLayerPath")); extr_path_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield); g_snprintf(key, sizeof(key), "/%d/select/path", id); gwy_container_gis_object_by_name(data, key, &selection); ok = extr_path_dialogue(&args, selection); extr_path_save_args(gwy_app_settings_get(), &args); if (!ok) return; realsquare = FALSE; g_snprintf(key, sizeof(key), "/%d/data/realsquare", id); gwy_container_gis_boolean_by_name(data, key, &realsquare); extract_path_do(data, dfield, realsquare, selection, &args); }
static void entropy(G_GNUC_UNUSED GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *mfield; EntropyArgs args; gboolean ok, same_units; g_return_if_fail(run & ENTROPY_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, 0); g_return_if_fail(dfield); load_args(gwy_app_settings_get(), &args); same_units = gwy_si_unit_equal(gwy_data_field_get_si_unit_xy(dfield), gwy_data_field_get_si_unit_z(dfield)); if (run == GWY_RUN_INTERACTIVE) { if (!same_units && args.mode == ENTROPY_ANGLES) args.mode = ENTROPY_SLOPES; ok = entropy_dialog(&args, dfield, mfield); save_args(gwy_app_settings_get(), &args); if (!ok) return; } }
static void grain_dist(GwyContainer *data, GwyRunType run) { GwySIUnit *siunitxy, *siunitz; GrainDistArgs args; GwyDataField *dfield; GwyDataField *mfield; g_return_if_fail(run & DIST_RUN_MODES); grain_dist_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, 0); g_return_if_fail(dfield && mfield); siunitxy = gwy_data_field_get_si_unit_xy(dfield); siunitz = gwy_data_field_get_si_unit_z(dfield); args.units_equal = gwy_si_unit_equal(siunitxy, siunitz); args.bitmask = 0xffffffffU; if (!args.units_equal) args.bitmask ^= 1 << GWY_GRAIN_VALUE_SURFACE_AREA; if (run == GWY_RUN_IMMEDIATE) grain_dist_run(&args, data, dfield, mfield); else { grain_dist_dialog(&args, data, dfield, mfield); grain_dist_save_args(gwy_app_settings_get(), &args); } }
static void level_grains(GwyContainer *data, GwyRunType run) { GwyDataField *dfield; GwyDataField *mfield; LevelGrainsArgs args; gboolean ok; GQuark quark; gint id; g_return_if_fail(run & LEVEL_GRAINS_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_KEY, &quark, GWY_APP_DATA_FIELD_ID, &id, GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, 0); g_return_if_fail(dfield && quark); load_args(gwy_app_settings_get(), &args); if (run != GWY_RUN_IMMEDIATE) { ok = level_grains_dialog(&args); save_args(gwy_app_settings_get(), &args); if (!ok) return; } level_grains_do(&args, data, quark, id, dfield, mfield); gwy_app_channel_log_add_proc(data, id, id); }
static void grain_cross(GwyContainer *data, GwyRunType run) { GwySIUnit *siunitxy, *siunitz; GrainCrossArgs args; GwyDataField *dfield; GwyDataField *mfield; gint id; g_return_if_fail(run & CROSS_RUN_MODES); grain_cross_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, GWY_APP_MASK_FIELD, &mfield, 0); g_return_if_fail(dfield && mfield); siunitxy = gwy_data_field_get_si_unit_xy(dfield); siunitz = gwy_data_field_get_si_unit_z(dfield); args.units_equal = gwy_si_unit_equal(siunitxy, siunitz); if (!args.units_equal) { GwyGrainValue *abscissa, *ordinate; GwyGrainValueFlags aflags, oflags; abscissa = gwy_grain_values_get_grain_value(args.abscissa); ordinate = gwy_grain_values_get_grain_value(args.ordinate); aflags = gwy_grain_value_get_flags(abscissa); oflags = gwy_grain_value_get_flags(ordinate); if ((aflags | oflags) & GWY_GRAIN_VALUE_SAME_UNITS) { if (run == GWY_RUN_IMMEDIATE) { require_same_units_dialog(data, id); return; } if (aflags & GWY_GRAIN_VALUE_SAME_UNITS) { args.abscissa = grain_cross_defaults.abscissa; args.abscissa_expanded = grain_cross_defaults.abscissa_expanded; } if (oflags & GWY_GRAIN_VALUE_SAME_UNITS) { args.ordinate = grain_cross_defaults.ordinate; args.ordinate_expanded = grain_cross_defaults.ordinate_expanded; } } } args.grains = g_new0(gint, mfield->xres*mfield->yres); args.ngrains = gwy_data_field_number_grains(mfield, args.grains); if (run == GWY_RUN_IMMEDIATE) grain_cross_run(&args, data, dfield); else { if (grain_cross_dialog(&args, dfield)) grain_cross_run(&args, data, dfield); grain_cross_save_args(gwy_app_settings_get(), &args); } g_free(args.grains); }
static void dwt(GwyContainer *data, GwyRunType run) { GtkWidget *dialog; GwyDataField *dfield; GwyDataLine *wtcoefs; DWTArgs args; gboolean ok; gint xsize, ysize, newsize, newid, oldid, i; g_return_if_fail(run & DWT_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &oldid, 0); g_return_if_fail(dfield); xsize = gwy_data_field_get_xres(dfield); ysize = gwy_data_field_get_yres(dfield); if (xsize != ysize) { dialog = gtk_message_dialog_new (gwy_app_find_window_for_channel(data, oldid), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("%s: Data must be square."), "DWT"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return; } for (newsize = 1, i = xsize-1; i; i >>= 1, newsize <<= 1) ; dwt_load_args(gwy_app_settings_get(), &args); if (run == GWY_RUN_INTERACTIVE) { ok = dwt_dialog(&args, xsize, newsize); dwt_save_args(gwy_app_settings_get(), &args); if (!ok) return; } dfield = gwy_data_field_new_resampled(dfield, newsize, newsize, args.interp); gwy_data_field_add(dfield, -gwy_data_field_get_avg(dfield)); wtcoefs = GWY_DATA_LINE(gwy_data_line_new(10, 10, TRUE)); wtcoefs = gwy_dwt_set_coefficients(wtcoefs, args.wavelet); gwy_data_field_dwt(dfield, wtcoefs, 1, 4); newid = gwy_app_data_browser_add_data_field(dfield, data, TRUE); g_object_unref(dfield); gwy_app_set_data_field_title(data, newid, _("DWT")); gwy_app_sync_data_items(data, data, oldid, newid, FALSE, GWY_DATA_ITEM_PALETTE, 0); g_object_unref(wtcoefs); }
static void tip_model(GwyContainer *data, GwyRunType run) { TipModelArgs args; g_return_if_fail(run & TIP_MODEL_RUN_MODES); tip_model_load_args(gwy_app_settings_get(), &args); args.object.data = data; gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &args.object.id, 0); tip_model_dialog(&args); tip_model_save_args(gwy_app_settings_get(), &args); }
static void fit(GwyGraph *graph) { GwyContainer *settings; FitArgs args; memset(&args, 0, sizeof(FitArgs)); args.auto_estimate = TRUE; args.auto_plot = TRUE; args.parent_graph = graph; args.xdata = gwy_data_line_new(1, 1.0, FALSE); args.ydata = gwy_data_line_new(1, 1.0, FALSE); args.param = g_array_new(FALSE, TRUE, sizeof(FitParamArg)); settings = gwy_app_settings_get(); load_args(settings, &args); fit_dialog(&args); save_args(settings, &args); g_object_unref(args.xdata); g_object_unref(args.ydata); g_array_free(args.param, TRUE); if (args.fitter) gwy_math_nlfit_free(args.fitter); if (args.abscissa_vf) gwy_si_unit_value_format_free(args.abscissa_vf); }
static void merge(G_GNUC_UNUSED GwyContainer *data, GwyRunType run) { MergeArgs args; GwyContainer *settings; g_return_if_fail(run & MERGE_RUN_MODES); settings = gwy_app_settings_get(); merge_load_args(settings, &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &args.op1.id, GWY_APP_CONTAINER_ID, &args.op1.datano, 0); if (merge_dialog(&args)) { if (args.mode == GWY_MERGE_MODE_NONE) merge_do_none(&args); else if (args.mode == GWY_MERGE_MODE_JOIN) merge_do_join(&args); else merge_do_correlate(&args); } merge_save_args(settings, &args); }
static void gwy_app_file_chooser_type_changed(GwyAppFileChooser *chooser, GtkTreeSelection *selection) { GtkTreeModel *model; GtkTreeIter iter; gboolean active = FALSE; gchar *key; if (!gtk_tree_selection_get_selected(selection, &model, &iter)) return; g_free(chooser->filetype); gtk_tree_model_get(model, &iter, COLUMN_FILETYPE, &chooser->filetype, -1); gwy_app_file_chooser_update_expander(chooser); /* XXX: Reset filter and set it again. There is no way to notify the * file chooser dialog the filter has changed. */ key = g_strconcat(chooser->prefix, "/filter", NULL); gwy_container_gis_boolean_by_name(gwy_app_settings_get(), key, &active); g_free(key); if (active) { gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(chooser), chooser->no_filter); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(chooser), chooser->filter); } }
static GtkWidget* gwy_app_recent_file_list_filter_construct(Controls *controls) { GwyContainer *settings; GtkWidget *hbox, *label, *entry, *check, *button, *image; const guchar *glob; settings = gwy_app_settings_get(); hbox = gtk_hbox_new(FALSE, 0); label = gtk_label_new_with_mnemonic(_("_Filter:")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 4); if (!controls->glob) controls->glob = g_string_new(NULL); if (gwy_container_gis_string_by_name(settings, "/app/file/recent/glob", &glob)) g_string_assign(controls->glob, glob); entry = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry), controls->glob->str); gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry); controls->filter_glob = entry; g_signal_connect(entry, "activate", G_CALLBACK(gwy_app_recent_file_list_filter_apply), controls); button = gtk_button_new(); gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); g_signal_connect(button, "clicked", G_CALLBACK(gwy_app_recent_file_list_filter_clear), controls); image = gtk_image_new_from_stock(GTK_STOCK_CLEAR, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_button_set_image(GTK_BUTTON(button), image); #ifdef G_OS_WIN32 controls->casesens = FALSE; #else controls->casesens = TRUE; #endif gwy_container_gis_boolean_by_name(settings, "/app/file/recent/case-sensitive", &controls->casesens); check = gtk_check_button_new_with_mnemonic(_("Case _sensitive")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), controls->casesens); gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 4); controls->filter_case = check; g_signal_connect(check, "toggled", G_CALLBACK(gwy_app_recent_file_list_filter_case_changed), controls); return hbox; }
static void deposit(GwyContainer *data, GwyRunType run) { DepositArgs args; GwyDataField *dfield; gint id; g_return_if_fail(run & DEPOSIT_RUN_MODES); deposit_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield); deposit_dialog(&args, data, dfield, id); deposit_save_args(gwy_app_settings_get(), &args); }
static void fft_profile(GwyContainer *data, GwyRunType run) { ProfArgs args; GwyDataField *dfield; gint id; g_return_if_fail(run & PROF_RUN_MODES); g_return_if_fail(g_type_from_name("GwyLayerPoint")); prof_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield); prof_dialog(&args, data, dfield, id); prof_save_args(gwy_app_settings_get(), &args); }
static void curvature(GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *mfield; CurvatureArgs args; gboolean ok; gint id; g_return_if_fail(run & CURVATURE_RUN_MODES); g_return_if_fail(g_type_from_name("GwyLayerLine")); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield); if (!gwy_si_unit_equal(gwy_data_field_get_si_unit_xy(dfield), gwy_data_field_get_si_unit_z(dfield))) { GtkWidget *dialog; dialog = gtk_message_dialog_new (gwy_app_find_window_for_channel(data, id), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("%s: Lateral dimensions and value must " "be the same physical quantity."), _("Curvature")); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return; } load_args(gwy_app_settings_get(), &args); if (run == GWY_RUN_INTERACTIVE) { ok = curvature_dialog(&args, data, dfield, mfield, id); save_args(gwy_app_settings_get(), &args); if (!ok) return; } curvature_do(data, dfield, mfield, id, &args); if (args.set_selection) gwy_app_channel_log_add_proc(data, id, id); }
static void maskcor(G_GNUC_UNUSED GwyContainer *data, GwyRunType run) { MaskcorArgs args; GwyContainer *settings; g_return_if_fail(run & MASKCOR_RUN_MODES); settings = gwy_app_settings_get(); maskcor_load_args(settings, &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &args.data.id, GWY_APP_CONTAINER_ID, &args.data.datano, 0); if (maskcor_dialog(&args)) maskcor_do(&args); maskcor_save_args(gwy_app_settings_get(), &args); }
static void dialog_abandon(GwyUnitoolState *state) { ToolControls *controls; controls = (ToolControls*)state->user_data; if (controls->finished_id) g_signal_handler_disconnect(state->layer, controls->finished_id); save_args(gwy_app_settings_get(), controls); memset(state->user_data, 0, sizeof(ToolControls)); }
static gboolean wshed(GwyContainer *data, GwyRunType run) { WshedArgs args; gboolean ok = FALSE; g_assert(run & WSHED_RUN_MODES); if (run == GWY_RUN_WITH_DEFAULTS) args = wshed_defaults; else wshed_load_args(gwy_app_settings_get(), &args); if (run == GWY_RUN_NONINTERACTIVE || run == GWY_RUN_WITH_DEFAULTS) ok = run_noninteractive(&args, data); else if (run == GWY_RUN_MODAL) { ok = wshed_dialog(&args, data); wshed_save_args(gwy_app_settings_get(), &args); } return ok; }
static void load_mask_color(GtkWidget *color_button, GwyContainer *data) { GwyRGBA rgba; if (!gwy_rgba_get_from_container(&rgba, data, "/0/mask")) { gwy_rgba_get_from_container(&rgba, gwy_app_settings_get(), "/mask"); gwy_rgba_store_to_container(&rgba, data, "/0/mask"); } gwy_color_button_set_color(GWY_COLOR_BUTTON(color_button), &rgba); }
static void gwy_app_file_chooser_expanded(GwyAppFileChooser *chooser, G_GNUC_UNUSED GParamSpec *pspec, GtkExpander *expander) { gchar *key; key = g_strconcat(chooser->prefix, "/expanded", NULL); gwy_container_set_boolean_by_name(gwy_app_settings_get(), key, gtk_expander_get_expanded(expander)); g_free(key); }
static void row_level_changed(GwyAppFileChooser *chooser, GtkToggleButton *button) { GwyContainer *settings = gwy_app_settings_get(); gwy_container_set_boolean_by_name(settings, "/app/file/preview/row-level", gtk_toggle_button_get_active(button)); if (chooser->full_preview_id) { g_source_remove(chooser->full_preview_id); chooser->full_preview_id = 0; } gwy_app_file_chooser_do_full_preview(chooser); }
static void grain_filter(GwyContainer *data, GwyRunType run) { GwySIUnit *siunitxy, *siunitz; GFilterArgs args; GwyDataField *dfield, *mfield; GQuark mquark; gint id; g_return_if_fail(run & GFILTER_RUN_MODES); gfilter_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, GWY_APP_MASK_FIELD_KEY, &mquark, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield && mfield); siunitxy = gwy_data_field_get_si_unit_xy(dfield); siunitz = gwy_data_field_get_si_unit_z(dfield); args.units_equal = gwy_si_unit_equal(siunitxy, siunitz); args.valuedata = calculate_all_grain_values(dfield, mfield, &args.ngrains, &args.grains); args.sortedvaluedata = sort_grain_values(args.valuedata, &args.nuniqvalues, args.ngrains); if (run == GWY_RUN_INTERACTIVE && !args.ngrains) { GtkWidget *dialog; gfilter_free_args(&args); dialog = gtk_message_dialog_new (gwy_app_find_window_for_channel(data, id), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("There are no grains to filter.")); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return; } if (run == GWY_RUN_IMMEDIATE) { run_noninteractive(&args, data, mfield, mquark); gwy_app_channel_log_add_proc(data, id, id); } else gfilter_dialog(&args, data, dfield, mfield, id, mquark); gfilter_free_args(&args); }
static void tilt(GwyContainer *data, GwyRunType run) { GwyDataField *dfield; GQuark quark; TiltArgs args; gboolean ok; g_return_if_fail(run & TILT_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_KEY, &quark, 0); g_return_if_fail(dfield); tilt_load_args(gwy_app_settings_get(), &args); if (run == GWY_RUN_INTERACTIVE) { ok = tilt_dialog(&args, dfield); tilt_save_args(gwy_app_settings_get(), &args); if (!ok) return; } gwy_app_undo_qcheckpointv(data, 1, &quark); { /* Use negative values since the module says `Tilt', * not `Remove tilt' */ double bx = -args.dx*gwy_data_field_get_xmeasure(dfield); double by = -args.dy*gwy_data_field_get_ymeasure(dfield); double c = -0.5*(bx*gwy_data_field_get_xres(dfield) + by*gwy_data_field_get_yres(dfield)); gwy_data_field_plane_level(dfield, c, bx, by); } gwy_data_field_data_changed(dfield); }
static void gwy_app_recent_file_list_filter_case_changed(GtkToggleButton *check, Controls *controls) { GwyContainer *settings; settings = gwy_app_settings_get(); controls->casesens = gtk_toggle_button_get_active(check); gwy_container_set_boolean_by_name(settings, "/app/file/recent/case-sensitive", controls->casesens); gwy_app_recent_file_list_filter_apply(GTK_ENTRY(controls->filter_glob), controls); }
static void tip_blind(G_GNUC_UNUSED GwyContainer *data, GwyRunType run) { TipBlindArgs args; g_return_if_fail(run & TIP_BLIND_RUN_MODES); tip_blind_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &args.orig.id, GWY_APP_CONTAINER_ID, &args.orig.datano, 0); args.source = args.orig; tip_blind_dialog(&args); free_stripe_results(&args); }
static void gwy_app_file_chooser_filter_toggled(GwyAppFileChooser *chooser, GtkToggleButton *check) { gboolean active; gchar *key; active = gtk_toggle_button_get_active(check); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(chooser), active ? chooser->filter : chooser->no_filter); key = g_strconcat(chooser->prefix, "/filter", NULL); gwy_container_set_boolean_by_name(gwy_app_settings_get(), key, active); g_free(key); gwy_app_file_chooser_update_expander(chooser); }
gchar* _gwy_app_file_chooser_get_selected_type(GwyAppFileChooser *chooser) { GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter; gchar *s; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(chooser->type_list)); if (!(gtk_tree_selection_get_selected(selection, &model, &iter))) return NULL; gtk_tree_model_get(model, &iter, COLUMN_FILETYPE, &s, -1); if (!*s) { g_free(s); gwy_container_remove(gwy_app_settings_get(), chooser->type_key); s = NULL; } else gwy_container_set_string(gwy_app_settings_get(), chooser->type_key, g_strdup(s)); return s; }