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 gboolean units_are_good(GtkTreeView *treeview, GwyGrainValue *gvalue) { GrainValueViewPrivate *priv; priv = g_object_get_qdata(G_OBJECT(treeview), priv_quark); if (priv->same_units) return TRUE; return !(gwy_grain_value_get_flags(gvalue) & GWY_GRAIN_VALUE_SAME_UNITS); }