Пример #1
0
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 );
}
Пример #2
0
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;
    }
}
Пример #3
0
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;
}
Пример #4
0
/**
 * 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;
}