void a_preferences_show_window(GtkWindow *parent) { //VikLayerParamData *a_uibuilder_run_dialog ( GtkWindow *parent, VikLayerParam \*params, // guint16 params_count, gchar **groups, guint8 groups_count, // VikLayerParamData *params_defaults ) // TODO: THIS IS A MAJOR HACKAROUND, but ok when we have only a couple preferences. gint params_count = params->len; VikLayerParam *contiguous_params = g_new(VikLayerParam,params_count); int i; for ( i = 0; i < params->len; i++ ) { contiguous_params[i] = *((VikLayerParam*)(g_ptr_array_index(params,i))); } loaded = TRUE; preferences_load_from_file(); if ( a_uibuilder_properties_factory ( _("Preferences"), parent, contiguous_params, params_count, (gchar **) groups_names->pdata, groups_names->len, // groups, groups_count, // groups? what groups?! (gboolean (*) (gpointer,guint16,VikLayerParamData,gpointer,gboolean)) preferences_run_setparam, NULL /* not used */, contiguous_params, preferences_run_getparam, NULL, NULL /* not used */ ) ) { a_preferences_save_to_file(); } g_free ( contiguous_params ); }
static gboolean layer_properties_factory ( VikLayer *vl, VikViewport *vp ) { switch ( a_uibuilder_properties_factory ( VIK_GTK_WINDOW_FROM_WIDGET(vp), vik_layer_interfaces[vl->type]->params, vik_layer_interfaces[vl->type]->params_count, vik_layer_interfaces[vl->type]->params_groups, vik_layer_interfaces[vl->type]->params_groups_count, (gpointer) vik_layer_interfaces[vl->type]->set_param, vl, vp, (gpointer) vik_layer_interfaces[vl->type]->get_param, vl) ) { case 0: case 3: return FALSE; /* redraw (?) */ case 2: vik_layer_post_read ( vl, vp, FALSE ); /* update any gc's */ default: return TRUE; } }
VikLayerParamData *a_uibuilder_run_dialog ( const gchar *dialog_name, GtkWindow *parent, VikLayerParam *params, guint16 params_count, gchar **groups, guint8 groups_count, VikLayerParamData *params_defaults ) { VikLayerParamData *paramdatas = g_new(VikLayerParamData, params_count); if ( a_uibuilder_properties_factory ( dialog_name, parent, params, params_count, groups, groups_count, (gpointer) uibuilder_run_setparam, paramdatas, params, (gpointer) uibuilder_run_getparam, params_defaults ) > 0 ) { return paramdatas; } g_free ( paramdatas ); return NULL; }
/** * a_layer_defaults_show_window: * @parent: The Window * @layername: The layer * * This displays a Window showing the default parameter values for the selected layer * It allows the parameters to be changed. * * Returns: %TRUE if the window is displayed (because there are parameters to view) */ gboolean a_layer_defaults_show_window ( GtkWindow *parent, const gchar *layername ) { if ( ! loaded ) { // since we can't load the file in a_defaults_init (no params registered yet), // do it once before we display the params. defaults_load_from_file(); loaded = TRUE; } VikLayerTypeEnum layer = vik_layer_type_from_string ( layername ); // Need to know where the params start and they finish for this layer // 1. inspect every registered param - see if it has the layer value required to determine overall size // [they are contiguous from the start index] // 2. copy the these params from the main list into a tmp struct // // Then pass this tmp struct to uibuilder for display guint layer_params_count = 0; gboolean found_first = FALSE; gint index = 0; int i; for ( i = 0; i < paramsVD->len; i++ ) { VikLayerParam *param = (VikLayerParam*)(g_ptr_array_index(paramsVD,i)); if ( param->layer == layer ) { layer_params_count++; if ( !found_first ) { index = i; found_first = TRUE; } } } // Have we any parameters to show! if ( !layer_params_count ) return FALSE; VikLayerParam *params = g_new(VikLayerParam,layer_params_count); for ( i = 0; i < layer_params_count; i++ ) { params[i] = *((VikLayerParam*)(g_ptr_array_index(paramsVD,i+index))); } gchar *title = g_strconcat ( layername, ": ", _("Layer Defaults"), NULL ); if ( a_uibuilder_properties_factory ( title, parent, params, layer_params_count, vik_layer_get_interface(layer)->params_groups, vik_layer_get_interface(layer)->params_groups_count, (gboolean (*) (gpointer,guint16,VikLayerParamData,gpointer,gboolean)) defaults_run_setparam, GINT_TO_POINTER ( index ), params, defaults_run_getparam, GINT_TO_POINTER ( index ) ) ) { // Save layer_defaults_save_to_file(); } g_free ( title ); g_free ( params ); return TRUE; }