Ejemplo n.º 1
0
static void
extract_settings (SolverState *state)
{
	GnmSolverParameters *param = state->sheet->solver_parameters;
	GtkTreeIter iter;
	GnmValue *target_range;
	GnmValue *input_range;
	GnmSolverFactory *factory = NULL;

	target_range = gnm_expr_entry_parse_as_value (state->target_entry,
						      state->sheet);
	input_range = gnm_expr_entry_parse_as_value (state->change_cell_entry,
						     state->sheet);

	gnm_solver_param_set_input (param, input_range);

	gnm_solver_param_set_target (param,
				     target_range
				     ? &target_range->v_range.cell.a
				     : NULL);

	param->problem_type =
		gnm_gui_group_value (state->gui, problem_type_group);
	param->options.model_type =
		gnm_gui_group_value (state->gui, model_type_group);

	if (gtk_combo_box_get_active_iter (state->algorithm_combo, &iter)) {
		gtk_tree_model_get (gtk_combo_box_get_model (state->algorithm_combo),
				    &iter, 1, &factory, -1);
		gnm_solver_param_set_algorithm (param, factory);
	} else
		gnm_solver_param_set_algorithm (param, NULL);

	param->options.max_iter = gtk_spin_button_get_value
		(GTK_SPIN_BUTTON (state->max_iter_entry));
	param->options.max_time_sec = gtk_spin_button_get_value
		(GTK_SPIN_BUTTON (state->max_time_entry));
	param->options.gradient_order = gtk_spin_button_get_value
		(GTK_SPIN_BUTTON (state->gradient_order_entry));

	GET_BOOL_ENTRY ("autoscale_button", options.automatic_scaling);
	GET_BOOL_ENTRY ("non_neg_button", options.assume_non_negative);
	GET_BOOL_ENTRY ("all_int_button", options.assume_discrete);
	GET_BOOL_ENTRY ("program", options.program_report);
	GET_BOOL_ENTRY ("sensitivity", options.sensitivity_report);

	g_free (param->options.scenario_name);
	param->options.scenario_name = g_strdup
		(gtk_entry_get_text (GTK_ENTRY (state->scenario_name_entry)));

	GET_BOOL_ENTRY ("optimal_scenario", options.add_scenario);

	value_release (target_range);
}
Ejemplo n.º 2
0
/*************************************************************************************************************
**	@brief	:	Load all watch's in ini file 
**	#conf	: 	ini file dictionary 
**	#watch 	:	parser ini configure file data
**	@return	:	how many item in conf file 
*************************************************************************************************************/
int conf_init(dictionary *conf, P_WATCH_INFO watch, const unsigned int size)
{

	char entry[64];
	char *cp = NULL;
	unsigned int i;

	#define GET_INT_ENTRY(v, d)		do { v = iniparser_getint(conf, entry, (d)); } while(0)
	#define GET_BOOL_ENTRY(v, d)	do { v = iniparser_getboolean(conf, entry, (d)); } while(0)
	#define GET_STR_ENTRY(s, d)		do { cp  = iniparser_getstring(conf, entry, (d)); bcopy(cp, s, strlen(cp)); } while (0)
	#define FORMAT_ENTRY(s, k)		do { bzero(entry, sizeof(entry)); snprintf(entry, sizeof(entry), "%s:%s", (s), (k)); } while(0)

	/* Debug print all conf */
	if (debug){

		iniparser_dump(conf, stderr);
	}
		
	/* Get section name's */
	for (i = 0; i < size; i++){

		cp = iniparser_getsecname(conf, i);
		bcopy(cp, watch[i].name, strlen(cp));
	} 

	/* Get each of them data */	
	for (i = 0; i < size; i++){

		/* Ignore ? */
		FORMAT_ENTRY(watch[i].name, IGNORE_KEY);
		GET_BOOL_ENTRY(watch[i].ignore, 0);

		/* If ignore, do not read jump to next */
		if (watch[i].ignore){
			
			continue;	
		}

		/* Path */
		FORMAT_ENTRY(watch[i].name, PATH_KEY);
		GET_STR_ENTRY(watch[i].path, "");

		/* Check if path is dir set is_dir mark */
		watch[i].is_dir = conf_is_path_is_dir(watch[i].path);

		/* Comment */
		FORMAT_ENTRY(watch[i].name, COMMENT_KEY);
		GET_STR_ENTRY(watch[i].comment, "");

		/* Find if setting special file */
		FORMAT_ENTRY(watch[i].name, SPECIAL_KEY);
		
		/* Only dir have this option */
		if (watch[i].is_dir && iniparser_find_entry(conf, entry)){

			/* Read form ini file */
			if ((cp  = iniparser_getstring(conf, entry, ""))){
			
				/* Get special file name */
				watch[i].spc_file_cnt = conf_get_words(cp, watch[i].spc_file, MAX_SPC_FILE);
			}

		} 


		/* events */
		FORMAT_ENTRY(watch[i].name, EVENTS_KEY);
		GET_STR_ENTRY(watch[i].events_str, "");

		/* Parser events */
		watch[i].events	=	conf_parser_events(watch[i].events_str, watch[i].is_dir);

		/* Debug */
		if (debug){

			conf_print_watch(&watch[i]);
		}
	
	} /* end for */

	/* Arrange watching list */
	return conf_arrange_watch(watch, (i == size) ? size : i);
}