John Ralls
cd6ccbe331
Fix account-tree double-free in scheme test when built with gcc.
...
Oddly when built with clang it doesn't exhibit the crash.
2021-07-10 17:24:58 -07:00
John Ralls
691cb0992e
Follow change in loading method for engine's guile bindings.
2021-07-10 17:24:58 -07:00
John Ralls
cbd0607e80
Implement load and store options from/to book options.
2021-07-10 17:24:58 -07:00
John Ralls
5a82aac639
Hide constexpr constants from SWIG.
...
Swig bindings don't need them and SWIG can't digest constexpr.
2021-07-10 17:24:58 -07:00
John Ralls
ffc6866406
Changes to accommodate moving guile engine bindings to bindings/guile.
...
Plus for changing targets gncmod-engine and gncmod-app-utils to
gnc-engine and gnc-app-utils.
2021-07-10 17:24:58 -07:00
John Ralls
d2535fe21b
KvpValue: Use boost::typeindex::type_id instead of buildtin typeid.
...
Under some build conditions boost::typeindex will use an internal type
identifier that's different from the C++ builtin. In that case type equality
tests to C++ typeid in boost::variant will fail, breaking it. Using
boost::typeindex::type_id ensures that the comparisons always work.
2021-07-10 17:24:58 -07:00
John Ralls
009219c63d
Much less ugly and fragile.
...
Finding the right form now relies on the form name instead of its
position in the parse tree.
2021-07-10 17:24:58 -07:00
John Ralls
276641ef15
Change parse of option input to generate a parse tree.
...
This is I hope less brittle than the previous character-counting, though
it's still brittle because it relies instead on counting form-depth.
2021-07-10 17:24:57 -07:00
John Ralls
51a1430c24
Remove stray diagnostic.
2021-07-10 17:24:57 -07:00
John Ralls
76172af239
Implement saving and loading OptionDB items to/from scheme and
...
key-value string representations.
2021-07-10 17:24:57 -07:00
John Ralls
6ab5618b76
Set a 50-character limit on the saved size of option section and name.
...
Allows use of istream::getline() to retrieve the values, simplifying
delimiter detection.
2021-07-10 17:24:57 -07:00
John Ralls
d7a2a0ffff
Make a constant for std::numeric_limits<std::size_t>max().
...
Improves readability.
2021-07-10 17:24:57 -07:00
John Ralls
826d75af16
Use istream::getline instead of std::getline for date option type parsing.
2021-07-10 17:24:57 -07:00
John Ralls
c5294ed6b3
Fix missing-declaration errors in swig-gnc-optiondb-guile.cpp.
2021-07-10 17:24:57 -07:00
John Ralls
7ccba53739
Add stream functions to_scheme and from_scheme to GncOption.
...
These add or parse the textual noise needed to replicate the Scheme options'
serialization technique of saving scheme forms for saving report options
and then evaluating those forms to restore the option values. Required for
backward saved-reports compatibility.
2021-07-10 17:24:57 -07:00
John Ralls
1ea3822665
More operator <</>> Fixups.
2021-07-10 17:24:57 -07:00
John Ralls
98ca190700
Fix commodity in/out to use namespace & mnemonic instead of GUID.
2021-07-10 17:24:57 -07:00
John Ralls
4b997cd025
Fixups for GncOptionDateValue better design.
2021-07-10 17:24:57 -07:00
John Ralls
b2fb57d39e
Fix GncOption::set_value() to work with GncOptionDateValue::set_value(RelativeDatePeriod).
...
Adjusting tests as necessary.
2021-07-10 17:24:57 -07:00
John Ralls
4dcf4a0e6a
Test GncOptionRangeValue as a GncOption.
...
Better representation of how it will be used.
2021-07-10 17:24:57 -07:00
John Ralls
4cabd6c052
Change the GncOptionMultichoiceValue test to use a GncOption.
...
Requires exposing the permissible values functions to GncOption.
2021-07-10 17:24:57 -07:00
John Ralls
e2a36a8be3
Expose function validate to GncOption and test it on GncOptionValidatedValue.
2021-07-10 17:24:57 -07:00
John Ralls
6df516dfcd
Clean up the commodity/currency tests with a better fixture class.
2021-07-10 17:24:57 -07:00
John Ralls
52d0ec5290
Change GncOptionDateValue design to better match usage.
...
Added advantage that it handles (not correctly, but in the same way as
the old code) the ambiguity between a period starting or ending with
the stored value "relative . today".
2021-07-10 17:24:57 -07:00
John Ralls
883127a59d
Implement operators >> and << on GncOption.
2021-07-10 17:24:57 -07:00
John Ralls
e583c84f4e
Clean up comments for GncOptionDateValue.
2021-07-10 17:24:57 -07:00
John Ralls
aaf6b14c67
Remove commented-out code.
2021-07-10 17:24:57 -07:00
John Ralls
1b00399b14
Remove GncOptionValue<std::Vector<GncGUID>>.
...
This going to be the Account List option implementation, but a more
customized approach is better.
2021-07-10 17:24:57 -07:00
John Ralls
5a9c4ccaf8
Clean out copies of the option.scm comments used as a development guide.
2021-07-10 17:24:57 -07:00
John Ralls
b95ea2c4aa
Add Account-list options.
2021-07-10 17:24:57 -07:00
John Ralls
7183e7c43a
Fix begin/end of quarter calculations.
...
Set the period to the calendar year if it's not set in prefs.
Handle correctly the FY start month being after the current month.
2021-07-10 17:24:57 -07:00
John Ralls
399573a89d
Fix multichoice test construction.
2021-07-10 17:24:57 -07:00
John Ralls
12c5b94430
New scheme function gnc_option_default_value.
2021-07-10 17:24:57 -07:00
John Ralls
3f576671aa
Adapt GncOptionMultiChoiceValue to support list options.
...
Main change adds a value field to the constructor to set the value and
default value.
2021-07-10 17:24:57 -07:00
John Ralls
2f2ac99944
Replace the direct wrapping of GncOptionDB-set-option-string-foo.
...
With a simple type-free function gnc_option_set. This mirrors the current
(gnc:option-set(gnc:lookup-option... and takes care of SCM type conversion.
2021-07-10 17:24:57 -07:00
John Ralls
252ba9b477
Change GncOptionDB::lookup_option to gnc_option_value().
...
The old gnc:lookup-option returned the option object so that it could be
manipulated rather than getting its value; gnc_option_value replicates
the behavior of (gnc:option-value (gnc:lookup-option)).
2021-07-10 17:24:57 -07:00
John Ralls
ff7b263a5f
Fix up and test the int specialization of GncOptionRangeValue.
...
Not sure yet that a double one is really needed.
2021-07-10 17:24:57 -07:00
John Ralls
39b7c9c74d
Convert scm_from_value() to templates for stricter overload resolution.
2021-07-10 17:24:57 -07:00
John Ralls
3dc4bc2377
Implement GncOptionDateValue.
2021-07-10 17:24:57 -07:00
John Ralls
435667e8fe
Implement GncOptionMultichoiceValue
...
Replaces GncOptionValue<GncMultiChoiceOptionChoices> because having the
vector as the value obviously wouldn't work and besides it needs
additional functions.
2021-07-10 17:24:57 -07:00
John Ralls
8eedcb6d6d
Extract all SCM functions to gnc-optiondb.i.
...
So that it can be moved to bindings/ when gnc-module-load-begone is ready.
2021-07-10 17:24:57 -07:00
John Ralls
d544f85256
Replace boost::variant and boost::optional with the C++17 std equivs.
2021-07-10 17:24:57 -07:00
John Ralls
694a15ed21
Extract SCM GncOptionDB::lookup_option to gnc-optiondb.i.
2021-07-10 17:24:57 -07:00
John Ralls
16d1f0655b
Get libswig-gnc-optiondb to install in the right place on Windows.
2021-07-10 17:24:57 -07:00
John Ralls
cee3cdaff9
Instantiate GncOption::set_option for guile, initial types string and int.
...
For proof-of-concept. Guile obviously doesn't know about templates.
2021-07-10 17:24:57 -07:00
John Ralls
9cdcaf0da8
Remove GncOptionDB::set_selectable and convert set_option to a template.
2021-07-10 17:24:57 -07:00
John Ralls
935ce6db99
Move the SCM option value conversion from the GncOptionValue classes to GncOption.
2021-07-10 17:24:57 -07:00
John Ralls
e51faff3e3
Throw an exception if one tries to set a GncOption with an unsupported type.
2021-07-10 17:24:56 -07:00
John Ralls
c5fac51a8b
Change the type of OptionUIItem's m_ui_item from void* to GncOptionUIItem.
...
A locally-opaque class wrapping whatever sort of widget ptr one needs.
Thanks, warlord!
2021-07-10 17:24:56 -07:00
John Ralls
3296212aef
Sketch out the rest of the option types.
...
Minimal implentation to get it to compile and pass tests, not functional yet.
2021-07-10 17:24:56 -07:00