You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
868 lines
35 KiB
868 lines
35 KiB
/***************************************************************************
|
|
* Copyright (C) 2005-2007 by Niklas Knutsson *
|
|
* nq@altern.org *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
|
***************************************************************************/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
# include <config.h>
|
|
#endif
|
|
|
|
#include "preferences.h"
|
|
#include "kqalculate.h"
|
|
#include "qalculate_tde_utils.h"
|
|
#include "qalculateexpressionedit.h"
|
|
#include <sys/stat.h>
|
|
#include <unistd.h>
|
|
#include <dirent.h>
|
|
#include <stdio.h>
|
|
#include <vector>
|
|
#include <string>
|
|
#include <tdelocale.h>
|
|
#include <tqstringlist.h>
|
|
#include <ktextbrowser.h>
|
|
#include <tqwidgetstack.h>
|
|
#include <tqpushbutton.h>
|
|
#include <tqvaluevector.h>
|
|
|
|
PrintOptions printops;
|
|
EvaluationOptions evalops;
|
|
bool rpn_mode;
|
|
bool rpn_keypad_only;
|
|
bool load_global_defs, fetch_exchange_rates_at_startup, first_time, first_qalculate_run, save_mode_on_exit, save_defs_on_exit;
|
|
bool use_custom_result_font, use_custom_expression_font, use_custom_status_font;
|
|
int use_icon_buttons;
|
|
TQString custom_result_font, custom_expression_font, custom_status_font;
|
|
TQColor status_warning_color, status_error_color;
|
|
|
|
bool display_expression_status;
|
|
bool close_to_systray;
|
|
bool enable_expression_completion;
|
|
|
|
PlotLegendPlacement default_plot_legend_placement;
|
|
bool default_plot_display_grid;
|
|
bool default_plot_full_border;
|
|
TQString default_plot_min;
|
|
TQString default_plot_max;
|
|
TQString default_plot_step;
|
|
int default_plot_sampling_rate;
|
|
bool default_plot_use_sampling_rate;
|
|
bool default_plot_rows;
|
|
int default_plot_type;
|
|
PlotStyle default_plot_style;
|
|
PlotSmoothing default_plot_smoothing;
|
|
TQString default_plot_variable;
|
|
bool default_plot_color;
|
|
bool enable_plot_expression_completion;
|
|
|
|
bool canplot;
|
|
|
|
TQString initial_history;
|
|
|
|
extern std::vector<MathFunction*> recent_functions;
|
|
extern std::vector<Variable*> recent_variables;
|
|
extern std::vector<Unit*> recent_units;
|
|
TQValueVector<TQString> recent_functions_pre;
|
|
TQValueVector<TQString> recent_variables_pre;
|
|
TQValueVector<TQString> recent_units_pre;
|
|
|
|
extern TQWidget *expressionWidget;
|
|
extern KQalculate *mainWin;
|
|
TQStringList expression_history;
|
|
|
|
bool show_keypad, show_history, show_stack;
|
|
|
|
std::vector<mode_struct> modes;
|
|
|
|
TQValueVector<TQString> inhistory;
|
|
TQValueVector<int> inhistory_type;
|
|
TQValueVector<int> inhistory_id;
|
|
int inhistory_current_id;
|
|
|
|
/*
|
|
save mode to file
|
|
*/
|
|
void save_mode() {
|
|
return save_preferences(true);
|
|
}
|
|
|
|
/*
|
|
remember current mode
|
|
*/
|
|
void set_saved_mode() {
|
|
modes[1].precision = CALCULATOR->getPrecision();
|
|
modes[1].po = printops;
|
|
modes[1].po.allow_factorization = (evalops.structuring == STRUCTURING_FACTORIZE);
|
|
modes[1].eo = evalops;
|
|
modes[1].at = CALCULATOR->defaultAssumptions()->type();
|
|
modes[1].as = CALCULATOR->defaultAssumptions()->sign();
|
|
modes[1].rpn_mode = rpn_mode;
|
|
}
|
|
|
|
size_t save_mode_as(TQString name, bool *new_mode) {
|
|
name = name.stripWhiteSpace();
|
|
size_t index = 0;
|
|
for(; index < modes.size(); index++) {
|
|
if(modes[index].name == name) {
|
|
if(new_mode) *new_mode = false;
|
|
break;
|
|
}
|
|
}
|
|
if(index >= modes.size()) {
|
|
modes.resize(modes.size() + 1);
|
|
index = modes.size() - 1;
|
|
if(new_mode) *new_mode = true;
|
|
}
|
|
modes[index].po = printops;
|
|
modes[index].po.allow_factorization = (evalops.structuring == STRUCTURING_FACTORIZE);
|
|
modes[index].eo = evalops;
|
|
modes[index].precision = CALCULATOR->getPrecision();
|
|
modes[index].at = CALCULATOR->defaultAssumptions()->type();
|
|
modes[index].as = CALCULATOR->defaultAssumptions()->sign();
|
|
modes[index].name = name;
|
|
modes[index].rpn_mode = rpn_mode;
|
|
return index;
|
|
}
|
|
|
|
void load_preferences() {
|
|
|
|
default_plot_legend_placement = PLOT_LEGEND_TOP_RIGHT;
|
|
default_plot_display_grid = true;
|
|
default_plot_full_border = false;
|
|
default_plot_min = "0";
|
|
default_plot_max = "10";
|
|
default_plot_step = "1";
|
|
default_plot_sampling_rate = 100;
|
|
default_plot_rows = false;
|
|
default_plot_type = 0;
|
|
default_plot_style = PLOT_STYLE_LINES;
|
|
default_plot_smoothing = PLOT_SMOOTHING_NONE;
|
|
default_plot_variable = "x";
|
|
default_plot_color = true;
|
|
default_plot_use_sampling_rate = true;
|
|
|
|
printops.is_approximate = new bool(false);
|
|
printops.prefix = NULL;
|
|
printops.use_min_decimals = false;
|
|
printops.use_denominator_prefix = true;
|
|
printops.min_decimals = 0;
|
|
printops.use_max_decimals = false;
|
|
printops.max_decimals = 2;
|
|
printops.base = 10;
|
|
printops.min_exp = EXP_PRECISION;
|
|
printops.negative_exponents = false;
|
|
printops.sort_options.minus_last = true;
|
|
printops.indicate_infinite_series = false;
|
|
printops.show_ending_zeroes = false;
|
|
printops.round_halfway_to_even = false;
|
|
printops.number_fraction_format = FRACTION_DECIMAL;
|
|
printops.abbreviate_names = true;
|
|
printops.use_unicode_signs = true;
|
|
printops.use_unit_prefixes = true;
|
|
printops.spacious = true;
|
|
printops.short_multiplication = true;
|
|
printops.limit_implicit_multiplication = false;
|
|
printops.place_units_separately = true;
|
|
printops.use_all_prefixes = false;
|
|
printops.excessive_parenthesis = false;
|
|
printops.allow_non_usable = false;
|
|
printops.lower_case_numbers = false;
|
|
printops.lower_case_e = false;
|
|
printops.base_display = BASE_DISPLAY_NORMAL;
|
|
printops.division_sign = DIVISION_SIGN_DIVISION_SLASH;
|
|
printops.multiplication_sign = MULTIPLICATION_SIGN_DOT;
|
|
printops.can_display_unicode_string_function = &can_display_unicode_string_function;
|
|
printops.allow_factorization = false;
|
|
printops.spell_out_logical_operators = true;
|
|
|
|
evalops.parse_options.limit_implicit_multiplication = false;
|
|
evalops.approximation = APPROXIMATION_TRY_EXACT;
|
|
evalops.sync_units = true;
|
|
evalops.structuring = STRUCTURING_SIMPLIFY;
|
|
evalops.parse_options.unknowns_enabled = false;
|
|
evalops.parse_options.read_precision = DONT_READ_PRECISION;
|
|
evalops.parse_options.base = BASE_DECIMAL;
|
|
evalops.allow_complex = true;
|
|
evalops.allow_infinite = true;
|
|
evalops.auto_post_conversion = POST_CONVERSION_NONE;
|
|
evalops.assume_denominators_nonzero = true;
|
|
evalops.warn_about_denominators_assumed_nonzero = true;
|
|
evalops.parse_options.angle_unit = ANGLE_UNIT_RADIANS;
|
|
evalops.parse_options.dot_as_separator = TDEGlobal::locale()->thousandsSeparator() == ".";
|
|
|
|
rpn_mode = false;
|
|
rpn_keypad_only = true;
|
|
|
|
save_mode_as(i18n("Preset"));
|
|
save_mode_as(i18n("Default"));
|
|
size_t mode_index = 1;
|
|
|
|
inhistory_current_id = 0;
|
|
|
|
status_warning_color.setNamedColor("blue");
|
|
status_error_color.setNamedColor("red");
|
|
use_icon_buttons = 1;
|
|
enable_expression_completion = true;
|
|
enable_plot_expression_completion = true;
|
|
close_to_systray = false;
|
|
show_keypad = true;
|
|
show_history = false;
|
|
show_stack = true;
|
|
display_expression_status = true;
|
|
save_mode_on_exit = true;
|
|
save_defs_on_exit = true;
|
|
use_custom_result_font = false;
|
|
use_custom_expression_font = false;
|
|
use_custom_status_font = false;
|
|
custom_result_font = "";
|
|
custom_expression_font = "";
|
|
custom_status_font = "";
|
|
load_global_defs = true;
|
|
fetch_exchange_rates_at_startup = false;
|
|
first_time = false;
|
|
std::string filename = getLocalDir();
|
|
DIR *dir = opendir(filename.c_str());
|
|
if(!dir) {
|
|
first_qalculate_run = true;
|
|
first_time = true;
|
|
set_saved_mode();
|
|
return;
|
|
} else {
|
|
first_qalculate_run = false;
|
|
closedir(dir);
|
|
}
|
|
|
|
int version_numbers[] = {0, 9, 6};
|
|
FILE *file = NULL;
|
|
filename += "qalculate-tde.cfg";
|
|
file = fopen(filename.c_str(), "r");
|
|
if(file) {
|
|
char line[10000];
|
|
TQString stmp, svalue, svar;
|
|
int i;
|
|
int v;
|
|
while(true) {
|
|
if(fgets(line, 10000, file) == NULL)
|
|
break;
|
|
stmp = line;
|
|
stmp = stmp.stripWhiteSpace();
|
|
if((i = stmp.find("=")) >= 0) {
|
|
svar = stmp;
|
|
svar.truncate(i);
|
|
svar = svar.stripWhiteSpace();
|
|
svalue = stmp;
|
|
svalue.remove(0, i + 1);
|
|
svalue = svalue.stripWhiteSpace();
|
|
v = svalue.toInt();
|
|
if(svar == "version") {
|
|
parse_qalculate_version(svalue.ascii(), version_numbers);
|
|
} else if(svar == "shortcut") {
|
|
if(mode_index != 1) modes[mode_index].shortcut.init(svalue);
|
|
} else if(svar == "save_mode_on_exit") {
|
|
save_mode_on_exit = v;
|
|
} else if(svar == "save_definitions_on_exit") {
|
|
save_defs_on_exit = v;
|
|
} else if(svar == "fetch_exchange_rates_at_startup") {
|
|
fetch_exchange_rates_at_startup = v;
|
|
} else if(svar == "min_deci") {
|
|
if(mode_index == 1) printops.min_decimals = v;
|
|
else modes[mode_index].po.min_decimals = v;
|
|
} else if(svar == "use_min_deci") {
|
|
if(mode_index == 1) printops.use_min_decimals = v;
|
|
else modes[mode_index].po.use_min_decimals = v;
|
|
} else if(svar == "max_deci") {
|
|
if(mode_index == 1) printops.max_decimals = v;
|
|
else modes[mode_index].po.max_decimals = v;
|
|
} else if(svar == "use_max_deci") {
|
|
if(mode_index == 1) printops.use_max_decimals = v;
|
|
else modes[mode_index].po.use_max_decimals = v;
|
|
} else if(svar == "precision") {
|
|
if(mode_index == 1) CALCULATOR->setPrecision(v);
|
|
else modes[mode_index].precision = v;
|
|
} else if(svar == "min_exp") {
|
|
if(mode_index == 1) printops.min_exp = v;
|
|
else modes[mode_index].po.min_exp = v;
|
|
} else if(svar == "negative_exponents") {
|
|
if(mode_index == 1) printops.negative_exponents = v;
|
|
else modes[mode_index].po.negative_exponents = v;
|
|
} else if(svar == "sort_minus_last") {
|
|
if(mode_index == 1) printops.sort_options.minus_last = v;
|
|
else modes[mode_index].po.sort_options.minus_last = v;
|
|
} else if(svar == "place_units_separately") {
|
|
if(mode_index == 1) printops.place_units_separately = v;
|
|
else modes[mode_index].po.place_units_separately = v;
|
|
} else if(svar == "use_prefixes") {
|
|
if(mode_index == 1) printops.use_unit_prefixes = v;
|
|
else modes[mode_index].po.use_unit_prefixes = v;
|
|
} else if(svar == "number_fraction_format") {
|
|
if(v >= FRACTION_DECIMAL && v <= FRACTION_COMBINED) {
|
|
if(mode_index == 1) printops.number_fraction_format = (NumberFractionFormat) v;
|
|
else modes[mode_index].po.number_fraction_format = (NumberFractionFormat) v;
|
|
}
|
|
} else if(svar == "number_base") {
|
|
if(mode_index == 1) printops.base = v;
|
|
else modes[mode_index].po.base = v;
|
|
} else if(svar == "number_base_expression") {
|
|
if(mode_index == 1) evalops.parse_options.base = v;
|
|
else modes[mode_index].eo.parse_options.base = v;
|
|
} else if(svar == "read_precision") {
|
|
if(v >= DONT_READ_PRECISION && v <= READ_PRECISION_WHEN_DECIMALS) {
|
|
if(mode_index == 1) evalops.parse_options.read_precision = (ReadPrecisionMode) v;
|
|
else modes[mode_index].eo.parse_options.read_precision = (ReadPrecisionMode) v;
|
|
}
|
|
} else if(svar == "assume_denominators_nonzero") {
|
|
if(version_numbers[0] == 0 && (version_numbers[1] < 9 || (version_numbers[1] == 9 && version_numbers[2] == 0))) {
|
|
v = true;
|
|
}
|
|
if(mode_index == 1) evalops.assume_denominators_nonzero = v;
|
|
else modes[mode_index].eo.assume_denominators_nonzero = v;
|
|
} else if(svar == "warn_about_denominators_assumed_nonzero") {
|
|
if(mode_index == 1) evalops.warn_about_denominators_assumed_nonzero = v;
|
|
else modes[mode_index].eo.warn_about_denominators_assumed_nonzero = v;
|
|
} else if(svar == "structuring") {
|
|
if(v >= STRUCTURING_NONE && v <= STRUCTURING_FACTORIZE) {
|
|
if(mode_index == 1) {
|
|
evalops.structuring = (StructuringMode) v;
|
|
printops.allow_factorization = (evalops.structuring == STRUCTURING_FACTORIZE);
|
|
} else {
|
|
modes[mode_index].eo.structuring = (StructuringMode) v;
|
|
modes[mode_index].po.allow_factorization = (modes[mode_index].eo.structuring == STRUCTURING_FACTORIZE);
|
|
}
|
|
}
|
|
} else if(svar == "angle_unit") {
|
|
if(v >= ANGLE_UNIT_NONE && v <= ANGLE_UNIT_GRADIANS) {
|
|
if(mode_index == 1) evalops.parse_options.angle_unit = (AngleUnit) v;
|
|
else modes[mode_index].eo.parse_options.angle_unit = (AngleUnit) v;
|
|
}
|
|
} else if(svar == "functions_enabled") {
|
|
if(mode_index == 1) evalops.parse_options.functions_enabled = v;
|
|
else modes[mode_index].eo.parse_options.functions_enabled = v;
|
|
} else if(svar == "variables_enabled") {
|
|
if(mode_index == 1) evalops.parse_options.variables_enabled = v;
|
|
else modes[mode_index].eo.parse_options.variables_enabled = v;
|
|
} else if(svar == "calculate_variables") {
|
|
if(mode_index == 1) evalops.calculate_variables = v;
|
|
else modes[mode_index].eo.calculate_variables = v;
|
|
} else if(svar == "calculate_functions") {
|
|
if(mode_index == 1) evalops.calculate_functions = v;
|
|
else modes[mode_index].eo.calculate_functions = v;
|
|
} else if(svar == "sync_units") {
|
|
if(mode_index == 1) evalops.sync_units = v;
|
|
else modes[mode_index].eo.sync_units = v;
|
|
} else if(svar == "unknownvariables_enabled") {
|
|
if(mode_index == 1) evalops.parse_options.unknowns_enabled = v;
|
|
else modes[mode_index].eo.parse_options.unknowns_enabled = v;
|
|
} else if(svar == "units_enabled") {
|
|
if(mode_index == 1) evalops.parse_options.units_enabled = v;
|
|
else modes[mode_index].eo.parse_options.units_enabled = v;
|
|
} else if(svar == "allow_complex") {
|
|
if(mode_index == 1) evalops.allow_complex = v;
|
|
else modes[mode_index].eo.allow_complex = v;
|
|
} else if(svar == "allow_infinite") {
|
|
if(mode_index == 1) evalops.allow_infinite = v;
|
|
else modes[mode_index].eo.allow_infinite = v;
|
|
} else if(svar == "use_short_units") {
|
|
if(mode_index == 1) printops.abbreviate_names = v;
|
|
else modes[mode_index].po.abbreviate_names = v;
|
|
} else if(svar == "abbreviate_names") {
|
|
if(mode_index == 1) printops.abbreviate_names = v;
|
|
else modes[mode_index].po.abbreviate_names = v;
|
|
} else if(svar == "all_prefixes_enabled") {
|
|
if(mode_index == 1) printops.use_all_prefixes = v;
|
|
else modes[mode_index].po.use_all_prefixes = v;
|
|
} else if(svar == "denominator_prefix_enabled") {
|
|
if(mode_index == 1) printops.use_denominator_prefix = v;
|
|
else modes[mode_index].po.use_denominator_prefix = v;
|
|
} else if(svar == "auto_post_conversion") {
|
|
if(v >= POST_CONVERSION_NONE && v <= POST_CONVERSION_BASE) {
|
|
if(mode_index == 1) evalops.auto_post_conversion = (AutoPostConversion) v;
|
|
else modes[mode_index].eo.auto_post_conversion = (AutoPostConversion) v;
|
|
}
|
|
} else if(svar == "indicate_infinite_series") {
|
|
if(mode_index == 1) printops.indicate_infinite_series = v;
|
|
else modes[mode_index].po.indicate_infinite_series = v;
|
|
} else if(svar == "show_ending_zeroes") {
|
|
if(mode_index == 1) printops.show_ending_zeroes = v;
|
|
else modes[mode_index].po.show_ending_zeroes = v;
|
|
} else if(svar == "round_halfway_to_even") {
|
|
if(mode_index == 1) printops.round_halfway_to_even = v;
|
|
else modes[mode_index].po.round_halfway_to_even = v;
|
|
} else if(svar == "approximation") {
|
|
if(v >= APPROXIMATION_EXACT && v <= APPROXIMATION_APPROXIMATE) {
|
|
if(mode_index == 1) evalops.approximation = (ApproximationMode) v;
|
|
else modes[mode_index].eo.approximation = (ApproximationMode) v;
|
|
}
|
|
} else if(svar == "in_rpn_mode") {
|
|
if(mode_index == 1) rpn_mode = v;
|
|
else modes[mode_index].rpn_mode = v;
|
|
} else if(svar == "rpn_keypad_only") {
|
|
rpn_keypad_only = v;
|
|
} else if(svar == "rpn_syntax") {
|
|
if(mode_index == 1) evalops.parse_options.rpn = v;
|
|
else modes[mode_index].eo.parse_options.rpn = v;
|
|
} else if(svar == "limit_implicit_multiplication") {
|
|
if(mode_index == 1) {
|
|
evalops.parse_options.limit_implicit_multiplication = v;
|
|
printops.limit_implicit_multiplication = v;
|
|
} else {
|
|
modes[mode_index].eo.parse_options.limit_implicit_multiplication = v;
|
|
modes[mode_index].po.limit_implicit_multiplication = v;
|
|
}
|
|
} else if(svar == "default_assumption_type") {
|
|
if(v >= ASSUMPTION_TYPE_NONE && v <= ASSUMPTION_TYPE_INTEGER) {
|
|
if(v == ASSUMPTION_TYPE_NONE && version_numbers[0] == 0 && (version_numbers[1] < 9 || (version_numbers[1] == 9 && version_numbers[2] == 0))) {
|
|
v = ASSUMPTION_TYPE_NONMATRIX;
|
|
}
|
|
if(mode_index == 1) CALCULATOR->defaultAssumptions()->setType((AssumptionType) v);
|
|
else modes[mode_index].at = (AssumptionType) v;
|
|
}
|
|
} else if(svar == "default_assumption_sign") {
|
|
if(v >= ASSUMPTION_SIGN_UNKNOWN && v <= ASSUMPTION_SIGN_NONZERO) {
|
|
if(v == ASSUMPTION_SIGN_NONZERO && version_numbers[0] == 0 && (version_numbers[1] < 9 || (version_numbers[1] == 9 && version_numbers[2] == 0))) {
|
|
v = ASSUMPTION_SIGN_UNKNOWN;
|
|
}
|
|
if(mode_index == 1) CALCULATOR->defaultAssumptions()->setSign((AssumptionSign) v);
|
|
else modes[mode_index].as = (AssumptionSign) v;
|
|
}
|
|
} else if(svar == "spacious") {
|
|
if(mode_index == 1) printops.spacious = v;
|
|
else modes[mode_index].po.spacious = v;
|
|
} else if(svar == "excessive_parenthesis") {
|
|
if(mode_index == 1) printops.excessive_parenthesis = v;
|
|
else modes[mode_index].po.excessive_parenthesis = v;
|
|
} else if(svar == "short_multiplication") {
|
|
if(mode_index == 1) printops.short_multiplication = v;
|
|
else modes[mode_index].po.short_multiplication = v;
|
|
} else if(svar == "use_unicode_signs") {
|
|
printops.use_unicode_signs = v;
|
|
} else if(svar == "lower_case_numbers") {
|
|
printops.lower_case_numbers = v;
|
|
} else if(svar == "lower_case_e") {
|
|
printops.lower_case_e = v;
|
|
} else if(svar == "base_display") {
|
|
if(v >= BASE_DISPLAY_NONE && v <= BASE_DISPLAY_ALTERNATIVE) printops.base_display = (BaseDisplay) v;
|
|
} else if(svar == "spell_out_logical_operators") {
|
|
printops.spell_out_logical_operators = v;
|
|
} else if(svar == "dot_as_separator") {
|
|
evalops.parse_options.dot_as_separator = v;
|
|
} else if(svar == "use_custom_result_font") {
|
|
use_custom_result_font = v;
|
|
} else if(svar == "use_custom_expression_font") {
|
|
use_custom_expression_font = v;
|
|
} else if(svar == "use_custom_status_font") {
|
|
use_custom_status_font = v;
|
|
} else if(svar == "custom_result_font") {
|
|
custom_result_font = svalue;
|
|
} else if(svar == "custom_expression_font") {
|
|
custom_expression_font = svalue;
|
|
} else if(svar == "custom_status_font") {
|
|
custom_status_font = svalue;
|
|
} else if(svar == "status_error_color") {
|
|
status_error_color.setNamedColor(svalue);
|
|
} else if(svar == "status_warning_color") {
|
|
status_warning_color.setNamedColor(svalue);
|
|
} else if(svar == "multiplication_sign") {
|
|
if(v >= MULTIPLICATION_SIGN_ASTERISK && v <= MULTIPLICATION_SIGN_X) printops.multiplication_sign = (MultiplicationSign) v;
|
|
} else if(svar == "division_sign") {
|
|
if(v >= DIVISION_SIGN_SLASH && v <= DIVISION_SIGN_DIVISION) printops.division_sign = (DivisionSign) v;
|
|
} else if(svar == "close_to_system_tray") {
|
|
close_to_systray = v;
|
|
} else if(svar == "show_keypad") {
|
|
show_keypad = v;
|
|
} else if(svar == "show_history") {
|
|
show_history = v;
|
|
} else if(svar == "show_stack") {
|
|
show_stack = v;
|
|
} else if(svar == "display_expression_status") {
|
|
display_expression_status = v;
|
|
} else if(svar == "enable_expression_completion") {
|
|
enable_expression_completion = v;
|
|
} else if(svar == "use_icon_buttons") {
|
|
use_icon_buttons = v;
|
|
} else if(svar == "plot_legend_placement") {
|
|
if(v >= PLOT_LEGEND_NONE && v <= PLOT_LEGEND_OUTSIDE) default_plot_legend_placement = (PlotLegendPlacement) v;
|
|
} else if(svar == "plot_style") {
|
|
if(v >= PLOT_STYLE_LINES && v <= PLOT_STYLE_DOTS) default_plot_style = (PlotStyle) v;
|
|
} else if(svar == "plot_smoothing") {
|
|
if(v >= PLOT_SMOOTHING_NONE && v <= PLOT_SMOOTHING_SBEZIER) default_plot_smoothing = (PlotSmoothing) v;
|
|
} else if(svar == "plot_display_grid") {
|
|
default_plot_display_grid = v;
|
|
} else if(svar == "plot_full_border") {
|
|
default_plot_full_border = v;
|
|
} else if(svar == "plot_min") {
|
|
default_plot_min = svalue;
|
|
} else if(svar == "plot_max") {
|
|
default_plot_max = svalue;
|
|
} else if(svar == "plot_step") {
|
|
default_plot_step = svalue;
|
|
} else if(svar == "plot_sampling_rate") {
|
|
default_plot_sampling_rate = v;
|
|
} else if(svar == "plot_use_sampling_rate") {
|
|
default_plot_use_sampling_rate = v;
|
|
} else if(svar == "plot_variable") {
|
|
default_plot_variable = svalue;
|
|
} else if(svar == "plot_rows") {
|
|
default_plot_rows = v;
|
|
} else if(svar == "plot_type") {
|
|
default_plot_type = v;
|
|
} else if(svar == "plot_color") {
|
|
default_plot_color = v;
|
|
} else if(svar == "enable_plot_expression_completion") {
|
|
enable_plot_expression_completion = v;
|
|
} else if(svar == "expression_history") {
|
|
expression_history.push_back(svalue);
|
|
} else if(svar == "history") {
|
|
initial_history = svalue;
|
|
if(version_numbers[1] < 9) {
|
|
initial_history.replace("<br><br>", "<br><hr>");
|
|
}
|
|
inhistory.push_back(initial_history);
|
|
inhistory_type.push_back(QALCULATE_HISTORY_OLD);
|
|
} else if(svar == "history_old") {
|
|
inhistory.push_back(svalue);
|
|
inhistory_type.push_back(QALCULATE_HISTORY_OLD);
|
|
} else if(svar == "history_expression") {
|
|
inhistory.push_back(svalue);
|
|
inhistory_type.push_back(QALCULATE_HISTORY_EXPRESSION);
|
|
} else if(svar == "history_transformation") {
|
|
inhistory.push_back(svalue);
|
|
inhistory_type.push_back(QALCULATE_HISTORY_TRANSFORMATION);
|
|
} else if(svar == "history_result") {
|
|
inhistory.push_back(svalue);
|
|
inhistory_type.push_back(QALCULATE_HISTORY_RESULT);
|
|
} else if(svar == "history_result_approximate") {
|
|
inhistory.push_back(svalue);
|
|
inhistory_type.push_back(QALCULATE_HISTORY_RESULT_APPROXIMATE);
|
|
} else if(svar == "history_parse") {
|
|
inhistory.push_back(svalue);
|
|
inhistory_type.push_back(QALCULATE_HISTORY_PARSE);
|
|
} else if(svar == "history_parse_approximate") {
|
|
inhistory.push_back(svalue);
|
|
inhistory_type.push_back(QALCULATE_HISTORY_PARSE_APPROXIMATE);
|
|
} else if(svar == "history_register_moved") {
|
|
inhistory.push_back(svalue);
|
|
inhistory_type.push_back(QALCULATE_HISTORY_REGISTER_MOVED);
|
|
} else if(svar == "history_warning") {
|
|
inhistory.push_back(svalue);
|
|
inhistory_type.push_back(QALCULATE_HISTORY_WARNING);
|
|
} else if(svar == "history_error") {
|
|
inhistory.push_back(svalue);
|
|
inhistory_type.push_back(QALCULATE_HISTORY_ERROR);
|
|
} else if(svar == "history_continued") {
|
|
if(inhistory.size() > 0) {
|
|
inhistory[inhistory.size() - 1] += "<br>";
|
|
inhistory[inhistory.size() - 1] += svalue;
|
|
}
|
|
} else if(svar == "recent_functions") {
|
|
int v_i = 0;
|
|
while(true) {
|
|
v_i = svalue.find(',');
|
|
if(v_i < 0) {
|
|
svar = svalue.stripWhiteSpace();
|
|
if(!svar.isEmpty()) {
|
|
recent_functions_pre.push_back(svar);
|
|
}
|
|
break;
|
|
} else {
|
|
svar = svalue;
|
|
svar.truncate(v_i);
|
|
svalue.remove(0, v_i + 1);
|
|
svar = svar.stripWhiteSpace();
|
|
if(!svar.isEmpty()) {
|
|
recent_functions_pre.push_back(svar);
|
|
}
|
|
}
|
|
}
|
|
} else if(svar == "recent_variables") {
|
|
int v_i = 0;
|
|
while(true) {
|
|
v_i = svalue.find(',');
|
|
if(v_i < 0) {
|
|
svar = svalue.stripWhiteSpace();
|
|
if(!svar.isEmpty()) {
|
|
recent_variables_pre.push_back(svar);
|
|
}
|
|
break;
|
|
} else {
|
|
svar = svalue;
|
|
svar.truncate(v_i);
|
|
svalue.remove(0, v_i + 1);
|
|
svar = svar.stripWhiteSpace();
|
|
if(!svar.isEmpty()) {
|
|
recent_variables_pre.push_back(svar);
|
|
}
|
|
}
|
|
}
|
|
} else if(svar == "recent_units") {
|
|
int v_i = 0;
|
|
while(true) {
|
|
v_i = svalue.find(',');
|
|
if(v_i < 0) {
|
|
svar = svalue.stripWhiteSpace();
|
|
if(!svar.isEmpty()) {
|
|
recent_units_pre.push_back(svar);
|
|
}
|
|
break;
|
|
} else {
|
|
svar = svalue;
|
|
svar.truncate(v_i);
|
|
svalue.remove(0, v_i + 1);
|
|
svar = svar.stripWhiteSpace();
|
|
if(!svar.isEmpty()) {
|
|
recent_units_pre.push_back(svar);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else if(stmp.length() > 2 && stmp[0] == '[' && stmp[stmp.length() - 1] == ']') {
|
|
stmp.truncate(stmp.length() - 1);
|
|
stmp.remove(0, 1);
|
|
stmp = stmp.stripWhiteSpace();
|
|
if(stmp == "Mode") {
|
|
mode_index = 1;
|
|
} else if(stmp.length() > 5) {
|
|
TQString svar = stmp;
|
|
svar.truncate(4);
|
|
if(svar == "Mode") {
|
|
stmp.remove(0, 5);
|
|
mode_index = save_mode_as(stmp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
inhistory_current_id = (int) inhistory.size();
|
|
int id = inhistory_current_id;
|
|
id--;
|
|
for(TQValueVector<TQString>::size_type i = 0; i < inhistory.size(); i++) {
|
|
inhistory_id.push_back(id);
|
|
id--;
|
|
}
|
|
} else {
|
|
first_time = true;
|
|
}
|
|
if(show_keypad) show_history = false;
|
|
//remember start mode for when we save preferences
|
|
set_saved_mode();
|
|
|
|
}
|
|
|
|
void save_preferences(bool mode) {
|
|
|
|
FILE *file = NULL;
|
|
std::string filename = getLocalDir();
|
|
mkdir(filename.c_str(), S_IRWXU);
|
|
filename += "qalculate-tde.cfg";
|
|
file = fopen(filename.c_str(), "w+");
|
|
if(file == NULL) {
|
|
fprintf(stderr, i18n("Couldn't write preferences to\n%s").local8Bit(), filename.c_str());
|
|
return;
|
|
}
|
|
fprintf(file, "\n[General]\n");
|
|
fprintf(file, "version=%s\n", VERSION);
|
|
fprintf(file, "save_mode_on_exit=%i\n", save_mode_on_exit);
|
|
fprintf(file, "save_definitions_on_exit=%i\n", save_defs_on_exit);
|
|
fprintf(file, "load_global_definitions=%i\n", load_global_defs);
|
|
fprintf(file, "fetch_exchange_rates_at_startup=%i\n", fetch_exchange_rates_at_startup);
|
|
fprintf(file, "close_to_system_tray=%i\n", close_to_systray);
|
|
fprintf(file, "show_keypad=%i\n", mainWin->keypadButton->isOn() || (rpn_mode && show_keypad && mainWin->stackButton->isOn()));
|
|
fprintf(file, "show_history=%i\n", mainWin->historyButton->isOn() || (rpn_mode && show_history && mainWin->stackButton->isOn()));
|
|
fprintf(file, "show_stack=%i\n", rpn_mode ? mainWin->stackButton->isOn() : show_stack);
|
|
fprintf(file, "rpn_keypad_only=%i\n", rpn_keypad_only);
|
|
fprintf(file, "display_expression_status=%i\n", display_expression_status);
|
|
fprintf(file, "enable_expression_completion=%i\n", ((QalculateExpressionEdit*) expressionWidget)->completionEnabled());
|
|
if(use_icon_buttons >= 0) fprintf(file, "use_icon_buttons=%i\n", use_icon_buttons);
|
|
fprintf(file, "use_unicode_signs=%i\n", printops.use_unicode_signs);
|
|
fprintf(file, "lower_case_numbers=%i\n", printops.lower_case_numbers);
|
|
fprintf(file, "lower_case_e=%i\n", printops.lower_case_e);
|
|
fprintf(file, "base_display=%i\n", printops.base_display);
|
|
fprintf(file, "spell_out_logical_operators=%i\n", printops.spell_out_logical_operators);
|
|
fprintf(file, "dot_as_separator=%i\n", evalops.parse_options.dot_as_separator);
|
|
fprintf(file, "use_custom_result_font=%i\n", use_custom_result_font);
|
|
fprintf(file, "use_custom_expression_font=%i\n", use_custom_expression_font);
|
|
fprintf(file, "use_custom_status_font=%i\n", use_custom_status_font);
|
|
fprintf(file, "custom_result_font=%s\n", custom_result_font.ascii());
|
|
fprintf(file, "custom_expression_font=%s\n", custom_expression_font.ascii());
|
|
fprintf(file, "custom_status_font=%s\n", custom_status_font.ascii());
|
|
if(status_error_color != TQColor("red")) fprintf(file, "status_error_color=%s\n", status_error_color.name().ascii());
|
|
if(status_warning_color != TQColor("blue")) fprintf(file, "status_warning_color=%s\n", status_warning_color.name().ascii());
|
|
fprintf(file, "multiplication_sign=%i\n", printops.multiplication_sign);
|
|
fprintf(file, "division_sign=%i\n", printops.division_sign);
|
|
for (TQStringList::Iterator it = ((QalculateExpressionEdit*) expressionWidget)->expression_history.begin(); it != ((QalculateExpressionEdit*) expressionWidget)->expression_history.end(); ++it) {
|
|
fprintf(file, "expression_history=%s\n", (*it).ascii());
|
|
}
|
|
int lines = 50;
|
|
bool end_after_result = false;
|
|
bool doend = false;
|
|
for(TQValueVector<TQString>::size_type i = 0; i < inhistory.size() && !doend; i++) {
|
|
switch(inhistory_type[i]) {
|
|
case QALCULATE_HISTORY_EXPRESSION: {
|
|
fprintf(file, "history_expression=");
|
|
break;
|
|
}
|
|
case QALCULATE_HISTORY_TRANSFORMATION: {
|
|
fprintf(file, "history_transformation=");
|
|
break;
|
|
}
|
|
case QALCULATE_HISTORY_RESULT: {
|
|
fprintf(file, "history_result=");
|
|
lines--;
|
|
if(end_after_result) doend = true;
|
|
break;
|
|
}
|
|
case QALCULATE_HISTORY_RESULT_APPROXIMATE: {
|
|
fprintf(file, "history_result_approximate=");
|
|
lines--;
|
|
if(end_after_result) doend = true;
|
|
break;
|
|
}
|
|
case QALCULATE_HISTORY_PARSE: {
|
|
fprintf(file, "history_parse=");
|
|
lines--;
|
|
if(lines < 0) end_after_result = true;
|
|
break;
|
|
}
|
|
case QALCULATE_HISTORY_PARSE_APPROXIMATE: {
|
|
fprintf(file, "history_parse_approximate=");
|
|
lines--;
|
|
if(lines < 0) end_after_result = true;
|
|
break;
|
|
}
|
|
case QALCULATE_HISTORY_REGISTER_MOVED: {
|
|
fprintf(file, "history_register_moved=");
|
|
break;
|
|
}
|
|
case QALCULATE_HISTORY_WARNING: {
|
|
fprintf(file, "history_warning=");
|
|
lines--;
|
|
break;
|
|
}
|
|
case QALCULATE_HISTORY_ERROR: {
|
|
fprintf(file, "history_error=");
|
|
lines--;
|
|
break;
|
|
}
|
|
case QALCULATE_HISTORY_OLD: {
|
|
fprintf(file, "history_old=");
|
|
lines--;
|
|
if(lines < 0) doend = true;
|
|
break;
|
|
}
|
|
}
|
|
if(inhistory[i].find("<br>") < 0) {
|
|
fprintf(file, "%s\n", inhistory[i].ascii());
|
|
} else {
|
|
TQStringList slist = TQStringList::split("<br>", inhistory[i], true);
|
|
for(TQStringList::size_type i2 = 0; i2 < slist.size(); i2++) {
|
|
if(i2 == 0) fprintf(file, "%s\n", slist[i2].ascii());
|
|
else fprintf(file, "history_continued=%s\n", slist[i2].ascii());
|
|
}
|
|
}
|
|
}
|
|
fprintf(file, "recent_functions=");
|
|
for(int i = (int) (recent_functions.size()) - 1; i >= 0; i--) {
|
|
fprintf(file, "%s", recent_functions[i]->referenceName().c_str());
|
|
if(i != 0) fprintf(file, ",");
|
|
}
|
|
fprintf(file, "\n");
|
|
fprintf(file, "recent_variables=");
|
|
for(int i = (int) (recent_variables.size()) - 1; i >= 0; i--) {
|
|
fprintf(file, "%s", recent_variables[i]->referenceName().c_str());
|
|
if(i != 0) fprintf(file, ",");
|
|
}
|
|
fprintf(file, "\n");
|
|
fprintf(file, "recent_units=");
|
|
for(int i = (int) (recent_units.size()) - 1; i >= 0; i--) {
|
|
fprintf(file, "%s", recent_units[i]->referenceName().c_str());
|
|
if(i != 0) fprintf(file, ",");
|
|
}
|
|
fprintf(file, "\n");
|
|
if(mode)
|
|
set_saved_mode();
|
|
for(size_t i = 1; i < modes.size(); i++) {
|
|
if(i == 1) {
|
|
fprintf(file, "\n[Mode]\n");
|
|
} else {
|
|
fprintf(file, "\n[Mode %s]\n", modes[i].name.ascii());
|
|
if(!modes[i].shortcut.toString().isNull()) fprintf(file, "shortcut=%s\n", modes[i].shortcut.toString().ascii());
|
|
}
|
|
fprintf(file, "min_deci=%i\n", modes[i].po.min_decimals);
|
|
fprintf(file, "use_min_deci=%i\n", modes[i].po.use_min_decimals);
|
|
fprintf(file, "max_deci=%i\n", modes[i].po.max_decimals);
|
|
fprintf(file, "use_max_deci=%i\n", modes[i].po.use_max_decimals);
|
|
fprintf(file, "precision=%i\n", modes[i].precision);
|
|
fprintf(file, "min_exp=%i\n", modes[i].po.min_exp);
|
|
fprintf(file, "negative_exponents=%i\n", modes[i].po.negative_exponents);
|
|
fprintf(file, "sort_minus_last=%i\n", modes[i].po.sort_options.minus_last);
|
|
fprintf(file, "number_fraction_format=%i\n", modes[i].po.number_fraction_format);
|
|
fprintf(file, "use_prefixes=%i\n", modes[i].po.use_unit_prefixes);
|
|
fprintf(file, "abbreviate_names=%i\n", modes[i].po.abbreviate_names);
|
|
fprintf(file, "all_prefixes_enabled=%i\n", modes[i].po.use_all_prefixes);
|
|
fprintf(file, "denominator_prefix_enabled=%i\n", modes[i].po.use_denominator_prefix);
|
|
fprintf(file, "place_units_separately=%i\n", modes[i].po.place_units_separately);
|
|
fprintf(file, "auto_post_conversion=%i\n", modes[i].eo.auto_post_conversion);
|
|
fprintf(file, "number_base=%i\n", modes[i].po.base);
|
|
fprintf(file, "number_base_expression=%i\n", modes[i].eo.parse_options.base);
|
|
fprintf(file, "read_precision=%i\n", modes[i].eo.parse_options.read_precision);
|
|
fprintf(file, "assume_denominators_nonzero=%i\n", modes[i].eo.assume_denominators_nonzero);
|
|
fprintf(file, "warn_about_denominators_assumed_nonzero=%i\n", modes[i].eo.warn_about_denominators_assumed_nonzero);
|
|
fprintf(file, "structuring=%i\n", modes[i].eo.structuring);
|
|
fprintf(file, "angle_unit=%i\n", modes[i].eo.parse_options.angle_unit);
|
|
fprintf(file, "functions_enabled=%i\n", modes[i].eo.parse_options.functions_enabled);
|
|
fprintf(file, "variables_enabled=%i\n", modes[i].eo.parse_options.variables_enabled);
|
|
fprintf(file, "calculate_functions=%i\n", modes[i].eo.calculate_functions);
|
|
fprintf(file, "calculate_variables=%i\n", modes[i].eo.calculate_variables);
|
|
fprintf(file, "sync_units=%i\n", modes[i].eo.sync_units);
|
|
fprintf(file, "unknownvariables_enabled=%i\n", modes[i].eo.parse_options.unknowns_enabled);
|
|
fprintf(file, "units_enabled=%i\n", modes[i].eo.parse_options.units_enabled);
|
|
fprintf(file, "allow_complex=%i\n", modes[i].eo.allow_complex);
|
|
fprintf(file, "allow_infinite=%i\n", modes[i].eo.allow_infinite);
|
|
fprintf(file, "indicate_infinite_series=%i\n", modes[i].po.indicate_infinite_series);
|
|
fprintf(file, "show_ending_zeroes=%i\n", modes[i].po.show_ending_zeroes);
|
|
fprintf(file, "round_halfway_to_even=%i\n", modes[i].po.round_halfway_to_even);
|
|
fprintf(file, "approximation=%i\n", modes[i].eo.approximation);
|
|
fprintf(file, "in_rpn_mode=%i\n", modes[i].rpn_mode);
|
|
fprintf(file, "rpn_syntax=%i\n", modes[i].eo.parse_options.rpn);
|
|
fprintf(file, "limit_implicit_multiplication=%i\n", modes[i].eo.parse_options.limit_implicit_multiplication);
|
|
fprintf(file, "spacious=%i\n", modes[i].po.spacious);
|
|
fprintf(file, "excessive_parenthesis=%i\n", modes[i].po.excessive_parenthesis);
|
|
fprintf(file, "short_multiplication=%i\n", modes[i].po.short_multiplication);
|
|
fprintf(file, "default_assumption_type=%i\n", modes[i].at);
|
|
fprintf(file, "default_assumption_sign=%i\n", modes[i].as);
|
|
}
|
|
|
|
fprintf(file, "\n[Plotting]\n");
|
|
fprintf(file, "plot_legend_placement=%i\n", default_plot_legend_placement);
|
|
fprintf(file, "plot_style=%i\n", default_plot_style);
|
|
fprintf(file, "plot_smoothing=%i\n", default_plot_smoothing);
|
|
fprintf(file, "plot_display_grid=%i\n", default_plot_display_grid);
|
|
fprintf(file, "plot_full_border=%i\n", default_plot_full_border);
|
|
fprintf(file, "plot_min=%s\n", default_plot_min.ascii());
|
|
fprintf(file, "plot_max=%s\n", default_plot_max.ascii());
|
|
fprintf(file, "plot_step=%s\n", default_plot_step.ascii());
|
|
fprintf(file, "plot_sampling_rate=%i\n", default_plot_sampling_rate);
|
|
fprintf(file, "plot_use_sampling_rate=%i\n", default_plot_use_sampling_rate);
|
|
fprintf(file, "plot_variable=%s\n", default_plot_variable.ascii());
|
|
fprintf(file, "plot_rows=%i\n", default_plot_rows);
|
|
fprintf(file, "plot_type=%i\n", default_plot_type);
|
|
fprintf(file, "plot_color=%i\n", default_plot_color);
|
|
fprintf(file, "enable_plot_expression_completion=%i\n", enable_plot_expression_completion);
|
|
|
|
|
|
fclose(file);
|
|
|
|
}
|