![]() |
![]() |
![]() |
Gwyddion Module Library Reference Manual | ![]() |
---|
Data Processing ModulesData Processing Modules — More about data processing modules |
Run modes specify how a module function can be run. Data processing functions have two possible run modes.
If the function presents a (modal) dialog in which the user can for
instance adjust parameter values or make selections, include
GWY_RUN_INTERACTIVE
flag in its run modes.
If it makes sense to be run without asking, include GWY_RUN_IMMEDIATE
flag in its run modes. When a function is run in immediate mode, it
should fetch the last used parameter values from settings as if it is
run interactively.
Many functions allow both modes and behave according to the mode they were called in. The logic typically looks as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
static void function(GwyContainer *data, GwyRunType run) { FunctionArgs args; GwyDataField *data_field; GQuark quark; gboolean ok; /* Check run mode */ g_return_if_fail(run & FUNCTION_RUN_MODES); /* Get data field to operate on */ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_KEY, &quark, GWY_APP_DATA_FIELD, &data_field, 0); g_return_if_fail(data_field && quark); load_args(gwy_app_settings_get(), &args); /* Present a GUI in interactive mode, quit if cancelled */ if (run == GWY_RUN_INTERACTIVE) { ok = function_dialog(&args); save_args(gwy_app_settings_get(), &args); if (!ok) return; } /* Perform the processing in immediate mode, or after user confirmation */ function_do(data, data_field, quark, &args); } |
1 2 3 4 5 6 7 8 9 10 |
GwyDataField *mask_field; GQuark quark; mask_field = gwy_data_field_new_alike(data_field, TRUE); /* Fill mask_field with the mask */ ... quark = gwy_app_get_mask_key_for_id(id); gwy_container_set_object(container, quark, mask_field); g_object_unref(mask_field); |
1 2 3 |
gwy_app_data_browser_get_current(GWY_APP_MASK_FIELD, &mask_field,
GWY_APP_MASK_FIELD_KEY, &quark,
0); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
GtkWidget *data_view; GwyPixmapLayer *layer; GwyContainer *mydata; gdouble zoomval; /* Create new container */ mydata = gwy_container_new(); /* Fill it with objects and auxiliary data, dfield and id were obtained * before. */ gwy_container_set_object_by_name(mydata, "/0/data", dfield); gwy_app_sync_data_items(data, mydata, id, 0, FALSE, GWY_DATA_ITEM_PALETTE, GWY_DATA_ITEM_MASK_COLOR, GWY_DATA_ITEM_RANGE, 0); /* Create the data view and its layers */ data_view = gwy_data_view_new(mydata); layer = gwy_layer_basic_new(); gwy_pixmap_layer_set_data_key(layer, "/0/data"); gwy_layer_basic_set_gradient_key(GWY_LAYER_BASIC(layer), "/0/base/palette"); gwy_data_view_set_base_layer(GWY_DATA_VIEW(data_view), layer); /* Calculate preview size */ zoomval = PREVIEW_SIZE/(gdouble)MAX(gwy_data_field_get_xres(dfield), gwy_data_field_get_yres(dfield)); gwy_data_view_set_zoom(GWY_DATA_VIEW(data_view), zoomval); /* Pack data_view somewhere... */ |